【问题标题】:Hive - Insert specified values from select statement into table and partition valuesHive - 将 select 语句中的指定值插入到表和分区值中
【发布时间】:2017-08-16 00:32:54
【问题描述】:

我正在努力仅将另一个表中的指定值插入 Hive 中的分区表,因为我无法弄清楚如何在同一插入语句中指定分区列和特定列。我已经阅读了分区列值需要是 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;

【问题讨论】:

  • 您能否发布您的创建模式语句,以便我们可以看到目标 tbl (tableName)。

标签: apache hadoop hive hql partition


【解决方案1】:

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

【讨论】:

  • 您好,我已将创建表格的代码添加到帖子中,抱歉应该首先包含该代码。
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2017-08-24
  • 2016-09-01
  • 2015-01-10
  • 2013-07-01
相关资源
最近更新 更多