Flink中有哪些主要的数据类型及其用途是什么?

Apache Flink 是一个分布式数据流处理框架,广泛应用于实时数据处理和分析,在 Flink 中,数据类型系统是其核心组件之一,用于描述和管理数据的结构,Flink 支持多种数据类型,包括原子数据类型、复合数据类型和特殊数据类型,以下是对 Flink 数据类型的详细介绍:

flink的数据类型

1、原子数据类型

字符串类型

CHAR、CHAR(n):定长字符串,n 代表字符的定长,取值范围为 [1, 2147483647],如果不指定 n,则默认为 1。

VARCHAR、VARCHAR(n)、STRING:可变长字符串,n 代表字符的最大长度,取值范围为 [1, 2147483647],如果不指定 n,则默认为 1,STRING 等同于 VARCHAR(2147483647)。

二进制字符串类型

BINARY、BINARY(n):定长二进制字符串,n 代表定长,取值范围为 [1, 2147483647],如果不指定 n,则默认为 1。

VARBINARY、VARBINARY(n)、BYTES:可变长二进制字符串,n 代表字符的最大长度,取值范围为 [1, 2147483647],如果不指定 n,则默认为 1,BYTES 等同于 VARBINARY(2147483647)。

flink的数据类型

精确数值类型

DECIMAL、DECIMAL(p, s)、DEC、DEC(p, s)、NUMERIC、NUMERIC(p, s):固定长度和精度的数值类型,p 代表数值位数(长度),取值范围为 [1, 38];s 代表小数点后的位数(精度),取值范围为 [0, p],如果不指定,p 默认为 10,s 默认为 0。

有损精度数值类型

TINYINT:-128 到 127 的 1 字节大小的有符号整数。

SMALLINT:-32768 到 32767 的 2 字节大小的有符号整数。

INT、INTEGER:-2147483648 到 2147483647 的 4 字节大小的有符号整数。

BIGINT:-9223372036854775808 到 9223372036854775807 的 8 字节大小的有符号整数。

flink的数据类型

浮点类型

FLOAT:4 字节大小的单精度浮点数值。

DOUBLE、DOUBLE PRECISION:8 字节大小的双精度浮点数值。

布尔类型

BOOLEAN:布尔类型。

日期、时间类型

DATE:由年-月-日组成的不带时区含义的日期类型,取值范围为 [0000-01-01, 9999-12-31]。

TIME、TIME(p):由小时:分钟:秒[.小数秒]组成的不带时区含义的时间数据类型,精度高达纳秒,取值范围为 [00:00:00.000000000, 23:59:59.9999999],p 代表小数秒的位数,取值范围为 [0, 9],如果不指定 p,默认为 0。

TIMESTAMP、TIMESTAMP(p)、TIMESTAMP WITHOUT TIME ZONE、TIMESTAMP WITH TIME ZONE:由年-月-日 小时:分钟:秒[.小数秒]组成的不带时区含义的时间类型,取值范围为 [0000-01-01 00:00:00.000000000, 9999-12-31 23:59:59.999999999],p 代表小数秒的位数,取值范围为 [0, 9],如果不指定 p,默认为 6。

2、复合数据类型

ARRAY:数组类型,类似于 Java 的 array。

MULTISET:集合类型,类似于 Java 的 List。

ROW:对象类型,可以包含多个字段,每个字段有自己的类型和名称,类似于 Java 的 Object 或 Scala 的 Case Class。

MAP:映射类型,包含键值对,键和值都可以是任意类型。

Tuple(元组):Flink 提供了对 Java 和 Scala 元组的支持,Java 元组类型由 Flink 的包提供,默认提供 Tuple0~Tuple25。

     DataStream<Tuple2<String, Integer>> personStream = env.fromElements(new Tuple2<>("Adam", 17), new Tuple2<>("Sarah", 23));
     personStream.filter(p -> p.f1 > 18);

Scala Case Class:Flink 通过实现 CaseClassTypeInfo 支持任意的 Scala Case Class,包括 Scala tuples 类型,支持的字段数量上限为 22。

     val numbers: DataStream[(String, Integer)] = env.fromElements(("Flink", 1), ("Spark", 2))

POJO(Plain Old Java Object):POJOs 类可以完成复杂数据结构的定义,Flink 通过实现 PojoTypeInfo 来描述任意的 POJOs,包括 Java 和 Scala 类,使用 POJOs 类需要遵循以下要求:

POJOs 类必须是 Public 修饰且必须独立定义,不能是内部类。

POJOs 类中必须含有默认空构造器。

POJOs 类中所有的字段必须是 Public 或者具有 Public 修饰的 getter 和 setter 方法。

POJOs 类中的字段类型必须是 Flink 支持的。

     public class PersonPOJO {
         public String name;
         public int age;
         // 无参构造方法
         public PersonPOJO() {}
         // 有参构造方法
         public PersonPOJO(String name, int age) {
             this.name = name;
             this.age = age;
         }
         // Getter和Setter方法
         public String getName() {
             return name;
         }
         public void setName(String name) {
             this.name = name;
         }
         public int getAge() {
             return age;
         }
         public void setAge(int age) {
             this.age = age;
         }
     }

创建包含 PersonPOJO 对象的数据集:

     DataStream<PersonPOJO> peopleStream = env.fromElements(new PersonPOJO("Alice", 30), new PersonPOJO("Bob", 25));

Value类型:实现了 org.apache.flink.types.Value,其中包括 read()和 write()两个方法完成序列化和反序列化操作,Flink 提供了内建的 Value 类型有 IntValue、DoubleValue 以及 StringValue 等。

3、特殊数据类型

Flink 还支持一些特殊的数据类型,Scala 中的 List、Map、Either、Option、Try,以及 Java 中的 Either 和 Hadoop 的 Writable,这些数据类型的使用场景相对不那么广泛,主要原因是数据中的操作相对不像 POJOs 类那样方便和透明,用户无法根据字段位置或者名称获取字段信息,同时要借助 Types Hint 帮助 Flink 推断数据类型信息。

Flink的数据类型系统非常完善,能够支持各种复杂的数据处理需求,通过合理选择和使用不同的数据类型,可以提高数据处理的效率和性能。

小伙伴们,上文介绍了“flink的数据类型”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/731104.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2024-12-13 15:42
Next 2024-12-13 15:45

相关推荐

  • 如何实现Flink在实时数据仓库中的有效实践?

    Flink实时数据仓库实践一、Flink简介与重要性Apache Flink 是一个开源的流处理框架,专为分布式数据流处理和实时数据处理而设计,Flink 的核心优势在于其强大的流处理能力和批处理能力,能够处理大规模的实时数据,并保证低延迟和高吞吐量,这使得 Flink 在构建实时数据仓库时成为理想选择,实时数……

    2024-12-13
    08
  • Flink实时数据仓库开源项目,如何助力企业实现高效数据处理?

    Flink实时数据仓库开源一、概述Apache Flink 是一个开源的流处理框架,专为实时数据处理而设计,它能够处理无界和有界的数据流,支持复杂的事件处理、实时分析和数据管道应用,Flink 在实时数仓的建设中扮演着核心角色,其强大的流计算能力和灵活的架构使其成为构建实时数据仓库的理想选择,二、技术架构与核心……

    2024-12-13
    04
  • Flink CDC 里3.0的cdc还是支持原来的通过手动写代码用ds方式来监听吧?

    是的,Flink CDC 3.0仍然支持通过手动编写代码使用DS(Debezium Source)方式来监听数据变更。

    2024-05-14
    087
  • 如何使用Flink进行实时计算统计数据?

    Flink 实时计算统计数据Apache Flink 是一个分布式数据流处理框架,专注于实时数据处理和分析,它能够以低延迟、高吞吐量的方式处理大规模数据,因此在实时统计领域得到了广泛应用,本文将详细介绍如何使用 Flink 进行实时数据统计,包括 PV(页面浏览量)、UV(独立访客数)等关键指标的计算, 实时数……

    2024-12-13
    08
  • 如何使用Flink实时数据仓库构建数据大屏?

    Flink实时数据仓库做数据大屏在当今大数据时代,实时数据处理和展示已经成为企业决策的重要工具,Apache Flink作为一种强大的流处理框架,广泛应用于实时数据计算与分析,通过结合Flink和实时数据仓库,可以实现高效的数据大屏展示,帮助企业实时监控业务数据、快速响应市场变化,以下将详细介绍如何使用Flin……

    2024-12-13
    03
  • Flink CDC 里这是怎么回事?

    Flink CDC 是一种基于 Flink 的 Change Data Capture(变更数据捕获)技术,用于实时处理数据库中的数据变更。

    2024-05-14
    0120

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入