【问题标题】:Constructing a flat file from many other tables in an SQL Server environment从 SQL Server 环境中的许多其他表构造平面文件
【发布时间】:2012-02-22 09:15:45
【问题描述】:

对不起,如果这是错误的地方,但我不确定哪个 Stack Exchange 网站适合这些类型的问题。

我的任务是为直接营销建立一个地址池。我必须:

  • 合并不同的地址列表(所有这些都已在数据库中)
  • 根据某些规则正确名称(例如,如果名称类似于“John & Mary Doe”,我需要将名称拆分为“John Doe”和“Mary Doe”)
  • 重复记录
  • 通过加入我们的客户姓名和地址数据库来查找客户编号
  • 加入几个提供客户信息(年龄、性别、客户价值、他/她已经从我们这里购买过哪些产品、他/她最近何时联系)的表格
  • 加入几个提供区域信息的表格(我们在该区域销售了多少产品,社会人口结构是什么,该区域的平均收入是多少)
  • 用所有这些信息构建一个平面表,并使其在同一个数据库中可用(没有来自其他系统或平面文件的输入/输出)
  • 安排它每晚运行

所以现在我正在考虑哪种方法是实现这一目标的最佳方式。我可以考虑以下替代方案。

  1. 只需使用 UNION、JOINS 和 SELECT INTO 编写一个大型 SQL 批处理
    + 直截了当
    + 灵活
    - 难以阅读
    - 难以维护
    - 当我总是在步骤之间创建中间表时速度很慢

  2. SQL Server 集成服务
    + 易于阅读和维护
    + 良好的错误处理
    + 自我记录
    + 视觉
    - 我需要学习它
    - 不确定它在窗口函数(排名、行号等)方面是否足够灵活
    - 不确定它是否会比 SQL 更快或更慢
    - AFAIK 无法从数据流中创建 SQL(以防万一)

  3. SQL Server 分析服务
    - 我什至不知道它与 SSIS 有何不同

  4. 其他方式??

谢谢

【问题讨论】:

  • SSAS与ETL无关;它是一个 OLAP 工具。

标签: sql database sql-server-2005 ssis etl


【解决方案1】:

顾名思义,SSIS 对于来自许多不同来源的数据集成/转换很有用。如果您在 SQL Server 上做所有事情 - 使用存储过程。这应该足以满足您的需求。临时表在这里将非常有用。

另一方面...

SSIS 是一个非常强大的工具,因为所有的数据流工作都是在内存中完成的,所以它很快,但你需要担心你的内存消耗。这取决于数据量,但您还需要在这里避免任何异步操作(分组、排序),因为它们很容易填满您的记忆。如果数据流中有大量的转换、更新、计算等,SSIS 可以更快。

但是……

这里有第三个选项。使用“数据流”和“执行 SQL 任务”组件将这两者结合起来。

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2013-08-04
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多