Hive - 将select语句中的指定值插入表和分区值

时间:2017-03-23 12:38:11

标签: apache hadoop hive hql partition

我很难将另一个表中的指定值插入到Hive中的分区表中,因为我无法弄清楚如何在同一个insert语句中指定分区列和特定列。我已经读过分区列值需要是select语句中的最后两个,以及它们在分区中出现的顺序。但查询然后抱怨选择有5个结果,但只插入3个。

任何帮助都会受到大力赞赏。

CREATE TABLE IF NOT EXISTS tableName (
code INT,
value1 DECIMAL(12, 8),
value2 DECIMAL(12, 8),
)
PARTITIONED BY(part1 DECIMAL(10, 3), part2 DECIMAL(10, 3));

INSERT INTO TABLE tableName
PARTITION 
(
part1,
part2
) 
(
code,
value1,
value2,
)
SELECT 
code,
value1,
value2,
ROUND(value1, 2),
ROUND(value2, 2) 
FROM importData;

1 个答案:

答案 0 :(得分:0)

不确定为什么在两个语句( part1, part2 ) ( code, value1, value2, )中有五个分区。你说错了,分区列最后说明了。也许这个简化的例子将帮助您走上正确的轨道,完成您所追求的目标。

INSERT INTO TABLE tblnm PARTITION (p1,p2)
SELECT code, value1, value2, ROUND(value1, 2) as p1, ROUND(value2, 2) as p2
FROM importData;

- 更新
我可以问你为什么在你的分区之后有(code,value1,value2,)

这应该有效:

CREATE TABLE IF NOT EXISTS tableName (
code INT,
value1 DECIMAL(12, 8),
value2 DECIMAL(12, 8),
)
PARTITIONED BY(part1 DECIMAL(10, 3), part2 DECIMAL(10, 3));

INSERT INTO TABLE tableName PARTITION (part1,part2) 
  SELECT 
    code,
    value1,
    value2,
    ROUND(value1, 2),
    ROUND(value2, 2) 
  FROM importData;