【问题标题】:SSIS Import from Multiple Data Sources从多个数据源导入 SSIS
【发布时间】:2013-05-03 04:55:29
【问题描述】:

我有一点挑战。我必须整合来自三个不同数据库(Oracle、SQL Server 和 Teradata)的一些数据。

如何根据从 Oracle 检索的数据从 TeraData 和 SQL Server 检索数据?

例如,Oracle 有销售信息,TeraData 有客户信息,SQL Server 有员工信息。

我从具有客户端 ID 列表的 Oracle 中提取销售列表,并希望根据这些客户端 ID 限制 TeraData 拉取。

然后,客户端有一个与 SQL Server 相关联的员工标识符。

我可以单独连接每个,但想限制每个的拉动。

Oracle 返回大约 3,000 行,而 TeraData 本身返回 400,000 行。 Oracle 到 TeraData 是多对​​一关系(许多 oracle 记录到 1 个 TeraData 记录)。

我曾尝试使用数据源合并选项,但它单独运行每个数据源,然后将它们合并,由于 TeraData 中的记录数量,最终会大大增加处理时间。

感谢您的帮助。谢谢。

【问题讨论】:

  • 最有效的方法是将最少的记录本地复制到记录最多的服务器,然后加入来决定发回什么。我希望您的销售记录(在 Oracle 中)比客户记录(在 Teradata 中)要多得多,您确定您的方法正确吗?这样做的目的是为了报告(在这种情况下,我建议您研究星型模式、ETL 等)还是为了管理主数据?
  • @ElectricLlama 我没有对任一服务器的写入权限。有没有办法从一个中提取数据作为另一个中的临时表?
  • 如果你会通过一个巨大的 IN 字符串传递一些 SQL,但它会减少记录数:SELECT Sales.* FROM Teradata.Sales WHERE ClientID IN (<pre-generated in-list>) 在针对 Teradata 运行之前,你需要从其他东西预先生成一个静态 SQL 字符串。如果它很大,您可能会遇到 SQL 长度问题。
  • 如果你没有写权限,你将最终数据推送到哪里?
  • @ElectricLlama 它从 TeraData 和 Oracle 和 SQL Server 中提取数据并导出到 CSV。

标签: sql oracle ssis teradata


【解决方案1】:

如果你认为它会减少记录数,你会传递一些带有巨大 IN 字符串的 SQL:SELECT Sales.* FROM Teradata.Sales WHERE ClientID IN () 你需要从其他东西预先生成一个静态 SQL 字符串在针对 Teradata 运行之前。如果它很大,您可能会遇到 SQL 长度问题。

您是否有从 Oracle 检索唯一客户端 ID 的 SQL 语句?

SELECT DISTINCT ClientID FROM SCHEMA.SALES

【讨论】:

  • 正如我上面提到的,在构建 IN 字符串时,SSIS 字符串变量将超过 4000 个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
相关资源
最近更新 更多