从 Hive 中现有的 table 创建新的 table

Create new table from the exiting table in Hive

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

退出 table:

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


新 table:

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

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

我试过的:

Create table newTable Select * from existingtable;

但是那会用旧值复制创建新的 table,我想在 table 创建期间添加新列并插入值。



请帮忙。

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

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

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

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

tail -f nohup.out

您可以像这样添加新列:

create table newTable AS
select s.*, unix_timestamp(current_timestamp) as creation_date 
  from existingtable s;

如果您需要使用与现有 table 完全相同的结构定义的新 table, 然后 Hive 使创建新的 table 变得非常容易。 这称为克隆 table,它是使用 LIKE 子句完成的。 新 table 将具有与现有 table 相同的列定义和其他属性,但没有数据。语法是

CREATE TABLE new_table_name LIKE existing_table_name;

CREATE TABLE jobs_archived LIKE jobs;

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

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

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

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

ALTER TABLE employees ADD COLUMNS (bonus INT);

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

希望对您有所帮助。