Filename的一部分作为Hive表中的列

时间:2016-05-19 18:35:55

标签: regex azure hadoop hive hiveql

我希望将我的文件名的第一部分作为我的Hive表中的列

My filename is : 20151102114450.46400_Always_1446482638967.xml

我在Microsoft Azure的Hive中使用正则表达式编写了一个查询(下面的查询)来获取它的第一部分,即20151102114450

但是当我运行查询时,我得到的输出为20151102164358

select CAST(regexp_replace(regexp_replace(regexp_replace(CAST(CAST(regexp_replace(split(INPUT__FILE__NAME,'[_]')[2],'.xml','') AS BIGINT) as TimeStamp),':',''),'-',''),' ','') AS BIGINT) as VERSION

有谁能告诉我哪里出错了,哪些需要纠正?

1 个答案:

答案 0 :(得分:1)

我在Cloudera中试过这个,希望它也可以在Azure中使用。

select from_unixtime(unix_timestamp(regexp_extract('20151102114450.46400_Always_1446482638967.xml','^(.*?)\\.'),'yyyyMMddHHmmss'),'yyyy-MMM-dd HH:mm:ss');

2015-Nov-02 11:44:50
Time taken: 19.644 seconds, Fetched: 1 row(s)

另一种选择:

select from_unixtime(unix_timestamp(split('20151102114450.46400_Always_1446482638967.xml','\\.')[0],'yyyyMMddHHmmss'),'yyyy-MMM-dd HH:mm:ss')