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

如何在Google BigQuery中提取JSON对象中指定列存储键对应的值

从JSON列提取动态指定键对应值的解决方案

问题说明

现有一张表,其中C1列存储JSON对象,C2列存储需要提取的键名称,目标是从C1的JSON对象中提取C2指定键对应的值。尝试的SQL语句均报错,报错信息为:JSONPath必须是字符串或查询参数

针对不同数据库的解决方法

MySQL/MariaDB

使用JSON_EXTRACT结合CONCAT构造动态JSON路径,并用JSON_UNQUOTE去除结果的引号:

SELECT JSON_UNQUOTE(JSON_EXTRACT(C1, CONCAT('$.', C2))) AS extracted_value
FROM MY_TABLE;

或使用更简洁的->>运算符(等价于JSON_UNQUOTE(JSON_EXTRACT(...))):

SELECT C1->>CONCAT('$.', C2) AS extracted_value
FROM MY_TABLE;

PostgreSQL

PostgreSQL的JSON/JSONB类型支持直接用列作为键提取值,使用->>运算符即可:

-- 适用于json类型列
SELECT C1->>C2 AS extracted_value
FROM MY_TABLE;

-- 适用于jsonb类型列(推荐使用jsonb获得更好性能)
SELECT C1->>C2 AS extracted_value
FROM MY_TABLE;

BigQuery

使用JSON_EXTRACT_SCALAR函数配合动态拼接的路径:

SELECT JSON_EXTRACT_SCALAR(C1, CONCAT('$.', C2)) AS extracted_value
FROM MY_TABLE;

错误原因说明

之前尝试的语句失败,是因为部分数据库的JSON_EXTRACT函数要求路径参数为字符串常量或支持动态表达式的格式,直接传入列或未正确处理的拼接表达式不符合函数参数要求,需要根据数据库特性选择对应的运算符或函数来实现动态键提取。

内容的提问来源于stack exchange,提问作者ANKIT VASHISTHA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:05