使用Avro作为导入格式创建简单表时遇到问题。我想创建一个包含N列原始数据类型的典型表,例如包含c1 STRING
列和c2 INTEGER
列的表。
我使用这样的架构
{
"type": "record",
"name": "x",
"fields": [
{
"name": "c1",
"type": "string"
},
{
"name": "c2",
"type": "int"
}
]
}
这会产生一个名为root
的{{1}}列,其中嵌套RECORD
和c1
。
如何使用Avro导入到包含两列c2
和c1
的表格?或者目前是否只能创建一个具有固定名称c2
的列的表?
我尝试了其他方法:
root
(array
)创建一个名为string
的{{1}} root
这样的最简单的架构会创建一个名为STRING REPEATED
的{{1}}类型的列。这种方法不允许创建多个列,也不会更改列的名称。答案 0 :(得分:0)
感谢您的反馈。 Avro架构始终以一个未命名的列开始,该列可以是像字符串这样的基本类型,也可以是像记录这样的复杂类型。我们现在将它映射到BQ中的列并将名称修改为“root”。如果这成为常见请求,我们将考虑在根级别对条带化记录进行条带化。但是,我们处理记录类型的方式与其他类型不同。
现在的解决方案是使用查询剥离根记录并保存到另一个表。或者,您可以通过联合表一步合并load和strip:
bq query --external_table_definition = foo :: AVRO = gs://your_bucket/path/file.avro* --destination_table your_dataset.your_table“SELECT root。* FROM foo”