将系统时间戳插入配置单元表中的时间戳字段

Posted

技术标签:

【中文标题】将系统时间戳插入配置单元表中的时间戳字段【英文标题】:Inserting system timestamp into a timestamp field in hive table 【发布时间】:2014-05-29 09:47:45 【问题描述】:

我正在使用 Hive 0.8.0 版本。我想在将数据加载到配置单元表时将系统时间戳插入时间戳字段。 详细地: 我有一个包含 2 个字段的文件,如下所示:

id name
1  John
2  Merry
3  Sam

现在我想将此文件与额外的列“created_date”一起加载到 hive 表上。所以我创建了带有额外文件的配置单元表,如下所示:

CREATE table mytable(id int,name string, created_date timestamp) row format delimited fields terminated by ',' stored as textfile;

如果我加载数据文件,我会使用以下查询:

LOAD DATA INPATH '/user/user/data/' INTO TABLE mytable;

如果我运行上述查询,“created_date”字段将为 NULL。但是我希望在将数据加载到配置单元表时,应该使用系统时间戳而不是 null 插入该字段。是否可以在蜂巢中。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以分两步完成此操作。首先将文件中的数据加载到没有时间戳的临时表中。然后从临时表插入到实际表中,并使用 unix_timestamp() UDF 生成时间戳:

create table temptable(id int, name string)
row format delimited fields terminated by ','
stored as textfile;

create table mytable(id int, name string, created_date timestamp)
row format delimited fields terminated by ','
stored as textfile;

load data inpath '/user/user/data/' into table temptable;

insert into table mytable
select id, name, unix_timestamp()
from temptable;

【讨论】:

您好,我按照您的建议做了同样的事情,但在 created_date 字段中我看不到当前插入的时间戳。这里显示1970-01-17 00:17:13.142。我怎样才能得到插入的时间戳。 嗨,我知道了!查询是insert into table mytable select id, name, from_unixtime(unix_timestamp()) from temptable; 非常感谢您的帮助。

以上是关于将系统时间戳插入配置单元表中的时间戳字段的主要内容,如果未能解决你的问题,请参考以下文章

从 Python 将 unix 时间戳插入 MySQL [重复]

比较 2 个配置单元表以查找没有任何唯一列/时间戳的更新/插入/删除记录并将其附加到 Hadoop 中的基表

java 如何通过接口把远程Oracle表中的数据同步到Mysql

使用 Play Framework 和 Postgres 插入时在时间戳字段上获取 TypeDoesNotMatch

如何将 Hive 表中的所有时间戳转换为 EAT

avro时间戳字段上的配置单元外部表返回一样长