如何转换 TIMESTAMPS 格式以兼容 Impala
How to convert TIMESTAMPS formats to be compatible with Impala
这是我的 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
...
我想在 Impala table 中加载此 CSV 文件并将第一列设置为 "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
但未能成功地制作出良好的正则表达式。
from_unixtime(unix_timestamp( timestamp, 'input_format' )) 解决方案将适用于 Hive,但无论出于何种原因,它不适用于 Impala。我会认为这是一个错误并建议您将其提交给 Cloudera。
I am trying to use regexp_replace but was not quite successful to make
a good regular expression
如何使用正则表达式从丑陋的日期格式中提取单独的字段,然后使用旧 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
这是我的 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
...
我想在 Impala table 中加载此 CSV 文件并将第一列设置为 "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
但未能成功地制作出良好的正则表达式。
from_unixtime(unix_timestamp( timestamp, 'input_format' )) 解决方案将适用于 Hive,但无论出于何种原因,它不适用于 Impala。我会认为这是一个错误并建议您将其提交给 Cloudera。
I am trying to use regexp_replace but was not quite successful to make a good regular expression
如何使用正则表达式从丑陋的日期格式中提取单独的字段,然后使用旧 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