首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Hive外部表中查询日期字段

无法在Hive外部表中查询日期字段
EN

Stack Overflow用户
提问于 2015-04-17 11:06:32
回答 1查看 4K关注 0票数 1

完全无法从蜂巢外部表中获取数据。到目前为止,我已经完成了下面的工作。

  1. 我有一个带有日期字段的托管表,其值为2014-10-23。
  2. 我创建了外部表来存储弹性搜索中的数据,如下所示 创建'org.elasticsearch.hadoop.hive.EsStorageHandler‘TBLPROPERTIES存储的外部表ext3 ( run_date date)行格式SERDE 'org.elasticsearch.hadoop.hive.EsSerDe’(‘es.resource’=‘dfs/ext3 3’,'es.field.read.empty.as.null‘= 'true',’es.node‘=);
  3. 在外部表中插入一行以创建弹性搜索索引和映射。

问题1:我的弹性搜索字段创建为string。

  1. 后来,我在弹性搜索中更改了映射。 “run_date”:{“类型”:“日期”,“格式”:“yyyy ddZ”,“索引”:"not_analyzed"}
  2. 重新插入外部表中的数据。当我询问弹性搜索时,它很好。值显示为“2014-10-23+08:00”

问题2当我从ext3查询外部表的数据时,比如选择计数(*),我得到的是错误。

代码语言:javascript
复制
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)

伙计们,请帮帮我,这一整天都白费了。我有另一个具有更多数据的外部表,我需要将这两个表连接起来,并创建一个视图,使我的合并数据可以进行分析。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 12:07:26

我认为这个错误为你的问题提供了一个线索:

代码语言:javascript
复制
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类型的。

重新创建表(如果不想替换表,则重新创建一个新表)

代码语言:javascript
复制
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'=);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29697493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档