Как перебрать все таблицы и поля в каждой таблице, чтобы получить процент пропущенных значений

Я пытаюсь с помощью SSIS получить таблицу, чтобы получить процент отсутствующих значений каждого поля в каждой таблице базы данных SQL Server.

В идеале я хотел бы создать новую таблицу в другой базе данных с 4 полями

Таблица / Поле / Тип / PctMissingValues

с одной строкой для каждого поля таблицы. Тип будет типом поля

Моя идея состояла в том, чтобы использовать контейнеры цикла foreach для цикла по таблицам и полям, с внутри контейнера задача потока данных, состоящая из источника OLE DB> Aggregate > OLE DB Destination, но я не могу понять, как это сделать, я новичок в SSIS и ETL в целом

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

Вы можете использовать задачу профилирования данных SSIS, чтобы получить отношение значений NULL в таблице. В Интернете есть много ссылок на пошаговое руководство:

Другие вопросы по тегам