两个数据源的笛卡尔积
Posted
技术标签:
【中文标题】两个数据源的笛卡尔积【英文标题】:cartesian product of two data sources 【发布时间】:2015-06-16 02:24:29 【问题描述】:假设我在 SSIS 中有两个数据源。
表 A 有 10 行,其中两列是空的。 表 B 有 20 行,每行两列。
我想以某种特定方式将他们加入 ETL 流程: 对于表 A 的每一行,使用表 B 中两列的值生成 20 行。
这样,表 A 和 B 中的行的每一种可能组合都会生成 200 行
我尝试使用 Merge Join 和 Union 片段,但它们不起作用...有什么解决方法的想法吗?
【问题讨论】:
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 【参考方案1】:SELECT table1.column1, table2.column2...
FROM table1, table2
笛卡尔连接是 MS-SQL 世界中的交叉连接。
使用不带 where 子句的交叉连接
SSIS 中用于交叉连接的分步说明: http://toddmcdermid.blogspot.be/2010/09/performing-cross-join-cartesian-product.html
一些关于交叉连接的 SQL Server 文档: https://technet.microsoft.com/en-us/library/ms190690%28v=sql.105%29.aspx
【讨论】:
如何将您的答案应用于 ETL 数据流? 也许这会对你有所帮助social.msdn.microsoft.com/Forums/sqlserver/en-US/… toddmcdermid.blogspot.be/2010/09/… 更详细的指南【参考方案2】:向两个源添加相同的列并为其分配相同的值,例如 1。因此 table1 中的所有 10 行和 table2 中的 20 行都具有该列的值“1”。当您现在执行merge join
时,保持连接类型为full outer join
,瞧!,您就有了cross join
。请记住,SSIS
需要在该列上对源进行排序才能继续使用Merge join
,否则会引发错误。
【讨论】:
以上是关于两个数据源的笛卡尔积的主要内容,如果未能解决你的问题,请参考以下文章
#pandas使用merge函数将两个pandas dataframe通过笛卡尔积(cartesian product)方式连接起来生成新的dataframe数据