在达梦数据库(DM Database)中,将 JSON 数据转换为表格形式可以使用内置的 JSON_TABLE 函数。以下是详细步骤和示例:


1. 核心函数:JSON_TABLE

JSON_TABLE 用于将 JSON 数据解析为关系表结构,支持从 JSON 对象或数组中提取数据。

语法:
SELECT *
FROM JSON_TABLE(json_doc,         -- JSON 字符串或 JSON 列path              -- JSON 路径(指定要解析的部分)COLUMNS (列名1 数据类型 PATH '字段路径1' [ERROR | NULL ON ERROR],列名2 数据类型 PATH '字段路径2' [TRIM | DEFAULT 默认值 ON EMPTY],... )
) AS 别名;

2. 示例演示

示例 1:解析 JSON 数组

假设 JSON 数据如下:

[{"id": 1, "name": "Alice", "age": 25},{"id": 2, "name": "Bob", "age": 30}
]

查询语句:

SELECT *
FROM JSON_TABLE('[{"id":1,"name":"Alice","age":25},{"id":2,"name":"Bob","age":30}]','$[*]'  -- 解析根数组的所有元素COLUMNS (id INT PATH '$.id',name VARCHAR(50) PATH '$.name',age INT PATH '$.age')
) AS jt;

结果:

IDNAMEAGE
1Alice25
2Bob30

示例 2:解析嵌套 JSON

假设 JSON 数据:

{"dept": "IT","employees": [{"id": 101, "name": "Tom"},{"id": 102, "name": "Jerry"}]
}

查询语句:

SELECT *
FROM JSON_TABLE('{"dept":"IT","employees":[{"id":101,"name":"Tom"},{"id":102,"name":"Jerry"}]}','$.employees[*]'  -- 解析 employees 数组COLUMNS (dept VARCHAR(10) PATH '$.dept',  -- 注意:此处需用根路径id INT PATH '$.id',name VARCHAR(50) PATH '$.name')
) AS jt;

修复路径后的正确写法:

SELECT jt.*,JSON_VALUE(原JSON字段, '$.dept') AS dept  -- 额外提取部门
FROM JSON_TABLE('{"dept":"IT","employees":[{"id":101,"name":"Tom"},{"id":102,"name":"Jerry"}]}','$.employees[*]'COLUMNS (id INT PATH '$.id',name VARCHAR(50) PATH '$.name')
) AS jt;

3. 处理空值/错误

  • NULL ON EMPTY:路径不存在时返回 NULL
  • DEFAULT 值 ON EMPTY:路径不存在时返回默认值
  • ERROR ON ERROR:转换错误时报错(默认行为)
示例:
SELECT *
FROM JSON_TABLE('[{"id":1,"score":"90"},{"id":2}]','$[*]'COLUMNS (id INT PATH '$.id',score INT PATH '$.score' DEFAULT -1 ON EMPTY  -- 缺失时返回 -1)
) AS jt;

结果:

IDSCORE
190
2-1

4. 从表中读取 JSON 列

若 JSON 数据存储在表的列中(如 user_data JSON):

SELECT jt.*
FROM your_table,
JSON_TABLE(your_table.json_column,  -- 直接引用 JSON 列'$.employees[*]'COLUMNS (id INT PATH '$.id',name VARCHAR(100) PATH '$.name')
) AS jt;

5. 复杂路径处理

解析多层嵌套 JSON:
{"project": "X","tasks": [{"task_id": 1,"details": {"owner": "Amy", "priority": "high"}}]
}

查询:

SELECT *
FROM JSON_TABLE('{"project":"X","tasks":[{"task_id":1,"details":{"owner":"Amy","priority":"high"}}]}','$.tasks[*]'COLUMNS (project VARCHAR(10) PATH '$.project',task_id INT PATH '$.task_id',owner VARCHAR(20) PATH '$.details.owner',priority VARCHAR(10) PATH '$.details.priority')
) AS jt;

注意事项:

  1. 路径语法:使用 $ 表示根,. 访问属性,[*] 遍历数组。
  2. 版本兼容:确保达梦数据库版本支持 JSON_TABLE(DM 8.0 及以上通常支持)。
  3. 性能:处理大 JSON 时注意性能,避免全表扫描。

通过以上方法,可灵活地将 JSON 数据转换为表格结构,便于 SQL 查询和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915451.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915451.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915451.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A316-1926-V1 USB多路高清音频解码器模组技术解析

随着数字音频技术的不断发展,高品质音频解决方案的需求日益增长。本文将介绍一款基于XMOS技术的高性能USB音频解码器模组——A316-1926-V1,这是一款专为高清音频应用设计的专业模组。核心技术与特性A316-1926-V1是一款集成了多项先进技术的USB多路高清音…

.NET 8 中的 KeyedService

.NET 8 中的 KeyedService:新特性解析与使用示例 一、引言 在 .NET 8 的 Preview 7 版本中,引入了 KeyedService 支持。这一特性为开发者提供了按名称(name)获取服务的便利,在某些场景下,开发者无需再自行…

Paimon对比基于消息队列(如Kafka)的传统实时数仓方案的优势

弊端:数据重复 -> 优势:Paimon 主键表原生去重原方案弊端 (Kafka)问题: 消息队列(Kafka)是仅支持追加(Append-Only)的日志流。当 Flink 作业发生故障恢复(Failover)或业务逻辑迭代…

Linux Shell 命令 + 项目场景

shell 命令1. 基础文件操作命令1.1 ls - 列出目录内容1.2 find - 文件搜索2. 版本控制命令2.1 git - 版本控制系统2.2 高级 Git 操作3. 文本搜索命令3.1 grep - 文本搜索3.2 高级搜索技巧4. Android 构建系统命令4.1 source - 加载环境变量4.2 lunch - 选择构建目标4.3 m - And…

A316-Mini-V1:超小尺寸USB高清音频解码器模组技术探析

引言 随着便携式音频设备的普及,对小型化、高性能音频解决方案的需求日益增长。本文将介绍一款极致小型化的高性能USB音频解码器模组——A316-Mini-V1,这是一款基于XMOS XU316芯片的微型音频处理模组。产品概述 A316-Mini-V1是一款专为小尺寸产品设计的M…

低代码平台买saas好还是私有化好

选择低代码平台采用SaaS还是私有化部署,应根据企业具体情况考虑安全性、成本控制、维护难度、扩展需求等因素。 其中,安全性是决定企业选择的重要因素之一。私有化部署意味着企业能够完全掌控数据和系统的安全管理,更适合对数据安全要求极高的…

基于SkyWalking的微服务APM监控实战指南

基于SkyWalking的微服务APM监控实战指南 1. 业务场景描述 随着微服务在生产环境中大规模应用,系统链路复杂、实例弹性伸缩、灰度发布等特点都给性能监控和问题诊断带来了新的挑战。传统的单机或轻量级监控方案已无法满足微服务环境下的全链路、分布式追踪和实时告警…

Python 进阶(五): Excel 基本操作

目录 1. 概述2. 写入 2.1 使用 xlwt2.2 使用 XlsxWriter 3. 读取4. 修改 1. 概述 在现实中,很多工作都需要与数据打交道,Excel 作为常用的数据处理工具,一直备受人们的青睐,而大部分人都是手动操作 Excel,如果数据量…

32、鸿蒙Harmony Next开发:使用动画-动画概述

​​​属性动画转场动画粒子动画组件动画动画曲线动画衔接动画效果帧动画(ohos.animator) UI(用户界面)中包含开发者与设备进行交互时所看到的各种组件(如时间、壁纸等)。属性作为接口,用于控制…

【STM32】485接口原理

485 通信实验 这篇文章是对 RS485通信 的原理、硬件连接、接口芯片(SP3485)、总线结构等都有详尽的说明。我们在此处进行清晰有条理的讲解整理,便于学习和实验操作。 在了解485接口通信原理之前,我们先复习一下串口:串…

亚马逊二审攻防全攻略:预防、应对与长效合规之道

当店铺收到二审通知,不少卖家会陷入焦虑与慌乱,只要掌握科学的预防策略与应对方法,不仅能降低二审风险,即便遭遇审核也能顺利突围。一、未雨绸缪:预防二审的四大核心策略夯实资料真实性根基资料的真实性与一致性是亚马…

添加状态信息

1首先在数据字典里加入可借阅和不可借阅状态2导入数据字典export default {name: "Book",dicts: [book_borrow_status],//导入数据字典data() {return {formData: {name: null,author: null,num: null,price: null,typeId: null,status:null//新加状态属性},3设置状态…

234、回文链表

题目:解答:对143稍作修改即可,判断两个指针指向的是否一直相等。终止条件为不等或者head2nullptrclass Solution { public:ListNode *rev(ListNode *head){ListNode *cur head;ListNode *pre nullptr;while(cur){ListNode * nxt cur->n…

第15次:商品搜索

实现用户在页面可自由搜索某个商品的功能。 第1步:准备搜索功能用到的库 pip install whoosh pip install jieba pip install django-haystackwhoosh是搜索引擎,对英文支持较好,但对中文效果不佳。jieba为中文分词库,弥补whoosh…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——0. 博客系列大纲

目录【《使用Qt Quick从零构建AI螺丝瑕疵检测系统》系列简介】第一部分:基础入门与项目启航第二部分:核心视觉算法开发第三部分:模拟完整工业流程第四部分:软件打包与高级特性【《使用Qt Quick从零构建AI螺丝瑕疵检测系统》系列简…

【Python】Python中的循环语句

循环语句导读一、基本概念1.1 循环语句的执行流程1.2 循环语句的分类二、while语句三、for语句四、break与continue五、死循环六、循环中的else语句七、range()函数结语导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们…

docker|Linux|以centos基础镜像为基础制作nmap专用镜像(镜像瘦身计划)

一、 最近由于某些场景下需要使用nmap,而nmap的rpm安装包在源目标机器上使用有软件冲突,因此,计划使用docker部署nmap 具体计划为 1、使用centos的基础镜像,在有网环境下,通过配置阿里云的yum仓库,在cen…

基于单片机公交车报站系统/报站器

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览​​​​​​​ 概述 公交车自动报站系统利用单片机作为核心控制器,结合GPS/北斗定位模块、语音存…

Oracle 体系结构学习

1 认识Oracle后台进程Oracle数据库后台进程是Oracle数据库管理系统(DBMS)的核心组件,它们在后台运行,负责数据库的各种管理和维护任务。主要包括以下几种:SMON (System Monitor)SMON负责数据库的恢复操作,如…

构建一种安全的老式测试仪,用于具有限流灯泡,模拟仪表和可变输出的交流设备

这个复古电路和电源测试仪的想法来自我需要一个简单,安全,时尚的工具来测试和控制工作台上的线路供电设备。商业解决方案要么太笨重,太昂贵,要么缺乏我喜欢的触觉和模拟魅力。所以我决定自己造一个。这个测试仪的核心是一个老式的…