全部产品
Search
文档中心

实时计算Flink版:变量管理

更新时间:Sep 12, 2024

使用变量可以避免明文AccessKey、密码等信息带来的安全风险,通过复用可以避免重复编写相同的代码或值,易于配置管理。支持在SQL作业、JAR或Python作业、日志配置和UI界面等场景中使用。本文为您介绍如何创建变量,以及不同场景下的使用方法。

背景信息

变量由名(称)和值组成,名是用来代替真实数据的名称,由您自定义,通常能够直接反映值的含义,值则是实际要使用而被名称代替展示的值。Flink支持作业变量和项目变量两种,区别如下:

  • 作业变量:仅支持在对应的单个作业下使用,包括ETL(SQL开发)、JAR/Python作业Main函数入参,使用格式为${变量名},具体使用方法请参见作业变量

  • 项目变量:支持在该项目空间下使用,包括数据开发(数据摄入、ETL、查询脚本)、JAR/Python作业Main函数入参、日志配置和UI界面(创建Catalog),使用格式为${secret_values.变量名},具体创建和使用方法请参见项目变量

注意事项

  • 不支持为一个变量名配置多个值。

  • 请避免使用关键字作变量名。

  • SQL作业中仅支持在临时表(CREATE TEMPORARY TABLE)中使用变量,持久表(CREATE TABLE)中使用会导致该表无法正常使用。

作业变量

说明

作业变量名需要在单个作业内保持唯一。

ETL(SQL作业)

支持在SQL作业开发中(包括自定义函数入参)使用变量,并在作业启动时可再次修改变量值。

  1. 单击Flink开发控制台左侧导航栏的数据开发 > ETL

  2. 在目标作业草稿的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}`;
  3. Flink会自动识别作业草稿中使用了该格式的作业变量,您需要填写变量值。

    • 方法一:SQL编辑器会出现作业变量面板,可直接在面板中进行填写。

      image

    • 方法二:单击右侧的更多配置,在作业变量区域进行填写。

      image

  4. 作业部署后,您可以在作业运维页面目标作业的部署详情页签查看作业使用的变量。

    image

  5. 单击目标作业操作列下的启动。支持在作业启动面板中修改变量值。

    重要

    作业启动面板中修改变量值仅对作业本次启动生效,不会修改SQL草稿中对应的变量值。

    image

JAR/Python作业

支持JAR和Python作业中Main函数入参使用变量。

  1. 在开发控制台的运维中心 > 作业运维页面,单击部署作业

  2. Entry Point Main Arguments参数位置输入入参变量名,使用格式如下,并在参数下方的作业变量部分填写变量值。

    image

    其他部署参数配置详情请参见部署作业

  3. 单击部署

  4. 单击目标作业操作列下的启动。支持在作业启动面板中修改变量值。

    image

项目变量

新增变量

说明

仅editor及以上权限或具有创建变量权限的成员支持新增变量。

  1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

  2. 安全服务 > 变量管理页面,单击新增变量

    参数

    说明

    变量名

    变量名需在同一个项目空间下保持唯一,创建后不支持修改。

    变量值

    变量值对字母大小写敏感,填写时请注意字母大小写。创建后支持修改变量值,详情请参见编辑或删除变量

    类型(明文/密文)

    创建后不支持修改类型。

    • 明文:在变量管理页面可以直接查看变量值。

    • 密文:无法查看变量值。

    image

  3. 单击确定

使用变量

增加变量后,您可以通过${secret_values.变量名}格式使用,使用时您仅需将其中的变量名进行修改,其他部分保留不变,具体示例如下。

数据开发

支持在实时计算开发控制台的数据开发下使用项目变量。

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函数入参使用变量。

  1. 在开发控制台的运维中心 > 作业运维页面,单击部署作业

  2. Entry Point Main Arguments参数位置输入入参变量名,使用格式如下。

    image

    其他部署参数配置详情请参见部署作业

  3. 单击部署

日志配置

  1. 进入日志配置页面。

  2. 在日志配置中使用变量。

    例如,在配置作业日志输出到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时,您可以在配置项中使用变量。

  1. 在开发控制台左侧导航栏,单击元数据管理

  2. 在创建Catalog页面使用变量。例如在MySQL Catalog中的password参数使用名为mysqlpassword的变量示例如下。

    image.png

编辑或删除变量

说明

请谨慎删除或编辑变量,可能会导致使用变量的作业无法部署,或需要重新部署已上线的作业。但不影响运行中的作业。

  1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

  2. 安全服务 > 变量管理页面,单击目标变量名操作列下编辑删除

    • 编辑

      支持对变量值进行修改。仅editor及以上权限成员支持编辑变量。

    • 删除

      仅editor及以上权限或具有删除变量权限的成员支持删除变量。

相关文档