<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Yuriy Gavrilov: posts tagged Iceberg</title>
<link>https://gavrilov.info/tags/iceberg/</link>
<description>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</description>
<author></author>
<language>en</language>
<generator>Aegea 11.4 (v4171e)</generator>

<itunes:owner>
<itunes:name></itunes:name>
<itunes:email>yvgavrilov@gmail.com</itunes:email>
</itunes:owner>
<itunes:subtitle>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</itunes:subtitle>
<itunes:image href="https://gavrilov.info/pictures/userpic/userpic-square@2x.jpg?1643451008" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Apache Iceberg V3: Готов ли он?</title>
<guid isPermaLink="false">306</guid>
<link>https://gavrilov.info/all/apache-iceberg-v3-gotov-li-on/</link>
<pubDate>Thu, 18 Dec 2025 22:06:36 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/apache-iceberg-v3-gotov-li-on/</comments>
<description>
&lt;h2&gt;Apache Iceberg V3: Готов ли он?&lt;/h2&gt;
&lt;p&gt;Автор: Guy Yasoor (Ryft Blog)&lt;br /&gt;
Перевод и дополнения: Gemini 3 Pro Preview и я кофе носил&lt;/p&gt;
&lt;p&gt;Оригинал: &lt;a href="https://www.ryft.io/blog/apache-iceberg-v3-is-it-ready"&gt;https://www.ryft.io/blog/apache-iceberg-v3-is-it-ready&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Выход Apache Iceberg V3 — это огромный шаг вперед для экосистемы лейкхаусов (lakehouse). Спецификация V3 была финализирована и ратифицирована в начале этого года, привнеся в ядро формата несколько долгожданных возможностей: эффективные удаления на уровне строк (row-level deletes), встроенное отслеживание происхождения строк (row lineage), улучшенная обработка полуструктурированных данных и зачатки нативного шифрования.&lt;/p&gt;
&lt;p&gt;Этим новым возможностям уделяется много внимания, но в разговорах часто упускают вопрос, который важен не меньше: &lt;b&gt;Насколько V3 готов на практике?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Честный ответ: это полностью зависит от ваших движков обработки данных (engines). Некоторые среды, такие как Spark и Flink, уже хорошо поддерживают V3. Другие — пока отстают.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Основные возможности V3&lt;/h3&gt;
&lt;h4&gt;Deletion Vectors (Векторы удаления)&lt;/h4&gt;
&lt;p&gt;Векторы удаления прикрепляют информацию об удалении строк непосредственно к файлам данных в виде битовых карт, избегая накопления позиционных файлов удалений (positional delete files).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;gt;**поИИснение:**
&amp;gt;В предыдущих версиях (V2) использовались **Positional Delete Files** — это отдельные Parquet-файлы, содержащие пути и позиции удаленных строк. При чтении (Merge-on-Read) движку приходилось считывать файл данных, считывать файл удалений и делать между ними `JOIN`, чтобы отфильтровать ненужное. Это требует много памяти и ввода-вывода (IO).
&amp;gt;
&amp;gt;**Deletion Vector (V3)** — это, по сути, компактная битовая карта (bitmap), хранящаяся внутри или рядом с файлом данных. Движку достаточно прочитать этот маленький массив битов пропустить удаленные строки &amp;quot;на лету&amp;quot;, без дорогостоящих операций слияния. Это критически ускоряет чтение активно изменяемых таблиц.&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Статус:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Принято в большинстве движков, реализующих V3.&lt;/li&gt;
  &lt;li&gt;Стабильное чтение/запись в `Apache Spark`, `Apache Flink`.&lt;/li&gt;
  &lt;li&gt;Вероятно, самая готовая к продакшену функция.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Row Lineage (Происхождение строк)&lt;/h4&gt;
&lt;p&gt;Row lineage вводит стабильные идентификаторы строк и метаданные версий. Это упрощает инкрементальную обработку, CDC, аудит и отладку.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;gt;**поИИснение:**
&amp;gt;Без Row Lineage, если вы обновляете таблицу, строки часто физически перезаписываются, и их &amp;quot;личность&amp;quot; теряется. Чтобы понять, что изменилось, приходилось сравнивать полные копии данных (expensive diff).
&amp;gt;V3 присваивает строкам суррогатные ID. Это позволяет реализовать дешевый CDC (Change Data Capture): вы точно знаете, что &amp;quot;Строка #123&amp;quot; была обновлена, и можете каскадно обновить только связанные с ней агрегаты в витринах данных, вместо пересчета всей витрины.&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Статус:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Принято в большинстве движков V3.&lt;/li&gt;
  &lt;li&gt;Достаточно зрелая технология для V3-совместимых стеков.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Тип данных VARIANT&lt;/h4&gt;
&lt;p&gt;`VARIANT` — это нативный тип для полуструктурированных данных, замена хранению JSON в виде простых строк. Однако текущая поддержка частичная: не хватает “шреддинга” (shredding).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;gt;**поИИснение:**
&amp;gt;В чем суть **Shredding (измельчения)**? Если вы храните JSON как строку (String), базе данных нужно парсить весь JSON для каждого запроса, чтобы достать одно поле `{&amp;quot;user&amp;quot;: &amp;quot;Ivan&amp;quot;, ...}`. Это медленно.
&amp;gt;Тип `VARIANT` хранит данные в бинарном формате. А **Shredding** — это оптимизация, когда движок замечает, что поле `user` встречается в 95% записей. Он автоматически вытаскивает это поле в отдельную физическую колонку Parquet, сохраняя при этом логическую структуру JSON. Это позволяет читать поле `user` так же быстро, как обычную колонку, но сохранять гибкость схемы (schema evolution), не делая `ALTER TABLE` при добавлении новых полей в JSON.&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Статус:**
&lt;ul&gt;
  &lt;li&gt;Поддерживается в Spark, Flink, Databricks SQL.&lt;/li&gt;
  &lt;li&gt;Parquet стандартизирует кодировки, что даст общее представление для оптимизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Геопространственные типы и Шифрование&lt;/h4&gt;
&lt;p&gt;V3 вводит типы для гео-данных и блоки для шифрования на уровне таблицы.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Статус:&lt;/b&gt; Гео-типы доступны через расширения (`Apache Sedona`), шифрование находится на ранней стадии (только Spark/Flink).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;Поддержка движками: Где V3 реально работает?&lt;/h3&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Движок&lt;/td&gt;
&lt;td style="text-align: center"&gt;Статус V3&lt;/td&gt;
&lt;td style="text-align: center"&gt;Комментарий&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Apache Spark&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅ Отличный&lt;/td&gt;
&lt;td style="text-align: center"&gt;Начиная с v4.0 — самая надежная платформа для V3.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Apache Flink&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅ Хороший&lt;/td&gt;
&lt;td style="text-align: center"&gt;Идеален для стриминга, поддерживает основные фичи.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Databricks&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;⚠️ Beta&lt;/td&gt;
&lt;td style="text-align: center"&gt;Работает, но есть ограничения по типам данных.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;AWS (Glue/EMR)&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;⚠️ Частичный&lt;/td&gt;
&lt;td style="text-align: center"&gt;Зависит от версии движка под капотом.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Amazon Athena&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌ Нет&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Главный блокер&lt;/b&gt; для пользователей AWS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Trino / Starburst&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔸 Смешанный&lt;/td&gt;
&lt;td style="text-align: center"&gt;Starburst (коммерческий) поддерживает, OSS Trino — нет.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Snowflake&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;⏳ Ожидание&lt;/td&gt;
&lt;td style="text-align: center"&gt;Активно разрабатывали спецификацию, но публичной поддержки V3 в Managed Iceberg пока нет.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;Итог: Переходить ли на V3?&lt;/h3&gt;
&lt;p&gt;Для большинства: &lt;b&gt;пока нет&lt;/b&gt;.&lt;br /&gt;
Ключевые игроки (Athena, Trino OSS, Snowflake) не готовы. Переходите, только если ваш стек состоит исключительно из &lt;b&gt;Spark&lt;/b&gt; или &lt;b&gt;Flink&lt;/b&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;🔮 МненИИе и гаданИИе на кофейной гуще&lt;/h3&gt;
&lt;h4&gt;Прогноз на год вперед&lt;/h4&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Аспект&lt;/td&gt;
&lt;td style="text-align: center"&gt;Прагматичный прогноз (Реализм)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Супер-прогноз (Оптимизм/Хайп)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Принятие&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Крупный энтерпрайз начнет пилоты к концу года. Основная масса ждет Athena/BigQuery.&lt;/td&gt;
&lt;td style="text-align: center"&gt;V3 станет стандартом для всех greenfield проектов весной. Утилиты миграции ускорят отказ от Hive/Delta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Каталоги&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;REST Catalog&lt;/b&gt; убивает Hive Metastore. Появление managed REST сервисов.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Universal Catalog Protocol&lt;/b&gt;: один каталог для Iceberg, Delta и Hudi. Формат станет прозрачным для пользователя.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Скорость&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;+30-50% к скорости MERGE операций благодаря векторам удаления.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Нейросетевые оптимизаторы запросов и p2p кэширование сделают “холодный” Iceberg по скорости равным in-memory СУБД.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Python&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;`PyIceberg` получит полную поддержку записи (Write).&lt;/td&gt;
&lt;td style="text-align: center"&gt;Python-стек (DuckDB + PyIceberg) начнет вытеснять Spark в задачах малого/среднего объема.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h4&gt;Roadmap: 10 шагов развития&lt;/h4&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Аудит совместимости:&lt;/b&gt; Проверить всех потребителей данных. Если есть Athena — V3 откладывается.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Переход на REST Catalog:&lt;/b&gt; Отказ от Hive Metastore.  &lt;br /&gt;
&gt;&lt;b&gt;поИИснение:&lt;/b&gt;  &lt;br /&gt;
&gt;REST Catalog отвязывает клиента (Spark/Trino) от прямого доступа к файловой системе (S3/HDFS). Это безопаснее (можно выдавать временные креды “Vended Credentials”) и позволяет менять физическое расположение данных, не ломая настройки клиентов.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Апгрейд Spark/Flink:&lt;/b&gt; Только свежие версии (Spark 3.5+/4.0) умеют работать с V3 корректно.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Внедрение “Puffin” статистики:&lt;/b&gt;  &lt;br /&gt;
&gt;&lt;b&gt;поИИснение:&lt;/b&gt;  &lt;br /&gt;
&gt;Puffin — это формат файлов-спутников для Iceberg, которые хранят продвинутую статистику, например, эскизы (sketches) для оценки уникальных значений (`count distinct`) без чтения данных. Внедрение этого шага ускоряет планирование запросов.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Изолированный пилот:&lt;/b&gt; Запуск V3 на одной стриминговой джобе для проверки Deletion Vectors.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Оптимизация CDC:&lt;/b&gt; Использование Row Lineage для дедупликации потоков.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PyIceberg для легких ETL:&lt;/b&gt; Замена тяжелых JVM-джоб на Python там, где объемы небольшие.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Миграция JSON в VARIANT:&lt;/b&gt; Как только движки поддержат шреддинг, это сэкономит гигабайты и часы CPU.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Отказ от позиционных удалений:&lt;/b&gt; Полное переключение write-конфигурации на векторы.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Масштабирование:&lt;/b&gt; Перевод основных витрин на V3.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h4&gt;💡 Было бы круто, если бы еще сделали...&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Нативную поддержку самоорганизации данных (Z-Order / Clustering) без внешних компакторов.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Почему:&lt;/b&gt; Сейчас, чтобы запросы “летали” и пропускали ненужные файлы (data skipping), данные нужно сортировать (Z-Order). Это делают отдельные тяжелые джобы (`maintenance jobs`).&lt;br /&gt;
Было бы круто, если бы спецификация позволяла &lt;b&gt;писателям (writers)&lt;/b&gt; автоматически поддерживать приближенную кластеризацию при вставке данных (opportunistic clustering), либо если бы формат поддерживал &lt;b&gt;Secondary Indexes&lt;/b&gt; (вторичные индексы на основе B-деревьев или Bitmap), хранящиеся прямо в слое метаданных. Это позволило бы Iceberg конкурировать с ClickHouse и Druid в сценариях интерактивной аналитики (sub-second latency), убрав необходимость в постоянном “обслуживании” таблиц.&lt;/p&gt;
</description>
</item>

<item>
<title>Сравнение Apache Iceberg, Delta Lake и Apache Hudi: Глубокий анализ (2025)</title>
<guid isPermaLink="false">291</guid>
<link>https://gavrilov.info/all/sravnenie-apache-iceberg-delta-lake-i-apache-hudi-glubokiy-anali/</link>
<pubDate>Sat, 01 Nov 2025 00:53:55 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/sravnenie-apache-iceberg-delta-lake-i-apache-hudi-glubokiy-anali/</comments>
<description>
&lt;p&gt;С ростом популярности архитектуры &lt;b&gt;Data Lakehouse&lt;/b&gt; усилился интерес к трём основным открытым проектам в этой области: &lt;b&gt;Apache Hudi&lt;/b&gt;, &lt;b&gt;Delta Lake&lt;/b&gt; и &lt;b&gt;Apache Iceberg&lt;/b&gt;. Все три технологии продолжают активно развиваться, и в этой статье представлено актуальное сравнение их возможностей по состоянию на октябрь 2025 года.&lt;/p&gt;
&lt;p&gt;Оригинал тут: &lt;a href="https://www.onehouse.ai/blog/apache-hudi-vs-delta-lake-vs-apache-iceberg-lakehouse-feature-comparison"&gt;https://www.onehouse.ai/blog/apache-hudi-vs-delta-lake-vs-apache-iceberg-lakehouse-feature-comparison&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Примечание:&lt;/b&gt; Если выбор формата вызывает сложности, обратите внимание на проект &lt;b&gt;Apache XTable&lt;/b&gt; (Incubating), который обеспечивает интероперабельность между Hudi, Delta и Iceberg, позволяя использовать несколько форматов одновременно.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Сравнение возможностей&lt;/h3&gt;
&lt;h4&gt;Функциональность записи&lt;/h4&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td&gt;Функция&lt;/td&gt;
&lt;td&gt;Apache Hudi (v1.0.2)&lt;/td&gt;
&lt;td&gt;Delta Lake (v4.0.0)&lt;/td&gt;
&lt;td&gt;Apache Iceberg (v1.10.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;ACID-транзакции&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Copy-on-Write&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Merge-on-Read&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Полнофункциональный&lt;/td&gt;
&lt;td&gt;❌ Векторы удалений (эксперимент.)&lt;/td&gt;
&lt;td&gt;❌ Векторы удалений (огранич.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Эффективная bulk-загрузка&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Bulk_Insert&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Индексирование&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ 8+ типов индексов&lt;/td&gt;
&lt;td style="text-align: left"&gt;❌ Bloom-фильтр проприетарный&lt;/td&gt;
&lt;td&gt;✅ Метаданные для статистики&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Частичные обновления&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Partial Updates&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Миграция таблиц&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Bootstrap&lt;/td&gt;
&lt;td&gt;✅ Convert to Delta&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Управление конкуренцией&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ OCC, MVCC, NBCC&lt;/td&gt;
&lt;td&gt;✅ OCC&lt;/td&gt;
&lt;td&gt;✅ OCC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Неблокирующая конкуренция&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ NBCC&lt;/td&gt;
&lt;td&gt;❌ OCC с перезапуском&lt;/td&gt;
&lt;td&gt;❌ OCC с перезапуском&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Менеджеры блокировок&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ ФС, DynamoDB, Hive, Zookeeper&lt;/td&gt;
&lt;td&gt;✅ Только внешний DynamoDB&lt;/td&gt;
&lt;td&gt;✅ Каталог или внешние провайдеры&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Дедупликация&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Ключи, Precombine&lt;/td&gt;
&lt;td&gt;❌ Нет первичных ключей&lt;/td&gt;
&lt;td&gt;❌ Нет первичных ключей&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Зависимость от каталога&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;❌ Не требуется&lt;/td&gt;
&lt;td&gt;❌ Не требуется&lt;/td&gt;
&lt;td&gt;✅ Обязателен&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Ключевые отличия:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt; предлагает наиболее продвинутые механизмы управления конкуренцией, включая неблокирующий контроль (NBCC)&lt;/li&gt;
&lt;li&gt;Только &lt;b&gt;Hudi&lt;/b&gt; поддерживает настоящий Merge-on-Read без компромиссов производительности&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt; предоставляет встроенные инструменты для дедупликации через первичные ключи&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Метаданные таблиц&lt;/h3&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td&gt;Функция&lt;/td&gt;
&lt;td&gt;Apache Hudi&lt;/td&gt;
&lt;td&gt;Delta Lake&lt;/td&gt;
&lt;td&gt;Apache Iceberg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Масштабируемость метаданных&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ LSM-дерево + HFile (100x ускорение)&lt;/td&gt;
&lt;td&gt;❌ Parquet чекпойнты (медленно)&lt;/td&gt;
&lt;td&gt;❌ Avro манифесты (медленно)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;b&gt;Управление индексами&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Асинхронное многомодальное&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Эволюция схемы&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Добавление, переупоряд., удаление&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Эволюция партиций&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Кластеризация + индексы выражений&lt;/td&gt;
&lt;td style="text-align: left"&gt;✅ Эволюция партиций&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Первичные ключи&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td style="text-align: right"&gt;❌ Только в проприетарной версии&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Статистика столбцов&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ HFile (до 50x ускорение)&lt;/td&gt;
&lt;td&gt;✅ Parquet чекпойнт&lt;/td&gt;
&lt;td&gt;✅ Avro манифест&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Важные особенности:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt; использует оптимизированный формат HFile для метаданных, что значительно ускоряет поиск&lt;/li&gt;
&lt;li&gt;Только &lt;b&gt;Hudi&lt;/b&gt; поддерживает настоящие первичные ключи как в реляционных БД&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt; предлагает более гибкий подход к партиционированию через кластеризацию&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Функциональность чтения&lt;/h3&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td&gt;Функция&lt;/td&gt;
&lt;td&gt;Apache Hudi&lt;/td&gt;
&lt;td&gt;Delta Lake&lt;/td&gt;
&lt;td&gt;Apache Iceberg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Time Travel&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Merge-on-Read запросы&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Snapshot Query&lt;/td&gt;
&lt;td&gt;❌ Сложная поддержка&lt;/td&gt;
&lt;td&gt;✅ Все запросы мержат векторы удалений&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Инкрементальные запросы&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ + CDC запросы&lt;/td&gt;
&lt;td&gt;✅ CDF (эксперимент.)&lt;/td&gt;
&lt;td&gt;❌ Только аппенды&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;CDC запросы&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ + before/after images&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Вторичные индексы&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Предикаты для пропуска данных&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Индексы выражений&lt;/td&gt;
&lt;td&gt;✅ Логические предикаты&lt;/td&gt;
&lt;td&gt;✅ Трансформации таблиц&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Сервисы таблиц&lt;/h3&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td&gt;Функция&lt;/td&gt;
&lt;td&gt;Apache Hudi&lt;/td&gt;
&lt;td&gt;Delta Lake&lt;/td&gt;
&lt;td&gt;Apache Iceberg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Авторазмер файлов&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ Ручное управление&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Компактизация&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Управляемая&lt;/td&gt;
&lt;td&gt;❌ 2-этапное обслуживание&lt;/td&gt;
&lt;td&gt;❌ Ручное обслуживание&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Очистка&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Управляемая&lt;/td&gt;
&lt;td&gt;❌ VACUUM вручную&lt;/td&gt;
&lt;td&gt;❌ Ручное удаление снапшотов&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Кластеризация&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;✅ Авто + Z-order/Hilbert&lt;/td&gt;
&lt;td&gt;❌ Z-order в OSS, авто – проприетар.&lt;/td&gt;
&lt;td&gt;❌ Z-order вручную&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Поддержка экосистемы&lt;/h3&gt;
&lt;p&gt;Все три формата имеют широкую поддержку в экосистеме данных:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Apache Spark, Flink, Trino, DBT&lt;/b&gt; – полная поддержка чтения/записи во всех форматах&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Kafka Connect&lt;/b&gt; – Hudi и Iceberg имеют нативную поддержку, Delta – только проприетарную&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Облачные платформы&lt;/b&gt; (AWS, GCP, Azure) – все три формата поддерживаются с некоторыми ограничениями&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Snowflake&lt;/b&gt; – нативная поддержка Iceberg, Hudi через XTable&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Производительность: TPC-DS бенчмарки&lt;/h3&gt;
&lt;p&gt;Согласно независимым тестам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt; и &lt;b&gt;Delta&lt;/b&gt; показывают сопоставимую производительность&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Iceberg&lt;/b&gt; consistently отстаёт по скорости выполнения запросов&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Важно:&lt;/b&gt; При сравнении производительности учитывайте, что Hudi по умолчанию оптимизирован для mutable-нагрузок (upsert), в то время как Delta и Iceberg – для append-only. Для честного сравнения используйте `bulk-insert` режим в Hudi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Ключевые дифференцирующие возможности&lt;/h3&gt;
&lt;h3&gt;Инкрементальные пайплайн&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Hudi&lt;/b&gt; предлагает наиболее зрелую поддержку инкрементальной обработки с трекингом всех изменений (вставки, обновления, удаления) и предоставлением их в виде change streams. Это позволяет строить эффективные ETL-пайплайны без перевычисления полных наборов данных.&lt;/p&gt;
&lt;h3&gt;Управление конкуренцией&lt;/h3&gt;
&lt;p&gt;В то время как все три системы поддерживают оптимистический контроль конкуренции (OCC), только &lt;b&gt;Hudi&lt;/b&gt; предлагает:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Неблокирующий контроль конкуренции (NBCC)&lt;/li&gt;
&lt;li&gt;Файл-уровневую гранулярность блокировок&lt;/li&gt;
&lt;li&gt;Возможность работы с асинхронными сервисами таблиц без остановки записи&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Merge-on-Read&lt;/h3&gt;
&lt;p&gt;Только &lt;b&gt;Hudi&lt;/b&gt; предоставляет полнофункциональный Merge-on-Read, который позволяет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Балансировать между производительностью записи и чтения&lt;/li&gt;
&lt;li&gt;Использовать row-ориентированные форматы для стриминга и column-ориентированные для аналитики&lt;/li&gt;
&lt;li&gt;Выполнять компактизацию асинхронно&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Кластеризация vs Эволюция партиций&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Iceberg&lt;/b&gt;: Partition Evolution – изменение схемы партиционирования для новых данных&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hudi&lt;/b&gt;: Гибридный подход – coarse-grained партиционирование + fine-grained кластеризация с возможностью эволюции без перезаписи данных&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Многомодальное индексирование&lt;/h3&gt;
&lt;p&gt;Только &lt;b&gt;Hudi&lt;/b&gt; предлагает асинхронную подсистему индексирования, поддерживающую:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bloom, hash, bitmap, R-tree индексы&lt;/li&gt;
&lt;li&gt;10-100x ускорение point lookup запросов&lt;/li&gt;
&lt;li&gt;10-30x общее ускорение запросов в реальных нагрузках&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Реальные кейсы использования&lt;/h3&gt;
&lt;h3&gt;Peloton&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Увеличение частоты ингестии с 1 раза в день до каждых 10 минут&lt;/li&gt;
&lt;li&gt;Снижение времени выполнения снапшот-заданий с 1 часа до 15 минут&lt;/li&gt;
&lt;li&gt;Экономия затрат через оптимизацию использования EMR-кластеров&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ByteDance/TikTok&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Обработка таблиц объемом 400+ PB&lt;/li&gt;
&lt;li&gt;Ежедневный прирост данных на уровне PB&lt;/li&gt;
&lt;li&gt;Пропускная способность &gt;100 GB/s на таблицу&lt;/li&gt;
&lt;li&gt;Выбор Hudi из-за открытости экосистемы и поддержки глобальных индексов&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Walmart&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Использование Merge-on-Read для снижения задержек&lt;/li&gt;
&lt;li&gt;Нативная поддержка удалений для GDPR/CCPA compliance&lt;/li&gt;
&lt;li&gt;Row versioning для обработки out-of-order данных&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Инновации сообщества&lt;/h3&gt;
&lt;p&gt;Многие ключевые функции data lakehouse были впервые реализованы в Hudi:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td&gt;Инновация Hudi&lt;/td&gt;
&lt;td&gt;Год&lt;/td&gt;
&lt;td&gt;Аналог в других проектах&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Транзакционные обновления&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;Delta OSS (2019)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge-on-Read&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;Iceberg (2021)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Инкрементальные запросы&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;Delta Change Feed (2022)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Z-order/Hilbert кривые&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;Delta OSS (2022)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Многомодальное индексирование&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;❌ Нет аналогов&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Контроль конкуренции без блокировок&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;❌ Нет аналогов&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Заключение&lt;/h3&gt;
&lt;h3&gt;Критерии выбора&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Выбирайте Apache Hudi если:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ваши workload’ы содержат значительное количество обновлений и удалений&lt;/li&gt;
&lt;li&gt;Требуется низкая задержка от конца в конец&lt;/li&gt;
&lt;li&gt;Нужны продвинутые возможности управления конкуренцией&lt;/li&gt;
&lt;li&gt;Важна производительность point lookup запросов&lt;/li&gt;
&lt;li&gt;Требуется гибкое управление layout данных через кластеризацию&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Рассмотрите Delta Lake если:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Вы используете экосистему Databricks&lt;/li&gt;
&lt;li&gt;Workload’ы преимущественно append-only&lt;/li&gt;
&lt;li&gt;Достаточно базовых возможностей управления конкуренцией&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Apache Iceberg может подойти если:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Основная задача – работа с очень большими объемами данных в cloud storage&lt;/li&gt;
&lt;li&gt;Требуется скрытое партиционирование с эволюцией&lt;/li&gt;
&lt;li&gt;Workload’ы в основном аналитические с минимальными обновлениями&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Итоговые рекомендации&lt;/h3&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Для зрелых production-нагрузок&lt;/b&gt; с frequent updates, high concurrency и low latency требованиями &lt;b&gt;Apache Hudi&lt;/b&gt; предлагает наиболее полный набор возможностей.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Не ограничивайтесь сравнением “галочек”&lt;/b&gt; – оценивайте производительность на своих данных и workload’ах.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;Рассмотрите Apache XTable&lt;/b&gt; если невозможно определиться с одним форматом или требуется интероперабельность между системами.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;b&gt;Учитывайте roadmap проекта&lt;/b&gt; – Hudi продолжает лидировать в инновациях, что может быть важно для долгосрочных инвестиций.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Технологии data lakehouse продолжают быстро развиваться, и выбор должен основываться на конкретных требованиях ваших use cases, а не только на текущем состоянии функциональности.&lt;/p&gt;
</description>
</item>

<item>
<title>Iceberg в Trino: Путешествие по Вариантам Хранения, Сжатия и Конфигурации для Оптимальной Производительности</title>
<guid isPermaLink="false">252</guid>
<link>https://gavrilov.info/all/iceberg-v-trino-puteshestvie-po-variantam-hraneniya-szhatiya-i-k/</link>
<pubDate>Sun, 06 Jul 2025 21:18:49 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/iceberg-v-trino-puteshestvie-po-variantam-hraneniya-szhatiya-i-k/</comments>
<description>
&lt;p&gt;Iceberg, как табличный формат, совершил революцию в управлении данными в озерах данных (data lakes), предоставив транзакционные гарантии и схематическую эволюцию для данных, хранящихся в файлах. В контексте Trino, мощного распределенного SQL-движка, Iceberg раскрывает свой потенциал, позволяя пользователям взаимодействовать с данными в озерах как с традиционными базами данных. Эта статья углубится в различные варианты хранения, сжатия и конфигурации Iceberg в Trino, рассматривая преимущества и недостатки каждого, и поможет вам сделать осознанный выбор для достижения оптимальной производительности и минимизации затрат.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-07-06-v-21.08.54.png" width="1784" height="496" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Автор: Gemini Flash. 2.5&lt;/p&gt;
&lt;h3&gt;1. Форматы Хранения (File Formats)&lt;/h3&gt;
&lt;p&gt;Iceberg не хранит данные сам по себе, а указывает на файлы данных, которые могут быть разных форматов. Выбор формата данных является одним из наиболее важных решений, напрямую влияющим на производительность запросов, эффективность сжатия и общую стоимость хранения.&lt;/p&gt;
&lt;h4&gt;a) Parquet&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Колоночный формат хранения данных, оптимизированный для аналитических запросов. Он хранит данные в колоночной ориентации, что позволяет Trino считывать только необходимые колонки во время выполнения запросов. Parquet тесно интегрирован с концепциями Iceberg, такими как использование идентификаторов полей (Field IDs) для поддержки надежной схемы эволюции.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Высокая производительность в аналитике:&lt;/b&gt; За счет колоночного хранения и возможности Trino применять “push-down” предикатов, Parquet обеспечивает беспрецедентную скорость для большинства аналитических запросов, избирательно считывая только необходимые данные.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Эффективное сжатие:&lt;/b&gt; Колоночная ориентация позволяет применять различные алгоритмы сжатия, оптимизированные для типов данных в каждой колонке, существенно снижая объем хранимых данных и, как следствие, затраты на хранение.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Нативная поддержка схемы эволюции Iceberg:&lt;/b&gt; Iceberg использует Field IDs, которые записываются в метаданды Parquet. Это ключевой механизм, позволяющий Iceberg поддерживать эволюцию схемы (добавление, удаление, переименование колонок) без перезаписи данных и без нарушения целостности запросов.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Широкая поддержка и зрелость:&lt;/b&gt; Parquet является фактическим стандартом для хранения аналитических данных в экосистеме больших данных и поддерживается всеми основными инструментами (Spark, Hive, Dremio, Athena, BigQuery, Snowflake и т.д.), обеспечивая отличную интероперабельность.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Неэффективен для точечных запросов (point lookups):&lt;/b&gt; Для выборки одной или нескольких записей требуется считывать данные из нескольких колонок, что может быть менее эффективно, чем строковые форматы данных.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Сложность изменения данных:&lt;/b&gt; Изменение отдельных записей требует перезаписи целых файлов или их частей, что является общей чертой для колоночных форматов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; **Parquet – это формат по умолчанию и наиболее рекомендуемый выбор для таблиц Iceberg в Trino.&lt;/b&gt; Он обеспечивает наилучший баланс производительности, эффективности хранения и простоты управления для большинства аналитических рабочих нагрузок.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;b) ORC (Optimized Row Columnar)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Ещё один колоночный формат, разработанный специально для Apache Hive. Он имеет много сходств с Parquet, включая колоночное хранение и эффективное сжатие. Документация Iceberg подтверждает, что ORC также может хранить необходимые метаданные (например, `iceberg.id`, `iceberg.required`) в атрибутах типов ORC для поддержки схемы эволюции.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Высокая производительность и эффективное сжатие:&lt;/b&gt; Аналогично Parquet, ORC обеспечивает отличную производительность для аналитических запросов и эффективное сжатие.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Расширенное индексирование:&lt;/b&gt; ORC часто содержит более гранулированные встроенные индексы (например, индексы позиций, Bloom-фильтры), которые могут быть полезны для некоторых специфических типов запросов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но Bloom-фильтры по умолчанию отключены в Trino вроде как, надо проверять этот конфиг:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Screenshot-from-2025-07-07-12-13-51.png" width="1497" height="672" alt="" /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Совместимость со схемой эволюции Iceberg:&lt;/b&gt; Iceberg способен адаптировать ORC-схему (даже путем изменения имен колонок) для своей ID-основанной эволюции, что делает его совместимым.&lt;/li&gt;
&lt;li&gt;Недостатки:**&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Неэффективен для точечных запросов:&lt;/b&gt; Общий недостаток для всех колоночных форматов.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Менее распространен как универсальный формат вне экосистемы Hive:&lt;/b&gt; Хотя ORC является основным форматом для Hive, Iceberg чаще ассоциируется с Parquet как универсальным форматом хранения для Data Lake. Это может потенциально означать меньшую поддержку или оптимизацию в некоторых не-Hive инструментах.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Специфические моменты с отображением типов:&lt;/b&gt; Как видно из &lt;a href="https://iceberg.apache.org/spec"&gt;Iceberg documentation&lt;/a&gt;, существуют нюансы с отображением типов данных (например, `timestamp` и `timestamptz`) в ORC. Может потребоваться использование дополнительных атрибутов Iceberg (таких как `iceberg.timestamp-unit`) для корректной передачи семантики.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Отсутствие “шрединга” для типа `variant`:&lt;/b&gt; Документация указывает, что для ORC не поддерживается “шрединг” (оптимизированное хранение) для полуструктурированного типа `variant`, что может быть ограничением для пользователей, активно работающих с такими данными.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; Хороший выбор для аналитических рабочих нагрузок, особенно если ваша существующая инфраструктура уже использует ORC, и вы хорошо знакомы с его нюансами. Однако, для новых развертываний Iceberg, **Parquet обычно является более простым и универсальным выбором по умолчанию&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;c) Avro&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:&lt;b&gt; Строковый формат данных, ориентированный на быструю сериализацию и десериализацию. Avro широко используется в Apache Kafka и для передачи данных между системами. Важно отметить, что Iceberg использует Avro в качестве формата **своих внутренних файлов метаданных&lt;/b&gt; (например, манифестов и метаданных таблиц), где его строковая природа и возможности сериализации очень полезны. Iceberg также описывает, как Avro &lt;i&gt;может быть&lt;/i&gt; использован для файлов данных, включая строгие правила для отображения типов данных Avro и использование Field IDs для поддержки эволюции схемы.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Отлично подходит для сериализации и передачи данных:&lt;/b&gt; Благодаря своей компактности и быстрой сериализации/десериализации, Avro идеален для потоковой передачи.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Встроенная схема (Schema-on-Read):&lt;/b&gt; Схема хранится вместе с данными, что обеспечивает совместимость. Iceberg расширяет это, добавляя Field IDs в схему Avro для robustной эволюции.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Поддержка эволюции схемы:&lt;/b&gt; Iceberg, благодаря внедрению Field IDs в схемы Avro и строгим правилам для `union` (например, использование `null` для опциональных полей), способен обеспечить эволюцию схемы даже для данных, хранящихся в Avro. Это &lt;i&gt;технически возможно&lt;/i&gt; благодаря Iceberg.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Крайне низкая производительность для аналитики:&lt;/b&gt; &lt;b&gt;Это ключевой и самый серьезный недостаток Avro для аналитических рабочих нагрузок.&lt;/b&gt; Для запросов требуется считывать всю строку данных, даже если нужны только некоторые колонки. Это приводит к значительному избытку I/O, увеличивает потребность в памяти и катастрофически замедляет аналитические запросы по сравнению с колоночными форматами.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Неэффективное сжатие:&lt;/b&gt; Сжатие применяется ко всей строке, а не к отдельным колонкам. Это значительно снижает коэффициент сжатия по сравнению с Parquet или ORC, что приводит к увеличению объема хранимых данных и, соответственно, затрат.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Отсутствие “шрединга” для типа `variant`:&lt;/b&gt; Как и в ORC, Avro не поддерживает “шрединг” для полуструктурированного типа `variant`, что может ограничивать работу со сложными схемами.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; **Категорически не рекомендуется использовать Avro в качестве формата хранения &lt;s&gt;данных&lt;/s&gt; для таблиц Iceberg, предназначенных для аналитических запросов в Trino.&lt;/b&gt; Несмотря на то, что Iceberg &lt;i&gt;может&lt;/i&gt; технически поддерживать его для данных, это приведет к серьезному ухудшению производительности и увеличению затрат. Avro прекрасно подходит для файлов метаданных Iceberg и для потоковых данных, но не для аналитического хранения.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Алгоритмы Сжатия (Compression Algorithms)&lt;/h3&gt;
&lt;p&gt;Выбор алгоритма сжатия напрямую влияет на размер хранимых данных, скорость чтения/записи и потребление ресурсов CPU. Trino поддерживает различные алгоритмы сжатия для файлов Parquet и ORC.&lt;/p&gt;
&lt;h4&gt;a) Snappy&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Высокоскоростной алгоритм сжатия, разработанный Google. Он оптимизирован для скорости сжатия и декомпрессии, а не для максимальной степени сжатия.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Очень быстрая декомпрессия:&lt;/b&gt; Минимальное влияние на производительность запросов, что критично для активных аналитических систем.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Сбалансированное соотношение сжатия:&lt;/b&gt; Обеспечивает хорошее сокращение размера файла без значительных затрат CPU.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Широкая поддержка:&lt;/b&gt; Один из наиболее часто используемых алгоритмов сжатия в экосистеме big data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Менее эффективное сжатие:&lt;/b&gt; По сравнению с алгоритмами, ориентированными на максимальное сжатие (например, ZSTD), Snappy может занимать больше места на диске.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; **Отличный выбор по умолчанию для большинства рабочих нагрузок&lt;/b&gt;, где скорость чтения является приоритетом, а степень сжатия “достаточно хороша”.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;b) ZSTD&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Алгоритм сжатия, разработанный Facebook, предлагающий значительно лучшую степень сжатия, чем Snappy, при сохранении приемлемой скорости сжатия/декомпрессии.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Высокая степень сжатия:&lt;/b&gt; Заметно сокращает объем данных на диске, что приводит к значительной экономии затрат на хранение и уменьшению объема передаваемых данных (IO).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Хорошая скорость декомпрессии:&lt;/b&gt; Хотя и медленнее, чем Snappy, ZSTD всё ещё очень быстр, особенно по сравнению с GZIP, что делает его пригодным для аналитических нагрузок.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Более высокое использование CPU:&lt;/b&gt; Процесс сжатия и декомпрессии требует больше ресурсов CPU, чем Snappy, что может немного увеличить нагрузку на вычислительные кластеры.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; Рекомендуется, когда **снижение затрат на хранение является приоритетом&lt;/b&gt;, и вы готовы пожертвовать небольшой частью производительности CPU. Отличный выбор для архивных данных или данных с высоким коэффициентом повторения.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Trino использует кстати уровень 3 и его поменять пока нельзя :(&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/airlift/aircompressor/blob/3210eb16a5ec40089398c40f40ad1d177228b414/src/main/java/io/airlift/compress/zstd/CompressionParameters.java#L26"&gt;https://github.com/airlift/aircompressor/blob/3210eb16a5ec40089398c40f40ad1d177228b414/src/main/java/io/airlift/compress/zstd/CompressionParameters.java#L26&lt;/a&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;public static final int DEFAULT_COMPRESSION_LEVEL = 3;&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;c) GZIP&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Широко распространенный и очень эффективный алгоритм сжатия.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Очень высокая степень сжатия:&lt;/b&gt; Обеспечивает максимальное уменьшение размера файла, что идеально для архивирования.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Очень медленная декомпрессия:&lt;/b&gt; Существенно замедляет операции чтения запросов, что делает его непригодным для интерактивной аналитики.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Высокое использование CPU:&lt;/b&gt; значительно увеличивает нагрузку на CPU при сжатии и декомпрессии.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:&lt;b&gt; **Категорически не рекомендуется для активных аналитических данных в Iceberg.&lt;/b&gt; Его использование оправдано только для долгосрочного архивирования, где данные редко запрашиваются, а максимальное сжатие является единственным приоритетом. Для активных данных он значительно ухудшит производительность Trino.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;d) LZ4&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Описание:** Еще один очень быстрый алгоритм сжатия, схожий по производительности со Snappy, но иногда предлагающий чуть лучшее сжатие.&lt;/li&gt;
&lt;li&gt;Преимущества:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Очень высокая скорость:&lt;/b&gt; Схож со Snappy.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Хорошее соотношение сжатия.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Недостатки:**
&lt;ul&gt;
  &lt;li&gt;Схож со Snappy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Использование:** Альтернатива Snappy, если требуется очень высокая скорость и хорошее сжатие.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-07-06-v-23.42.06.png" width="1714" height="1126" alt="" /&gt;
&lt;/div&gt;
&lt;h3&gt;3. Конфигурация Iceberg в Trino&lt;/h3&gt;
&lt;p&gt;Правильная настройка Iceberg в Trino включает в себя конфигурацию каталога и параметров создания самих таблиц.&lt;/p&gt;
&lt;h4&gt;a) Конфигурация Каталога (Catalog Configuration)&lt;/h4&gt;
&lt;p&gt;В файле `etc/catalog/&lt;catalog_name&gt;.properties` (например, `etc/catalog/iceberg.properties`) вы настраиваете, как Trino будет подключаться к Iceberg и где будут храниться метаданные таблиц.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;connector.name=iceberg
iceberg.catalog.type=hive_metastore # или rest, hadoop
hive.metastore.uri=thrift://namenode:9083 # Если hive_metastore
# Для объектного хранилища (например, S3, MinIO)
iceberg.s3.endpoint-url=http://s3.local:9000 
iceberg.s3.region=us-east-1
iceberg.s3.access-key=YOUR_ACCESS_KEY
iceberg.s3.secret-key=YOUR_SECRET_KEY
iceberg.s3.path-style-access=true # Для некоторых S3-совместимых хранилищ&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;`connector.name=iceberg`: Определяет, что используется коннектор Iceberg.&lt;/li&gt;
&lt;li&gt;`iceberg.catalog.type`: Определяет, какой бэкенд каталога Iceberg будет использоваться для хранения метаданных (схемы таблиц, версий и расположения файлов данных).
&lt;ul&gt;
  &lt;li&gt;`hive_metastore`: Использует существующий Hive Metastore. Это самый распространенный вариант, если у вас уже есть Hive Metastore.&lt;/li&gt;
  &lt;li&gt;`rest`: Подключается к Iceberg REST Catalog (требует развертывания отдельного сервиса). Предоставляет более чистый API и может обеспечивать лучшую производительность для операций с каталогом.&lt;/li&gt;
  &lt;li&gt;`hadoop`: Использует HDFS для хранения метаданных Iceberg. Менее распространен для продакшн-развертываний.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Параметры хранилища данных (Data Storage):** Независимо от типа каталога, фактические файлы данных Iceberg могут храниться в S3, HDFS, Google Cloud Storage, Azure Blob Storage и т.д. Вам нужно настроить соответствующие параметры в конфигурации каталога Trino для доступа к этому хранилищу (например, `iceberg.s3.endpoint-url`, `iceberg.s3.access-key` для S3).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;b) Конфигурация Таблиц (Table Configuration)&lt;/h4&gt;
&lt;p&gt;При создании таблиц Iceberg в Trino вы можете указывать различные параметры через секцию `WITH`. Это позволяет точно настроить, как Iceberg будет хранить данные.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;CREATE TABLE my_iceberg_table (
    id INT,
    name VARCHAR,
    event_timestamp TIMESTAMP(6) WITH TIME ZONE,
    data_json VARCHAR -- Пример для хранения полуструктурированных данных
)
WITH (
    format = 'PARQUET', -- Формат файлов данных
    partitioning = ARRAY['WEEK(event_timestamp)', 'bucket(16, id)'], -- Стратегия партиционирования
    format_version = 2, -- Версия формата Iceberg (рекомендуется 2)
    parquet_compression = 'ZSTD', -- Алгоритм сжатия Parquet
    parquet_row_group_size = '256MB', -- Целевой размер группы строк в Parquet
    write_target_data_file_size_bytes = '536870912', -- ~512MB, Целевой размер файлов данных, записываемых Iceberg
    vacuum_max_snapshots_to_keep = 10, -- Количество последних снимков для хранения
    expire_snapshots_min_retention_ms = 86400000 -- Минимальное время удержания снимков (24 часа)
);&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;`format`: Определяет формат файла данных (`’PARQUET’` или `’ORC’`). &lt;b&gt;По умолчанию Iceberg использует Parquet.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;`partitioning`: Определяет стратегию партиционирования данных. Это &lt;b&gt;критически важно для производительности запросов&lt;/b&gt;, так как Trino может пропускать целые партиции, не соответствующие условиям фильтрации. Примеры: `ARRAY[‘year(column_name)’, ‘month(column_name)’]` для временных данных, `ARRAY[‘bucket(N, column_name)’]` для равномерного распределения данных на основе хеша.&lt;/li&gt;
&lt;li&gt;`format_version`: Версия формата Iceberg (текущие версии 1 или 2). &lt;b&gt;Рекомендуется использовать `2` для новых таблиц&lt;/b&gt;, так как она предлагает больше возможностей (например, поддержка удаления строк, более гибкие индексы, поддержку Positional Deletes).&lt;/li&gt;
&lt;li&gt;`parquet_compression`: Указывает алгоритм сжатия для Parquet файлов (`’SNAPPY’`, `’ZSTD’`, `’GZIP’`, `’LZ4’`).&lt;/li&gt;
&lt;li&gt;`parquet_row_group_size`: Целевой размер группы строк (row group) в Parquet файле. Рекомендуемый диапазон обычно составляет от 128MB до 512MB. Большие группы строк могут улучшить сжатие и эффективность IO, но могут замедлить запись.&lt;/li&gt;
&lt;li&gt;`parquet_page_size`: Размер страницы в пределах группы строк Parquet. Обычно не требует частых изменений, но может влиять на сжатие и гранулярность доступа к данным.&lt;/li&gt;
&lt;li&gt;`write_target_data_file_size_bytes`: &lt;b&gt;Очень важный параметр.&lt;/b&gt; Определяет целевой размер файлов данных, которые Iceberg будет записывать. Хороший диапазон — от 128 МБ до 1 ГБ (~134217728 до 1073741824 байт). Чрезмерно маленькие файлы приводят к “проблеме маленьких файлов” (Small File Problem), что увеличивает нагрузку на метаданные и замедляет запросы. Чрезмерно большие файлы могут снизить параллелизм чтения.&lt;/li&gt;
&lt;li&gt;`vacuum_max_snapshots_to_keep`: Количество последних снимков таблицы, которые Iceberg должен сохранять. Важно для операций `VACUUM` и возможности откатывать таблицу к предыдущим состояниям.&lt;/li&gt;
&lt;li&gt;`expire_snapshots_min_retention_ms`: Минимальное время удержания снимков (в миллисекундах) до их удаления.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Подведение Итога&lt;/h3&gt;
&lt;p&gt;Выбор правильных форматов, сжатия и конфигурации для Iceberg в Trino является решающим для оптимизации производительности, стоимости и управляемости вашего озера данных.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Формат Хранения:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Parquet:&lt;/b&gt; Явно превосходит для большинства аналитических рабочих нагрузок. Колоночная природа, эффективное сжатие, нативная интеграция Field IDs Iceberg для схемы эволюции и широкая поддержка делают его &lt;b&gt;выбором по умолчанию и наиболее рекомендуемым.&lt;/b&gt;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;ORC:&lt;/b&gt; Достойная альтернатива Parquet, особенно если ваша инфраструктура уже использует ORC. Однако, учитывая нюансы отображения типов и общий тренд, Parquet часто является предрочтительнее для новых проектов.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Avro:&lt;/b&gt; &lt;b&gt;Категорически не подходит для хранения &lt;s&gt;данных&lt;/s&gt; аналитических таблиц.&lt;/b&gt; Несмотря на то, что Iceberg использует Avro для своих метаданных, применение его для самих данных приведет к крайне низкой производительности и высоким затратам.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Алгоритмы Сжатия:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Snappy:&lt;/b&gt; Отличный компромисс между скоростью и степенью сжатия. Хорош для большинства активных данных, где скорость доступа критична.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;ZSTD:&lt;/b&gt; Предпочтителен, если снижение затрат на хранение является приоритетом, и вы готовы к небольшому увеличению использования CPU. Начинает обгонять Snappy по популярности для многих сценариев.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;GZIP:&lt;/b&gt; Избегайте для активных данных из-за низкой скорости декомпрессии. Используйте только для долгосрочного архивирования.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Конфигурация:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Партиционирование:&lt;/b&gt; Критично для ускорения запросов. Выбирайте его с умом, основываясь на шаблонах запросов и объеме данных.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Версия формата Iceberg (v2):&lt;/b&gt; Используйте для новых таблиц, чтобы получить доступ к последним возможностям.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Целевой размер файлов (`write_target_data_file_size_bytes`):&lt;/b&gt; Настройте в диапазоне 128MB-1GB, чтобы избежать проблемы маленьких файлов и обеспечить хороший параллелизм Trino.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Параметры сжатия и размера блоков Parquet:&lt;/b&gt; Настройте такие параметры, как `parquet_row_group_size` и `parquet_compression` для дальнейшей оптимизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Используя Iceberg с Trino, вы получаете мощную комбинацию для создания высокопроизводительных, надежных и управляемых озер данных. Тщательный выбор форматов хранения, алгоритмов сжатия и тонкая настройка конфигурации будут ключами к максимальному использованию потенциала этих технологий, обеспечивая оптимальную производительность запросов при контролируемых затратах. Начните с Parquet и Snappy/ZSTD, а затем адаптируйте конфигурацию в зависимости от ваших конкретных рабочих нагрузок и требований к стоимости.&lt;/p&gt;
</description>
</item>


</channel>
</rss>