我正在创建配置单元外部表orc(orc文件位于s3上)。
命令
CREATE EXTERNAL TABLE Table1 (Id INT, Name STRING) STORED AS ORC LOCATION 's3://bucket_name'
运行查询后:
Select * from Table1;
结果是:
+-------------------------------------+---------------------------------------+
| Table1.id | Table1.name |
+-------------------------------------+---------------------------------------+
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
+-------------------------------------+---------------------------------------+
有趣的是,返回的记录数是10,这是正确的,但所有记录都是空的。怎么了,为什么查询只返回空值?我正在aws上使用emr示例。我应该配置/检查以支持配置单元的orc格式吗?
3条答案
按热度按时间nlejzf6q1#
我遇到的问题是配置单元表中列名的大小写,如果orc文件的列名是大写的,那么配置单元表的大小写应该相同。我使用spark数据框将列转换为小写:
ioekq8ef2#
我在s3中的emr hive和orc文件中遇到了相同的问题。问题是orc架构中的字段名和配置单元字段名不匹配。
在我的案例中,名称应该匹配100%(包括区分大小写)+注意,配置单元将以小写形式转换camelcase字段名称。
在这种情况下,最好创建如下表:
在创建.orc文件时,使用如下模式:
在本例中,配置单元字段名与orc架构中的字段名匹配,并且emr配置单元能够从这些文件中读取值。
dluptydi3#
我确实使用了您的示例orc文件,并尝试在配置单元中创建一个外部表,我能够看到数据输出。
您还可以使用orc dump实用程序来了解json格式的orc文件的元数据。
尝试使用
LOAD
语句或创建Managed Table
,jfyi“我都试过了,得到的数据如下”:)我真的没有发现你的陈述有任何错误。你也可以查看更多的orc转储信息的链接