You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDb中JSON列数据提取:求类似Redshift的JSON_EXTRACT_PATH_TEXT()函数

DuckDB 替代 Redshift JSON_EXTRACT_PATH_TEXT() 的方案

在 DuckDB 里,你可以用以下几种方式提取 JSON 属性,效果和 Redshift 的 JSON_EXTRACT_PATH_TEXT() 一致:

1. 箭头运算符(最直观)

把 VARCHAR 转成 JSON 后,用 ->/->> 运算符提取:

  • ->:返回 JSON 类型结果
  • ->>:直接返回 VARCHAR 类型结果(和 Redshift 函数返回字符串的行为更匹配)

示例:
假设你有表 user_data,列 json_str 是 VARCHAR 类型,内容为 '{"username": "jesse", "profile": {"email": "jesse@example.com", "age": 28}}'

  • 提取顶层属性:
SELECT CAST(json_str AS JSON)->>'username' AS username FROM user_data;

结果会直接返回字符串 jesse

  • 提取嵌套属性:
SELECT CAST(json_str AS JSON)->'profile'->>'email' AS email FROM user_data;

结果返回 jesse@example.com

2. json_extract_string 函数(与 Redshift 函数语法最接近)

DuckDB 的 json_extract_string() 函数和 Redshift 的 JSON_EXTRACT_PATH_TEXT() 用法几乎一致,直接传入 JSON 对象和属性路径即可:

  • 提取顶层属性:
SELECT json_extract_string(CAST(json_str AS JSON), 'username') AS username FROM user_data;
  • 提取嵌套属性(两种写法都支持):
-- 用点连接路径
SELECT json_extract_string(CAST(json_str AS JSON), 'profile.email') AS email FROM user_data;

-- 按层级传入多个参数(和 Redshift 函数的多参数写法一致)
SELECT json_extract_string(CAST(json_str AS JSON), 'profile', 'email') AS email FROM user_data;

如果你的 JSON 包含数组,还可以用索引提取元素,比如 json_extract_string(CAST(json_str AS JSON), 'hobbies[0]') 提取数组第一个元素。

内容的提问来源于stack exchange,提问作者Jesse McMullen-Crummey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:15:08