Parquet и ORC — что это вообще такое❓ ❓ ❓
Сегодня оба формата воспринимаются как стандарт для Data Lake.
Но появились они как ответ на реальные боли Hadoop-эры.
Начало 2010-х.
В экосистеме Apache Hadoop данные лежат в HDFS, аналитика делается через Apache Hive.
Проблема простая:
🔴 CSV / TSV занимают много места
🔴 Full table scan работает медленно
🔴 Компрессия слабая
🔴 Нет нормальной статистики по данным
🔴 Hive буквально читает всё подряд.
Команда Hive понимает: нужен формат, который будет ускорять аналитические запросы.
Так в 2013 году появляется Apache ORC(Optimized Row Columnar).
Что такое ORC?🤔
📝 ORC — это колоночный формат хранения данных. Файл в ORC логически делится на Stripes — крупные блоки данных, внутри которых хранятся сами колоночные данные и индексная информация. В конце файла находится Footer с общей метаинформацией и PostScript, содержащий служебные данные о структуре файла и параметрах компрессии. Внутри ORC хранится статистика по данным — min/max индексы по колонкам, встроенные Bloom filters для ускорения фильтрации, а также используется продвинутая схема компрессии, позволяющая эффективно сжимать данные разных типов. Изначально ORC создавался как «ускоритель Hive» и отлично подходит для тяжёлых DWH-нагрузок и сценариев с full table scan, где важно максимально оптимизировать чтение больших объёмов данных.
Параллельно Cloudera и Twitter понимают: Нужен формат, который будет работать не только с Hive. В том же 2013 году появляется Apache Parquet.
Его идея — универсальность:
🟣 поддержка разных движков
🟣 сложные nested структуры
🟣 хорошая совместимость
🟣 кросс-платформенность
Что такое Parquet🤔
📝 Parquet — это колоночный формат хранения данных, в котором файл логически разделён на Row Groups — крупные блоки строк, внутри которых данные организованы по колонкам в виде Column Chunks, а минимальной единицей хранения являются Pages. В конце файла находится Footer, содержащий схему и метаданные. В footer хранится статистика по каждой колонке: минимальные и максимальные значения, количество строк, число null-значений и другая служебная информация.
Когда движок, например Apache Spark, выполняет запрос, он сначала читает footer, анализирует статистику и определяет, какие Row Groups можно пропустить. Затем он считывает только те блоки, где потенциально есть подходящие данные, и загружает только нужные колонки. Такой механизм называется predicate pushdown, column pruning и data skipping. Благодаря этому существенно уменьшается объём чтения с диска и снижается нагрузка на CPU и сеть, поэтому Parquet в разы быстрее обычных строковых форматов вроде CSV.
🐱 Parquet и ORC появились не ради «ещё одного формата». Они стали ответом на практическую проблему: читать терабайты CSV — дорого, медленно и неэффективно. Строковые форматы заставляют движок загружать весь файл целиком, даже если в запросе нужны всего несколько колонок.
Колоночное хранение изменило экономику аналитики: стало меньше I/O, меньше нагрузки на CPU, сократился shuffle и в целом подешевела инфраструктура. Движки начали читать только нужные колонки и пропускать ненужные блоки данных, что кратно ускорило запросы.
Именно поэтому сегодня почти любой современный Data Lake строится поверх Parquet (реже ORC) — это уже не просто формат, а стандарт индустрии.
Сегодня оба формата воспринимаются как стандарт для Data Lake.
Но появились они как ответ на реальные боли Hadoop-эры.
Начало 2010-х.
В экосистеме Apache Hadoop данные лежат в HDFS, аналитика делается через Apache Hive.
Проблема простая:
Команда Hive понимает: нужен формат, который будет ускорять аналитические запросы.
Так в 2013 году появляется Apache ORC(Optimized Row Columnar).
Что такое ORC?
Параллельно Cloudera и Twitter понимают: Нужен формат, который будет работать не только с Hive. В том же 2013 году появляется Apache Parquet.
Его идея — универсальность:
Что такое Parquet
Когда движок, например Apache Spark, выполняет запрос, он сначала читает footer, анализирует статистику и определяет, какие Row Groups можно пропустить. Затем он считывает только те блоки, где потенциально есть подходящие данные, и загружает только нужные колонки. Такой механизм называется predicate pushdown, column pruning и data skipping. Благодаря этому существенно уменьшается объём чтения с диска и снижается нагрузка на CPU и сеть, поэтому Parquet в разы быстрее обычных строковых форматов вроде CSV.
Колоночное хранение изменило экономику аналитики: стало меньше I/O, меньше нагрузки на CPU, сократился shuffle и в целом подешевела инфраструктура. Движки начали читать только нужные колонки и пропускать ненужные блоки данных, что кратно ускорило запросы.
Именно поэтому сегодня почти любой современный Data Lake строится поверх Parquet (реже ORC) — это уже не просто формат, а стандарт индустрии.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16⚡9🤯4❤3
Channel name was changed to «Data Engineer Lab | Артём Подвальный»
Рынок Data Engineering в 2026 — это уже совсем другой уровень!
За этот год требования значительно взлетели.
Теперь на собеседованиях мало просто «понимать технологии» — от тебя ждут реального опыта, глубоких деталей и умения рассказать, как ты решал настоящие проблемы в продакшене.
Типичные вопросы сейчас:
⏺ Какой самый сложный ETL-процесс тебе приходилось разрабатывать?
⏺ Как организована поставка в прод?
⏺ Сколько строк в секунду реально лилось через пайплайн?
⏺ На чём был реализован процесс (Spark, Flink, Airflow, dbt, Kafka Streams…)?
⏺ Как проходила миграция данных / схем / хранилища?
⏺ Какие требования бизнеса / SLA стояли?
⏺ Какая была твоя роль на проекте ?
Вкатиться самостоятельно стало в разы сложнее.
Поверхностные знания уже не прокатывают — работодатели копают глубоко и хотят слышать конкретные истории успеха и фейлов.
Но хорошая новость: за последний месяц я с командой проработал много реального материала:
🔘 Собрали настоящие кейсы из жизни дата-инженеров
🔘 Разобрали вопросы по компаниям (от Big Tech до российских продуктовых)
🔘 Составили мощные легенды и структурированные рассказы о проектах
🔘 Подготовили ответы, которые реально цепляют интервьюеров
Результат? Люди проходят сложные этапы и получают долгожданные офферы❕ ❕ ❕
Хочешь такую же детальную легенду под себя + уверенный рассказ о проектах, который не развалится под давлением?
Приходи на менторство.
Последние отзывы от ребят:
https://t.me/it_mentors/6596
https://t.me/it_mentors/6514
Пиши в личку, обсудим твою ситуацию:
В 2026 году офферы берут не те, кто «знает теорию», а те, кто может уверенно рассказать «как я это делал в проде и что было сложно».
Давай сделаем так, чтобы это был ты❕ ❕ ❕
За этот год требования значительно взлетели.
Теперь на собеседованиях мало просто «понимать технологии» — от тебя ждут реального опыта, глубоких деталей и умения рассказать, как ты решал настоящие проблемы в продакшене.
Типичные вопросы сейчас:
Вкатиться самостоятельно стало в разы сложнее.
Поверхностные знания уже не прокатывают — работодатели копают глубоко и хотят слышать конкретные истории успеха и фейлов.
Но хорошая новость: за последний месяц я с командой проработал много реального материала:
Результат? Люди проходят сложные этапы и получают долгожданные офферы
Хочешь такую же детальную легенду под себя + уверенный рассказ о проектах, который не развалится под давлением?
Приходи на менторство.
Последние отзывы от ребят:
https://t.me/it_mentors/6596
https://t.me/it_mentors/6514
Пиши в личку, обсудим твою ситуацию:
В 2026 году офферы берут не те, кто «знает теорию», а те, кто может уверенно рассказать «как я это делал в проде и что было сложно».
Давай сделаем так, чтобы это был ты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁8💯6👍5🤨5❤2
Как работает CDC pipeline?
🌐 В современных дата-платформах данные редко грузят батчами раз в сутки.
Чаще используют CDC (Change Data Capture) — потоковое получение всех изменений из базы.
Разберём классический пайплайн:
MySQL → Debezium → Kafka → ClickHouse
1️⃣ В MySQL все изменения пишутся в binlog (binary log) - по сути журнал транзакций базы.
Каждая операция фиксируется как событие: INSERT,UPDATE,DELETE
2️⃣ Debezium — это CDC-коннектор (обычно работает через Kafka Connect)
Он:
➡️ подключается к MySQL
➡️ читает binlog
➡️ превращает события в Kafka messages
➡️ пишет события в Kafka топики
3️⃣ Kafka: транспортный слой между OLTP и аналитикой которая позволяет довольно продолжительное время накапливать историю
4️⃣ Далее все направляется в ClickHouse: аналитическое хранилище
Он читает Kafka через Kafka Engine или ingestion сервис.
Выглядит это примерно так:
Kafka topic
↓
Kafka Engine Table
↓
Materialized View
↓
MergeTree таблица
🧐 Почему такая архитектура стала стандартом
Она даёт:
➡️ Near real-time данные
➡️ минимальную нагрузку на OLTP
➡️ возможность replay истории
➡️ масштабируемость
Было полезно? Ставьте 🔥
#dataengineering #cdc #debezium #kafka
Чаще используют CDC (Change Data Capture) — потоковое получение всех изменений из базы.
Разберём классический пайплайн:
MySQL → Debezium → Kafka → ClickHouse
Каждая операция фиксируется как событие: INSERT,UPDATE,DELETE
Он:
Он читает Kafka через Kafka Engine или ingestion сервис.
Выглядит это примерно так:
Kafka topic
↓
Kafka Engine Table
↓
Materialized View
↓
MergeTree таблица
Она даёт:
Было полезно? Ставьте 🔥
#dataengineering #cdc #debezium #kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38⚡6💯3❤2
Я — Артём Подвальный. Помогаю разобраться в работе инструментов обработки больших данных и как происходят эти процессы в компаниях. Здесь я стараюсь простым языком объяснить самое важное что надо знать начинающему DE и получить заветный оффер.
Самое полезное, что уже можно найти в канале:
Легендарный Roadmap для DE. Проверь, всё ли из этого ты знаешь
Давай общаться!
Задавай вопросы в комментариях к любому посту или пиши мне лично: @ampodvalniy.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤5🏆5🤨2
Channel name was changed to «Дата Инженер Лаб | Артём Подвальный»
Давайте разберем такую ситаацию: твой пайплайн упал и данные за последние 3 часа «испарились», а восстановить их не из чего 💀
Если у тебя стоит RabbitMQ — это реальный сценарий. Если Kafka то проблема может решится парой команд в консоли. Так почему же один брокер будет прощать ошибки, а другой — нет? Разбирем фундаментальную разницу между Smart Broker и Dumb Broker, чтобы вы больше никогда их не путали.
Главное различие — в «интеллекте» системы:
🔘 RabbitMQ (Smart Broker): Брокер сам следит за состоянием очередей, маршрутизирует сообщения и удаляет их сразу после подтверждения (ack). Это модель Push: брокер сам «толкает» данные потребителю. Это упрощает код клиента, но нагружает систему при росте данных.
🔘 Kafka (Dumb Broker): Это распределенная платформа потоковой передачи, работающая как распределенный коммит-лог. Она просто записывает данные и хранит их. Здесь работает модель Pull: потребители сами запрашивают данные, когда готовы их обработать.
👀 Почему для Data Engineering почти всегда нужна Kafka?
🔛 Гипер-масштабируемость: Кафка переваривает миллионы сообщений в секунду. Секрет в партиционировании (partitions): топики делятся на части и распределяются между брокерами. Это позволяет распараллеливать чтение и запись на петабайтах данных. Мы упоминали это, когда разбирали современный Lakehouse.
🔛 Постоянство данных (Retention Policy): Сообщения не удаляются после прочтения. Они хранятся по времени или объему. Это позволяет нескольким потребителям читать одни и те же данные в разное время.
🔛 Replayability (Повтор): Если в пайплайне баг, ты просто перечитываешь данные заново. В RabbitMQ «съеденное» сообщение пропадает навсегда.
🔛 Гарантии Exactly-once: Кафка умеет доставлять сообщение «ровно один раз», что критично для финансов. Рэббит обычно гарантирует только «хотя бы один раз».
🐰 Когда RabbitMQ — это НЕ ошибка?
🔘 Сложная маршрутизация: Если нужно раскидывать задачи по куче условий (exchanges: direct, fanout, topic, headers). Кафка в базе так не умеет.
🔘 Приоритеты: В RabbitMQ можно пометить сообщение как высокоприоритетное, и оно проскочит очередь. В Кафке порядок строго хронологический внутри партиции.
🔘 Низкая задержка на малых данных: При небольших объемах Рэббит может быть быстрее, но при росте нагрузки его задержки растут лавинообразно.
Итого:
Если ты строишь Data Lake, систему аналитики или ETL-пайплайны — твой выбор Kafka. Она идеально ложится в архитектуру Data Vault, сохраняя историю без потерь.
RabbitMQ оставляем для микросервисов и простых очередей (например, фоновая отправка писем).
🔖 Что почитать по теме: https://habr.com/ru/companies/slurm/articles/666326/
❓ Вопрос к тем, кто учится:
👇
#Kafka #RabbitMQ #DataEngineering #ITCareer #CareerDE #DataScience
Если у тебя стоит RabbitMQ — это реальный сценарий. Если Kafka то проблема может решится парой команд в консоли. Так почему же один брокер будет прощать ошибки, а другой — нет? Разбирем фундаментальную разницу между Smart Broker и Dumb Broker, чтобы вы больше никогда их не путали.
Главное различие — в «интеллекте» системы:
Итого:
Если ты строишь Data Lake, систему аналитики или ETL-пайплайны — твой выбор Kafka. Она идеально ложится в архитектуру Data Vault, сохраняя историю без потерь.
RabbitMQ оставляем для микросервисов и простых очередей (например, фоновая отправка писем).
Представь, что тебе нужно собирать логи со 100 серверов и сохранять их в базу для аналитики. Что выберешь после этого поста и почему?Пиши в комментариях, обсудим!
#Kafka #RabbitMQ #DataEngineering #ITCareer #CareerDE #DataScience
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👏4💯3❤1👍1
Вопрос по которому часто возникают трудности у кандидатов😐
«Как вы боретесь с дублями в Kafka на проде?». Напиши свой ответ в комментариях и сравнивай:
Ответ: "Три уровня защиты. Producer: enable.idempotence=true — закрывает сетевые ретраи. Consumer: проверяю event_id в Postgres перед обработкой. Транзакции — только для read-process-write между топиками Kafka. Главное правило: check → process → commit offset."
Совпало? Теперь разберем по полочкам, почему это важно:👇
Почему дубли вообще есть?
🔵 Настройка продюсера
Кафка выдает тебе Producer ID (PID) и заставляет нумеровать сообщения. Если брокер видит сообщение с номером, который уже был - он его просто выкидывает.
Настройка: enable.idempotence=true.
Почти не влияет на скорость. Включай всегда по умолчанию.
🔵 Транзакции
Объединяет чтение и запись в одну неделимую операцию (Read-Process-Write). Если что-то упало - вся цепочка откатится, и дублей в конечном топике не будет.
Настройка: transactional.id + isolation.level=read_committed.
Добавляет задержку (latency). Используй только там, где критичен идеальный порядок.
🔵 Идемпотентность консьюмера
Кафка не знает, что в твоей базе. Если сервис записал данные, но «упал» до фиксации оффсета - кафка пришлет дубль. Поэтому проверяй уникальность ключа на входе в базу.
Пример: INSERT ... ON CONFLICT DO NOTHING в Postgres или SET NX в Redis.
Самый надежный способ, который спасет, даже если настройки кафки не помогли.
🤔 Какой следующий вопрос разобрать?
#Kafka #DataEngineering #ITCareer #CareerDE #DataScience
«Как вы боретесь с дублями в Kafka на проде?». Напиши свой ответ в комментариях и сравнивай:
Совпало? Теперь разберем по полочкам, почему это важно:
Почему дубли вообще есть?
Как это можно решить:1️⃣ Producer retry
Producer отправил сообщение → брокер не ответил → producer отправил СНОВА
Kafka получила 2 одинаковых сообщения2️⃣ Consumer crash
Consumer прочитал сообщение → начал обработку → УПАЛ
При рестарте читает то же сообщение СНОВА3️⃣ Rebalance группы (80% проблем на проде!)
Consumer A обработал партицию → Consumer B взял её → обработал СНОВА
Кафка выдает тебе Producer ID (PID) и заставляет нумеровать сообщения. Если брокер видит сообщение с номером, который уже был - он его просто выкидывает.
Настройка: enable.idempotence=true.
Почти не влияет на скорость. Включай всегда по умолчанию.
Объединяет чтение и запись в одну неделимую операцию (Read-Process-Write). Если что-то упало - вся цепочка откатится, и дублей в конечном топике не будет.
Настройка: transactional.id + isolation.level=read_committed.
Добавляет задержку (latency). Используй только там, где критичен идеальный порядок.
Кафка не знает, что в твоей базе. Если сервис записал данные, но «упал» до фиксации оффсета - кафка пришлет дубль. Поэтому проверяй уникальность ключа на входе в базу.
Пример: INSERT ... ON CONFLICT DO NOTHING в Postgres или SET NX в Redis.
Самый надежный способ, который спасет, даже если настройки кафки не помогли.
#Kafka #DataEngineering #ITCareer #CareerDE #DataScience
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7💯7❤3👍3🤔3👀1
Страшно начинать с нуля 😱
Это первая мысль, когда решаешь уйти из другой сферы или только заканчиваешь универ…
📌 Но вот в чём штука — ты и не начинаешь с нуля
Ноль — это когда нет ничего. А у тебя есть: годы учёбы или работы, насмотренность, понимание того, как устроены процессы, люди, системы. Это не обнуляется от того, что ты открыл первый туториал по Python⚠️
Именно прошлый опыт часто становится скрытым преимуществом:
Умение структурировать хаос🌪
Пайплайны, зависимости, ошибки, потоки данных — это управляемый хаос. Если умел наводить порядок в процессах, документах или хотя бы в своих курсовых — здесь будет понятна логика.
Коммуникация
DE — это не только код. Объяснить аналитику, почему данные «поехали», согласовать с бизнесом приоритеты — это добрая половина работы🍻
Проектное мышление🖥
Привычка доводить задачи до конца, держать сроки и не теряться в приоритетах — это видно сразу и ценится высоко.
Внимание к «скучным» деталям
Бухгалтерия, документирование процессов, контроль качества — там, где без проверок нельзя. Этот «занудный» навык в DE превращается в суперсилу👀
Гибкость в освоении нового
Если ты уже менял роли или сферы, твой мозг умеет перестраиваться. Новый стек, новая терминология уже не шок🧑💻
Опыт работы с документацией
Умеешь читать инструкции, регламенты, стандарты? Значит, разобраться в API, логах и метриках — вопрос времени, а не способностей.
🏫 А если ты только из универа?
Учился на экономиста, биолога, физика, юриста — неважно. Ты уже умеешь разбираться в сложных системах, работать с большим объёмом информации и доводить задачи до результата под дедлайн. Это и есть база, на которую ляжет DE.
📱 SQL, Python, облака и оркестрацию выучить можно. А умение не паниковать, когда всё горит, чувствовать бизнес и структурировать хаос — это приходит с опытом, который у тебя уже есть
Если сейчас стоишь перед этим шагом и не знаешь, с чего начать — пиши в личку @ampodvalniy👋
Расскажешь про свой
бэкграунд, разберём вместе: что уже есть, что нужно подтянуть и как выстроить путь без хаоса👍
Это первая мысль, когда решаешь уйти из другой сферы или только заканчиваешь универ…
Ноль — это когда нет ничего. А у тебя есть: годы учёбы или работы, насмотренность, понимание того, как устроены процессы, люди, системы. Это не обнуляется от того, что ты открыл первый туториал по Python
Именно прошлый опыт часто становится скрытым преимуществом:
Умение структурировать хаос🌪
Пайплайны, зависимости, ошибки, потоки данных — это управляемый хаос. Если умел наводить порядок в процессах, документах или хотя бы в своих курсовых — здесь будет понятна логика.
Коммуникация
DE — это не только код. Объяснить аналитику, почему данные «поехали», согласовать с бизнесом приоритеты — это добрая половина работы
Проектное мышление
Привычка доводить задачи до конца, держать сроки и не теряться в приоритетах — это видно сразу и ценится высоко.
Внимание к «скучным» деталям
Бухгалтерия, документирование процессов, контроль качества — там, где без проверок нельзя. Этот «занудный» навык в DE превращается в суперсилу
Гибкость в освоении нового
Если ты уже менял роли или сферы, твой мозг умеет перестраиваться. Новый стек, новая терминология уже не шок
Опыт работы с документацией
Умеешь читать инструкции, регламенты, стандарты? Значит, разобраться в API, логах и метриках — вопрос времени, а не способностей.
Учился на экономиста, биолога, физика, юриста — неважно. Ты уже умеешь разбираться в сложных системах, работать с большим объёмом информации и доводить задачи до результата под дедлайн. Это и есть база, на которую ляжет DE.
Твой опыт, абсолютно любой — это актив. Его стоит ценить и использовать!
Если сейчас стоишь перед этим шагом и не знаешь, с чего начать — пиши в личку @ampodvalniy
Расскажешь про свой
бэкграунд, разберём вместе: что уже есть, что нужно подтянуть и как выстроить путь без хаоса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👏7🥰4👀3❤1🤔1🤨1
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6🔥4👏4
Что чаще всего подводит? 💻
Anonymous Poll
14%
Сломанный JOIN с событиями
6%
Неправильный grain по сессиям
59%
Повторная загрузка одних и тех же данных (отсутствует идемпотентность)
21%
Забыли сделать DISTINCT по user_id
❤6🤔6👀5
Правильный ответ:
Повторная загрузка одних и тех же данных (отсутствие идемпотентности) 🔁
Почему это происходит?
Инкрементальная загрузка - это когда мы не перекачиваем все данные заново, а только добавляем свежие кусочки (например, за вчерашний день)🧩 Но иногда случаются сбои: процесс может упасть на середине или его могут запустить дважды по ошибке ⚠️
В чем косяк♠️ ?
Если твой процесс просто «дописывает» данные (Append) и не проверяет, были ли они загружены ранее, то при повторном запуске он добавит те же самые строки еще раз. Это называется отсутствием идемпотентности 🙅♂️ В итоге количество пользователей (DAU) в базе вырастет, но это будут не новые люди, а «клоны» старых.
Как исправить?
Вместо простого добавления использовать стратегию MERGE (обновить, если есть, или вставить, если нет) или INSERT OVERWRITE (сначала удалить старые данные за этот день, а потом записать новые) ✔️
Почему это происходит?
Инкрементальная загрузка - это когда мы не перекачиваем все данные заново, а только добавляем свежие кусочки (например, за вчерашний день)
В чем косяк
Если твой процесс просто «дописывает» данные (Append) и не проверяет, были ли они загружены ранее, то при повторном запуске он добавит те же самые строки еще раз. Это называется отсутствием идемпотентности
Как исправить?
Вместо простого добавления использовать стратегию MERGE (обновить, если есть, или вставить, если нет) или INSERT OVERWRITE (сначала удалить старые данные за этот день, а потом записать новые)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👀4✍2❤1😁1🤔1
Ребята, давно хотел обновить свой роадмап по Data Engineering - и вот наконец сделал. Кстати, на канале появилось много новеньких - привет всем, кто только подписался, вы тут вовремя появились👋
Переписал роадмап под реалии 2026: убрал лишнее, добавил актуальные инструменты, прикрепил ссылки на материалы и вилки по каждому грейду. Получилось объёмно, но по делу.
Если заходите в профессию или думаете куда расти📈
-> ЧИТАЕМ ТУТ
P.S. Буду благодарен за комментарии и лайки, хотелось бы продвинуть статью😋
Переписал роадмап под реалии 2026: убрал лишнее, добавил актуальные инструменты, прикрепил ссылки на материалы и вилки по каждому грейду. Получилось объёмно, но по делу.
Если заходите в профессию или думаете куда расти
-> ЧИТАЕМ ТУТ
P.S. Буду благодарен за комментарии и лайки, хотелось бы продвинуть статью
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥11👏5🤨5👍4🤔3👀2
В понедельник приходит отчёт: продажи за выходные выросли на 35% по сравнению с прошлой неделей, аналитики в шоке от "успеха"😃 Ты копаешь код и ищешь косяк…
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🔍Где он прячется?
Anonymous Poll
12%
Использование JEFT JOIN вместо INNER
57%
Разная детализация (grain) таблиц при JOIN (строки размножились)
23%
Дубли после GROUP BY
8%
DISTINCT на всю сумму
❤5🤔5🔥3
Правильный ответ:
Разный grain (считают по заказам, а агрегируют по позициям — строки размножаются) 🔄
Почему это происходит?
Представь, что у тебя есть таблица «Заказы» (где 1 заказ = 1 строка) и таблица «Товары в заказе» (где 1 товар = 1 строка)📦 Если в одном заказе купили 3 разных товара, то при объединении (JOIN) этих таблиц одна строка заказа «размножится» на три
В чем косяк? Если ты начнешь считать сумму продаж по такой «раздутой» таблице, SQL сложит сумму одного и того же заказа трижды 🥲 В итоге в отчете цифры будут гораздо выше реальных (тот самый «взрыв дублей»), хотя на самом деле продаж больше не стало 📉
Как исправить? Нужно сначала «схлопнуть» (агрегировать) данные о товарах до уровня заказа и только потом делать JOIN☑️
Почему это происходит?
Представь, что у тебя есть таблица «Заказы» (где 1 заказ = 1 строка) и таблица «Товары в заказе» (где 1 товар = 1 строка)
В чем косяк? Если ты начнешь считать сумму продаж по такой «раздутой» таблице, SQL сложит сумму одного и того же заказа трижды
Как исправить? Нужно сначала «схлопнуть» (агрегировать) данные о товарах до уровня заказа и только потом делать JOIN
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆7🤯5👏4
Снова увидел S3 в требованиях? Давай раз и навсегда разберёмся
🤔 Часто в вакансиях вижу S3. Решил напомнить (или рассказать тем, кто не знает) - что это вообще такое 👇
S3 (Amazon Simple Storage Service) - если совсем просто, это «бездонная бочка». Гигантский виртуальный склад. Кидаешь туда файл любого типа и размера - и не думаешь, что место кончится.
Как оно устроено?
В отличие от компбютера(файловой системы) где файлы лежат в папках, тут всё плоское. Без иерархий. Вот три основных понятия, которые надо знать:
🪨 Объект - сам файл. Картинка, видео, документ, лог. У него есть:
🔘 сами данные
🔘 метаданные (размер, тип и прочее)
🔘 ключ - уникальный адрес, по которому его найдёшь
📦 Бакет - контейнер верхнего уровня, куда складываешь объекты. Название бакета должно быть уникальным во всей системе. Вообще всей.
🔑 Ключ - полный путь к файлу. Например,
Вся строка целиком - это и есть ключ. Похоже на папки, да. Но внутри - нет, просто строка.
Почему S3 все так любят?
♾ Место не кончается - терабайты, петабайты. Система сама расширяется, когда ты добавляешь файлы.
💰 Дёшево - в 10–20 раз дешевле, чем хранить то же самое в нормальной базе данных или Data Warehouse.
❤️ Никуда не денется - данные копируются между серверами и даже между разными городами (дата-центрами). Риск потерять почти ноль.
Но есть и минусы, куда без них
❌ Неизменяемость - объекты нельзя просто «поправить». Хочешь изменить одно слово в текстовом файле? Качай новую версию целиком, перезаписывай старую. Всё заново.
❌ Не для баз данных - S3 медленнее, чем обычный диск. Не подходит для вещей, где данные надо менять мгновенно (например, для работающей базы интернет-магазина).
⏱ Задержки - доступ к файлу может быть медленнее, чем в обычной файловой системе.
А ещё S3 — это фундамент современной аналитики
Его называют «фундаментом» для Lakehouse. На S3 лежат огромные массивы сырых данных в открытых форматах (типа Parquet). А системы вроде Delta Lake или Apache Iceberg превращают эти файлы в удобные таблицы для аналитиков. Красота🍾
Сделать вам обзор на Delta Lake и Apache Iceberg (или уже 10 раз про них успели прочитать)?
S3 (Amazon Simple Storage Service) - если совсем просто, это «бездонная бочка». Гигантский виртуальный склад. Кидаешь туда файл любого типа и размера - и не думаешь, что место кончится.
Как оно устроено?
В отличие от компбютера(файловой системы) где файлы лежат в папках, тут всё плоское. Без иерархий. Вот три основных понятия, которые надо знать:
documents/2023/invoice.pdf.
Вся строка целиком - это и есть ключ. Похоже на папки, да. Но внутри - нет, просто строка.
Почему S3 все так любят?
Но есть и минусы, куда без них
А ещё S3 — это фундамент современной аналитики
Его называют «фундаментом» для Lakehouse. На S3 лежат огромные массивы сырых данных в открытых форматах (типа Parquet). А системы вроде Delta Lake или Apache Iceberg превращают эти файлы в удобные таблицы для аналитиков. Красота
Сделать вам обзор на Delta Lake и Apache Iceberg (или уже 10 раз про них успели прочитать)?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥12🥰5
Неделя офферов 💵 💵
Редко пишу про успехи менти, но на этой неделе результаты такие, что хочется поделиться. Сразу три оффера🔥
Самый яркий кейс - Кирилл (имена изменены). Учится очно в вузе на 4 курсе. С нуля, за 6 месяцев (обучение + собесы) получил оффер на 295 000 ₽.
Это к вопросу о том, что отсутствие профильного бэкграунда в IT не закрывает твоё будущее в DE. Будет труднее, но навык обучаться помогает справится со всеми сложностями!
Еще двое ребят с опытом за два месяца подготовки выросли в грейде и получили офферы на 340 000 ₽ и 327 000 ₽🔥
💬 За неделю до своего оффера Кирилл написал в наш закрытый чат сообщение, которое будет полезно всем, кто сейчас в процессе поиска:
➡️ Там я собрал необходимые знания, чтобы претендовать на офферы уровня 200к+
Сейчас я беру на менторство всего пару человек в месяц, чтобы сохранять качество и личный контроль‼️ Если вы хотите через полгода так же писать в чат о своем результате - пишите мне в личку @ampodvalniy, договоримся о коротком созвоне. Разберем вашу ситуацию и поймем, смогу ли я вам помочь 🫱🫲
Редко пишу про успехи менти, но на этой неделе результаты такие, что хочется поделиться. Сразу три оффера
Самый яркий кейс - Кирилл (имена изменены). Учится очно в вузе на 4 курсе. С нуля, за 6 месяцев (обучение + собесы) получил оффер на 295 000 ₽.
Это к вопросу о том, что отсутствие профильного бэкграунда в IT не закрывает твоё будущее в DE. Будет труднее, но навык обучаться помогает справится со всеми сложностями!
Еще двое ребят с опытом за два месяца подготовки выросли в грейде и получили офферы на 340 000 ₽ и 327 000 ₽
Для тех, кто не собесился, напишу. Мне оч страшно было резюме выкладывать, я смотрел записи других собесов и пугался: почему так сложно, как же будут люто спрашивать, я опозорюсь капец блин.Если вы сейчас тоже в поиске или только планируете выходить на рынок - для начала можете почитать мой Roadmap по Data Engineering
2 недели собеседуюсь уже, 3 оффера есть, от еще одной компании жду ответ, но собес там хорошо пройден. И могу сказать — реально уверенность в легенде своей решает. Если прям прочувствовать легенду свою, знать полностью, что ты делаешь на работе, каждый шаг, каждый даг пхпхпх, то норм будет. Потому что все теор вопросы по инструментам есть в роадмапе (в роадмапе даже больше, чем по факту спрашивают), а остальные вопросы по опыту по типу: “А у вас Greenplum распределенный был? А как ты distribution key выбрал, а partition by что делал?”. И если прям хорошо легенду знать, то на эти вопросы можно ответить. А если что-то прям вглубь копают, можно ответить, что не использовали это, но думаю, что это нужно для таких-то целей.
Иногда дают на собесах задачки по SQL и Python, но Python вот в * и * прям оч легкий был, без ООП, без всего. А SQL ну знать надо, это да. Поэтому основное для подготовки к собесам — это влюбиться в легенду свою, штуки по оптимизации знать и про план запроса (как анализировать), кратко про фишки инструментов и хорошо знать SQL.
Но к сожалению, даже если хорошо пройдешь собес, бывает, что у собеседующего настроение не то и не хочет тебя брать. Бывает, когда ну не прям грубят, но атмосфера прям неприятная, хочется уйти. Это у всех может быть вне зависимости от знаний. И тут только выдохнуть после собеса, покушать вкусно и не воспринимать слишком близко, идти дальше. Значит, не судьба, будут еще собесы. Всем удачи и побольше офферов, побольше мест, где вам будет приятно работать!
Сейчас я беру на менторство всего пару человек в месяц, чтобы сохранять качество и личный контроль
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍6🤔6❤4👏4
