我正在尝试使用配置单元将日期和时间戳值存储在时间戳列中。源文件包含日期或时间戳的值。
有没有一种方法可以通过使用hive中的timestamp数据类型来读取日期和时间戳。
输入:
2015-01-01
2015-10-10 12:00:00.232
2016-02-01
我得到的输出:
null
2015-10-10 12:00:00.232
null
是否可以使用timestamp数据类型读取这两个值。
ddl地址:
create external table mytime(id string ,t timestamp) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs://xxx/data/dev/ind/'
2条答案
按热度按时间uqxowvwt1#
我想到了一个解决办法。用一小部分数据尝试了这一点:
通过将列设置为字符串数据类型,将日期数据不一致的数据加载到配置单元表(如table1)中。
现在创建另一个表table2,数据类型为所需列的时间戳,并使用转换将数据从table1加载到table2
INSERT OVERWRITE TABLE table2 select id,if(length(tsstr) > 10, tsstr, concat(tsstr,' 00:00:00')) from table1;
这应该以所需的格式加载数据。代码如下:
`
结果如预期所示:
h5qlskok2#
hive在数据类型Map方面与任何其他数据库相似,因此需要为特定列提供统一的值,以便将其存储在一致的数据类型下。文件中第二列的数据具有非统一的数据,即一些数据是日期格式,而另一些数据是时间戳格式。
为了不丢失日期,正如@kishore建议的那样,请确保文件中有一个统一的数据类型,并获取时间戳值为的文件
2016-01-01 00:00:000
只有日期的地方。