1

我正在使用 BigQuery 查询外部数据源(也称为联合表),其中源数据是存储在 google 云存储中的 hive 分区 parquet 表。我使用本指南来定义表格。

我测试此表的第一个查询如下所示

SELECT * FROM my_dataset.my_table WHERE year=2019 AND day = "2019-01-01" LIMIT 10

此查询失败并出现以下错误

列 visitor_partition 的类型为 INT64,与预期的 INT32 类型不同

我想知道为什么会发生此错误以及如何解决或解决它。我使用该parquet-tools库进行了一些调查,以窥探我的镶木地板数据的内部结构。

当我运行java -jar ./parquet-tools-1.10.0.jar meta test.c000.gz.parquet | grep visitor_partition我的一个镶木地板文件时,将返回以下相关行

visitor_partition:          OPTIONAL INT64 R:0 D:1
visitor_partition:           INT64 GZIP DO:0 FPO:59420041 SZ:54561/537912/9.86 VC:633590 ENC:BIT_PACKED,PLAIN_DICTIONARY,RLE ST:[min: 0, max: 99, num_nulls: 0]

当我运行架构命令时,会出现以下相关架构信息optional int64 visitor_partition;

所以很明显,在这个 parquet 文件中,该visitor_partition字段的数据表示为 INT64。那么为什么 BigQuery 期望在这里看到 INT32 类型呢?

4

1 回答 1

3

请注意,外部表的模式是从与表的源 URI 匹配的所有文件列表中按文件名按字典顺序排序的最后一个文件推断出来的。因此,在您的案例中,任何特定 Parquet 文件的架构都可能与您描述的架构不同,例如,“visitor_partition”字段具有 DATE 逻辑类型的 INT32 列 - BigQuery 将推断为 DATE 类型。

于 2020-04-13T07:55:59.033 回答