Hive 创建表后,我可以使用PARTITIONED BY吗?

Hive 创建表后,我可以使用PARTITIONED BY吗?,hive,hiveql,Hive,Hiveql,我使用上述代码从表t2创建表t1。在本表中,t2被划分为3个变量,即月、日、年。一旦创建了表t1,它就不会根据上述值进行分区 我尝试了下面的代码,但它给了我错误。救命啊 create table t1 as select * from t2 where 1=2; [42000]:编译语句时出错:失败:ParseException行1:0无法识别表源中由“”分区的“”附近的输入(“”) 只需更正语法。分区依据…在创建表之后执行 create table t1 as select * from

我使用上述代码从表t2创建表t1。在本表中,t2被划分为3个变量,即月、日、年。一旦创建了表t1,它就不会根据上述值进行分区

我尝试了下面的代码,但它给了我错误。救命啊

create table t1 as select * from t2 where 1=2;
[42000]:编译语句时出错:失败:ParseException行1:0无法识别表源中由“”分区的“”附近的输入(“”)


只需更正语法。
分区依据…
创建表之后执行

create table t1 as 
select * from t2 PARTITIONED BY( YEAR  STRING, MONTH STRING, DAY  STRING);

建议显式调用列而不是
*
,并在
select

的末尾指定分区列。上述答案是正确的,这是在创建表时创建分区的解决方案

如果已经创建了没有分区的表,那么其中一种方法就是使用INSERT OVERRIDE

create table t1 PARTITIONED BY(YEAR STRING,MONTH STRING,DAY STRING) as 
select /*add other columns here*/,year,month,day 
from t2;
设置hive.exec.dynamic.partition=true;
设置hive.exec.dynamic.partition.mode=nonstrict;
插入覆盖表分区()
从中选择;
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

INSERT OVERWRITE TABLE <table_name> PARTITION(<partition_name>) 
    SELECT <column_1,... column_n, partition_name> from <table_name>;