使用Avro将包含多列的行插入BigQuery [英] Inserting rows with multiple columns into BigQuery using Avro

查看:128
本文介绍了使用Avro将包含多列的行插入BigQuery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我使用的架构如下

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

这将导致一个名称为root、类型为RECORD的列嵌套了c1c2

如何使用Avro导入到包含两列c1c2的表?或者,当前是否可以创建具有固定名称的一列的表root

我尝试了其他方法:

  • avro typearray(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆