java 将BigQuery重复数据类型转换为parquet

qgelzfjb  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(46)

我有一个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数据的怪癖?

zpjtge22

zpjtge221#

您发布的avro模式在技术上提供了比原始BigQuery模式更多的自由度。BigQuery不允许存储空列表。我猜在beam avro模式中删除空值会使两者对齐(虽然对Beam不是很熟悉)。
另一个可以用于模式对齐的选项是覆盖WRITE_OLD_LIST_STRUCTURE的Parquet接收器的parquet-mr值,并对外部表使用set enable_list_inference

相关问题