【问题标题】:Is there a way to assign pyarrow schema to the RECORD data type in BigQuery?有没有办法将 pyarrow 架构分配给 BigQuery 中的 RECORD 数据类型?
【发布时间】:2020-12-15 10:00:12
【问题描述】:

我的 Apache Beam 管道的目标是从 BigQuery 中的表中获取数据,然后将其输出到 parquet 文件中。

我正在尝试在我的 Apache Beam 管道中使用WriteToParquetPTransform,这需要将schema 作为pyarrow.Schema 传递。

我的这部分代码将不同类型的架构从 BigQuery 映射到各种 pyarrow 架构:

data_type_mapping = {
    'STRING': pyarrow.string(),
    'BYTES': pyarrow.string(),
    'INTEGER': pyarrow.int64(),
    'INT64': pyarrow.int64(),
    'FLOAT64': pyarrow.float64(),
    'FLOAT': pyarrow.float64(),
    'BOOLEAN': pyarrow.bool_(),
    'TIMESTAMP': pyarrow.timestamp(unit='ms'),
    'DATE': pyarrow.date32(),
    'DATETIME': pyarrow.string()
}

问题是BigQuery中有一个数据类型RECORD,我不知道如何将它映射到正确的pyarrow架构。

These 是各种可用的数据类型。我可以使用哪一个?

【问题讨论】:

    标签: google-bigquery apache-beam pyarrow


    【解决方案1】:

    您可能希望为此使用 pyarrow.struct

    【讨论】:

    • 谢谢,这是我目前正在尝试的(在我验证它有效之前不想发布)。我目前在嵌套structs 方面最苦恼。 IE。如果RECORD 包含另一个RECORD...我想出了一个递归算法来为此生成模式,但我收到以下错误:pyarrow.lib.ArrowTypeError: Expected a string or bytes object, got a 'list' object。一旦我弄清楚了,我会发布一些东西:)
    • 我试图从中提取的数据产生了上一条评论中的错误消息,其中包含ARRAYs,我没有解释这一点。 BigQuery ARRAY 的等效项是 pyarrow.list_ 吗?这是我能找到的最匹配的一个。
    • 是的,这看起来是最好的映射。
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2023-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多