BigQuery含空格JSON路径提取session_id失败,求正确写法
解决BigQuery中提取带空格键的嵌套JSON值问题
嘿,我刚好碰到过一模一样的问题!你的核心痛点就是JSON键里带空格(也就是Action Target这个键),BigQuery的JSON路径对这种特殊键名有特定的写法要求,我给你捋清楚:
正确的提取语句
最简洁且不容易踩坑的写法是用**反引号(`)**包裹带空格的键名,整个JSON路径用单引号括起来:
json_extract_scalar(data, '$.integrations.`Action Target`.session_id')
另外还有一种符合JSONPath规范的写法,用方括号加双引号,但要注意SQL里的引号嵌套(这种写法有时候容易因为转义出问题,不如反引号直观):
json_extract_scalar(data, '$.integrations["Action Target"].session_id')
帮你排查之前的错误写法
咱们逐个看你试的几种写法为啥不行:
- 第一种:
json_extract_scalar(data, '$.integrations.''Action Target''.session_id')
你这里用双单引号是SQL里转义单引号的方式,但在JSON路径里不适用,BigQuery会把''Action Target''当成路径的一部分,自然解析失败。 - 第二种:
json_extract_scalar(data, '$.integrations.'Action Target'.session_id')
这个属于SQL语法错误了——字符串中间直接插单引号会把语句截断,数据库会把'$.integrations.'当成一个单独的字符串,后面的Action Target会被当成无效的标识符,直接报错。 - 第三种和第四种:
json_extract_scalar(data, '$.integrations["Action Target"].session_id')/json_extract_scalar(data, '$["integrations"]["Action Target"]["session_id"]')
这两个路径本身是符合规范的,但你提供的JSON示例里有个小错误:"Actions Target": {...},后面多了一个逗号,这会导致JSON解析失败!先把这个多余的逗号去掉,再试这两个写法应该就能用了。另外还要确保你的data列是JSON类型,或者是可以被BigQuery解析为JSON的字符串类型。
最后提醒下:如果你的JSON数据里经常有带空格的键,反引号的写法是BigQuery里最稳妥的选择哦~
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

