BigQuery JSON 字段提取

Posted

技术标签:

【中文标题】BigQuery JSON 字段提取【英文标题】:BigQuery JSON Field Extraction 【发布时间】:2019-03-05 01:02:02 【问题描述】:

我将以下 JSON 有效负载存储在 BQ 表的单个字符串列中。


"customer" : "ABC Ltd",
"custom_fields" : [
     
      "name" : "DOB",
      "value" : "2000-01-01"
     ,
     
      "name" : "Account_Open_Date",
      "value" : "2019-01-01"
     
]

我想弄清楚如何将 custom_fields 名称值对提取为列?

如下所示。

| Customer.name    | Customer.DOB    | Customer.Account_Open_Date |

| ABC Ltd          | 2000-01-01      | 2019-01-01                 |

【问题讨论】:

【参考方案1】:

可以使用json-functions,如

JSON_EXTRACT(json_string_expr, json_path_string_literal)

你的情况是

SELECT 
JSON_EXTRACT(json_text, '$.customer') as Customer.Name,
JSON_EXTRACT(json_text, '$.custom_fields[0].value') as Customer.DOB,
JSON_EXTRACT(json_text, '$.custom_fields[1].value') as Customer.Account_Open_Date

【讨论】:

我之前确实看过这个,但我希望通过不对列名进行硬编码来使其更通用。无论如何我们可以根据“名称”字段派生列名吗? 你可以试试 unset json array unest($.custom_fields[].value) ***.com/questions/52120182/… 或者你必须写一些UDF。

以上是关于BigQuery JSON 字段提取的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery json 函数 - 如果 json 字符串格式不正确,则无法提取所有值

Bigquery JSON 提取函数

Bigquery:是不是有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?

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

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

BigQuery 从日期字段中提取星期作为日期范围