本文介绍了Filename的一部分作为Hive Table中的一列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 我的文件名是: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)TimeStamp) ,'',''),' - ',''),'','')AS BIGINT)作为VERSION 

任何人都可以告诉我我要去哪里,哪些地方需要改正? 这在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
拍摄时间:19.644秒,已获取:1行

另一个选项:

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


I want to get the first part of my filename as a column in my Hive Table

My filename is : 20151102114450.46400_Always_1446482638967.xml

I wrote a query (below query) using regex in Hive of Microsoft Azure to get the first part of it i.e., 20151102114450

But when I run query I am getting the output as 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

Can anyone tell me where I am going wrong and what needs to be corrected ?

解决方案

I tried this in Cloudera, hopefully it should work in Azure as well.

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)

Another option:

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

这篇关于Filename的一部分作为Hive Table中的一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-16 03:58