FLINK SQL数据类型

Flink SQL支持非常完善的数据类型,以满足不同的数据处理需求。以下是对Flink SQL数据类型的详细归纳:

一、原子数据类型

  1. 字符串类型
    • CHAR、CHAR(n):定长字符串,n代表字符的定长,取值范围为[1, 2147483647]。如果不指定n,则默认为1。
    • VARCHAR、VARCHAR(n)、STRING:可变长字符串,n代表字符的最大长度,取值范围为[1, 2147483647]。如果不指定n,则默认为1。STRING等同于VARCHAR(2147483647)。
  2. 二进制字符串类型
    • BINARY、BINARY(n):定长二进制字符串,n代表定长,取值范围为[1, 2147483647]。如果不指定n,则默认为1。
    • VARBINARY、VARBINARY(n)、BYTES:可变长二进制字符串,n代表字符的最大长度,取值范围为[1, 2147483647]。如果不指定n,则默认为1。BYTES等同于VARBINARY(2147483647)。
  3. 精确数值类型
    • DECIMAL、DECIMAL§、DECIMAL(p, s)、DEC、DEC§、DEC(p, s)、NUMERIC、NUMERIC§、NUMERIC(p, s):固定长度和精度的数值类型,p代表数值位数(长度),取值范围为[1, 38];s代表小数点后的位数(精度),取值范围为[0, p]。如果不指定,p默认为10,s默认为0。
  4. 有损精度数值类型
    • TINYINT:-128到127的1字节大小的有符号整数。
    • SMALLINT:-32768到32767的2字节大小的有符号整数。
    • INT、INTEGER:-2147483648到2147483647的4字节大小的有符号整数。
    • BIGINT:-9223372036854775808到9223372036854775807的8字节大小的有符号整数。
  5. 浮点类型
    • FLOAT:4字节大小的单精度浮点数值。
    • DOUBLE、DOUBLE PRECISION:8字节大小的双精度浮点数值。
  6. 布尔类型
    • BOOLEAN。
  7. 日期、时间类型
    • DATE:由年-月-日组成的不带时区含义的日期类型,取值范围为[0000-01-01, 9999-12-31]。
    • TIME、TIME§:由小时:分钟:秒[.小数秒]组成的不带时区含义的时间数据类型,精度高达纳秒,取值范围为[00:00:00.000000000, 23:59:59.9999999]。其中p代表小数秒的位数,取值范围为[0, 9],如果不指定p,默认为0。
    • TIMESTAMP、TIMESTAMP§、TIMESTAMP WITHOUT TIME ZONE、TIMESTAMP§ WITHOUT TIME ZONE:由年-月-日 小时:分钟:秒[.小数秒]组成的不带时区含义的时间类型,取值范围为[0000-01-01 00:00:00.000000000, 9999-12-31 23:59:59.999999999]。其中p代表小数秒的位数,取值范围为[0, 9],如果不指定p,默认为6。
    • TIMESTAMP WITH TIME ZONE、TIMESTAMP§ WITH TIME ZONE:由年-月-日 小时:分钟:秒[.小数秒] 时区组成的带时区含义的时间类型,取值范围为[0000-01-01 00:00:00.000000000 +14:59, 9999-12-31 23:59:59.999999999 -14:59]。其中p代表小数秒的位数,取值范围为[0, 9],如果不指定p,默认为6。
    • TIMESTAMP_LTZ、TIMESTAMP_LTZ§:与TIMESTAMP WITH TIME ZONE类似,但时区信息不是携带在数据中的,而是由Flink SQL任务的全局配置决定的。

二、复合数据类型

  • ARRAY:数组类型,类似于Java的array。
  • MULTISET:集合类型,类似于Java的List。
  • ROW:对象类型,可以包含多个字段,每个字段有自己的类型和名称,类似于Java的Object或Scala的Case Class。
  • MAP:映射类型,包含键值对,键和值都可以是任意类型。
    样例:
  1. Tuple(元组)
// 创建一个包含String和Integer类型字段的Tuple2  
DataStream<Tuple2<String, Integer>> tupleStream = env.fromElements(  
    new Tuple2<>("Alice", 30),  
    new Tuple2<>("Bob", 25)  
);  
  
// 访问Tuple2的字段  
tupleStream.map(tuple -> tuple.f0 + " is " + tuple.f1 + " years old")  
           .print();
  1. POJO(Plain Old Java Object,普通旧Java对象)
// 定义一个POJO类  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值