2016-05-19 121 views
0

我想用正则表达式来得到我的文件名作为列的第一部分,在我的蜂巢表部分在蜂巢表列

My filename is : 20151102114450.46400_Always_1446482638967.xml 

我写了一个查询(以下查询)在微软的蜂巢天青得到它即第一部分,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 

谁能告诉我在哪里,我错了,哪些需要是正确的编辑?

+0

在Cloudera的网站我读:铸造的整数值N,以TIMESTAMP产生一个值,该值是在N秒过去时元日期的开始(1970年1月1日)。我该怎么做才能得到准确的文件名? – HadoopAddict

+0

尝试'regexp_replace(TRIM(split(INPUT__FILE__NAME,':')[1]),“\ .. *”,“”)'extraxt the value – rock321987

回答

0

我在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')