2015-02-11 108 views
0

我將Hive鏈接到一個有日期的MongoDb集合。 MongoDB的集合的結構是這樣的:MongoDb的Hive轉換日期

{ 
    "name" : "Using Hive", 
    "validFrom" : ISODate("2014-11-04T00:00:00.000Z"), 
    "validTo" : ISODate("2016-01-30T00:00:00.000Z"), 
    "_id" : ObjectId("54da1c02ead8571c292901d3") 
} 

我加入它攆如下:

CREATE TABLE certificate 
( 
    name STRING, 
    validFrom TIMESTAMP, 
    validTo TIMESTAMP, 
    id STRING 
) 
STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler' 
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id"}') 
TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/test.certificate'); 

當我做了選擇的日期是空的:

hive> select * from certificate; 
OK 
Using Hive  NULL NULL 54da1c02ead8571c292901d3 
MongoDb   NULL NULL 54da1c02ead8571c292901d4 
Hadoop   NULL NULL 54da1c02ead8571c292901d5 

我知道Hive支持日期轉換,是否可以使用CREATE語句來確保日期轉換正確?我將使用「有效日期小於今天且有效日期比今天更有效」的查詢,因此將這些列作爲日期而不是字符串是至關重要的。

Thanks = D

回答

1

指定列validFrom和validTo的映射。默認情況下,配置單元將列名轉換爲小寫。請檢查下列作品。

CREATE TABLE certificate 
( 
    name STRING, 
    validfrom TIMESTAMP, 
    validto TIMESTAMP, 
    id STRING 
) 
STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler' 
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id","validfrom":"validFrom","validto":"validTo"}') 
TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/test.certificate');