使用 Hive/Pyspark 的不明确列引用
Posted
技术标签:
【中文标题】使用 Hive/Pyspark 的不明确列引用【英文标题】:Ambiguous Column Reference with Hive/Pyspark 【发布时间】:2020-07-27 20:55:29 【问题描述】:我需要执行以下查询:
SELECT
a.uuid,
b.uuid
FROM
(
SELECT DISTINCT
l.uuid AS east,
r.uuid AS west
FROM
tabl1 AS l
INNER JOIN tabl1 AS r
USING (attr_group)
WHERE l.uuid < r.uuid
) AS ids
INNER JOIN tabl2 AS a
ON (ids.east = a.uuid)
INNER JOIN tabl2 AS b
ON (ids.west = b.uuid)
问题是,当我有两个 a.uuid 和 b.uuid 时,代码会在 uuuid 上给出模棱两可的错误。 但是当我尝试仅使用 a.uuid 或仅使用 b.uuid 时,查询有效。
另一个观察结果是查询使用 hive.execute(query) 运行,但不使用 hive.executeQuery(query)。我在 Zeppelin 中使用 pyspark 解释器。
HIVE 版本为:3.1.0。
【问题讨论】:
使用 AS 重命名一个 uuid,就像在 ids 子查询中一样。 @leftjoin 将 uuid 从“SELECT a.uuid, b.uuid ...”更改? 【参考方案1】:最终结果集中的两列具有相同的名称。只需给它们起别名即可消除歧义:
SELECT
a.uuid AS uuid_a, --> here
b.uuid AS uuid_b --> and here
FROM (
SELECT DISTINCT
l.uuid AS east,
r.uuid AS west
FROM tabl1 AS l
INNER JOIN tabl1 AS r USING (attr_group)
WHERE l.uuid < r.uuid
) AS ids
INNER JOIN tabl2 AS a ON ids.east = a.uuid
INNER JOIN tabl2 AS b ON ids.west = b.uuid
请注意,连接条件周围的括号是不必要的 - 我删除了它们。
【讨论】:
以上是关于使用 Hive/Pyspark 的不明确列引用的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 12c - 插入到选择查询中的不明确列,ORA-00918