Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 从配置单元中的现有表创建新表_Hive_Hiveql_Jdbctemplate_Create Table_Hiveddl - Fatal编程技术网

Hive 从配置单元中的现有表创建新表

Hive 从配置单元中的现有表创建新表,hive,hiveql,jdbctemplate,create-table,hiveddl,Hive,Hiveql,Jdbctemplate,Create Table,Hiveddl,我正在尝试使用配置单元查询使用现有表创建一个新表 在创建新表时,我想添加一个新列,并为所有行插入当前时间戳。 例如: 退出表格: |user_id|user_name|user_address| |1001 |userName |address | 新表格: |user_id|user_name|user_address|creation_date| |1001 |userName |address | 123421342134| 我正在尝试使用JDBCTempla

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

退出表格:

|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;
但这将复制并使用旧值创建新表,我希望在表创建过程中添加新列并插入值




请提供帮助。

您只需执行一次配置单元,即可运行
配置单元一次性命令

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

  • 创建一个
    myquery.hql
    文件,其中所有查询都由
    分隔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;

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

CREATE TABLE new_table_name LIKE existing_table_name;

CREATE TABLE jobs_archived LIKE jobs;
ALTER TABLE tablename ADD COLUMNS (col1 TYPE1,col2 TYPE2,… );

ALTER TABLE employees ADD COLUMNS (bonus INT);
可以为新表指定一些表属性 通过在CREATETABLE…LIKE语句中包含适当的子句。 例如,可以使用LOCATION和storageas子句。 如果需要更改其他属性,请在创建表后使用ALTER TABLE设置这些属性

之后,如果需要添加更多列,可以使用ALTERTABLE语句

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

CREATE TABLE new_table_name LIKE existing_table_name;

CREATE TABLE jobs_archived LIKE jobs;
ALTER TABLE tablename ADD COLUMNS (col1 TYPE1,col2 TYPE2,… );

ALTER TABLE employees ADD COLUMNS (bonus INT);
您可以将这些句子包装在JDBC语句中


我希望这能有所帮助。

谢谢你的回答。我想从Java执行操作。我没有CLI访问权限。感谢您的回答,获得了一个异常:失败:ParseException,无法识别“选择”unix\u时间戳附近的输入。@mayankbisht修复了!这是额外的
select
Yes,现在查询工作正常,但我可以在创建日期内看到所有相同的值。我正在寻找一种身份类型的值。我必须使用该列进行排序。@mayankbisht身份是另一个复杂的主题。不带参数的unix_timestamp()将为您提供不同的时间戳,但它们不是唯一的,它将在不同的容器中并行执行,有时会生成相同的时间戳。如果您想要绝对唯一的标识符-然后使用UUID-它在分布式环境中运行良好。@mayankbisht如果您想要它可排序-类似于bigint ID或timestamp,那么为大数据集生成这样的ID并不容易。例如,您可以使用
row\u number over()
生成唯一的ID,但它在单个容器中运行缓慢