选择/提取 JSON 元素时的高效 BigQuery

Posted

技术标签:

【中文标题】选择/提取 JSON 元素时的高效 BigQuery【英文标题】:Efficient BigQuery'ing when selecting/extracting a JSON element 【发布时间】:2021-04-06 21:34:03 【问题描述】:

替代标题:在提取 JSON 元素之前对表进行子集化

我需要在 BigQuery 上对一个非常大的表进行子集化。我将过滤(加入)以实现此子集的列是不是 JSON 数组。但是,我想在之后从 JSON 数组中包含/提取补充列。无论我如何重新排列查询,当我包含提取的 JSON 元素时,它似乎都会处理完整(即非子集)表。

作为 MWE,考虑一个我正在从 @felipe-hoffa here 改编/借用的查询:

SELECT id
FROM `githubarchive.day.20180830` 
WHERE type='PushEvent' 
AND id='8188163772'

此查询处理 33.9 MB。

但是,如果我从 JSON 数组中添加一个提取的列(同样,我不是子集):

SELECT id, JSON_EXTRACT_SCALAR(payload, '$.size') AS size
FROM `githubarchive.day.20180830` 
WHERE type='PushEvent' 
AND id='8188163772'

...然后进程图跳转到 3.5 GB(即它正在查询整个表)。

知道如何更有效地做到这一点并降低每次查询的成本吗?

【问题讨论】:

只要你接触到tat专栏payload——即使你只使用了一小部分,你也会付出代价!唯一的方法是考虑分区/集群... 谢谢@MikhailBerlyant,那是我的恐惧!您介意将您的评论移至答案,我会将其标记为已接受的解决方案吗? 【参考方案1】:

只要您接触到该列payload - 即使您只使用了其中的一小部分,您也会为它付费!唯一的方法是考虑分区/集群...

【讨论】:

以上是关于选择/提取 JSON 元素时的高效 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

从 json 文件 bigquery 中提取 Json Array 元素

从 postgres 表中提取 json 数组给出错误:无法从标量中提取元素

如何在 for 循环中提取 JSON 文件的元素

spray-json

从spark中的json中的数组中提取Json

如何从配置单元表中的json字符串中提取数组元素?