我遇到过几次问题:我在db1中有一个表table1。我在db2中有table2。我如何加入两者之间?
显而易见的事情是:
SELECT *
FROM db1.table1 INNER JOIN db2.table2
ON db1.table1.field1 = db2.table2.field2;
但是,Hive并不喜欢这样;它开始治疗" table1"和" table2"好像它们是列名," db1"和" db2"作为表名,并在他们不存在时抱怨。如何在不同数据库中的两个表之间进行连接?
答案 0 :(得分:16)
在Hive中,不同数据库中的表之间的连接统一要求为每个{db,table}对设置别名。因此,您必须使用:
而不是问题中提供的语法SELECT *
FROM db1.table1 alias1 INNER JOIN db2.table2 alias2
ON alias1.field1 = alias2.field2;
这很有效。当然,重要的是要记住,如果您要求 SELECT
语句中的特定字段,那么别名也适用于那里。所以:
SELECT db1.table1.field1, db2.table2.field2
变为:
SELECT alias1.field1, alias2.field2