两个数据源的笛卡尔积

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数据

什么是笛卡尔积?

笛卡尔积的两个向量?