以任意时间戳格式将数据导入 Hive

Posted

技术标签:

【中文标题】以任意时间戳格式将数据导入 Hive【英文标题】:Import data into Hive with arbitrary timestamp format 【发布时间】:2013-11-16 13:45:26 【问题描述】:

我有一个希望导入 Hive 的数据文件,其中包含时间戳。时间戳的格式为 MM/dd/yyyy HH:mm:ss。

我想创建一个包含时间戳类型的表来保存这个值,但是我不知道如何直接导入数据。

我的解决方法是将数据以我的日期作为字符串导入到临时表中,然后将该临时表中的数据读取到我的永久表中,并即时进行时间格式转换。

所以,我的整个两步加载函数看起来像这样:

create table tempTable(
timeField string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

--load data local here!

create table finalTable(
timeField timestamp
) stored as RCFILE;

insert into table finalTable select 
from_unixtime( unix_timestamp(timeField,'MM/dd/yyyy HH:mm') )
from tempTable;

所以最后我的问题:-) 这是“正确”还是“最好”的方法?我是否使用了低效/愚蠢的解决方法?

谢谢!

【问题讨论】:

【参考方案1】:

另一种解决方法是将数据文件的日期时间格式更改为 yyyy/MM/dd HH:mm:ss

然后它将数据直接转换为时间戳数据类型到hive表。

希望对您有所帮助。

【讨论】:

欢迎来到 SO 并感谢您的回答。原始问题的编写方式似乎表明时间戳格式是固定的......【参考方案2】:

创建表临时表( 时域时间戳 )行格式分隔字段以“,”结尾;

这会将您的字符串 04/05/2014 04:25:55 转换为 hive 上的时间戳。

【讨论】:

你测试过这个吗?我的理解是,这只适用于格式为“YYYY-MM-DD HH:MM:SS”的时间,这正是我遇到的问题,因为数据一开始就不是那种格式。我的经验是,您的方法只会导致 NULL 值 @PeterCogan 是的,如果你按照这里所说的那样做,这正是发生的事情(创建 NULL 值)。有什么解决办法吗?

以上是关于以任意时间戳格式将数据导入 Hive的主要内容,如果未能解决你的问题,请参考以下文章

如何将excel中的数据导入hive仓库中

离线数据全量导入与增量导入方案

csv数据导入hive

sqlserver 数据导入MySQL

hive导出数据到oracle date怎么转换

在HUE中将文本格式的数据导入hive数仓中