Как перебрать все таблицы и поля в каждой таблице, чтобы получить процент пропущенных значений - PullRequest
2 голосов
/ 24 октября 2019

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

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

2 голосов
/ 24 октября 2019

Следующий запрос 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
...