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

i7uaboj4  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(488)

我正在努力将另一个表中的指定值插入到配置单元中的分区表中,因为我不知道如何在同一insert语句中指定分区列和特定列。我已经读到分区列值必须是select语句中的最后两个,并且按照它们在分区中出现的顺序排列。但查询随后抱怨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;
r1zhe5dt

r1zhe5dt1#

不知道为什么在两个语句中有五个分区
( 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;

相关问题