Flink的数据类型,分为两类:
-
基础数据类型
-
复合数据类型
基础数据类型
#1.字符串类型
varchar
string#2.数值类型
int
bigint
integer#3.浮点型
double
float#4.boolean类型
true
false#5.null类型
null#6.时间日期类型
date
time
timestamp #不带时区。早先Flink版本使用时间戳类型
timestamp_ltz #带时区,推荐使用,ltz:local time zone
复合数据类型
Flink的复合数据类型如下:
数组类型,FlinkSQL中名字叫ARRAY,类似于Java的array
Map类型,FlinkSQL中名字叫Map,类似于Java的Map
集合类型,FlinkSQL中名字叫MULTISET,类似于Java的List
对象类型,FlinkSQL中名字叫ROW,类似于Java的Object
案例演示
--建表
CREATE TABLE json_source (
id BIGINT,
name STRING,
`date` DATE,
obj ROW<time1 TIME,str STRING,lg BIGINT>,
arr ARRAY<ROW<f1 STRING,f2 INT>>,
`time` TIME,
`timestamp` TIMESTAMP(3),
`map` MAP<STRING,BIGINT>,
mapinmap MAP<STRING,MAP<STRING,INT>>,
proctime as PROCTIME()
) WITH (
'connector' = 'socket',
'hostname' = 'node1',
'port' = '9999',
'format' = 'json'
);
--SQL运行语句
select id, name,`date`,obj.str,arr[1].f1,`map`['flink'],mapinmap['inner_map']['key'] from json_source;
--数据
{"id":1238123899121,"name":"itcast","date":"1990-10-14","obj":{"time1":"12:12:43","str":"sfasfafs","lg":2324342345},"arr":[{"f1":"f1str11","f2":134},{"f1":"f1str22","f2":555}],"time":"12:12:43","timestamp":"1990-10-14 12:12:43","map":{"flink":123},"mapinmap":{"inner_map":{"key":234}}}
--开启socket,把数据输入,FlinkSQL能查询出结果
nc -lk 9999