
# string_split
string_split函数，根据指定的分隔符将目标字符串拆分为子字符串，并返回子字符串列表。
#### 语法说明
```
string_split(target, separator)
```
表1string_split参数说明 
| 参数        | 数据类型    | 说明                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| target    | STRING  | 待处理的目标字符串。 说明： - 如果target为NULL，则返回一个空行。  - 如果target包含两个或多个连续出现的分隔符时，则返回长度为零的空子字符串。  - 如果target未包含指定分隔符，则返回目标字符串。   |
| separator | VARCHAR | 指定的分隔符，当前仅支持单字符分隔。                                                                                                                                                                                                                                                                                                                                                         |
   
#### 示例
1. 参考[Kafka源表](https://support.huaweicloud.com/sqlref-flink-dli/dli_08_0386.html)和[Print结果表](https://support.huaweicloud.com/sqlref-flink-dli/dli_08_0399.html)创建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        |
      
   
 
