当前位置: 首页 > news >正文

Flink系列之:Table API Connectors之Raw Format

Flink系列之:Table API Connectors之Raw Format

  • 一、Raw Format
  • 二、示例
  • 三、Format 参数
  • 四、数据类型映射

一、Raw Format

  • Raw format 允许读写原始(基于字节)值作为单个列。
  • 注意: 这种格式将 null 值编码成 byte[] 类型的 null。这样在 upsert-kafka 中使用时可能会有限制,因为 upsert-kafka 将 null 值视为 墓碑消息(在键上删除)。因此,如果该字段可能具有 null 值,我们建议避免使用 upsert-kafka 连接器和 raw format 作为 value.format。
  • Raw format 连接器是内置的。

二、示例

例如,你可能在 Kafka 中具有原始日志数据,并希望使用 Flink SQL 读取和分析此类数据。

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"

下面的代码创建了一张表,使用 raw format 以 UTF-8 编码的形式从中读取(也可以写入)底层的 Kafka topic 作为匿名字符串值:

CREATE TABLE nginx_log (log STRING
) WITH ('connector' = 'kafka','topic' = 'nginx_log','properties.bootstrap.servers' = 'localhost:9092','properties.group.id' = 'testGroup','format' = 'raw'
)

然后,你可以将原始数据读取为纯字符串,之后使用用户自定义函数将其分为多个字段进行进一步分析。例如 示例中的 my_split。

SELECT t.hostname, t.datetime, t.url, t.browser, ...
FROM(SELECT my_split(log) as t FROM nginx_log
);

相对应的,你也可以将一个 STRING 类型的列以 UTF-8 编码的匿名字符串值写入 Kafka topic。

三、Format 参数

参数是否必选默认值类型描述
format必选(none)String指定要使用的格式, 这里应该是 ‘raw’。
raw.charset可选UTF-8String指定字符集来编码文本字符串。
raw.endianness可选big-endianString指定字节序来编码数字值的字节。有效值为’big-endian’和’little-endian’。

四、数据类型映射

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

Flink SQL类型
CHAR / VARCHAR / STRINGUTF-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 序列化的字节序列。
http://www.lryc.cn/news/262872.html

相关文章:

  • 社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 + 去匿名化技术 + 推理攻击技术 + k-匿名 + 基于聚类的隐私保护算法
  • 2023大湾区汽车创新大会在深圳坪山开幕
  • Graylog 中日志级别及其对应的数字
  • 智能手表上的音频(五):录音
  • 2023.12.17 关于 Redis 的特性和应用场景
  • 智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • Kotlin 笔记 -- Kotlin 语言特性的理解(二)
  • 数据结构【1】:数组专题
  • 【Spring】Spring 事务
  • Ubuntu 虚拟机环境,编译AOSP源码
  • 2023.12.18杂记
  • 智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • K8s内容器拓扑图工具
  • 掌握 Babel:让你的 JavaScript 与时俱进(上)
  • Mysql进阶-InnoDB引擎事务原理及MVCC
  • 「X」Embedding in NLP|神经网络和语言模型 Embedding 向量入门
  • JVM-11-运行时栈帧结构
  • 【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
  • 【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)
  • php hyperf 读取redis,存储到数据库
  • 云原生之深入解析K8S 1.27新特性如何简化状态服务跨集群平滑迁移
  • 鸿蒙OS:打破界限的操作系统新星
  • 预测性维护在汽车制造行业中的应用
  • 分布式链路追踪 —— 基于Dubbo的traceId追踪传递
  • 【uniapp小程序-上拉加载】
  • ubuntu添加路由
  • python图像二值化处理
  • 4.配置系统时钟思路及方法
  • 使用openMVS库,在VS2022中启用c++17标准编译仍然报错
  • uniGUI之上传文件UniFileUploadButton