嘿,我的HIVE表中有两列:
例如: -
c1 : name
c2 : age
现在,在创建表时,我想再声明两列,这些列会自动为我提供加载行的当前日期和时间。
例如:John 24 26/08/2015 11:15
怎么办呢?
答案 0 :(得分:0)
注意:您不能将1列作为CURRENT_TIMESTAMP
设置。
这样,您无法在一列中设置CURRENT_TIMESTAMP
<强> SQL:强>
CREATE TABLE IF NOT EXISTS `hive` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`age` int(11) DEFAULT '0',
`datecreated` timestamp NULL DEFAULT CURRENT_TIMESTAMP
);
答案 1 :(得分:0)
Hive当前不支持在创建表时为任何列定义添加默认值的功能。请参阅完整配置单元创建表语法的链接:
Hive Create Table specification
解决此问题的替代方法是临时将数据加载到临时表中,并使用 insert overwrite table 语句将当前日期和时间添加到主表中。
以下示例可能有所帮助
的 1。创建临时表
create table EmpInfoTmp(name string, age int);
<强> 2。使用文件或现有表将数据插入EmpInfoTmp表:
姓名<年龄
Alan | 28
起苏| 32岁玛莎| 26
第3。创建一个包含最终数据的表格:
create table EmpInfo(name string, age tinyint, createDate string, createTime string);
<强> 4。从临时表中插入数据,并使用默认值作为当前日期和时间添加列:
insert overwrite table empinfo select name, age, FROM_UNIXTIME( UNIX_TIMESTAMP(), 'dd/MM/YYYY' ), FROM_UNIXTIME( UNIX_TIMESTAMP(), 'HH:mm' ) from empinfofromfile;
<强> 5。最终结果如下:
name | age | createdate | createtime
Alan | 28 | 26/08/2015 | 03:56
玛莎| 26 | 26/08/2015 | 03: 56
苏| 32 | 26/08/2015 | 03:56
请注意,通过将数据添加到最终表格时,将准确输入创建日期和时间值。
答案 2 :(得分:0)
嘿,我找到了一种使用shell脚本的方法。
以下是:
回显“ $(日期+”%Y-%m-%d-%T“) $(wc -l / home / hive / landing / $ line)$ dir“&gt;&gt; /home/hive/recon/fileinfo.txt
这里我得到没有空格的日期。最后,我将文本文件上传到我的hive表。