Как перебрать все таблицы и поля в каждой таблице, чтобы получить процент пропущенных значений
Я пытаюсь с помощью 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 в таблице. В Интернете есть много ссылок на пошаговое руководство: