達夢數據庫JSON_TABLE使用說明

在達夢數據庫(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負責數據庫的恢復操作,如…

構建一種安全的老式測試儀,用于具有限流燈泡,模擬儀表和可變輸出的交流設備

這個復古電路和電源測試儀的想法來自我需要一個簡單,安全,時尚的工具來測試和控制工作臺上的線路供電設備。商業解決方案要么太笨重,太昂貴,要么缺乏我喜歡的觸覺和模擬魅力。所以我決定自己造一個。這個測試儀的核心是一個老式的…