类型转换函数
SQL函数 |
描述 |
---|---|
CAST(value AS type) |
返回被强制转换为类型 type 的新值。 例如 CAST('42' AS INT) 返回 42; CAST(NULL AS VARCHAR) 返回 VARCHAR 类型的 NULL。 |
TYPEOF(input) | TYPEOF(input, force_serializable) |
返回输入表达式的数据类型的字符串表示形式。默认情况下返回的字符串是一个摘要字符串,可能会为了可读性而省略某些细节。 如果 force_serializable 设置为 TRUE,则字符串表示可以保留在目录中的完整数据类型。请注意, 特别是匿名的内联数据类型没有可序列化的字符串表示。在这种情况下返回 NULL。 |
CAST语法格式
CAST(value AS type)
CAST语法说明
类型强制转换。
CAST注意事项
如果输入为NULL,则返回NULL。
CAST示例一:将amount值转换成整型
将amount值转换成整型。
insert into temp select cast(amount as INT) from source_stream;
示例 |
说明 |
示例 |
---|---|---|
cast(v1 as string) |
将v1转换为字符串类型,v1可以是数值类型,TIMESTAMP/DATE/TIME。 |
表T1: | content (INT) | | ------------- | | 5 | 语句: SELECT cast(content as varchar) FROM T1; 结果: "5" |
cast (v1 as int) |
将v1转换为int, v1可以是数值类型或字符类。 |
表T1: | content (STRING) | | ------------- | | "5" | 语句: SELECT cast(content as int) FROM T1; 结果: 5 |
cast(v1 as timestamp) |
将v1转换为timestamp类型,v1可以是字符串或DATE/TIME。 |
表T1: | content (STRING) | | ------------- | | "2018-01-01 00:00:01" | 语句: SELECT cast(content as timestamp) FROM T1; 结果: 1514736001000 |
cast(v1 as date) |
将v1转换为date类型, v1可以是字符串或者TIMESTAMP。 |
表T1: | content (TIMESTAMP) | | ------------- | | 1514736001000 | 语句: SELECT cast(content as date) FROM T1; 结果: "2018-01-01" |
Flink作业不支持使用CAST将“BIGINT”转换为“TIMESTAMP”,可以使用to_timestamp进行转换。
CAST示例二
- 参考Kafka和Print创建flink opensource sql作业,输入以下作业运行脚本,提交运行作业。
注意:创建作业时,在作业编辑界面的“运行参数”处,“Flink版本”选择“1.15”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。如下脚本中的加粗参数请根据实际环境修改。
CREATE TABLE kafkaSource ( cast_int_to_string int, cast_String_to_int string, case_string_to_timestamp string, case_timestamp_to_date timestamp ) 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 ( cast_int_to_string string, cast_String_to_int int, case_string_to_timestamp timestamp, case_timestamp_to_date date ) WITH ( 'connector' = 'print' ); insert into printSink select cast(cast_int_to_string as string), cast(cast_String_to_int as int), cast(case_string_to_timestamp as timestamp), cast(case_timestamp_to_date as date) from kafkaSource;
- 连接Kafka集群,向Kafka的topic中发送如下测试数据:
{"cast_int_to_string":"1", "cast_String_to_int": "1", "case_string_to_timestamp": "2022-04-02 15:00:00", "case_timestamp_to_date": "2022-04-02 15:00:00"}
- 查看输出结果:
- 方法一:
- 登录DLI管理控制台,选择“作业管理 > Flink作业”。
- 在对应Flink作业所在行的“操作”列,选择“更多 > FlinkUI”。
- 在FlinkUI界面,选择“Task Managers”,单击对应的任务名称,选择“Stdout”查看作业运行日志。
- 方法二:如果在提交运行作业前“运行参数”选择了“保存作业日志”,可以通过如下操作查看。
- 登录DLI管理控制台,选择“作业管理 > Flink作业”。
- 单击对应的Flink作业名称,选择“运行日志”,单击“OBS桶”,根据作业运行的日期,找到对应日志的文件夹。
- 进入对应日期的文件夹后,找到名字中包含“taskmanager”的文件夹进入,下载获取taskmanager.out文件查看结果日志。
查询结果参考如下:+I(1,1,2022-04-02T15:00,2022-04-02)
- 方法一: