如何将 TIMESTAMPS 格式转换为与 Impala 兼容

Posted

技术标签:

【中文标题】如何将 TIMESTAMPS 格式转换为与 Impala 兼容【英文标题】:How to convert TIMESTAMPS formats to be compatible with Impala 【发布时间】:2015-04-29 04:39:56 【问题描述】:

这是我的 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 接受 TIMESTAMPS 格式如下:

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

虽然我的数据是:

MM/DD/YYYY HH:MM 

如何以最快的方式将我的数据转换为 TIMESTAMPS 以供 Impala 读取?我正在尝试使用regexp_replace,但制作一个好的正则表达式并不是很成功。

【问题讨论】:

我对 impala 不熟悉,但是我找到了一个discussion about this issue,这个解决方法对你有帮助吗:from_unixtime(unix_timestamp('2000/01/01', 'yyyy/MM/dd') @Uooo 感谢您的评论。不幸的是,我收到“错误的日期/时间转换格式:”错误。 既然你的字段也包含时间,你可以试试from_unixtime(unix_timestamp(timestamp, 'yyyy/MM/dd HH:mm')吗? 其实我也试过... 实际上,您的数据不是格式为MM/DD/YYYY HH:MM,而是格式为M/d/yyyy H:m 的可变长度字段,这使得解析变得非常麻烦。正如你刚刚经历的那样。 【参考方案1】:

from_unixtime(unix_timestamp(timestamp, 'input_format')) 解决方案适用于 Hive,但无论出于何种原因,它不适用于 Impala。我认为这是一个错误并建议您将其提交给 Cloudera。

【讨论】:

【参考方案2】:

我正在尝试使用 regexp_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

【讨论】:

以上是关于如何将 TIMESTAMPS 格式转换为与 Impala 兼容的主要内容,如果未能解决你的问题,请参考以下文章

使用Jackson时转换JSON时,日期格式设置

如何将 CKEditor 的 MIME 转换为与 NotesClient 上的外观相同?

如何使用 Google S2 Converter 将 markdown() 中的链接转换为与 favicon 链接?

使用Jackson时转换JSON时,日期格式设置

如何将 Linear16 PCM wav 转换为与 g711.org 相同质量的 G711 8-bit 8-khz MULAW wav?

转换datetime并在MySQL中插入