基本 SSIS 层次结构移动
Basic SSIS hierarchy move
我有一个关系数据库,我想在其中将分层数据的子集从一个数据库复制到另一个数据库。我发现了很多关于通过各种转换移动或复制单个 table 的信息,但关于基本分层移动的信息并不多。
关于在 SSIS 中执行此操作,我有三个问题。
- 与自动递增的整数 ID 相比,唯一标识符 ID 是否会使这项工作更容易?
- 如何在 SSIS 中复制基本 Parent/Child?
- 如何复制一个更复杂的 Parent/Child/Parent2?
问题 1:唯一标识符 ID
一个 solution to a question about moving data 描述了创建巧妙的分段 table 以创建新 ID。这让我认为 SQL UniqueID 比整数自动递增 ID 更有优势,因为可以简单地设置 "Keep Identity" 而无需担心冲突。这是真的吗?
问题 2:移动基本层次结构
这是我的数据库(父<-子)的简化模式:
OptimizationSets<-AllocationLimits
Assets<-AllocationLimits
Assets<-Returns
我想从 OptimizationSets table 中选择一些行以从一个数据库复制到另一个数据库。此外,我想复制 AllocationLimits 中相应的子行。我可以使用 OLE DB 源轻松地 select 所需的父行,但是 selecting 子行似乎并不明显。查找函数仅 returns 一个子行而不是所有子行。
问题 3:复杂关系
除了 AllocationLimits 中的 selected 行之外,我还想复制 Assets 中的相关父行,以及相关的 returns.
这不是一个完整的答案,但是分层移动可以使用 Merge Join 和查找块来完成。一些数据流需要排序,这可以通过块中的SQL语句或排序块来完成。
这里有一些流程(抱歉,因为我是新手所以不能post图片):
- OptimizationSets 源 -> 多播 1
- 多播 1 -> OptimizationsSets 目的地
- 多播 1 -> MergeJoin 1
- AllocationLimits 来源 -> MergeJoin 1
- MergeJoin 1 -> 多播 2
- 多播 2 -> AllocationLimits 目的地
- 多播 2 -> 排序 -> 查找资产
- 查找资产 -> 多播 3
- 多播 3 -> 资产目的地
- 多播 3 -> MergeJoin 3
- Returns 来源 -> MergeJoin 3
- MergeJoin 3 -> Returns 目的地
遗漏了一些细节,例如来源上的一些 SQL WHERE 和 ORDER BY 子句,但总体流程非常简单。获取 children 和 parents 可以通过 MergeJoin 和 Lookup 块来完成。
我有一个关系数据库,我想在其中将分层数据的子集从一个数据库复制到另一个数据库。我发现了很多关于通过各种转换移动或复制单个 table 的信息,但关于基本分层移动的信息并不多。
关于在 SSIS 中执行此操作,我有三个问题。
- 与自动递增的整数 ID 相比,唯一标识符 ID 是否会使这项工作更容易?
- 如何在 SSIS 中复制基本 Parent/Child?
- 如何复制一个更复杂的 Parent/Child/Parent2?
问题 1:唯一标识符 ID
一个 solution to a question about moving data 描述了创建巧妙的分段 table 以创建新 ID。这让我认为 SQL UniqueID 比整数自动递增 ID 更有优势,因为可以简单地设置 "Keep Identity" 而无需担心冲突。这是真的吗?
问题 2:移动基本层次结构
这是我的数据库(父<-子)的简化模式:
OptimizationSets<-AllocationLimits
Assets<-AllocationLimits
Assets<-Returns
我想从 OptimizationSets table 中选择一些行以从一个数据库复制到另一个数据库。此外,我想复制 AllocationLimits 中相应的子行。我可以使用 OLE DB 源轻松地 select 所需的父行,但是 selecting 子行似乎并不明显。查找函数仅 returns 一个子行而不是所有子行。
问题 3:复杂关系
除了 AllocationLimits 中的 selected 行之外,我还想复制 Assets 中的相关父行,以及相关的 returns.
这不是一个完整的答案,但是分层移动可以使用 Merge Join 和查找块来完成。一些数据流需要排序,这可以通过块中的SQL语句或排序块来完成。
这里有一些流程(抱歉,因为我是新手所以不能post图片):
- OptimizationSets 源 -> 多播 1
- 多播 1 -> OptimizationsSets 目的地
- 多播 1 -> MergeJoin 1
- AllocationLimits 来源 -> MergeJoin 1
- MergeJoin 1 -> 多播 2
- 多播 2 -> AllocationLimits 目的地
- 多播 2 -> 排序 -> 查找资产
- 查找资产 -> 多播 3
- 多播 3 -> 资产目的地
- 多播 3 -> MergeJoin 3
- Returns 来源 -> MergeJoin 3
- MergeJoin 3 -> Returns 目的地
遗漏了一些细节,例如来源上的一些 SQL WHERE 和 ORDER BY 子句,但总体流程非常简单。获取 children 和 parents 可以通过 MergeJoin 和 Lookup 块来完成。