我正在尝试使用 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;
但是这会复制使用旧值创建新表,我想在创建表期间添加新列并插入值。
请帮忙。
您可以像这样添加新列:
create table newTable AS
select s.*, unix_timestamp(current_timestamp) as creation_date
from existingtable s;
只能为一个配置单元执行运行hive one-shot command
。
当您需要运行多个查询执行或运行需要很长时间执行的较大查询时,此实用程序非常有用。
- 创建一个
myquery.hql
文件,其中包含由;
分隔的所有查询,然后从 HDFSnohup hive -f /myquery.hql
运行
您可以通过访问nohup.out文件继续查看控制台:
tail -f nohup.out
如果您需要一个与现有表结构完全相同的新表, 然后 Hive 使创建新表变得非常容易。 这称为克隆表,它是使用 LIKE 子句完成的。 新表将具有与现有表相同的列定义和其他属性,但没有数据。语法是
CREATE TABLE new_table_name LIKE existing_table_name;
CREATE TABLE jobs_archived LIKE jobs;
可以为新表指定一些表属性 通过在创建表中包含适当的子句...喜欢的语句。 例如,可以使用 LOCATION 和 STORED AS 子句。 如果需要更改其他属性,请在创建表后使用 ALTER TABLE 来设置这些属性。
之后,如果需要添加更多列,可以使用 ALTER TABLE 语句。
您可以使用添加列将一列或多列添加到列列表的末尾, 一般语法是
ALTER TABLE tablename ADD COLUMNS (col1 TYPE1,col2 TYPE2,… );
ALTER TABLE employees ADD COLUMNS (bonus INT);
您可以将这些句子包装在 JDBC 语句中。
我希望这有所帮助。