我们的一般流程是:
- 将源表中的数据复制到加载数据库中具有完全相同结构的表中
- 将数据转换为临时表,其结构与最终的事实/维度表相同
- 将数据从临时表复制到事实/维度表
SSIS 适用于第 1 步,这或多或少是一个 1:1 的复制过程,具有一些基本的数据类型映射和字符串转换。
对于第 2 步,我们混合使用存储过程、.NET 和 Python。大多数逻辑都在过程中,例如在外部代码中进行大量解析。纯 TSQL 的主要好处是转换通常依赖于加载数据库中的其他数据,例如,在 SQL JOIN 中使用映射表比在外部脚本中执行逐行查找过程快得多,即使使用缓存也是如此。诚然,这只是我的经验,程序处理可能更适合您的数据集。
在少数情况下,我们确实必须进行一些复杂的(DNA 序列)解析,而 TSQL 并不是一个可行的解决方案。这就是我们使用外部 .NET 或 Python 代码来完成工作的地方。我想我们可以在 .NET 过程/函数中完成这一切并将其保存在数据库中,但还需要其他外部连接,因此单独的程序是有意义的。
第 3 步是一系列 INSERT...SELECT... 语句:它很快。
所以总而言之,使用最好的工具来完成这项工作,不要担心把事情搞混。SSIS 包(或多个包)是将存储过程、可执行文件和您需要做的任何其他事情链接在一起的好方法,因此您可以在一个地方设计、执行和记录整个加载过程。如果这是一个巨大的过程,您可以使用子包。
我知道你对 TSQL 感到尴尬是什么意思(实际上,我发现它比其他任何东西都更重复),但它对于数据驱动的操作来说非常非常快。所以我的感觉是,在 TSQL 中进行数据处理,在外部代码中进行字符串处理或其他复杂操作。