4

我正在尝试使用 Hive 查询使用现有表创建一个新表。
在创建新表时,我想添加一个新列并为所有行插入当前时间戳。例如:

退出表:

|user_id|user_name|user_address|
|1001   |userName |address     |


新表:

|user_id|user_name|user_address|creation_date|
|1001   |userName |address     | 123421342134|

我正在尝试使用 JDBCTemplate 执行此查询。

我试过的:

Create table newTable Select * from existingtable;

但这会复制使用旧值创建新表,我想在表创建期间添加新列并插入值。



请帮忙。

4

3 回答 3

4

您可以像这样添加新列:

create table newTable AS
select s.*, unix_timestamp(current_timestamp) as creation_date 
  from existingtable s;
于 2020-05-21T08:23:51.517 回答
0

您可以hive one-shot command只运行一个配置单元执行。

当您需要运行多个查询执行或运行需要很长时间执行的较大查询时,此实用程序非常有用。

  • 创建一个myquery.hql包含所有查询的文件,;然后从 hdfs 运行nohup hive -f /myquery.hql

您可以通过访问 nohup.out 文件继续查看控制台:

tail -f nohup.out

于 2020-05-21T07:04:19.777 回答
0

如果您需要一个定义与现有表完全相同的结构的新表,那么 Hive 可以很容易地创建新表。这称为克隆表,它是使用 LIKE 子句完成的。新表将具有与现有表相同的列定义和其他属性,但没有数据。语法是

CREATE TABLE new_table_name LIKE existing_table_name;

CREATE TABLE jobs_archived LIKE jobs;

通过在 CREATE TABLE ... LIKE 语句中包含适当的子句,可以为新表指定一些表属性。例如,可以使用 LOCATION 和 STORED AS 子句。如果您需要更改其他属性,请在创建表后使用 ALTER TABLE 来设置这些属性。

之后,如果您需要添加更多列,您可以使用 ALTER TABLE 语句。

您可以使用 ADD COLUMNS 将一列或多列添加到列列表的末尾,一般语法是

ALTER TABLE tablename ADD COLUMNS (col1 TYPE1,col2 TYPE2,… );

ALTER TABLE employees ADD COLUMNS (bonus INT);

您可以将这些句子包装在您的 JDBC 语句中。

我希望这有帮助。

于 2020-05-21T08:44:01.553 回答