创建表后是否可以使用分区依据?

py49o6xq  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(272)
create table t1 as select * from t2 where 1=2;

我使用上面的代码从表t2创建一个表t1。在这个表中,t2被划分为3个变量,即月、日、年。一旦创建了表t1,它就不会按照上面提到的值进行分区。
我试过下面的代码,但它给我错误。救命啊!

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

[42000]:编译语句时出错:失败:parseexception行1:0无法识别表源中被“”分区的“”附近的输入(“”)

z18hc3ub

z18hc3ub1#

上面的答案是正确的,在表创建时/期间创建分区的解决方案。
如果已经创建了没有分区的表,那么其中一种方法就是使用insert overwrite。

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>;
b09cbbtk

b09cbbtk2#

只需要纠正语法。 partitioned by ... 追求 create table .

create table t1 PARTITIONED BY(YEAR STRING,MONTH STRING,DAY STRING) as 
select /*add other columns here*/,year,month,day 
from t2;

建议显式调用列,而不是 * 并在末尾指定分区列 select .

相关问题