История о том, как неудачный джойн чуть не испортил всё
Привет, друзья! Сегодня расскажу вам одну историю из жизни, которая случилась со мной на работе. Она о том, как важно иметь опыт работы с базами данных и почему критическое мышление и ответственность — это не просто слова, а жизненно необходимые навыки.
Итак, работал я в компании, где мы решили начать использовать данные из Бюро Кредитных Историй (БКИ). Если вы не в теме, это такие данные, которые помогают моделям кредитного скоринга стать почти волшебными. Они дают около 95% всей силы модели, и это намного лучше, чем универсальные модели, которые продаёт БКИ.
Наша задача была начать собирать эти данные и складывать их в хранилище. Но сначала нужно было убедиться, что данные корректные, чтобы через несколько месяцев можно было строить фичи и потом саму модель. Данные эти, скажу я вам, хранятся в очень странной структуре — около 40 таблиц, и джойнить их между собой — это квест, которому позавидует любой ролевик.
У меня уже был опыт работы с этими данными, поэтому я знал, как их джойнить. Описал всё в задаче, приложил примерный код. Инженеры начали загружать данные, а я поручил коллеге проверить, всё ли ок. Ответ был: всё ОК. Мы начали копить данные. Копили их полгода, и вот настало время строить модель.
Что-то меня насторожило — может, объём данных был в 10 раз больше ожидаемого, или что-то ещё. В общем, решил я уточнить, что же именно проверял мой коллега. Оказалось, что в моём скрипте был джойн нескольких таблиц. В каждой таблице был serial key (Hijid) — просто последовательные цифры 1, 2, 3, ... А чтобы джойнить, нужно было использовать foreign key из таблицы 1 (поле называлось похожим образом как название таблицы 2) с serial key (Hijid) из таблицы 2
Коллега мой взял скрипт, воспроизвёл его на Spark, но ничего не заджойнилось. Он подумал, что скрипт фигня, и решил джойнить по своему - все таблицы по полю Hijid, которое было во всех таблицах. И это у него прекрасно получилось, потому что во всех были значения от 1 до N. В итоге он проджойнил все 5 таблиц по этому полю и получил не пустые результаты. Раз данные собрались то все ОК, так ведь? 🤣
Вывод из этой истории такой: важно иметь опыт работы с базами данных и понимать, хотя бы что такое serial key и foreign key. А ещё самостоятельность — это не просто делать всё самому, а критически относиться к своей работе и задавать вопросы, если есть сомнения. В итоге мы потеряли около 2 месяцев на то, чтобы прогрузить корректные данные и получить правильные результаты. И хорошо, что мы вовремя заметили ошибку, ведь могли бы обучить модель на неправильных данных и получить "не те" результаты.
Так что, друзья, не забывайте задавать вопросы и проверять свою работу. Удачи вам в ваших проектах!