Google BigQuery无法读取某些ORC数据



我正试图通过bq load/bq mk将GCS中存储的ORC数据文件加载到BigQuery中,但遇到以下错误。通过hadoopdiscp命令从prem集群的Hive实例1.2版本复制的数据文件。大多数兽人文件都已成功加载,但很少有文件未成功加载。当我从Hive读取这些数据时没有问题。

我使用的命令:

$ bq load --source_format ORC hadoop_migration.pm hive/part-v006-o000-r-00000_a_17 
Upload complete. 
Waiting on bqjob_r7233761202886bd8_00000175f4b18a74_1 ... (1s) Current status: DONE 
BigQuery error in load operation: Error processing job '<project>-af9bd5f6:bqjob_r7233761202886bd8_00000175f4b18a74_1': Error while reading data, error message: 
The Apache Orc library failed to parse metadata of stripes with error: failed to open /usr/share/zoneinfo/GMT-00:00 - No such file or directory 

事实上,没有这样的文件,我认为它不应该是

谷歌不知道这个错误消息,但我在这里发现了类似的问题:https://issues.apache.org/jira/browse/ARROW-4966.对于在prem服务器上创建指向/usr/share/zoneinfo/GMT-00:00的符号链接,有一个解决方法。但我在云端。

此外,我发现如果我通过orc工具将orc文件中的数据提取为json格式,我就可以将json文件加载到BigQuery中。所以我怀疑问题不在数据本身。

有人遇到这样的问题吗?

下面的谷歌官方支持位置。简而言之,BigQuery不理解某些时区的描述,我们建议在数据中更改它。我们的解决方法是将ORC数据转换为镶木地板,然后将其加载到表中。


确实会发生这种错误。此外,当您尝试从BigQuery云控制台执行查询时,例如:

select timestamp('2020-01-01 00:00:00 GMT-00:00')

你会得到同样的错误。它不仅与ORC导入有关,还与BigQuery如何理解时间戳有关。BigQuery支持广泛的表示形式,如[1]中所述。因此:

“2020-01-01 00:00:00 GMT-00:00”  -- incorrect timestamp string literal
“2020-01-01 00:00:00 abcdef”     -- incorrect timestamp string literal
“2020-01-01 00:00:00-00:00”      -- correct timestamp string literal

在您的情况下,问题在于ORC文件中时区的表示。我想它是由某种外部系统以这种方式产生的。如果您能够获得"GMT-00:00"字符串,并且前面的空格仅替换为"00:00",那么这将是时区的正确名称。您能将生成文件的系统的配置更改为具有正确的时区字符串吗?

创建符号链接只是掩盖问题,而不是正确解决问题。在BigQuery的情况下,这是不可能的。

谨致问候,谷歌云支持

[1]https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#time_zones

最新更新