Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在数据仓库中加载数据的最佳方法_Sql Server_Ssis_Etl_Data Warehouse - Fatal编程技术网

Sql server 在数据仓库中加载数据的最佳方法

Sql server 在数据仓库中加载数据的最佳方法,sql-server,ssis,etl,data-warehouse,Sql Server,Ssis,Etl,Data Warehouse,我们正在从头开始构建一个新的近实时(每10分钟刷新一次)医院数据仓库。数据位于oracle数据库中,我们计划使用SSIS包从oracle提取数据并加载到SQL Server数据库中。我对DWH住房非常陌生,需要关于建造DWH的建议 问题: 从Oracle提取数据时,我应该导入完整的表还是只获取所需的选定列? 例如:如果我有person、address、facility\u hist表,我应该将它们加入提取包中,只获取所选列吗?或者我应该在暂存区域中分别提取所有三个表,然后将它们合并并加载到SQL

我们正在从头开始构建一个新的近实时(每10分钟刷新一次)医院数据仓库。数据位于oracle数据库中,我们计划使用SSIS包从oracle提取数据并加载到SQL Server数据库中。我对DWH住房非常陌生,需要关于建造DWH的建议

问题:

  • 从Oracle提取数据时,我应该导入完整的表还是只获取所需的选定列? 例如:如果我有person、address、facility\u hist表,我应该将它们加入提取包中,只获取所选列吗?或者我应该在暂存区域中分别提取所有三个表,然后将它们合并并加载到SQL Server中
  • 2) 应该在目标表上创建索引,还是在提取数据时创建索引

  • 我计划使用create_dt_tm批量加载初始记录,并在几个月内加载数据。一旦加载了所有内容,我们计划使用updt_dt_tm并加载在过去10分钟内完成的所有更新

  • 连接到数据库是不是每10分钟获取一次数据的好主意

  • 图中显示了我计划使用的DWH ETL SSIS包(我将把它连接到oracle数据库,而不是平面文件)


    这是一个非常广泛的问题,您还没有深入到问题的深层复杂性中 将源医疗数据映射到业务友好的星形模式

    数据仓库要求和十分钟要求从何而来?对于业务来说,什么是更重要的驱动因素:延迟只有十分钟,还是拥有一致的正确信息?我猜重点是运营(准入等),而不是财务或人力资源

    从Oracle提取数据时,是否应导入完整的 表还是只获取所需的选定列?例如 :如果我有person、address、facility\u hist表,我应该加入它们吗 提取包并仅获取所选列?还是我应该 在暂存区域中分别提取所有三个表,然后合并 并将它们加载到SQL Server中

    在“ODS层”方法中,您的SQL数据库中有Oracle表的完整副本(通常在不同的SQL Server模式中。注意,Oracle和SQL Server中的“模式”意味着细微的不同)

    ODS基本上是源系统的副本。如果您想要10分钟的刷新,那么您需要将增量(仅更改)加载到ODS中。要做到这一点,您需要知道自上次加载ODS以来源代码中发生了什么变化。如果源中有一个“上次更改”字段,这很容易。否则就会变得非常困难

    ODS方法与“批量加载”模式保持一致,即数据在层中进行批处理。ODS允许您在不同层进行测试和故障排除

    ODS方法不同于“流”方法,后者支持实时报告,但在整个流中包含独立的转换规则

    应该在目标表上创建索引,还是在提取数据时创建索引

    在加载数据之前,通常应禁用/删除表上的索引,然后再重新生成索引

    我计划使用 为记录创建_dt_tm,并在几个月内加载数据。一旦 一切都已加载,我们计划使用updt_dt_tm和加载 在过去10分钟内完成的任何更新

    我不知道什么是
    updt_dt_tm
    ,但这听起来是个好主意

    连接到数据库是不是每10分钟获取一次数据的好主意

    对。你还将如何获得数据

    总之,基于增量负载,重点是让一个10分钟的ODS副本工作。然后,下一步是将数据从ODS转换为星型模式

    如何使用SSIS包从Oracle提取数据并将其加载到SQL Server DWH中

    同样,这是一个非常广泛的问题,我可以在这里为您键入一个完整的方法,但我不认为我的付费客户会喜欢它

    有许多设计模式。我更喜欢ELT(Extract Load Transform)ODS方法,它是T-SQL的重量级方法,但根据我的经验,这是最好的方法。在这种方法中,您加载并暂存最近几天更新的记录,然后使用SQL将它们合并到ODS表中

    最后一件事:我在你的问题历史中看到你在问条件拆分。我只需要提醒你们,若你们开始在SSIS中使用条件拆分和查找来加载你们的数据,你们的包可能不会运行得很好,你们最终会遇到一些非常复杂的事情,这会让你们的十分钟时间变得很紧张


    这实际上可以归结为ETL与ETL方法。如果您不熟悉SQL,那么您可能必须使用ELT(全部登录SSIS包)方法。但根据我的经验,它变得缓慢且难以维护

    我最近构建了一个具有类似需求的解决方案,但我的解决方案只需几秒钟的延迟就可以将100多个表从Oracle EBS DB复制到“实时BI”系统。然而,我选择Vertica作为数据集成的数据库和流集

    StreamsSets是为流媒体而设计的,通过一条数据管道,它可以处理我所有的表。它可以计算出所有列,甚至可以计算出在目标数据库上更新所使用的键

    我使用Vertica是因为一个列式MPP数据库可以提供100倍于行数据库的性能,并且不使用需要重建的索引。Vertica比最近的纯云列数据库(如RedShift、Snowflake和BigQuery)更加成熟,并在内存中设计了写优化存储,在磁盘上设计了读优化存储,因此写操作速度非常快。在幕后,元组移动器进程每五分钟压缩一次写入的数据,但查询总是通过合并这两个区域返回最新的数据