完全卡住从配置单元外部表中获取数据。到目前为止,我已经在下面完成了。
创建外部表ext3(
运行日期
ROW格式SERDE'org.elasticsearch.hadoop.hive.EsSerDe'
由'org.elasticsearch.hadoop.hive.EsStorageHandler'存储
TBLPROPERTIES('es.resource'='dfs / ext3','es.field.read.empty.as.null'='true','es.nodes'=);
问题1:
我的 flex 搜索字段创建为字符串。
“run_date”:{“type”:“date”,“format”:“yyyy-MM-ddZ”,“index”:“not_analyzed”}
问题2
当我查询诸如之类的外部表的数据时,请从ext3 中选择count(*),我将得到以下错误。
2015-04-17 18:45:34,254 FATAL [main] org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row [Error getting row data with exception java.lang.ClassCastException: org.apache.hadoop.hive.serde2.io.TimestampWritable cannot be cast to org.apache.hadoop.hive.serde2.io.DateWritable
at org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableDateObjectInspector.getPrimitiveWritableObject(WritableDateObjectInspector.java:38)
at org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:259)
at org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:349)
at org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:193)
at org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:179)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:545)
大家请帮我,这整天都浪费了。我还有另一个包含更多数据的外部表,我需要将这两个表连接起来并创建一个 View ,以使合并的数据可供分析。
最佳答案
我认为该错误为您的问题提供了线索:
Error getting row data with exception java.lang.ClassCastException:
org.apache.hadoop.hive.serde2.io.TimestampWritable cannot be cast to
org.apache.hadoop.hive.serde2.io.DateWritable
您的配置单元表中有一个
date
字段,但是插入的数据类型为timestamp
。重新创建表格(如果不想替换,则重新创建一张表格)
CREATE EXTERNAL TABLE ext3 ( run_date timestamp )
ROW FORMAT SERDE 'org.elasticsearch.hadoop.hive.EsSerDe'
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'dfs/ext3', 'es.field.read.empty.as.null' = 'true','es.nodes'=);
关于elasticsearch - 无法在Hive外部表中查询日期字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29697493/