我有一个BigQuery表,它的REPEATED字段由结构化数据(RECORD)组成,结构化数据(RECORD)由两个键组成:KEY和VALUE。它看起来像这样:
[{"KEY":"TESTING_FLAG", "VALUE": "TRUE"},{"KEY":"THRESHOLD", "VALUE": "10"}]
字符串
在BigQuery中,模式如下所示:
我编写了一个Apache Beam java作业,它应该通过将其作为parquet写入GCS来处理等效字段,并在parquet文件上构建了一个外部表。
我担心这可能不会忠实地表示我们最初在原生BigQuery表中使用的相同数据类型。我们向Beam作业传递了一个avro模式,该模式将字段定义为:
{
"name": "DS_GUARDRAILS",
"type": [
"null",
{
"type": "array",
"items": {
"type": "record",
"name": "DS_GUARDRAIL",
"fields": [
{
"name": "KEY",
"type": "string"
},
{
"name": "VALUE",
"type": "string"
}
]
}
}
],
"default": null
},
型
我是否应该以不同的方式来模仿原始的结构?或者这只是BigQuery通过外部表表示这种类型的parquet数据的怪癖?
1条答案
按热度按时间zpjtge221#
您发布的avro模式在技术上提供了比原始BigQuery模式更多的自由度。BigQuery不允许存储空列表。我猜在beam avro模式中删除空值会使两者对齐(虽然对Beam不是很熟悉)。
另一个可以用于模式对齐的选项是覆盖WRITE_OLD_LIST_STRUCTURE的Parquet接收器的parquet-mr值,并对外部表使用set enable_list_inference