google bigquery无法读取某些orc数据

blpfk2vs  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(337)

我正试图通过bq load/bq mk将存储在gcs中的orc数据文件加载到bigquery中,遇到下面的错误。通过hadoop discp命令从prem cluster的hive示例version 1.2复制的数据文件。大多数orc文件都加载成功,但很少有文件没有加载成功。当我从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的sym链接有一个解决方法。但我在云端。
此外,我发现如果我通过orc工具将orc文件中的数据提取成json格式,我就可以将这个json文件加载到bigquery中。所以我怀疑问题不在数据本身。
有人遇到过这样的问题吗?

kuarbcqp

kuarbcqp1#

谷歌官方支持的立场如下。简而言之,bigquery不理解某些时区的描述,我们建议在数据中更改它。我们的解决方法是将orc数据转换为Parquet地板,然后将其加载到表中。
事实上,这种错误是可能发生的。此外,当您尝试从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文件中时区的表示。我想它是由某种外部系统通过这种方式产生的。如果您能够将前面空格替换为“-00:00”的“gmt-00:00”字符串,那么这就是时区的正确名称。您能否将生成该文件的系统的配置更改为具有正确的时区字符串?
创建符号链接只是掩盖问题,并不能正确解决问题。在bigquery的情况下,这是不可能的。

谨致问候,谷歌云支持

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

相关问题