Hive 如何将查询结果作为输入进行分区?

Hive 如何将查询结果作为输入进行分区?,hive,hiveql,create-table,hive-partitions,hiveddl,Hive,Hiveql,Create Table,Hive Partitions,Hiveddl,我是hive的新手,所以一个基本的问题是:如何创建一个查询,以便以特定的方式对查询结果进行分区 例如: CREATE TABLE IF NOT EXISTS tbl_x ( x SMALLINT, y FLOAT) PARTITIONED BY (id SMALLINT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS ORC; INSERT INTO TABLE `tbl_x` VALUES (1, 1, 1.0),

我是hive的新手,所以一个基本的问题是:如何创建一个查询,以便以特定的方式对查询结果进行分区

例如:

CREATE TABLE IF NOT EXISTS tbl_x (
 x SMALLINT,
 y FLOAT)
PARTITIONED BY (id SMALLINT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC;

INSERT INTO TABLE `tbl_x` 
VALUES (1, 1, 1.0),
       (1, 1, 2.0),
       (1, 2, 3.0),
       (1, 2, 4.0),
       (2, 1, 5.0),
       (2, 1, 6.0),
       (2, 2, 7.0),
       (2, 2, 8.0);

CREATE TABLE tbl_y AS SELECT `id`, `x`, SUM(`y`) AS `y_sum`
FROM `tbl_x`
GROUP BY `id`, `x`;
在那个例子中,我希望tbl_y也被划分

尝试这样做不起作用:


这里的诀窍是什么?我是否应该首先定义分区表并将结果插入?

是的,您应该单独创建一个分区表。不支持按select(CTAS)创建分区表

CREATE TABLE tbl_y(x smallint,y_sum double)
partitioned by (id smallint)
STORED AS ORC;
如果表架构相同,则可以使用:

您还可以使用
DISTRIBUTE BY
在减速器之间均匀分布数据,请参见以下答案:


可能是重复的谢谢。我认为分发部分有一个拼写错误,因为你添加了两次。我还收到了这个错误:
执行完命令(queryId=hive_20190405103559_37aabd69-88dc-4137-8289-aa35357e1385);所用时间:25.555秒错误:处理语句时出错:失败:执行错误,从org.apache.hadoop.hive.ql.exec.StatsTask返回代码1(state=08S01,code=1)
@LeoBarlach这不是信息性的。挖掘失败容器的作业跟踪器日志。
CREATE TABLE tbl_y(x smallint,y_sum double)
partitioned by (id smallint)
STORED AS ORC;
CREATE TABLE tbl_y like tbl_x;
insert overwrite table tbl_y partition(id)
select id, x, SUM(y) AS y_sum
fromtbl_x
group by id, x 
distribute by id, FLOOR(RAND()*100.0)%20;