【问题标题】:How to loop through all tables and fields in each table to get percentage of missing values如何遍历每个表中的所有表和字段以获取缺失值的百分比
【发布时间】:2020-02-20 06:40:31
【问题描述】:

我正在尝试使用 SSIS 获取一个表,以获取 SQL Server 数据库的每个表中每个字段的缺失值百分比。

理想情况下,我想在另一个数据库中创建一个包含 4 个字段的新表

表/字段/类型/PctMissingValues

表格的每个字段都有一行。类型将是字段类型

我的想法是使用 foreach 循环容器来循环遍历表和字段,在容器内部有一个数据流任务,由 OLE DB Source > Aggregate > OLE DB Destination 组成,但我不知道该怎么做,我总的来说,我是 SSIS 和 ETL 的新手

【问题讨论】:

  • 我无法为您解答,但这里有一些可能会有所帮助的链接。他们每个人看起来都只会在一张桌子上操作。因此,您必须从容器中的 sys.tables 查询所有表,或者您可以使用游标并在查询中完成所有操作,而根本不使用 SSIS。 dba.stackexchange.com/questions/14864/…blogs.msdn.microsoft.com/samlester/2012/09/22/…
  • 为什么选择 SSIS?就个人而言,如果我想这样做,我会沿着使用动态 SQL 的路线走下去,这样你就可以用一个查询来检查单个表中的所有列,这应该会更快。
  • @BarneyL 感谢您的评论。从未听说过动态 SQL,我会研究一下。我想使用 SSIS,因为我的客户特别要求我们使用它来解决这个问题
  • @Isaac 谢谢,第二个链接看起来很有希望,我会更仔细地研究一下
  • @Isaac,是的。只是从线程误读。用于 fmarm。

标签: sql-server ssis etl data-profiling


【解决方案1】:

您可以使用SSIS data profiling task 来获取表中的NULL 值比率。网上有很多链接可提供分步指南:

【讨论】:

    【解决方案2】:

    以下 SQL 查询为数据库中的每一列生成一个查询,该查询计算总行数和值为 NULL 的行数。

    您可以将其加载到一个变量中,并在 SSIS 中循环遍历它,每次运行每一行中的语句并将查询的结果表单记录到另一个表中。

    SELECT 
     OBJECT_SCHEMA_NAME(C.object_id) AS TableSchema
    ,OBJECT_NAME(C.object_id) AS TableName
    ,C.name AS ColumnName
    ,'SELECT COUNT(*) AS TotalRows, COUNT(IIF([' +C.name+ '] IS NULL,1,NULL)) AS NullRows 
        FROM [' + OBJECT_SCHEMA_NAME(C.object_id) + '].[' + OBJECT_NAME(C.object_id) + ']' AS CountQuery
    FROM sys.columns AS C
    INNER JOIN sys.tables AS T
        ON C.object_id = T.object_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多