【问题标题】: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 片段,但它们不起作用...有什么解决方法的想法吗?

【问题讨论】:

标签: ssis etl dataflow


【解决方案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

【讨论】:

【解决方案2】:

向两个源添加相同的列并为其分配相同的值,例如 1。因此 table1 中的所有 10 行和 table2 中的 20 行都具有该列的值“1”。当您现在执行merge join 时,保持连接类型为full outer join瞧!,您就有了cross join。请记住,SSIS 需要在该列上对源进行排序才能继续使用Merge join,否则会引发错误。

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2012-01-03
    • 2016-02-24
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多