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

Google BigQuery No Matching Signature Error报错及JSON字符串提取需求

解决方案

1. 截取Column_A的区域后缀

想从project783/north这类字符串里提取north这种后缀,直接用SPLIT拆分后取数组第二个元素就行(BigQuery数组索引从0开始):

SELECT SPLIT(Column_A, '/')[OFFSET(1)] AS region
FROM your_table

你之前碰到的No matching signature for function SPLIT报错,大概率是误把ARRAY类型的参数传给了SPLIT——这个函数只接受STRING类型输入,确保传的是原始的Column_A字符串就没问题。

2. 提取Column_B中分数最高的运动项目

Column_B是存键值对的JSON字符串(比如{"跑步":85, "游泳":92, "篮球":78}),得先解析JSON,拆成键值对行,再筛选最大值对应的项目:

WITH parsed_data AS (
  SELECT
    Column_A,
    JSON_PARSE(Column_B) AS json_data
  FROM your_table
),
key_value_pairs AS (
  SELECT
    Column_A,
    key AS sport,
    CAST(json_data[key] AS INT64) AS score
  FROM parsed_data,
    UNNEST(OBJECT_KEYS(json_data)) AS key
)
SELECT
  SPLIT(Column_A, '/')[OFFSET(1)] AS region,
  sport AS top_sport
FROM key_value_pairs
QUALIFY ROW_NUMBER() OVER (PARTITION BY Column_A ORDER BY score DESC) = 1

核心逻辑说明

  • JSON_PARSE把STRING类型的JSON转成JSON对象,比JSON_EXTRACT更适合遍历整个键值对(后者只适合提取单个字段)
  • OBJECT_KEYS(json_data)拿到JSON里所有的运动项目键,配合UNNEST把每个键值对拆成单独的行
  • QUALIFY加ROW_NUMBER(),按每个Column_A分组,直接取分数最高的那行运动项目

整合后的完整查询

把两个需求合并成一个查询:

WITH parsed_json AS (
  SELECT
    Column_A,
    JSON_PARSE(Column_B) AS sport_scores
  FROM your_table
),
sport_details AS (
  SELECT
    Column_A,
    sport_name,
    CAST(sport_scores[sport_name] AS INT64) AS score
  FROM parsed_json,
    UNNEST(OBJECT_KEYS(sport_scores)) AS sport_name
)
SELECT
  SPLIT(Column_A, '/')[OFFSET(1)] AS region,
  sport_name AS highest_score_sport
FROM sport_details
QUALIFY ROW_NUMBER() OVER (PARTITION BY Column_A ORDER BY score DESC) = 1

常见坑排查

  • 要是还报SPLIT的错:检查Column_A是不是真的STRING类型,如果是ARRAY类型,得先转成STRING(比如用ARRAY_TO_STRING(Column_A, '/'),但按你描述应该是单个字符串)
  • 要是JSON解析报错:确认Column_B的JSON格式合法,比如引号、逗号都没写错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:47:16