Hive:使用相同的键连接多个表

Posted

技术标签:

【中文标题】Hive:使用相同的键连接多个表【英文标题】:Hive: joining multiple tables with same key 【发布时间】:2019-02-22 08:41:31 【问题描述】:

我正在尝试加入 hive 中的多个表,它们有一个公共键 col

create table merged_table as
select a.*,b.*,c.* from table1 a
join table 2 b
on a.col = b.col
join table3 c
on c.col = d.col

但这会产生以下错误:

失败:SemanticException [错误 10036]:列名重复:col

这些表有很多列。有什么方法可以在不显式写入查询中的列名的情况下做到这一点?

【问题讨论】:

您需要在选择中重命名col 列,因为select a.*,b.*,c.* 将产生三个名称为col 的列,这就是您收到Duplicate column name: col 错误的原因。例如select a.col as col_a, b.col as col_b 这似乎是一个 SQL 问题,而不是 HQL 问题。注意 hql 代表 Hibernate Query Language,而不是 Hive Query Language @serge_k 那么这行得通吗select a.col as col_a, b.col as col_b, c.col as col_c, a.*, b.*, c.*?或者你的意思是说我必须明确指定所有列都需要什么? @LukasEder 好的 @prashanth 您的选择也不起作用,您需要明确指定所有列。或者您可以使用正则表达式选择列,即从任一表中选择除colcol 之外的所有列,请参阅***.com/questions/33633071/… 【参考方案1】:

您不能创建具有重复列名的表。虽然在 SQL *** SELECT 语句中可能会产生不明确/重复的列名,但此类查询不能在 CREATE TABLE AS SELECT 中使用。您应该重命名每个单独的列名,可能在它们前面加上原始表名:

create table merged_table as
select a.col1 as a_col1, a.col2 as a_col2, ..., b.col1 as b_col1, ...
from table1 a
join table2 b on a.col = b.col
join table3 c on b.col = c.col

【讨论】:

以上是关于Hive:使用相同的键连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

Hive 中的多个表连接出现错误 - 连接中遇到左右别名

Hive 外部表架构重新连接

连接两个具有不同键名的表

Hive SQL 多个左外连接查询在其结果中缺少记录

mysql 来自同一列的多个连接具有不同的键

多个 Hive 连接因执行错误而失败,返回代码 2