更新时间:2024-04-19 GMT+08:00

Raw Format

功能描述

Raw format 允许读写原始(基于字节)值作为单个列。

  • Raw Format将 null 值编码成 byte[] 类型的 null。这样在 upsert-kafka 中使用时可能会有限制,因为 upsert-kafka 将 null 值视为 墓碑消息(在键上删除)。因此,如果该字段可能具有 null 值,我们建议避免使用 upsert-kafka 连接器和 raw format 作为 value.format。
  • Raw format 连接器是内置的。更多具体使用可参考开源社区文档:Raw Format

支持的Connector

  • Kafka
  • Upsert Kafka
  • Filesystem

参数说明

表1

参数

是否必选

默认值

类型

描述

format

(none)

String

指定要使用的格式, 这里应该是 'raw'。

raw.charset

UTF-8

String

指定字符集来编码文本字符串。

raw.endianness

big-endian

String

指定字节序来编码数字值的字节。有效值为'big-endian'和'little-endian'。 更多细节可查阅 字节序

数据类型映射

下表详细说明了这种格式支持的 SQL 类型,包括用于编码和解码的序列化类和反序列化类的详细信息。

表2 数据类型映射

Flink SQL 类型

CHAR / VARCHAR / STRING

UTF-8(默认)编码的文本字符串。编码字符集可以通过 'raw.charset' 进行配置。

BINARY / VARBINARY / BYTES

字节序列本身。

BOOLEAN

表示布尔值的单个字节,0表示 false, 1 表示 true。

TINYINT

有符号数字值的单个字节。

SMALLINT

采用big-endian(默认)编码的两个字节。字节序可以通过 'raw.endianness' 配置。

INT

采用 big-endian (默认)编码的四个字节。字节序可以通过 'raw.endianness' 配置。

BIGINT

采用 big-endian (默认)编码的八个字节。字节序可以通过 'raw.endianness' 配置。

FLOAT

采用 IEEE 754 格式和 big-endian (默认)编码的四个字节。字节序可以通过 'raw.endianness' 配置。

DOUBLE

采用 IEEE 754 格式和 big-endian (默认)编码的八个字节。字节序可以通过 'raw.endianness' 配置。

RAW

通过 RAW 类型的底层 TypeSerializer 序列化的字节序列。

示例

使用kafka发送数据,输出到print中。

  1. 根据kafka所在的虚拟私有云和子网创建相应的跨源,并绑定所要使用的队列。然后设置安全组,入向规则,使其对当前将要使用的队列放开,并根据kafka的地址测试队列连通性(通用队列 > 找到作业的所属队列 > 更多 > 测试地址连通性 > 输入kafka的地址 > 测试)。如果能连通,则表示跨源已经绑定成功;否则表示未成功。
  2. 创建flink opensource sql作业,选择flink1.15,并提交运行,其代码如下:

    CREATE TABLE kafkaSource (
      log string
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'kafkaTopic',
      'properties.bootstrap.servers' = 'KafkaAddress1:KafkaPort,KafkaAddress2:KafkaPort',
      'properties.group.id' = 'GroupId',
      'scan.startup.mode' = 'latest-offset',
      'format' = 'raw'
    );
    
    CREATE TABLE printSink (
      log string
    ) WITH (
      'connector' = 'print'
    );
    insert into printSink select * from kafkaSource;    

  3. 向kafka的相应topic中插入下列数据:

    47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"

  4. 按照如下方式查看taskmanager.out文件中的数据结果:

    1. 登录DLI管理控制台,选择“作业管理 > Flink作业”。
    2. 单击对应的Flink作业名称,选择“运行日志”,单击“OBS桶”,根据作业运行的日期,找到对应日志的文件夹。
    3. 进入对应日期的文件夹后,找到名字中包含“taskmanager”的文件夹进入,下载获取.out文件查看结果日志。
    +I[47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"]