我是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也被分区。
尝试这样做是行不通的:
CREATE TABLE tbl_y AS SELECT `id`, `x`, SUM(`y`) AS `y_sum`
FROM `tbl_x`
GROUP BY `id`, `x` PARTITIONED BY (id SMALLINT);
这里有什么诀窍?我是否应该先定义分区表并将结果插入?
1条答案
按热度按时间xesrikrc1#
是的,您应该单独创建一个分区表。不支持按选择方式创建分区表(ctas)。
如果表架构相同,则可以使用create like:
你也可以使用
DISTRIBUTE BY
要在减速器之间均匀分布数据,请参见以下答案:https://stackoverflow.com/a/38475807/2700344