使用Avro将包含多列的行插入BigQuery [英] Inserting rows with multiple columns into BigQuery using Avro
本文介绍了使用Avro将包含多列的行插入BigQuery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在使用avro作为导入格式创建简单表格时遇到问题。我想创建一个包含N列原始数据类型的典型表,例如包含列c1 STRING
和c2 INTEGER
的表。
我使用的架构如下
{
"type": "record",
"name": "x",
"fields": [
{
"name": "c1",
"type": "string"
},
{
"name": "c2",
"type": "int"
}
]
}
这将导致一个名称为root
、类型为RECORD
的列嵌套了c1
和c2
。
c1
和c2
的表?或者,当前是否可以创建具有固定名称的一列的表root
?
我尝试了其他方法:
- avro type
array
(ofstring
)创建一个名称为root
、类型为STRING REPEATED
的列 - 最简单的模式,如
{"type":"string"}
,创建一个名称为root
、类型为STRING
的列。此方法不允许创建多个列,也不允许更改列的名称。
推荐答案
感谢您的反馈。Avro模式总是以一个未命名的列开始,它可以是像字符串这样的原始类型,也可以是像Record这样的复杂类型。我们现在将其映射到BQ中的一个列,并将其名称固定为"根"。如果这成为一个常见的请求,我们将考虑在根级别剥离封闭的记录。但是,我们处理记录类型的方式与处理其他类型不同。
现在的解决方案是使用查询剥离根记录并保存到另一个表。或者,您可以通过联邦表在一个步骤中组合加载和剥离:bq查询--external_table_definition=foo::AVRO=gs://your_bucket/path/file.avro*--Destination_TABLE YOU_DATASET.YOUR_TABLE"SELECT ROOT.*FROM FOO"
这篇关于使用Avro将包含多列的行插入BigQuery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文