完全卡住从配置单元外部表中获取数据。到目前为止,我已经在下面完成了。

  • 我有一个带有日期字段的托管表,其值是2014-10-23。
  • 我创建了外部表以在 flex 搜索中存储数据,如下所示

    创建外部表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'=);
  • 在外部表中插入一行以创建 flex 搜索索引和映射。

  • 问题1:
    我的 flex 搜索字段创建为字符串。
  • 后来我将 flex 搜索中的映射更改为最新的。

    “run_date”:{“type”:“date”,“format”:“yyyy-MM-ddZ”,“index”:“not_analyzed”}
  • 将数据重新插入外部表中。当我查询 flex 搜索时,它非常好。值显示为'2014-10-23 + 08:00'

  • 问题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/

    10-11 09:00