Качество тестовых данных #synthesized #data #data-quality #tools #sql #greatexpectations
Vsevolod Brekelov 04.09.2021
#rndtechconf 1
Slide 2
Познакомимся 🙂
2
Slide 3
Привет, я Сева! 👋 Engineering Lead @Synthesized
@volekerb @brekelov
3
Slide 4
Привет, я Сева! 👋 Тестирование - Разработка - Менеджмент > 10 лет Курс по прикладному тестированию в ИТМО https:
github.com/volekerb/testing-lectures
Канал с инженерными статьями, книгами, видео https:
t.me/engineerreadings
@volekerb Конференции Heisenbug, JPoint, Joker
/
/
/
/
4
@brekelov
Почему Data Quality кого-то волнует? И что это?
10
Slide 11
🧑🔬
🤓
👩💻
Инженер данных
Исследователь данных
Аналитик данных
Запросы
👩 👨🦱 👱 Бизнес-пользователи
Запросы
Большие наборы данных - Бизнес правила
Вопросы - Обновления 11
Slide 12
Companies lose an average of $15M per year due to bad data
https: /
/
12
hbr.org/2020/02/data-driven-decisions-start-with-these-4-que
Slide 13
“With the goal of building and achieving data quality standards across Uber, we have supported over 2,000 critical datasets on this platform, and detected around 90% of data quality incidents.”
https:
eng.uber.com/operational-excellence-data-quality/
/
/
13
“For data consumption, we heard complaints from decision makers that different teams reported different numbers for very simple business questions, and there was no easy way to know which number was correct.”
https:
medium.com/airbnb-engineering/how-airbnb-achieved-metric-consistency-at-scale-f23cc53dea70
/
/
15
Slide 16
16
Slide 17
Data Quality
Что это?
• Accuracy: Is the data correct? • Consistency: Is everybody looking at the same data? • Usability: Is data easy to access? • Timeliness: Is data refreshed on time, and on the right cadence? • Cost Efficiency: Are we spending on data efficiently? • Availability: Do we have all the data we need? 17
Slide 18
• Accuracy: Is the data correct? “Корректность” может быть у каждого разной
18
Slide 19
• Consistency: Is everybody looking at the same data? Скорее речь о том, насколько данные консистенты с теми, что были в моменте “до” или в прошлом
19
Slide 20
• Usability: Is data easy to access? Хорошо. Но с качеством данных не очень поможет =)
20
Slide 21
• Timeliness: Is data refreshed on time, and on the right cadence?
Звучит очень хорошо!
21
Slide 22
• Cost Efficiency: Are we spending on data efficiently? Можно годами обсуждать с финансовыми отделами
22
Slide 23
• Availability: Do we have all the data we need? Это скорее про то, что доступны ли данные нам
23
Slide 24
#DataOps or #DataObservability
Метрики Built-in data observability
Алерты Automatic Data Testing
24
Data Quality Process Automation
По-порядку! • Приватность • Битые данные • Недостаточные данные • Тестирование данных (Может есть что-то типа JUnit?)
27
Slide 28
По-порядку! • Приватность • Битые данные • Недостаточные данные • Тестирование данных (Может есть что-то типа JUnit?)
28
Slide 29
Продакшн данные
🧑🔬 Мне нужны реальные данные, тк я тут такую машин лернинг модель сделал УУУХХ!
👩💻 Мне нужны исторические данные, хочу угадать, когда надо предлагать кредит!
🤓
Мне нужно протестировать систему и точно понять, что все кейсы ок проходят!
29
Slide 30
Продакшн данные
🧑🔬
Это все хорошо
Мне нужны реальные данные, тк я тут такую машин лернинг модель сделал УУУХХ!
👩💻
Мне нужны исторические данные, хочу угадать, когда надо предлагать кредит!
🤓
Мне нужно протестировать систему и точно понять, что все кейсы ок проходят!
Slide 31
Slide 32
Данные, но уже не оч похожие на продакшн
Моя машин лернинг модель чет плохо работает =(
А можно заново сделать, у нас там схема поменялась?
32
Slide 33
Синтетические данные 33
Slide 34
Синтезируем Продакшн данные
34
Данные ведут себя как продакшн данные
Slide 35
Данные ведут себя как продакшн данные
🧑🔬 О! Все заработало!
👩💻 Во! Теперь можно хорошо угадать!
🤓
Все быстро сгенерилось и могу сам обновить данные!
35
Slide 36
🥷 Теперь не найти реальные телефоны и адреса и номера кредиток. Как же я вам дозвонюсь?
36
Slide 37
По-порядку! • Приватность • Битые данные • Недостаточные данные • Тестирование данных (Может есть что-то типа JUnit?)
37
Slide 38
По-порядку! • Приватность • Битые данные • Недостаточные данные • Тестирование данных (Может есть что-то типа JUnit?)
38
Slide 39
Когда нужно генерировать данные? • Юнит/компонентные/интеграционные тесты • Интеграционные/Системные тесты с production-like системой
• Переехали на новый стек технологий (не было тестов, требований. Все как обычно)
• Только стартуем проект и нет продакшна 39
Slide 40
https:
github.com/topics/data-generation
/
/
40
Slide 41
Юнит тесты @Test void givenDefaultConfiguration_thenGenerateSingleObject() { EasyRandom generator = new EasyRandom(); Person person = generator.nextObject(Person.class);
assertNotNull(person.getAge()); assertNotNull(person.getFirstName()); assertNotNull(person.getLastName()); }
Person[firstName=’eOMtThyhVNLWUZNRcBaQKxI’, lastName=’yedUsFwdkelQbxeTeQOvaScfqIOOmaa’, age=-1188957731] 41
🤓 Написать
Script1.sql
Накатить
Script2.sql
Поддерживать
… ScriptN.sql
Угадать все сценарии =) 43
Slide 44
44
Slide 45
По-порядку! • Приватность • Битые данные • Недостаточные данные • Тестирование данных (Может есть что-то типа JUnit?)
45
Slide 46
AWS Deequ
Slide 47
val veri cationResult = Veri cationSuite() .onData(data) .addCheck(Check(CheckLevel.Error, “unit testing my data”) .hasSize(_ == 5) // we expect 5 rows .isComplete(“id”) // should never be NULL .isUnique(“id”) // should not contain duplicates .isComplete(“productName”) // should never be NULL .isContainedIn(“priority”, Array(“high”, “low”)) .isNonNegative(“numViews”) // should not contain negative values .containsURL(“description”, _ >= 0.5) .hasApproxQuantile(“numViews”, 0.5, _ <= 10)) .run()
Persistence and querying of computed metrics of the data with a MetricsRepository Data profiling of large data sets Anomaly detection on data quality metrics over time Automatic suggestion of constraints for large datasets Incremental metrics computation on growing data and metric updates on partitioned data (advanced)
fi
47 fi
• • • • •