Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
Sql 如何在配置单元上对未分区的表进行分区?_Sql_Hive_Cloudera_Cloudera Cdh_Impala - Fatal编程技术网

Sql 如何在配置单元上对未分区的表进行分区?

Sql 如何在配置单元上对未分区的表进行分区?,sql,hive,cloudera,cloudera-cdh,impala,Sql,Hive,Cloudera,Cloudera Cdh,Impala,给定一个包含360天数据的表,我们希望按日期对其进行分区以提高性能。我们是否需要为每个日期使用以下SELECT命令?还有更有效的方法吗 INSERT INTO TABLE <new_table> Partition (dt='2015-07-01') SELECT * from <table> WHERE dt='2015-07-01' 插入表分区(dt='2015-07-01') 选择*其中dt='2015-07-01' 如果新表按dt(日期)分区,则应使用。您不需要

给定一个包含360天数据的表,我们希望按日期对其进行分区以提高性能。我们是否需要为每个日期使用以下SELECT命令?还有更有效的方法吗

INSERT INTO TABLE <new_table> Partition (dt='2015-07-01')
SELECT * from <table> WHERE dt='2015-07-01'
插入表分区(dt='2015-07-01')
选择*其中dt='2015-07-01'

如果新表按dt(日期)分区,则应使用。您不需要指定特定的分区(在本例中是日期)。通过这种方式,Hive实现了所有不同的日期,并自动进行分区

请记住设置以下标志:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

首先准备好你的桌子:

create  db.my_table(column1 int, column2 string,
                     -- ...
)
comment 'I like paritioned tables'
partitioned by(dt string)
location '/path/to/file';
现在可以将数据加载到dt分区中:

insert overwrite into table db.my_table partition (dt) select * from other_table;

你的想法和@invoketheshell的答案相同吗?是的,是相同的想法。唯一的区别是,我会将该表创建为一个外部表,在这种情况下,如果您意外地删除了该表,数据将仍然存在,在另一种情况下,数据将被删除。还请记住使用flags.dt,它是从另一列日期转换而来的。我们可以在第二步中执行此操作:将覆盖插入到表newtable partition(dt)中选择column1,从表0中选择作为dt的日期(date)?是的,只要符合create Table语句中的模式,就可以进行任何查询。