TGViewer
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) @dima_sqlit · 2.22K subscribers
Post #164 1.32K
🌟 system.query в Trino — когда коннектор становится узким местом:

Trino — это не база данных. Это распределённый SQL-движок, который подключается к десяткам источников: PostgreSQL, ClickHouse, Hive, S3 и другим. У него есть свои ресурсы (воркеры, память, CPU), но хранить данные он не умеет — он их берёт из источников и обрабатывает у себя.

И вот здесь начинаются сюрпризы.

🟢 Что такое Pushdown — и почему без него всё тормозит:

Когда Trino выполняет запрос к внешнему источнику, в идеале он должен «протолкнуть» (push down) часть работы прямо туда: фильтры, агрегации, лимиты. Тогда источник вернёт уже обработанный результат — маленький и быстрый.

Но pushdown не всегда работает. Это зависит от конкретного коннектора, версии Trino и сложности запроса. Если pushdown не сработал — Trino тащит всю таблицу к себе и фильтрует уже у себя в памяти. Например:
-- Trino может вытащить всю таблицу orders и только потом отфильтровать
SELECT *
FROM postgres.public.orders
WHERE created_at > '2024-01-01'


Хочешь точно знать, что происходит? Смотри EXPLAIN — в плане будет видно, пошёл ли фильтр в источник или Trino делает это сам.

🟢 system.query — явный контроль вместо надежды на pushdown:

system.query — это способ сказать Trino: «не думай сам, выполни этот SQL прямо в источнике и просто верни мне результат».

1️⃣ PostgreSQL — тяжёлый фильтр по индексу:
SELECT *
FROM TABLE(
postgres.system.query(
query => 'SELECT id, amount FROM orders WHERE created_at > ''2024-01-01'''
)
)

PostgreSQL выполнит запрос сам, использует свои индексы — и вернёт только нужные строки.

2️⃣ ClickHouse — агрегация на стороне источника:
SELECT *
FROM TABLE(
clickhouse.system.query(
query => 'SELECT event_date, count() FROM events GROUP BY event_date'
)
)

ClickHouse заточен под колоночные агрегации. Если делать GROUP BY в Trino поверх ClickHouse — он сначала вытащит все сырые строки. system.query оставляет агрегацию там, где ей место.

🟢 Когда использовать system.query — интуитивно:

✅ Используй, если мысленно отвечаешь «да» хотя бы на один вопрос:

• «Я точно знаю, что эта логика быстрее выполнится в источнике» → используй
• «Таблица большая, а мне нужен маленький срез — и я не уверен, что Trino сам догадается» → используй
• «Я делаю агрегацию в ClickHouse и не хочу гонять миллионы строк» → используй
• «EXPLAIN показывает, что pushdown не работает» → используй

❌ Не используй, если:

• Нужно джойнить данные из разных источников — тут Trino незаменим, system.query не даст соединить PG и ClickHouse в одном запросе
• Запрос простой и ты уверен, что pushdown сработал
• Хочешь переносимый запрос без привязки к диалекту источника

Итог: 🤩


🔥 Набираем 70 реакций на этот пост — так я пойму, что стоит делать больше таких разборов.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!


🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru


@dima_sqlit
  • 🔥 26
  • ❤‍🔥 7
More from @dima_sqlit
  1. Sep 21, 2026🧠 Уровень абстракции — навык, который сэкономит вам годы учёбы: Когда я начинал изучать P…
  2. Sep 18, 2026🏦 Задача с собеса в Т-банк на SQL: вторая зарплата в отделе Условие: есть таблица сотрудн…
  3. Sep 16, 2026🏠 IT ипотека (Часть 3) — Как я сэкономил на ремонте: кэшбэк, промокоды и один неочевидный…
  4. Sep 7, 2026🍂 Осень — сезон найма: Каждый год одна и та же история — в сентябре рынок будто просыпает…
  5. Aug 24, 2026P-value простыми словами: Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли тепе…
  6. Aug 20, 2026📝 Как работают JOIN в SQL — разбор на пальцах: Разберём, откуда берутся дубли и почему по…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →