使用Avro

时间:2016-04-26 10:39:22

标签: google-bigquery avro

使用Avro作为导入格式创建简单表时遇到问题。我想创建一个包含N列原始数据类型的典型表,例如包含c1 STRING列和c2 INTEGER列的表。

我使用这样的架构

{
    "type": "record",
    "name": "x",
    "fields": [
        {
            "name": "c1",
            "type": "string"
        },
        {
            "name": "c2",
            "type": "int"
        }
    ]
}

这会产生一个名为root的{​​{1}}列,其中嵌套RECORDc1

如何使用Avro导入到包含两列c2c1的表格?或者目前是否只能创建一个具有固定名称c2的列的表?

我尝试了其他方法:

  • Avro类型rootarray)创建一个名为string的{​​{1}}
  • root这样的最简单的架构会创建一个名为STRING REPEATED的{​​{1}}类型的列。这种方法不允许创建多个列,也不会更改列的名称。

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”