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

BigQuery中JSON_EXTRACT为何被弃用?与JSON_QUERY有何差异?

BigQuery中JSON_EXTRACT被弃用的原因及与JSON_QUERY的差异

一、JSON_EXTRACT被弃用的原因

  1. 对齐SQL标准:BigQuery一直在推进与SQL:2016标准的兼容性,JSON_QUERY是该标准定义的官方JSON查询函数,而JSON_EXTRACT是BigQuery早期自研的非标准函数,弃用它是为了让函数体系更符合行业通用规范,降低跨库学习成本。
  2. 功能被更清晰的函数替代:JSON_EXTRACT的功能可以被JSON_QUERY(提取JSON片段)和JSON_VALUE(提取不带引号的标量值)完全覆盖,拆分后的函数职责更明确,能减少用户对返回值格式的混淆(比如之前很多人困扰于JSON_EXTRACT返回的带引号字符串处理)。
  3. 简化函数体系:移除旧的非标准函数,能让BigQuery的JSON函数家族更简洁,官方可以更集中地维护标准函数,避免同一功能存在多个实现导致的文档和维护成本增加。

二、JSON_EXTRACT与JSON_QUERY的核心差异

  • 标准兼容性:JSON_QUERY遵循SQL:2016国际标准,在SQL Server、Oracle等支持标准SQL的数据库中也有类似实现;而JSON_EXTRACT是BigQuery独有的旧函数,不具备跨库通用性。
  • 语义与用途:
    • JSON_EXTRACT定位模糊,既可以提取单个标量值(返回带双引号的字符串),也能提取嵌套JSON结构,但语义上没有明确区分;
    • JSON_QUERY专门用于提取JSON片段(包括对象、数组、单个值),返回结果始终是合法的JSON格式字符串,语义更清晰,官方推荐用它处理任何需要保留JSON结构的提取场景。
  • 行为细节:
    • 提取标量值时,两者都会返回带双引号的字符串(比如JSON_EXTRACT('{"name":"Bob"}', '$.name')和JSON_QUERY('{"name":"Bob"}', '$.name')都返回"Bob");
    • 处理复杂嵌套结构时,JSON_QUERY的行为更符合标准预期,比如提取数组会完整返回["a","b"]这类结构,而JSON_EXTRACT虽然结果相同,但官方不再推荐用它做这类操作。
  • 函数体系适配:JSON_QUERY和JSON_VALUE(或JSON_EXTRACT_SCALAR)形成了明确分工——前者处理JSON结构,后者处理无引号的标量值,而JSON_EXTRACT的存在会打破这种清晰分工,导致用户误用。

内容的提问来源于stack exchange,提问作者Kenneth Truong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:54:57