如何在将JSON文件加载到BigQuery表中时管理/处理架构更改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在将JSON文件加载到BigQuery表中时管理/处理架构更改相关的知识,希望对你有一定的参考价值。

这是我的输入文件的样子:

{"Id": 1, "Address": {"Street":"MG Road","City":"Pune"}}
{"Id": 2, "Address": {"City":"Mumbai"}}
{"Id": 3, "Address": {"Street":"XYZ Road"}}
{"Id": 4}
{"Id": 5, "PhoneNumber": 12345678, "Address": {"Street":"ABCD Road", "City":"Bangalore"}}

在我的数据流管道中,我如何动态确定每行中存在哪些字段以遵守BigQuery表模式。例如,在#2行中,Street丢失了。我希望BigQuery中的列Address.Street的条目是"N/A"null,并且不希望管道因架构更改或丢失数据而失败。

在使用Python编写BigQuery之前,如何在数据流作业中处理此逻辑?

答案

我建议只使用line类型的一个字段string将数据写入临时表

完成将数据带到BigQuery临时表后 - 现在您可以应用模式逻辑并将临时表中的数据查询到最终表

下面的示例是关于如何在一个字段中对整个行应用模式逻辑的BigQuery Standard SQL

#standardSQL
WITH t AS (
  SELECT '{"Id": 1, "Address": {"Street":"MG Road","City":"Pune"}}' line UNION ALL
  SELECT '{"Id": 2, "Address": {"City":"Mumbai"}}' UNION ALL
  SELECT '{"Id": 3, "Address": {"Street":"XYZ Road"}}' UNION ALL
  SELECT '{"Id": 4}  ' UNION ALL
  SELECT '{"Id": 5, "PhoneNumber": 12345678, "Address": {"Street":"ABCD Road", "City":"Bangalore"}}' 
)
SELECT
  JSON_EXTRACT_SCALAR(line, '$.Id') id,
  JSON_EXTRACT_SCALAR(line, '$.PhoneNumber') PhoneNumber,
  JSON_EXTRACT_SCALAR(line, '$[Address].Street') Street,
  JSON_EXTRACT_SCALAR(line, '$[Address].City') City 
FROM t  

结果如下

Row id  PhoneNumber Street      City     
1   1   null        MG Road     Pune     
2   2   null        null        Mumbai   
3   3   null        XYZ Road    null     
4   4   null        null        null     
5   5   12345678    ABCD Road   Bangalore      

以上是关于如何在将JSON文件加载到BigQuery表中时管理/处理架构更改的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云存储中的 json 文件加载到 bigquery 表中

如何将特定日期格式加载到 BigQuery

有没有办法跟踪在将 ndjson 文件加载到 Bigquery 时允许的所有不良记录

Python 中的 Bigquery:如何将查询结果放入表中?

GCP将数据作为字符串从GCS中的CSV文件加载到BigQuery表中

使用 UI 将 JSON 加载到 Bigquery 时出错