awesome-everything EN
↑ Обратно к восхождению

Data engineering

Дата-платформа: чтение кода и запросов

Суть Читай реальный SQL, dbt-модель, предикат Parquet и сниппет векторного retrieval по всему треку, предскажи поведение и выбери фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги дата-платформы живут в запросах, трансформациях и интеграционном коде — не в слайдах. Прочитай каждый сниппет сквозь трек, предскажи его влияние на корректность или стоимость, потом выбери фикс, который senior сделает первым.

Цель

Отработай цикл, который гоняешь на реальной платформе: прочитай запрос или трансформацию, реши, подходит ли она хранилищу, против которого исполняется, и потянись за фиксом с наибольшим рычагом — верная раскладка, верный контракт доставки — прежде чем добавлять железо.

Сниппет 1 — аналитический запрос на OLTP

-- ежечасно против живой Postgres-таблицы orders
SELECT country, date_trunc('day', created_at) AS d, sum(amount)
FROM orders
WHERE created_at >= now() - interval '90 days'
GROUP BY 1, 2;
Викторина

Этот 90-дневный агрегат гоняется ежечасно на живой OLTP-БД. Что не так с размещением и каков фикс?

Сниппет 2 — инкрементальная dbt-модель

{{ config(materialized='incremental', unique_key='order_id') }}
SELECT order_id, customer_id, amount, status, updated_at
FROM {{ source('raw', 'orders') }}
{% if is_incremental() %}
WHERE updated_at > (SELECT max(updated_at) FROM {{ this }})
{% endif %}
Викторина

Заказ жёстко удалён в источнике. Что покажет эта gold-модель после следующего инкрементального прогона и каков фикс?

Сниппет 3 — предикат Parquet

# Iceberg-таблица, партиционированная по event_date, country — обычная колонка
df = spark.read.table("events")
result = (df
    .filter("upper(country) = 'US'")          # функция оборачивает колонку
    .filter("event_date = '2026-05-01'")
    .groupBy("country").count())
Викторина

Фильтр по event_date прунит хорошо, но фильтр по country сканирует гораздо больше ожидаемого. Почему и каков фикс?

Сниппет 4 — векторный retrieval

def recommend(query: str, k: int = 10):
    qvec = embed(query)
    hits = vector_index.search(qvec, ef_search=20, top_k=k)
    return [h.product for h in hits]   # эмбеддинги пересобираются ночью
Викторина

Тут спрятаны две проблемы: результаты иногда рекомендуют товар, удалённый часы назад, и recall ощущается низким. Каковы senior-фиксы?

Итог

Любой баг платформы читается в запросе, трансформации или интеграционном сниппете: OLAP-агрегат, застрявший на OLTP-сторе; инкрементальная модель, не видящая удалений; предикат Parquet, обёрнутый в функцию и убивший pruning; и векторный поиск, одновременно устаревший и голодный на recall. Фикс почти никогда не в железе — это верное хранилище под паттерн доступа, удаления, проброшенные как CDC-tombstones, sargable-предикаты, дающие футеру прунить, и живой OLTP-фильтр плюс настроенный ef_search для retrieval. Прочитай код, размести нагрузку, потом проверь.

Продолжить восхождение ↑Дата-платформа: проектируем от ингеста до отдачи
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.