Flink系列之:Table API Connectors之JSON Format
Flink系列之:Table API Connectors之JSON Format
- 一、JSON Format
- 二、依赖
- 三、创建一张基于 JSON Format 的表
- 四、Format 参数
- 五、数据类型映射关系
一、JSON Format
JSON Format 能读写 JSON 格式的数据。当前,JSON schema 是从 table schema 中自动推导而得的。
二、依赖
为了使用 Json 格式,使用构建自动化工具(例如 Maven 或 SBT)的项目和带有 SQL JAR 包的 SQL 客户端都需要以下依赖项。
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-json</artifactId><version>1.18.0</version>
</dependency>
三、创建一张基于 JSON Format 的表
以下是一个利用 Kafka 以及 JSON Format 构建表的例子。
CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3)
) WITH ('connector' = 'kafka','topic' = 'user_behavior','properties.bootstrap.servers' = 'localhost:9092','properties.group.id' = 'testGroup','format' = 'json','json.fail-on-missing-field' = 'false','json.ignore-parse-errors' = 'true'
)
四、Format 参数
| 参数 | 是否必须 | 默认值 | 类型 | 描述 |
|---|---|---|---|---|
| format | 必选 | (none) | String | 声明使用的格式,这里应为’json’。 |
| json.fail-on-missing-field | 可选 | false | Boolean | 当解析字段缺失时,是跳过当前字段或行,还是抛出错误失败(默认为 false,即抛出错误失败)。 |
| json.ignore-parse-errors | 可选 | false | Boolean | 当解析异常时,是跳过当前字段或行,还是抛出错误失败(默认为 false,即抛出错误失败)。如果忽略字段的解析异常,则会将该字段值设置为null。 |
| json.timestamp-format.standard | 可选 | ‘SQL’ | String | 声明输入和输出的 TIMESTAMP 和 TIMESTAMP_LTZ 的格式。当前支持的格式为’SQL’ 以及 ‘ISO-8601’:可选参数 ‘SQL’ 将会以 “yyyy-MM-dd HH:mm:ss.s{precision}” 的格式解析 TIMESTAMP, 例如 “2020-12-30 12:13:14.123”, 以 “yyyy-MM-dd HH:mm:ss.s{precision}‘Z’” 的格式解析 TIMESTAMP_LTZ, 例如 “2020-12-30 12:13:14.123Z” 且会以相同的格式输出。可选参数 ‘ISO-8601’ 将会以 “yyyy-MM-ddTHH:mm:ss.s{precision}” 的格式解析输入 TIMESTAMP, 例如 “2020-12-30T12:13:14.123” , 以 “yyyy-MM-ddTHH:mm:ss.s{precision}‘Z’” 的格式解析 TIMESTAMP_LTZ, 例如 “2020-12-30T12:13:14.123Z” 且会以相同的格式输出。 |
| json.map-null-key.mode | 选填 | ‘FAIL’ | String | 指定处理 Map 中 key 值为空的方法. 当前支持的值有 ‘FAIL’, ‘DROP’ 和 ‘LITERAL’:Option ‘FAIL’ 将抛出异常,如果遇到 Map 中 key 值为空的数据。Option ‘DROP’ 将丢弃 Map 中 key 值为空的数据项。Option ‘LITERAL’ 将使用字符串常量来替换 Map 中的空 key 值。字符串常量的值由 ‘json.map-null-key.literal’ 定义。 |
| json.map-null-key.literal | 选填 | ‘null’ | String | 当 ‘json.map-null-key.mode’ 是 LITERAL 的时候,指定字符串常量替换 Map 中的空 key 值。 |
| json.encode.decimal-as-plain-number | 选填 | false | Boolean | 将所有 DECIMAL 类型的数据保持原状,不使用科学计数法表示。例:0.000000027 默认会表示为 2.7E-8。当此选项设为 true 时,则会表示为 0.000000027。 |
| decode.json-parser.enabled | 选填 | true | Boolean | JsonParser 是 Jackson 提供的流式读取 JSON 数据的 API。与 JsonNode 方式相比,这种方式读取速度更快,内存消耗更少。同时,JsonParser 在读取数据时还支持嵌套字段的投影下推。该参数默认启用。如果遇到任何不兼容性问题,可以禁用并回退到 JsonNode 方式。 |
五、数据类型映射关系
当前,JSON schema 将会自动从 table schema 之中自动推导得到。不支持显式地定义 JSON schema。
在 Flink 中,JSON Format 使用 jackson databind API 去解析和生成 JSON。
下表列出了 Flink 中的数据类型与 JSON 中的数据类型的映射关系。
| Flink SQL类型 | JSON类型 |
|---|---|
| CHAR/VARCHAR/STRING | string |
| BOOLEAN | boolean |
| BINARY/VARBINARY | string with encoding: base64 |
| DECIMAL | number |
| TINYINT | number |
| SMALLINT | number |
| INT | number |
| BIGINT | number |
| FLOAT | number |
| DOUBLE | number |
| DATE | string with format: date |
| TIME | string with format: time |
| TIMESTAMP | string with format: date-time |
| TIMESTAMP_WITH_LOCAL_TIME_ZONE | string with format: date-time (with UTC time zone) |
| INTERVAL | number |
| ARRAY | array |
| MAP / MULTISET | object |
| ROW | object |
相关文章:
Flink系列之:Table API Connectors之JSON Format
Flink系列之:Table API Connectors之JSON Format 一、JSON Format二、依赖三、创建一张基于 JSON Format 的表四、Format 参数五、数据类型映射关系 一、JSON Format JSON Format 能读写 JSON 格式的数据。当前,JSON schema 是从 table schema 中自动推…...
2018年第七届数学建模国际赛小美赛B题世界杯足球赛的赛制安排解题全过程文档及程序
2018年第七届数学建模国际赛小美赛 B题 世界杯足球赛的赛制安排 原题再现: 有32支球队参加国际足联世界杯决赛阶段的比赛。但从2026年开始,球队的数量将增加到48支。由于时间有限,一支球队不能打太多比赛。因此,国际足联提议改变…...
【为数据之道学习笔记】5-7五类数据主题联接的应用场景
在数字化转型的背景下,华为的数据消费已经不再局限于传统的报表分析,还要支持用户的自助分析、实时分析,通过数据的关联,支持业务的关联影响分析以及对目标对象做特征识别,进行特定业务范围圈定、差异化管理与决策等。…...
得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛
近日,得帆信息创始人兼CEO张桐,作为百度风投被投代表企业创始人受邀出席“向未来,共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表,以及来自国寿资本、中网投、麦顿投资的投资…...
云原生之深入解析减少Docker镜像大小的优化技巧
一、什么是 Docker? Docker 是一种容器引擎,可以在容器内运行一段代码,Docker 镜像是在任何地方运行应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker 使用一个名为 Dockerfile 的文件,Dockerfile 是一个包…...
记一次java for循环改造多线程的操作
背景 今天在开发质量平台时需要获取某些数据,要请求公司某个工程的OpenAPI接口A。此接口为返回通用数据的接口,且接口本身的RT都在2~3秒之间。使用该接口,需要进行两次循环获取,然后对返回数据进行处理组装࿰…...
Java面试整理-Java复制
Java复制 在Java中,复制对象或数据通常涉及不同的场景和方法。以下是几种常见的复制情况及其相关方法: 基本数据类型的复制:基本数据类型(如int, double, char等)在Java中是通过值传递的。当你将一个基本数据类型的值赋给另一个变量时,实际上是创建了一个新的值。 int a …...
wsl kafka的简单应用
安装并配置单机版kafka所需环境 wsl2 环境可用性较高,如下介绍在该环境中安装单机版本kafka的详细过程。 启动命令行工具启动wsl:wsl --user root --cd ~,(以root用户启动,进入wsl后当前路径为~“用户主目录”&#…...
2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序
2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养,适应不同种类、不同阶段的牲畜对空间的不同要求,以保障牲畜安全和健康;与此同时,也要尽量减少空间闲置所…...
Flink系列之:Table API Connectors之Raw Format
Flink系列之:Table API Connectors之Raw Format 一、Raw Format二、示例三、Format 参数四、数据类型映射 一、Raw Format Raw format 允许读写原始(基于字节)值作为单个列。注意: 这种格式将 null 值编码成 byte[] 类型的 null。这样在 ups…...
社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 + 去匿名化技术 + 推理攻击技术 + k-匿名 + 基于聚类的隐私保护算法
社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 去匿名化技术 推理攻击技术 k-匿名 基于聚类的隐私保护算法 写在最前面社交网络隐私泄露用户数据暴露的途径复杂行为的隐私风险技术发展带来的隐私挑战经济利益与数据售卖防范措施 社交网络 用户数据隐私…...
2023大湾区汽车创新大会在深圳坪山开幕
12月15日,2023大湾区汽车创新大会在深圳坪山开幕。 本次大会是由广东省科学技术厅、深圳市发展和改革委员会、深圳市工业和信息化局、中共深圳市新能源和智能网联汽车产业链委员会、坪山区人民政府指导,北京理工大学深圳汽车研究院、广东省大湾区新能源汽…...
Graylog 中日志级别及其对应的数字
在 Graylog 中,日志级别 level 通常使用数字表示,数字越低表示日志级别越高。以下是常见的日志级别及其对应的数字表示: DEBUG(调试):对应数字 7。INFO(信息):对应数字 …...
智能手表上的音频(五):录音
上篇讲了语音通话,本篇讲录音。录音功能就是把录到的音频保存成文件。保存文件的格式支持两种:一是PCM(16K采样)的WAV格式,二是AMR-NB(8k采样)的AMR格式。WAV格式简单:44字节的文件头PCM 数据,示…...
2023.12.17 关于 Redis 的特性和应用场景
目录 引言 Redis 特性 内存中存储数据 可编程性 可扩展性 持久化 支持集群 高可用性 Redis 优势 Redis 用作数据库 Redis 相较于 MySQL 优势 Redis 相较于 MySQL 劣势 Redis 用作缓存 典型场景 Redis 存储 session 信息 Redis 用作消息队列 初心 消息队列的…...
智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社会群体算法4.实验参数设定5.算法结果6.…...
Kotlin 笔记 -- Kotlin 语言特性的理解(二)
都是编译成字节码,为什么 Kotlin 能支持 Java 中没有的特性? kotlin 有哪些 Java 中没有的特性: 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…...
数据结构【1】:数组专题
一、定义 数组是编程中一种强大的数据结构,它允许您存储和操作相同类型元素的集合。在 Python 中,数组是通过数组模块创建的,该模块提供了一个简单的接口来创建、操作和处理数组。 二、创建数组 在 Python 中,可以使用内置的 a…...
【Spring】Spring 事务
Spring 事务 文章目录 Spring 事务1. 简介2. Spring事务管理器3. 基本使用4. 属性剖析5. 声明式事务问题场景5.1 事务不生效5.2 事务不回滚5.3 大事务问题 6. 编程式事务 1. 简介 编程式事务:指手动编写程序来管理事务,即通过编写代码的方式直接控制事务…...
Ubuntu 虚拟机环境,编译AOSP源码
环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…...
3个步骤突破微信小程序渲染瓶颈:pixi-miniprogram的WebGL性能革新实践
3个步骤突破微信小程序渲染瓶颈:pixi-miniprogram的WebGL性能革新实践 【免费下载链接】pixi-miniprogram 一个可运行于微信小程序的PIXI引擎,通过模拟window环境,有些功能小程序无法模拟,就直接修改了PIXI引擎代码,最…...
从RTL到GDSII:用Design Compiler优化时序的关键20个命令详解
从RTL到GDSII:用Design Compiler优化时序的关键20个命令详解 在先进工艺节点下,时序收敛已成为ASIC设计中最具挑战性的环节之一。当我们从RTL代码出发,最终生成满足PPA(性能/功耗/面积)目标的GDSII布局布线文件时&…...
Audio Pixel Studio人声分离应用:KTV原唱提取+伴奏复用创意玩法
Audio Pixel Studio人声分离应用:KTV原唱提取伴奏复用创意玩法 1. 音频处理新体验:从KTV到创意工作室 你是否遇到过这样的情况:在KTV听到一首喜欢的歌,想保存自己的演唱版本,却苦于无法消除原唱?或者想用…...
ESP32开发环境:VS Code与ESP-IDF插件高效配置指南
1. 为什么选择VS Code开发ESP32? 第一次接触ESP32开发时,我尝试过各种开发工具:Arduino IDE、PlatformIO、Eclipse...最后发现VS Code配合ESP-IDF插件才是最佳组合。这个方案不仅免费开源,更重要的是能充分发挥ESP32的全部性能特…...
如何免费构建个人游戏串流服务器:Sunshine开源方案完整指南
如何免费构建个人游戏串流服务器:Sunshine开源方案完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器,让您…...
从MAX30102项目实战出发:解决Keil5编译STM32时ARMCLANG和头文件缺失的连环坑
从MAX30102项目实战解析Keil5编译STM32的深度排坑指南 当你在深夜调试MAX30102血氧传感器时,Keil5突然弹出一连串编译器报错——这种经历对STM32开发者来说绝不陌生。本文将以真实项目为背景,拆解那些官方文档从未提及的编译陷阱。不同于常规操作手册&a…...
Qwen3.5-4B-Claude模型Java微服务集成指南:SpringBoot实战案例
Qwen3.5-4B-Claude模型Java微服务集成指南:SpringBoot实战案例 1. 引言:当大模型遇上微服务 最近在开发企业知识管理系统时,我们遇到了一个典型需求:如何让传统Java微服务架构与前沿的大语言模型无缝集成。经过多次尝试…...
Proteus 8实战:手把手教你搭建ATmega16流水灯仿真,并联动真实代码调试
Proteus 8实战:从零构建ATmega16流水灯仿真系统 在嵌入式开发的学习路径上,仿真工具的价值常常被低估。许多开发者习惯直接上手物理硬件,却在遇到问题时陷入漫长的调试循环。Proteus 8提供的虚拟实验室环境,恰好填补了从理论到实践…...
实测Qwen3-4B:256K超长上下文,处理长文档、写长文真实案例
实测Qwen3-4B:256K超长上下文,处理长文档、写长文真实案例 1. 引言:为什么关注长上下文能力 在日常工作和创作中,我们经常遇到需要处理超长文档的场景:分析上百页的PDF报告、阅读整本电子书、编写长篇技术文档等。传…...
RobotStudio新手必看:5分钟搞定夹取工件程序(附完整代码)
RobotStudio零基础实战:从夹取工件到高效编程的完整指南 第一次打开RobotStudio时,面对复杂的界面和陌生的术语,很多新手会感到无从下手。但别担心,掌握几个核心概念和操作步骤,你就能快速实现基础的夹取工件功能。本文…...
