使用變數可以避免明文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編輯器會出現作業變數面板,可直接在面板中進行填寫。
在作業變數面板中組態變數索引值對:
source_name=datagen、test_name=name、blackhole=blackhole。 -
方法二:單擊右側的更多配置,在作業變數地區進行填寫。
例如,組態變數
source_name為datagen、test_name為name、blackhole為blackhole,SQL 中通過${variable_name}文法引用對應變數值。
-
-
作業部署後,您可以在作業營運頁面目標作業的部署詳情頁簽查看作業使用的變數。
在作業屬性中,作業變數行展示了已配置的變數(如 source_name、test_name、blackhole)及其對應值。
-
單擊目標作業操作列下的啟動。支援在作業啟動面板中修改變數值。
重要作業啟動面板中修改變數值僅對作業本次啟動生效,不會修改SQL草稿中對應的變數值。
在作業啟動面板中,可選擇無狀態啟動或有狀態啟動模式。選擇有狀態啟動時,可配置復原選項(如從最新狀態恢複)。作業變數地區展示變數名及其預設值,例如
source_name對應datagen、test_name對應name、blackhole對應blackhole,可按需修改後單擊啟動。
JAR/Python作業
支援JAR和Python作業中Main函數入參使用變數。
方式一(變數值寫在變數管理裡)
-
新增變數,詳情請參見新增變數。
-
在Realtime Compute開發控制台的頁面,單擊部署作業。
-
在Entry Point Main Arguments參數位置輸入入參變數名,格式
--代碼中的變數名 ${secret_values.變數管理中的變數名}。變數名如需包含特殊字元,請參見使用Entry point Main Arguments傳參數時,需要傳特殊字元,應該如何處理?。
例如,輸入
--akid ${secret_values.test1}和--aksecret ${secret_values.test2},每行一個參數。其他部署參數配置詳情請參見部署作業。
-
單擊部署。
-
單擊目標作業操作列下的啟動。
方式二(變數值寫在配置參數裡)
-
在Realtime Compute開發控制台的頁面,單擊部署作業。
-
在Entry Point Main Arguments參數位置輸入入參變數名,
--代碼中的變數名 ${作業變數的變數名},並在參數下方的作業變數部分填寫變數值。變數名如需包含特殊字元,請參見使用Entry point Main Arguments傳參數時,需要傳特殊字元,應該如何處理?。
例如輸入
--akid ${test1} --aksecret ${test2},並對應添加變數test1(AccessKey ID)和test2(AccessKey Secret),在預設值中填入實際憑據。其他部署參數配置詳情請參見部署作業。
-
單擊部署。
-
單擊目標作業操作列下的啟動。支援在作業啟動面板中修改變數值。
選擇啟動模式為無狀態啟動(不包含任何初始狀態啟動)或有狀態啟動(從已存在的有效狀態啟動),並可開啟配置自動調優。
專案變數
新增變數
僅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參數位置輸入入參變數名,使用格式如下。
例如
--input ${secret_values.input},其中${secret_values.變數名}為引用已配置密鑰變數的固定文法。其他部署參數配置詳情請參見部署作業。
-
單擊部署。
運行參數配置
支援作業運行參數使用變數。
-
在頁面,單擊目標作業。
-
在部署詳情頁簽,單擊運行參數配置地區右側編輯,填寫參數配置。參數值可使用變數名,樣本如下。
在其他配置文本地區中,通過
${secret_values.xxx}的形式引用變數名來配置 Jindo OSS 訪問憑證,涉及fs.oss.jindo.buckets、fs.oss.jindo.accessKeyId和fs.oss.jindo.accessKeySecret三個配置項。 -
單擊儲存。
日誌配置
-
進入日誌配置頁面。
-
配置單個作業,具體操作請參見配置單個作業日誌輸出渠道。
-
設定項目空間下所有作業,具體操作請參見設定項目空間下所有作業日誌輸出渠道。
-
-
在日誌配置中使用變數。
例如,在配置作業日誌輸出到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的變數樣本如下。在 password 欄位中填寫
${secret_values.mysqlpassword}即可引用密鑰值。
編輯或刪除變數
請謹慎刪除或編輯變數,這可能會導致使用變數的作業無法部署,或需要重新部署已上線的作業。但不影響正在運行中的作業。
-
登入Realtime Compute管理主控台,單擊目標工作空間操作列下的控制台。
-
在頁面,單擊目標變數名操作列下編輯或刪除。
-
編輯
支援對變數值進行修改。僅editor及以上許可權成員支援編輯變數。
-
刪除
僅editor及以上許可權或具有刪除變數許可權的成員支援刪除變數。
-