如何将时间戳格式转换为与impala兼容

ylamdve6  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(382)

以下是我的csv格式数据示例:

6/30/2014 23:57,2006,604,131
7/1/2014 0:24,2217,263,143
6/30/2014 23:26,173,3481,134
...

我想将这个csv文件加载到impala表中,并将第一列作为“timestamp”:

CREATE TABLE my_table(col1 timestamp, col2 int, col3 int, col4 int)
  row format delimited
  fields terminated by ',';

LOAD DATA INPATH '/dataset/data' INTO TABLE my_table;

但impala接受时间戳的格式如下:

YYYY-MM-DD HH:MM:SS.sssssssss

我的数据是:

MM/DD/YYYY HH:MM

如何以最快的方式将数据转换为时间戳,以供 Impala 读取?我想用 regexp_replace 但未能成功地生成一个好的正则表达式。

6psbrbz9

6psbrbz91#

我正在尝试使用regexp\u replace,但是没有成功地生成一个好的正则表达式
用正则表达式从难看的日期格式中提取单个字段,然后用老printf重建一致的格式,怎么样?

select printf('%04d-%02d-%02d %02d:%02d:%02d.%06d'
             , cast(regexp_extract('7/1/2014 0:24', '[0-9]+/[0-9]+/([0-9]+) [0-9]+:[0-9]+', 1) as int)
             , cast(regexp_extract('7/1/2014 0:24', '([0-9]+)/[0-9]+/[0-9]+ [0-9]+:[0-9]+', 1) as int)
             , cast(regexp_extract('7/1/2014 0:24', '[0-9]+/([0-9]+)/[0-9]+ [0-9]+:[0-9]+', 1) as int)
             , cast(regexp_extract('7/1/2014 0:24', '[0-9]+/[0-9]+/[0-9]+ ([0-9]+):[0-9]+', 1) as int)
             , cast(regexp_extract('7/1/2014 0:24', '[0-9]+/[0-9]+/[0-9]+ [0-9]+:([0-9]+)', 1) as int)
             , 0
             , 0 )
from DUAL limit 1

2014-07-01 00:24:00.000000

5m1hhzi4

5m1hhzi42#

from\u unixtime(unix\u timestamp(timestamp,'input\u format'))解决方案可以与hive一起使用,但是,不管出于什么原因,它都不能与impala一起使用。我认为这是一个bug,建议您提交给cloudera。

相关问题