【发布时间】:2017-12-31 21:12:41
【问题描述】:
如果这是一个愚蠢的问题,我很抱歉,但我似乎无法理解它。我对 SQL 很陌生,这种行为在 R 或 Pandas 或我习惯使用的其他东西中会很奇怪。
基本上,我在两个不同的数据库中有两个表,有一个公共键user_id。我想加入所有列
SELECT * FROM db1.first_table t1
JOIN db2.second_table t2
ON t1.user_id = t2.user_id
很好,它有效。除了有两个(相同的)列称为user_id。这并不重要,除非我在 pyspark 中执行此操作,并且当我尝试将连接的表导出到平面文件时,我收到一个错误,即其中两列具有相同的名称。有解决方法,但我只是想知道是否有人可以解释为什么连接返回 both user_id 列。看起来它是一个内部连接,所以根据定义,列是相同的。为什么会同时返回?
作为一个附带问题,有没有一种简单的方法可以避免这种行为?
提前致谢!
【问题讨论】:
-
因为“select *”正在返回两个表中的所有列。如果你需要限制,那么明确定义你想要的table.columns
-
因为您使用的是
SELECT *,这意味着它会返回连接中每个表的每一列 -
解决方法?使用
select *实际上不是很好的做法,您应该始终定义要检索的列。这不是一种解决方法——你应该这样做! -
我唯一的问题是,这两个表实际上都有超过 1000 列。我可以把它们都列出来,但它会有点乏味,更不用说丑陋了。你能做 SELECT * EXCEPT user_id 吗?
标签: sql pyspark-sql