set hive.support.quoted.identifiers=none;
CREATE TABLE student_copy AS SELECT `(age|hair_color)?+.+` FROM student;
set hive.support.quoted.identifiers=column;
但是(正如kishore kumar suthar所提到的:这不会创建分区表,因为ctas(create table as select)不支持分区表。 获取分区表的唯一方法是获取表的完整create语句(如abraham所述):
SHOW CREATE TABLE student;
更改它以在所需列上创建分区。然后在插入新表时可以使用select with regex。如果分区列已经是这个select的一部分,那么需要确保它是插入的最后一列。如果不是,您可以在regex中排除该列并将其作为last包含。另外,如果您希望基于insert语句创建多个分区,则需要启用“动态分区”:
set hive.support.quoted.identifiers=none;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT INTO TABLE student_copy PARTITION(partcol1) SELECT `(age|hair_color|partcol1)?+.+`, partcol1 FROM student;
set hive.support.quoted.identifiers=column;
3条答案
按热度按时间ikfrs5lh1#
您可以使用regex:cta和regex列规范:
但是(正如kishore kumar suthar所提到的:这不会创建分区表,因为ctas(create table as select)不支持分区表。
获取分区表的唯一方法是获取表的完整create语句(如abraham所述):
更改它以在所需列上创建分区。然后在插入新表时可以使用select with regex。如果分区列已经是这个select的一部分,那么需要确保它是插入的最后一列。如果不是,您可以在regex中排除该列并将其作为last包含。另外,如果您希望基于insert语句创建多个分区,则需要启用“动态分区”:
“hive.support.quoted.identifiers=none”是在查询的regex部分中使用反勾号“`”所必需的。我在语句“hive.support.quoted.identifiers=column”后将此参数设置为其原始值
polkgigr2#
我使用下面的命令来获取现有表的create语句。
复制结果并根据您对新表的要求修改它,然后运行modified命令以获取新表。
sdnqo3pr3#
它只是复制源表定义。
无法对目标表进行分区。
目标不能是外部表。
它复制结构和数据