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

问题描述 投票:0回答:1

我有一个 BigQuery 表,其中包含由结构化数据 (RECORD) 组成的 REPEATED 字段,该字段仅由两个键组成: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 通过外部表表示这种类型的镶木地板数据的怪癖?

java google-bigquery apache-beam parquet
1个回答
0
投票

您发布的 avro 架构在技术上比原始 BigQuery 架构提供了额外的自由度。因为 BigQuery 不允许存储空列表。我猜想,删除 Beam avro 模式中的可空性将使两者对齐(尽管对 Beam 不太熟悉)。

另一个可用于模式对齐的选项是覆盖 parquet 接收器的 parquet-mr 值 WRITE_OLD_LIST_STRUCTURE 并在外部表上使用 set enable_list_inference

© www.soinside.com 2019 - 2024. All rights reserved.