Проверка целостности данных с помощью GX
Целостность данных базируется на связях и зависимостях между различными элементами данных. Это фундаментальный аспект обеспечения качества и достоверности информации. В современном ландшафте данных информация распространяется по нескольким системам, таблицам и платформам, поэтому поддержание надлежащих связей между элементами данных имеет решающее значение. Неспособность сохранить эти связи может привести к неправильному анализу, ошибочным бизнес-решениям и проблемам с соблюдением нормативных требований.
Наиболее распространенные проблемы в области целостности данных:
- Ссылочная целостность: Очень важно обеспечить корректность и последовательность связей между таблицами. Так, например, в финансовой системе каждая операция должна быть связана с действительными счетами.
- Строгое соответствие бизнес-правилам: Данные должны соответствовать установленной бизнес-логике и ограничениям, характерным для каждой конкретной области. Например, платформа электронной коммерции должна следить за тем, чтобы количество заказанных товаров не превышало имеющихся запасов, а адреса доставки строго соответствовали данным клиентов;
- Согласованность между столбцами: Необходимо проверять логические связи между связанными столбцами внутри и между таблицами. Например, в системе здравоохранения коды диагнозов должны точно совпадать с назначенными лекарствами, а назначенные даты лечения должны укладываться в разрешенные сроки;
- Зависимости значений: Необходимо поддерживать иерархии и зависимости в числовых и категориальных данных. Например, система управления проектами должна следить за тем, чтобы даты начала задач предшествовали датам окончания и чтобы родительские задачи охватывали продолжительность своих подзадач.
Неспособность проверить взаимосвязь данных может привести к расхождениям, неправильным расчетам и ошибочным выводам, подрывая надежность и ценность Ваших информационных активов.
Great Expectations (GX) предлагает проверенное решение для обеспечения целостности данных определяя релевантные ожидания, гибкие рабочие процессы и поддержку различных источников данных, что позволяет командам по работе с данными осуществлять комплексную проверку целостности всей экосистемы данных.
В этой статье мы говорим о том, как лучше всего использовать GX для определения и обеспечения соблюдения правил целостности данных. В ней рассматриваются различные методы проверки ссылочной целостности, согласованности между таблицами и соответствия определенным бизнес-правилам.
Необходимые условия
Эта статья предполагает то, что Вы уже знакомы с основными компонентами и рабочими процессами GX.
Предварительный обзор данных 
В примерах, приведенных в этой статье, используются образцы данных о финансовых транзакциях. Образцы данных получены из открытых таблиц базы данных Postgres, кроме того, они также доступны и в формате CSV.
-
transfers: В этой таблице содержится записи о каждой финансовой транзакции, включая сводную информацию о сумме и дате транзакции. Записи о ранзакциях содержат внешние ключи для записей в связанных таблицах, которые предоставляют дополнительную информацию о каждом переводе.
|
transfer_id |
amount |
transaction_date |
transfer_balance_id |
transfer_txn_id |
|---|---|---|---|---|
|
1001 |
250.00 |
2024-01-15 |
TB099 |
TT1234 |
|
1002 |
40.00 |
2024-01-15 |
TB101 |
TT1235 |
|
1003 |
1195.00 |
2024-01-16 |
TB102 |
TT1236 |
|
1004 |
80.00 |
2024-01-16 |
TB103 |
TT1237 |
-
transfer_balance: Данная таблица содержит записи, содержащие дополнительную информацию о проверке суммы по каждому переводу, что гарантирует, что общие дебеты и кредиты по каждой транзакции сбалансированы правильно, даже с учетом корректировок.
|
transfer_balance_id |
total_amount |
adjustment |
sender_debit |
recipient_credit |
|---|---|---|---|---|
|
TB099 |
250.00 |
0.00 |
-250.00 |
250.00 |
|
TB101 |
40.00 |
0.00 |
-40.00 |
40.00 |
|
TB102 |
1195.00 |
5.00 |
-1200.00 |
1195.00 |
|
TB103 |
80.00 |
2.50 |
-82.50 |
80.00 |
-
transfer_transaction: В этой таблице содержатся записи, содержащие сведения о транзакциях, включая идентификаторы отправителя и получателя, временные метки транзакции, номера ссылки и подтверждения.
|
transf er_txn_id |
sender_id |
sent_ts |
sende r_ref_no |
recip ient_id |
received_ts |
recipient_c onf_code |
|---|---|---|---|---|---|---|
|
TT1234 |
501 |
2024-11-14T01:12:45Z |
ABC-01 |
502 |
2024-11-14T01:12:46Z |
ABC-01 |
|
TT1235 |
502 |
2024-11-14T22:13:29Z |
DEF-03 |
503 |
2024-11-14T22:14:01Z |
DEF-03 |
|
TT1236 |
503 |
2024-11-15T09:47:00Z |
GHI-05 |
501 |
2024-11-15T09:47:59Z |
GHI-05 |
|
TT1237 |
504 |
2024-11-15T13:33:01Z |
JKL-07 |
502 |
2024-11-15T13:33:36Z |
JKL-07 |
Проверка целостности этих финансовых данных включает в себя проверку согласованности и точности отношений между таблицами transfer, transfer_balances и transfer_transaction, а также проверку соблюдения бизнес-правил и ограничений.
Основные ожидания согласованности данных
Great Expectations предоставляет комплекс ожиданий, доступных как в GX Cloud, так и в GX Core, которые проверяют отношения между различными элементами данных в одной таблице. Если Вы хотите использовать эти же ожидания для проверки отношений данных в нескольких таблицах, Вы можете воспользоваться следующими двумя вариантами:
- Создайте представление базы данных, объединяющее таблицы, которые Вы хотите проверить, а затем используйте встроенные ожидания для проверки столбцов в представлении;
- Создайте пользовательские SQL ожидания в GX Cloud или GX Core для проверки отношений напрямую с помощью SQL-запроса, который ссылается сразу на несколько таблиц.
В этом разделе описаны ожидания, которые можно применить к отдельным таблицам или SQL-представлениям, запрашивающим несколько таблиц.
Пример: Проверка целостности данных между таблицами, где показано, как можно создавать и использовать пользовательские SQL-ожидания для проверки отношений между отдельными таблицами.
Expect column pair values to be equal
Гарантирует, что все значения в одном столбце совпадают с соответствующими значениями в другом столбце.
Пример: Проверьте, совпадают ли контрольный номер отправителя и код подтверждения получателя по каждой транзакции в таблице transfer_transaction.
gxe.ExpectColumnPairValuesToBeEqual( column_A="sender_ref_no", column_B="recipient_conf_code" )
Expect multicolumn sum to equal
Гарантирует, что сумма нескольких столбцов равна ожидаемому значению, что особенно полезно для проверки финансовых расчетов и баланса.
Пример: Проверка суммы в таблице transfer_balances.
gxe.ExpectMulticolumnSumToEqual(
column_list=["adjustment", "sender_debit", "recipient_credit"], sum_total=0
)
Expect column pair values A to be greater than B
Проверяет, чтобы все значения в одном столбце превышали соответствующие значения в другом столбце.
Пример: Сделаем так, чтобы перевод всегда отправлялся до приемки, используя столбцы временных меток в таблице transfer_transaction.
gxe.ExpectColumnPairValuesAToBeGreaterThanB( column_A="received_ts", column_B="sent_ts", or_equal=True )
Советы GX по использованию ожиданий целостности
- Используйте пользовательские SQL-ожидания, если встроенные ожидания не охватывают все сложные бизнес-правила;
- Учитывайте возможные последствия для производительности при проверке по нескольким таблицам и большим наборам данных.
Примеры 
Включение бизнес-логики в процессы проверки целостности данных 
- Контекст: Определения качества данных связаны с реальным использованием соответствующих данных, качество данных зачастую приходится определять с помощью пользовательских бизнес-правил и логики. В этом примере показано применение встроенного ожидания для проверки целостности данных, а затем использование пользовательского ожидания SQL для уточнения проверки целостности с учетом определенной бизнес-логики;
- Цель: Используйте GX Cloud или GX Core для реализации проверки целостности с помощью встроенного ожидания. Затем для внедрения дополнительной бизнес-логики, которая определяет целостность более детально, воспользуйтесь пользовательским ожиданием SQL.
Пользовательские ожидания SQL
Пользовательские SQL-ожидания не срабатывают, когда предоставленный SQL-запрос возвращает одну или несколько строк. Постройте свои запросы так, чтобы выбирать строки на основе условия where.
- GX Cloud
- GX Core
Для выполнения действий, описанных ниже, воспользуйтесь пользовательским интерфейсом GX Cloud:
- Создайте актив данных для таблицы integrity_transfer_transaction, используя следующую строку подключения (для создания источника данных Postgres):
postgresql+psycopg2://try_gx:try_gx@postgres.workshops.greatexpectations.io/gx_learn_data_quality
-
Добавьте в столбец Expect пару значений (A), которые будут больше чем ожидание B, подразумевающее, что момент получения транзакции (received_ts) наступит после момента отправки транзакции (sent_ts):
-
Столбец A:
received_ts -
Столбец B:
sent_ts
-
Столбец A:
- Проверьте актив данных integrity_transfers на предмет соответствия ожиданию и проконтролируйте полученный результат. Если ожидание проходит, то все передачи принимаются сразу же после его отправки;
- Используя запрос, приведенный ниже, создайте пользовательское ожидание SQL для более глубокого уточнения бизнес-логики, определяющей эту проверку. Согласно ораничению бизнес-логики все транзакции должны быть отправлены и получены в течение 45 секунд.
select *
from {batch}
where extract(epoch from (age(received_ts, sent_ts))) > 45
- Проверьте актив данных integrity_transfers еще раз - теперь он содержит уже два ожидания;
- Проверьте результаты проверки. Повышенная точность пользовательского SQL-запроса позволяет увидеть, что одна из записей транзакции не соответствует определению целостности, основанному на применяемой бизнес-логике.
Решение GX: Как GX Cloud, так и GX Core предлагают определенные сочетание встроенных ожиданий и пользовательской проверки SQL, обеспечивая тем самым гибкость при соблюдении общих и индивидуальных требований, предьявляемых к качеству данных.
Проверка межтабличной целостности данных
Контекст: Проверка связей и зависимостей между элементами данных, расположенными в разных таблицах, является одной из самых распространенных задач, выполняемых в самых разных отраслях. В нашем примере задействованы образцы финансовых данных, содержащихся в таблицах transfers, transfer_balance и transfer_transaction. Это нужно для того, чтобы продемонстрировать, как проверить целостность сумм, корректировок и остатков транзакций в разных таблицах.
Цель: Используйте GX Cloud или GX Core для реализации пользовательского ожидания SQL для проверки целостности данных, содержащихся в таблицах. Убедитесь в том, что сумма в таблице транзакций совпадает с соответствующей суммой total_amount в таблице transfer_balance:
- GX Cloud
- GX Core
Используйте пользовательский интерфейс GX Cloud для выполнения следующих действий:
1. Используя следующую строку подключения для создания источника данных Postgres, создайте активы данных для таблиц integrity_transfers и integrity_transfer_balance:
postgresql+psycopg2://try_gx:try_gx@postgres.workshops.greatexpectations.io/gx_learn_data_quality
2.Добавьте пользовательский SQL-запрос на объект данных integrity_transfers для того, чтобы проверить, что столбец amount в integrity_transfers полностью совпадает со столбцом total_amount (в таблице integrity_transfer_balance). Соединение в SQL-запросе позволит GX Cloud проверить целостность данных, охватывающих сразу несколько таблиц:
select *
from {batch} t
join integrity_transfer_balance b using (transfer_balance_id)
where t.amount <> b.total_amount
Проверьте таблицу integrity_transfers и просмотрите результаты проверки.
Решение GX: Как GX Cloud, так и GX Core можно использовать для реализации комплексных проверок целостности, охватывающих сразу несколько таблиц и проверяющих сложные бизнес-правила.
Случаи применения
Комбинируя встроенные ожидания с пользовательскими SQL-проверками, организации могут создавать комплексные системы проверки, выявляющие любые несоответствия, предотвращающие проблемы с качеством данных и обеспечивающие строгое соответствие бизнес-правилам и нормам.
Межсистемная финансовая проверка
Контекст: для составления отчетности и соблюдения нормативных требований финансовым учреждениям необходимо обеспечить согласованность данных сразу в нескольких системах. Операции, производимые в них, должны регистрироваться одинаковым образом, а полученные балансы - тщательно выверяться.
Решение GX: Используйте пользовательские SQL-ожидания для сравнения данных о транзакциях в разных системах. Для проверки баланса бухгалтерских проводок в каждой системе используйте ExpectMulticolumnSumToEqual. Для обеспечения согласования итогов транзакций во всех системах создайте дополнительные пользовательские SQL-ожидания.
Инвентаризация продукции и проверка заказов 
Контекст: Платформы электронной коммерции должны гарантировать точное отслеживание запасов и обработку заказов для того, чтобы минимизировать риски повторных продаж, задержек и недовольство клиентов.
Решение GX: Для проверки соответствия размещенных заказов складским запасам используйте ExpectColumnPairValuesAToBeGreaterThan. Для гарантии того, что адреса доставки строго соответствуют данным о клиентах используйте пользовательские SQL ожидания. Для проверки соответствия итоговой стоимости заказов общей сумме каждого заказа по отдельности используйте ExpectMulticolumnSumToEqual.
Соблюдение требований, предъявляемых к данным в области здравоохранения 
Контекст: Медицинские организации должны контролировать целостность данных, занесенных в различные системы для того, чтобы обеспечить высокое качество обслуживания, точность поставленных диагнозов и корректное возмещение расходов с учетом нормативных требований.
Решение GX: Используйте пользовательские SQL-ожидания для обеспечения связи процедур с актуальными записями пациентов и соответствия кодов счетов разработанным планам лечения. Для проверки соответствия ключевых идентификаторов пациентов, занесенных в разные системы, используйте ExpectColumnPairValuesToBeEqual. Для проверки соответствия кодов диагнозов назначенным лекарственным средствам задействуйте дополнительные пользовательские SQL-ожидания.
Наиболее распространенные ошибки в области целостности данных 
- Отсутствие проверки данных, занесенных в разные системы: многие организации уделяют особое внимание проверке данных в разных системах, не следя при этом за согласованностью при интеграции или передаче данных между ними. Это может привести к нежелательным расхождениям и неточностям, влияющим на последующие процессы и принятие решений в целом;
- Игнорирование важности ссылочной целостности: несоблюдение ссылочной целостности может привести к появлению лишних ненужных записей, недействительных ссылок и несоответствию данных. Команды по работе с данными должны уделять первоочередное внимание проверке связей между таблицами и обеспечению строго соблюдения ограничений внешних ключей;
- Проверки исключительно на уровне приложений: несмотря на всю важность проверок на уровне приложений, одних только их может быть недостаточно для решения потенциально возможных проблем с целостностью данных. Особенно это касается тех случаев, когда данные изменяются за пределами приложений или при интеграции информации, содержащейся во внешних источниках. Реализация ограничений и проверок на уровне БД имеет решающее значение для поддержания целостности данных.
- Неправильная обработка значений NULL: значения NULL могут вносить двусмысленность в записи и усложнять проверку целостности данных в целом. Командам по работе с данными настоятельно рекомендована разработка четкой политики работы с NULL;
- Отсутствие комплексного мониторинга качества данных: проблемы с целостностью данных могут возникать постепенно в силу изменений в исходных системах, пайплайнах или бизнес-правилах. Внедрение регулярного мониторинга качества данных и оповещений необходимо для проактивного выявления и устранения проблем с целостностью данных;
- Неполное тестирование преобразований данных: преобразования данных и процессы ETL могут вызывать проблемы с целостностью, особенно в том случае, если их не протестировать тщательным образом. Команды по работе с данными должны проверять точность и согласованность преобразованных данных, обеспечивать сохранность бизнес-правил и взаимосвязей на протяжении всего пайплайна.
Дальнейшие шаги
Целостность данных - важнейший аспект реализации комплексной стратегии качества данных. Используя встроенные и пользовательские возможности проверки Great Expectations, Вы сможете обеспечить точное соблюдение правил целостности, гарантируя при этом согласованность и точность данных, а также соответствие нормативным требованиям. Поскольку поддержание целостности данных - процесс непрерывный, крайне важно обеспечить регулярную проверку и мониторинг информации. Только так Вы сможете достичь поставленных целей.
Однако целостность данных – далеко не единственный аспект качества данных. Для обеспечения достоверности используемых наборов данных необходимо учитывать и другие компоненты, такие как схема, полнота, распределение и объем. Начните с определения приоритетов и постепенно расширяйте охват проверки для того, чтобы учесть все эти показатели.





