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

BigQuery查询含连字符的JSON字段出现未识别名称错误求助

BigQuery查询JSON列含连字符字段的解决办法

在BigQuery里,JSON字段名带连字符时,直接用点语法(.)访问会触发解析错误——因为连字符会被当成减号运算符,导致系统识别不了字段名,出现你遇到的"Unrecognized name"报错。

解决这个问题有两种常用方式:

1. 方括号+引号访问字段

把带特殊字符的字段名用双引号包裹,放在方括号里,替代点语法。比如你示例里的last-updated、processing-timestamp字段,访问方式如下:

SELECT
  value.timestamp,
  value.header.source,
  -- 访问带连字符的processing-timestamp字段
  value.header["processing-timestamp"],
  -- 访问last-updated下的嵌套特殊键
  value.header["last-updated"]["comps/com[name=TorontoCA]/properties/property[name=uptime]"] AS toronto_uptime
FROM `mydataset.test_table`

2. 使用JSON_EXTRACT_SCALAR函数

如果只需要提取字段的标量值(字符串、数字等),可以用JSON_EXTRACT_SCALAR函数,传入JSON列和标准JSON路径即可,路径里的带连字符字段无需额外转义:

SELECT
  JSON_EXTRACT_SCALAR(value, '$.timestamp') AS timestamp,
  JSON_EXTRACT_SCALAR(value, '$.header.source') AS source,
  JSON_EXTRACT_SCALAR(value, '$.header.processing-timestamp') AS processing_timestamp,
  -- 嵌套的特殊键需要用双引号包裹
  JSON_EXTRACT_SCALAR(value, '$.header.last-updated."comps/com[name=TorontoCA]/properties/property[name=uptime]"') AS toronto_uptime
FROM `mydataset.test_table`

另外注意你原查询里的问题:重复写了value.header.source,而且transaction-id字段在你提供的示例JSON里不存在,可能是笔误,需要确认实际字段名是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:04