【发布时间】:2014-09-06 04:15:14
【问题描述】:
我正在尝试创建一个带有分区的外部 HIVE 表。我的一些 列名有大写字母。这在创建时导致了问题 表,因为带有大写字母的列名的值是 返回为 NULL。然后我修改了 ParquetSerDe 以使其 通过使用 SERDEPROPERTIES 来处理这个问题,这适用于外部表(未分区)。现在我 尝试创建带有分区的外部表,并且每当我尝试 访问大写列(例如 FieldName)我得到这个错误。 从表名中选择字段名;
FAILED: RuntimeException Java. Lang.RuntimeException: cannot find field
FieldName from
[org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@4f45884b,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@8f11f27,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@77e8eb0e,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@1dae4cd,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@623e336d
]
你有什么建议吗?我无法更改数据源的架构。
这是我用来创建表的命令-
CREATE EXTERNAL TABLE tablename (fieldname string)
PARTITIONED BY (partion_name string)
ROW FORMAT SERDE 'path.ModifiedParquetSerDeLatest'
WITH SERDEPROPERTIES ("casesensitive"="FieldName")
STORED AS INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
然后添加分区:
ALTER TABLE tablename ADD PARTITION (partition_name='partitionvalue')
LOCATION '/path/to/data'
【问题讨论】:
-
你解决了吗?
-
@AndréCasimiro 我从事这方面工作已经有一段时间了,当时是在公司暑期实习。这是我提出问题的 Parquet 邮件列表的摘录:mail-archives.apache.org/mod_mbox/parquet-dev/201407.mbox/… 查看 JIRA 问题。抱歉,我没有在这里发布我的发现。我记得我们解决了这个问题,但我不记得它到底有多好,甚至做了什么。