使用 Google BigQuery 从 JSON 中的多个属性值中提取值
Posted
技术标签:
【中文标题】使用 Google BigQuery 从 JSON 中的多个属性值中提取值【英文标题】:Extract values from more than one attribute value from JSON using Google BigQuery 【发布时间】:2019-05-19 08:57:36 【问题描述】:我在GBQ有一个这样的专栏。
[rank_start: 1, rank_end: 1, prize: unit_type: 'UNIT_TYPE1', units: 50, unit_currency: 'UNIT_CURRENCY1', rank_start: 2, rank_end: 50, prize: unit_type: 'UNIT_TYPE2', units: 20, unit_currency: 'UNIT_CURRENCY2', rank_start: 51, rank_end: 100, prize: unit_type: 'UNIT_TYPE3', units: 10, unit_currency: 'UNIT_CURRENCY3', rank_start: 101, rank_end: 500, prize: unit_type: 'UNIT_TYPE4', units: 5, unit_currency: 'UNIT_CURRENCY4']
我想为 GBQ 中的每个排名范围提取 rank_start、rank_end、unit_type、units、unit_currency 等值。
如果我们只有一个等级范围,即使用 JSON_EXTRACT() 或 JSON_EXTRACT_SCALAR(),我知道该怎么做......我会完成它。
但问题是,我们在 JSON 中拥有的不仅仅是属性值。
谁能帮助我们如何在 GBQ 中做到这一点?
我已经尝试过这样做的粗略方法,即多次用逗号分割,然后用':'分割,然后用''替换''',我根据需要在每次分割时取OFFSET值.
但这会使代码过于笨拙,因为需要进行大量的 REPLACE 和 SPLIT,而且效率低下。
我想看看在 GBQ 中是否有使用上述 JSON 函数执行此操作的方法??
提前致谢!!
【问题讨论】:
【参考方案1】:您可以遍历数组,并使用 JSON_EXTRACT。取决于您希望如何获得结果,是转换的最后一步。以下是您如何做到这一点的示例:
-- Recreating your scenario
WITH my_table AS (
SELECT ['"rank_start": 1, "rank_end": 1, "prize": "unit_type": "UNIT_TYPE1", "units": 50, "unit_currency": "UNIT_CURRENCY1"', '"rank_start": 2, "rank_end": 50, "prize": "unit_type": "UNIT_TYPE2", "units": 20, "unit_currency": "UNIT_CURRENCY2"', '"rank_start": 51, "rank_end": 100, "prize": "unit_type": "UNIT_TYPE3", "units": 10, "unit_currency": "UNIT_CURRENCY3"', '"rank_start": 101, "rank_end": 500, "prize": "unit_type": "UNIT_TYPE4", "units": 5, "unit_currency": "UNIT_CURRENCY4"'] as my_column
)
-- Extracting information
SELECT
(SELECT ARRAY_AGG(CONCAT(
JSON_EXTRACT(myrank, "$['rank_start']"), '-',
JSON_EXTRACT(myrank, "$['rank_end']"), '-',
JSON_EXTRACT(myrank, "$['prize'].unit_type"), '-',
JSON_EXTRACT(myrank, "$['prize'].units"), '-',
JSON_EXTRACT(myrank, "$['prize'].unit_currency")))
FROM UNNEST(my_table.my_column) as myrank ) as fields
FROM
my_table
这是一个输出示例:
Here 是用于处理数组的 BigQuery 文档。
【讨论】:
以上是关于使用 Google BigQuery 从 JSON 中的多个属性值中提取值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google BigQuery 从 JSON 中的多个属性值中提取值
Google BigQuery SQL:从 JSON(列表和数组)中提取数据到列中
无法使用 python 将 JSON 文件从谷歌云存储加载到 bigquery
在 Google Cloud Storage 中设置元数据(从 BigQuery 导出)