【问题标题】:Import data into Hive with arbitrary timestamp format以任意时间戳格式将数据导入 Hive
【发布时间】: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;

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

谢谢!

【问题讨论】:

    标签: hive


    【解决方案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 值)。有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多