Hive 创建表后,我可以使用PARTITIONED BY吗?
我使用上述代码从表t2创建表t1。在本表中,t2被划分为3个变量,即月、日、年。一旦创建了表t1,它就不会根据上述值进行分区 我尝试了下面的代码,但它给了我错误。救命啊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
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>;