Pre*_*nde 1 python google-bigquery google-cloud-platform google-cloud-dataflow google-cloud-functions
这是我的输入文件的样子:
{"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"}}
Run Code Online (Sandbox Code Playgroud)
在我的数据流管道中,我如何动态确定每行中存在哪些字段以符合 BigQuery 表架构。例如,在第 2 行中,Street丢失了。我希望Address.StreetBigQuery 中的列条目为"N/A"ornull并且不希望管道因架构更改或丢失数据而失败。
在使用 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
Run Code Online (Sandbox Code Playgroud)
结果如下
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |