首页/新闻资讯/正文详情

5 个可复制的 SQL 示例,讲透 Apache Doris JSON 函数查询

发布时间:2026/11/4 15:34:35 来源:云帆数科 栏目:资讯中心
5 个可复制的 SQL 示例,讲透 Apache Doris JSON 函数查询
5 个可复制的 SQL 示例讲透 Apache Doris JSON 函数查询【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris先跑起来原理后面讲。下面这条 SQL 可以直接在任意 Apache Doris 客户端里执行它做的事情很简单从一段 JSON 字符串里取出用户名字。SELECT get_json_string({user:{name:Alice,age:30}}, $.user.name); -- 返回: AliceApache Doris 的 JSON 函数围绕一个核心约定工作所有函数都接收一段 JSON 和一条 JSON 路径按路径定位字段后返回结果。本文带你走完跑通 → 理解 → 优化三步覆盖 Doris 查询 JSON 字段最常用的几个函数。3 分钟跑通 Doris JSON 提取这一节解决字段到底怎么取的问题也是 get_json_string 用法的核心。get_json_string的第一个参数是 JSON字符串字面量或 JSON 列第二个参数是路径。路径以$开头$代表整段 JSON 的根节点。SELECT get_json_string({user:{name:Alice,age:30}}, $.user) AS user_obj, get_json_string({user:{name:Alice,age:30}}, $.user.name) AS user_name; -- user_obj - {name:Alice,age:30} -- user_name - Alice这段代码展示了两种结果形态路径指向子对象时返回的是序列化后的 JSON 文本指向叶子字段时返回原始值。这也是新手最常困惑的地方——取整段和取叶子的写法一样只是路径深浅不同。Doris JSON Path 语法. 、[] 、引号与通配符这一节解决路径怎么写才对的问题四个记号基本覆盖所有场景记号含义示例路径结果.分隔对象层级$.user.nameAlice[n]数组下标从 0 开始$.actions[1].typepurchase 包裹含.等字符的字段名$.order.id字段名就叫order.id1001[*]取数组全部元素$.actions[*].type[click,purchase]数组下标越界和字段不存在都不会报错而是返回 NULL这一点和 MySQL 的-行为一致后文会专门处理。三个核心函数返回值差在哪这一节解决同一份数据不同函数返回值不一样的问题。Doris 内置函数注册表见 doris_builtins_functions.pyBE 侧路径解析与匹配逻辑见 json_functions.cpp。函数作用示例返回类型注意点get_json_string(json, path)提取字段为文本get_json_string({k1:v1}, $.k1)STRING路径不存在返回 NULLget_json_int(json, path)提取数值get_json_int({age:30}, $.age)INT值非整数时失败json_extract(json, path, ...)提取原始值可传多路径json_extract({arr:[1,2]}, $.arr[0])STRING嵌套结构以 JSON 文本返回json_length(json)顶层对象成员或数组元素个数json_length([1,2,3])INT替代旧版 json_array_length三者的区别一句话总结get_json_string把结果压平为文本get_json_int直接给你数值json_extract保留原始值且支持一次传多条路径。做聚合比如按城市分组计数时优先用get_json_int或json_extract避免字符串再转型。实战用户行为埋点日志完整场景这一节给出一套可复制执行的建表加查询模拟真实的埋点表。event_data用 JSON 列存原始埋点user_id冗余为独立列。CREATE TABLE IF NOT EXISTS event_log ( event_time DATETIME NOT NULL, user_id BIGINT NOT NULL, event_data JSON NULL ) ENGINEOLAP DUPLICATE KEY(event_time, user_id) DISTRIBUTED BY HASH(user_id) BUCKETS 4 PROPERTIES (replication_num 1);这张表特意把高频过滤字段user_id做成普通列后面性能部分会解释原因。查询按取字段、取数组、数长度、补默认值递进SELECT user_id, get_json_string(event_data, $.action.type) AS action_type, get_json_string(event_data, $.page.name) AS page_name FROM event_log LIMIT 10;嵌套字段、数组元素、数组长度一条查询里都能取到路径写法就是上一节表格的直接套用。SELECT IFNULL(get_json_string(event_data, $.device.os), unknown) AS os FROM event_log;常见错误排查这一节解决结果和预期对不上的问题先给结论再给现象取出来是 NULL但字段明明存在先核对路径大小写和拼写再确认下标是否越界。Doris 对这两类情况都静默返回 NULL不会抛错。字段名本身带.或空格必须用双引号整体包裹如$.order.id。嵌套 JSON 取出来带引号返回的是序列化文本属正常行为需要时再套一层函数提取。想统计数组长度当前版本内置函数里已经没有json_array_length用json_length代替两者语义一致。大 JSON 查询慢四条优化建议这一节解决Doris 提取 JSON 慢的问题。JSON 的解析成本集中在按路径遍历这一步优化思路就是减少遍历次数和遍历深度高频字段冗余成独立列。像本例的user_id入库时用 JSON 函数提取一次落列之后 WHERE/JOIN 走列数据不再碰 JSON。压平层级少用多层路径。每多一层路径就多一次遍历宽而浅的 JSON 结构通常比窄而深的更好查。JSONB 列做二次查询。Doris 的 JSON 解析基于 RapidJSON 与 simdjson 实现JSONB 列一次解析、多次提取适合反复取不同字段的场景。先定位扫描量再谈函数本身。查询慢先看执行计划里的扫描行数把过滤条件提前往往比纠结函数选择更有效。总结get_json_string取文本、json_extract取原始值、json_length数长度配合$路径里.、[]、 、[*]四个记号就能覆盖绝大多数 Doris 半结构化数据查询NULL 一律用IFNULL兜底慢查询优先做字段冗余和压平结构。更完整的函数清单可以直接查 doris_builtins_functions.py实现细节在 json_functions.cpp。【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Waydroid 3 步跑通:Linux 容器启动 Android
Waydroid 3 步跑通:Linux 容器启动 Android

Waydroid 3 步跑通:Linux 容器启动 Android 【免费下载链接】waydroid Waydroid uses a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/wa/waydroid Waydroid 用容器在… · 2026/11/4 15:34:35

SAM 3 微调完整指南:用你自己的数据训练一个领域分割专家
SAM 3 微调完整指南:用你自己的数据训练一个领域分割专家

SAM 3 微调完整指南:用你自己的数据训练一个领域分割专家 【免费下载链接】sam3 The repository provides code for running inference and finetuning with the Meta Segment Anything Model 3 (SAM 3), links for downloading the trained model checkpoints, and… · 2026/11/4 15:34:35

30-seconds-of-interviews 里的 debouncing:为什么你的搜索框还在疯狂发请求?
30-seconds-of-interviews 里的 debouncing:为什么你的搜索框还在疯狂发请求?

30-seconds-of-interviews 里的 debouncing:为什么你的搜索框还在疯狂发请求? 【免费下载链接】30-seconds-of-interviews A curated collection of common interview questions to help you prepare for your next interview. 项目地址: https://gitc… · 2026/11/4 15:34:35

wxappUnpacker小程序反编译实战指南:解包原理与避坑技巧
wxappUnpacker小程序反编译实战指南:解包原理与避坑技巧

简介:这是一套面向小程序开发者与安全研究人员的微信小程序反编译工具集wxappUnpacker,专用于逆向解析小程序主包与分包,解决封闭环境下无法查看原始逻辑、调试业务流程及开展安全审计的痛点,适用于代码学习、漏洞分析、性能优化等… · 2026/11/4 17:05:58

经典算法实战:从八皇后到拓扑排序的深度解析
经典算法实战:从八皇后到拓扑排序的深度解析

1. 算法问题解析与实战:从八皇后到拓扑排序 今天我想分享几个经典的算法问题及其解决方案,这些问题涵盖了深度优先搜索、动态规划、字符串处理和拓扑排序等多个算法领域。作为一名算法工程师,我在日常刷题和面试准备过程中发现,这… · 2026/11/4 17:05:58

podofo-0.9.6 for VS2013:Windows C++ PDF底层开发开箱即用包
podofo-0.9.6 for VS2013:Windows C++ PDF底层开发开箱即用包

简介:本资源为PoDoFo 0.9.6 PDF开源库的VS2013完整编译成果包,面向C开发者、PDF文档处理工具开发者及Windows平台底层库集成工程师,解决PDF解析、生成、编辑等核心功能在Visual Studio环境下难以直接编译部署的痛点。压缩包共2000个文件&… · 2026/11/4 17:05:58

小龙虾养殖自动化系统配置与优化指南
小龙虾养殖自动化系统配置与优化指南

1. 小龙虾养殖系统概述小龙虾养殖作为近年来快速发展的水产养殖项目,其自动化控制系统配置直接关系到养殖效益。一套完整的小龙虾养殖系统通常包含水质监测、自动投喂、环境调控三大核心模块。我在江苏、湖北等地参与过多个规模化养殖场的系统部署,发现合… · 2026/11/4 17:05:58

GBase 8c数据库count函数使用详解与优化
GBase 8c数据库count函数使用详解与优化

1. GBase 8c数据库count函数深度解析 作为一名长期使用GBase 8c数据库的开发者,我发现count函数虽然简单,但很多同行在实际使用中仍然存在不少误区。今天我就结合自己多年的实战经验,详细剖析count(*)、count(1)和count(列名)这三种写法的异同… · 2026/11/4 17:05:58

鸿蒙OS金融App全栈优化:安全与性能实战
鸿蒙OS金融App全栈优化:安全与性能实战

1. 项目背景与核心价值 金融理财类App作为直接涉及用户资金安全的高敏感度应用,对系统稳定性、响应速度和数据安全有着近乎苛刻的要求。这个鸿蒙全栈项目正是针对金融行业特殊需求打造的解决方案,覆盖了从底层系统适配到上层业务逻辑的全链路优化。 在传… · 2026/11/4 17:04:57

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码