使用變數可以避免明文AccessKey、密碼等資訊帶來的安全風險,通過複用可以避免重複編寫相同的代碼或值,易於組態管理。支援在SQL作業、JAR或Python作業、日誌配置和UI介面等情境中使用。本文為您介紹如何建立變數,以及不同情境下的使用方法。
背景資訊
變數由名(稱)和值組成,名是用來代替真實資料的名稱,由您自訂,通常能夠直接反映值的含義,值則是實際要使用而被名稱代替展示的值。Flink支援作業變數和專案變數兩種,區別如下:
注意事項
不支援為一個變數名配置多個值。
請避免使用關鍵字作變數名。
SQL作業中僅支援在暫存資料表(CREATE TEMPORARY TABLE)中使用變數,持久表(CREATE TABLE)中使用會導致該表無法正常使用。
作業變數
作業變數名需要在單個作業內保持唯一。
ETL(SQL作業)
支援在SQL作業開發中(包括自訂函數入參)使用變數,並在作業啟動時可再次修改變數值。
單擊Flink開發控制台左側導覽列的
。在目標作業草稿的SQL編輯器中使用
${變數名}
格式建立變數,樣本如下。在WITH參數中使用時,需要使用單引號,
'${變數名}'
。在其他位置使用(例如SQL表名、欄位)時,需要使用反引號
`${變數名}`
。
create temporary table `${source_name}`( id varchar, name varchar ) with ( 'connector' = 'datagen' ); create temporary table blackhole( id varchar, `${test_name}` varchar ) with ( 'connector' = '${blackhole}' ); insert into blackhole select * from `${source_name}`;
Flink會自動識別作業草稿中使用了該格式的作業變數,您需要填寫變數值。
方法一:SQL編輯器會出現作業變數面板,可直接在面板中進行填寫。
方法二:單擊右側的更多配置,在作業變數地區進行填寫。
作業部署後,您可以在作業營運頁面目標作業的部署詳情頁簽查看作業使用的變數。
單擊目標作業操作列下的啟動。支援在作業啟動面板中修改變數值。
重要作業啟動面板中修改變數值僅對作業本次啟動生效,不會修改SQL草稿中對應的變數值。
JAR/Python作業
支援JAR和Python作業中Main函數入參使用變數。
在開發控制台的
頁面,單擊部署作業。在Entry Point Main Arguments參數位置輸入入參變數名,使用格式如下,並在參數下方的作業變數部分填寫變數值。
其他部署參數配置詳情請參見部署作業。
單擊部署。
單擊目標作業操作列下的啟動。支援在作業啟動面板中修改變數值。
專案變數
新增變數
僅editor及以上許可權或具有建立變數許可權的成員支援新增變數。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
在
頁面,單擊新增變數。參數
說明
變數名
變數名需在同一個專案空間下保持唯一,建立後不支援修改。
變數值
變數值對字母大小寫敏感,填寫時請注意字母大小寫。建立後支援修改變數值,詳情請參見編輯或刪除變數。
類型(明文/密文)
建立後不支援修改類型。
明文:在變數管理頁面可以直接查看變數值。
密文:無法查看變數值。
單擊確定。
使用變數
增加變數後,您可以通過${secret_values.變數名}
格式使用,使用時您僅需將其中的變數名進行修改,其他部分保留不變,具體樣本如下。
資料開發
支援在Realtime Compute開發控制台的資料開發下使用專案變數。
ETL(SQL開發)
支援在SQL作業的DDL中通過${secret_values.變數名}
格式使用變數,樣本如下。
在WITH參數中使用時,需要使用單引號,
'${secret_values.變數名}'
。在其他位置使用(例如SQL表名、欄位)時,需要使用反引號
`${secret_values.變數名}`
。
create temporary table `${secret_values.source_name}`(
id varchar,
name varchar
) with (
'connector' = 'datagen'
);
create temporary table blackhole(
id varchar,
`${secret_values.test_name}` varchar
) with (
'connector' = '${secret_values.blackhole}'
);
insert into blackhole select * from `${secret_values.source_name}`;
資料攝入
source:
type: mysql
name: Mysql Source
hostname: localhost
port: 3306
username: test
password: ${secret_values.mysqlpw}
tables: app_db.\.*
server-id: 5400-5404
···
資料查詢
USE CATALOG paimon;
CREATE DATABASE IF NOT EXISTS `${secret_values.test_name}`;
CREATE TABLE paimon.`${secret_values.test_name}`.ods_user_log
(
item_id int NOT NULL,
`${secret_values.user}` varchar(50) NOT NULL,
action varchar(20) NOT NULL,
vtime timestamp,
ds varchar(10) NOT NULL
)
PARTITIONED BY (ds);
SELECT * from paimon.`${secret_values.test_name}`.ods_user_log LIMIT 10;
JAR/Python作業
支援JAR和Python作業中Main函數入參使用變數。
在開發控制台的
頁面,單擊部署作業。在Entry Point Main Arguments參數位置輸入入參變數名,使用格式如下。
其他部署參數配置詳情請參見部署作業。
單擊部署。
日誌配置
進入日誌配置頁面。
配置單個作業,具體操作請參見配置單個作業日誌輸出。
設定項目空間下所有作業,具體操作請參見設定項目空間下所有作業日誌輸出。
在日誌配置中使用變數。
例如,在配置作業日誌輸出到SLS時使用名為accessKeyId和accessKeySecret的變數樣本如下,完整日誌輸出配置資訊具體請參見配置作業日誌輸出。
<Appender name="SLS" type="SLS"> <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout" charset="UTF-8"/> <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ --> <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line --> <Property name="project">YOUR-SLS-PROJECT</Property> <Property name="logStore">YOUR-SLS-LOGSTORE</Property> <Property name="endpoint">YOUR-SLS-ENDPOINT</Property> <Property name="accessKeyId">${secret_values.accessKeyId}</Property> <Property name="accessKeySecret">${secret_values.accessKeySecret}</Property> <Property name="topic">{{ namespace }}:{{ deploymentId }}:{{ jobId }}</Property> <Property name="deploymentName">{{ deploymentName }}</Property> <Property name="flushIntervalSeconds">10</Property> <Property name="flushIntervalEventCount">100</Property> </Appender>
UI介面
在通過UI介面方式建立Catalog時,您可以在配置項中使用變數。
在開發控制台左側導覽列,單擊中繼資料管理。
在建立Catalog頁面使用變數。例如在MySQL Catalog中的password參數使用名為
mysqlpassword
的變數樣本如下。
編輯或刪除變數
請謹慎刪除或編輯變數,可能會導致使用變數的作業無法部署,或需要重新部署已上線的作業。但不影響運行中的作業。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
在
頁面,單擊目標變數名操作列下編輯或刪除。編輯
支援對變數值進行修改。僅editor及以上許可權成員支援編輯變數。
刪除
僅editor及以上許可權或具有刪除變數許可權的成員支援刪除變數。