更新时间:2023-02-24 GMT+08:00

string_split

string_split函数,根据指定的分隔符将目标字符串拆分为子字符串,并返回子字符串列表。

语法说明

string_split(target, separator)
表1 string_split参数说明

参数

数据类型

说明

target

STRING

待处理的目标字符串。

说明:
  • 如果target为NULL,则返回一个空行。
  • 如果target包含两个或多个连续出现的分隔符时,则返回长度为零的空子字符串。
  • 如果target未包含指定分隔符,则返回目标字符串。

separator

VARCHAR

指定的分隔符,当前仅支持单字符分割。

示例

  1. 参考Kafka源表Print结果表创建flink opensource sql作业,输入以下作业运行脚本,提交运行作业。
    注意:创建作业时,在作业编辑界面的“运行参数”处,“Flink版本”选择“1.12”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。如下脚本中的加粗参数请根据实际环境修改
    CREATE TABLE kafkaSource (
      target STRING,  
      separator  VARCHAR
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'KafkaTopic',
      'properties.bootstrap.servers' = 'KafkaAddress1:KafkaPort,KafkaAddress2:KafkaPort',
      'properties.group.id' = 'GroupId',
      'scan.startup.mode' = 'latest-offset',
      "format" = "json"
    );
    
    CREATE TABLE printSink (
      target STRING,  
      item STRING
    ) WITH (
      'connector' = 'print'
    );
    
    insert into printSink
      select target,
      item from 
      kafkaSource,
      lateral table(string_split(target, separator)) as T(item);
  2. 连接Kafka集群,向Kafka的topic中发送如下测试数据:
    {"target":"test-flink","separator":"-"}
    {"target":"flink","separator":"-"}
    {"target":"one-two-ww-three","separator":"-"}

    即数据如下:

    表2 测试源表数据和分隔符

    target(STRING)

    separator (VARCHAR)

    test-flink

    -

    flink

    -

    one-two-ww-three

    -

  3. 查看输出结果。
    • 方法一:
      1. 登录DLI管理控制台,选择“作业管理 > Flink作业”。
      2. 在对应Flink作业所在行的“操作”列,选择“更多 > FlinkUI”。
      3. 在FlinkUI界面,选择“Task Managers”,单击对应的任务名称,选择“Stdout”查看作业运行日志。
    • 方法二:若在提交运行作业前“运行参数”选择了“保存作业日志”,可以通过如下操作查看。
      1. 登录DLI管理控制台,选择“作业管理 > Flink作业”。
      2. 单击对应的Flink作业名称,选择“运行日志”,单击“OBS桶”,根据作业运行的日期,找到对应日志的文件夹。
      3. 进入对应日期的文件夹后,找到名字中包含“taskmanager”的文件夹进入,下载获取taskmanager.out文件查看结果日志。
    查询结果参考如下:
    +I(test-flink,test)
    +I(test-flink,flink)
    +I(flink,flink)
    +I(one-two-ww-three,one)
    +I(one-two-ww-three,two)
    +I(one-two-ww-three,ww)
    +I(one-two-ww-three,three)

    即数据输出结果参考如下:

    表3 结果表数据

    target(STRING)

    item(STRING)

    test-flink

    test

    test-flink

    flink

    flink

    flink

    one-two-ww-three

    one

    one-two-ww-three

    two

    one-two-ww-three

    ww

    one-two-ww-three

    three