0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><strong>Parquet</strong>представляет собой Open source-формат для<a>Hadoop</a>, который может хранить вложенные структуры данных в виде<strong>плоского столбчатого формата</strong>. Если сравнивать с обычным строчным подходом, то<strong>Parquet</strong>является более эффективным в плане хранения и производительности. А это уже, в свою очередь, весьма полезно для запросов, считывающих определенные столбцы из широкой таблицы (имеются ввиду таблицы со многими столбцами). Таким образом, благодаря файловому формату происходит считывание лишь необходимых столбцов, поэтому ввод-вывод будет сведен к минимуму.</p>
1
<p><strong>Parquet</strong>представляет собой Open source-формат для<a>Hadoop</a>, который может хранить вложенные структуры данных в виде<strong>плоского столбчатого формата</strong>. Если сравнивать с обычным строчным подходом, то<strong>Parquet</strong>является более эффективным в плане хранения и производительности. А это уже, в свою очередь, весьма полезно для запросов, считывающих определенные столбцы из широкой таблицы (имеются ввиду таблицы со многими столбцами). Таким образом, благодаря файловому формату происходит считывание лишь необходимых столбцов, поэтому ввод-вывод будет сведен к минимуму.</p>
2
<p>Однако давайте сделаем небольшую ремарку: для наилучшего понимания файлового формата<strong>Parquet</strong>в<a>Hadoop</a>надо взглянуть на<strong>столбчатый формат</strong>, то есть формат, основанный на столбцах. Дело в том, что в нем могут вместе храниться однотипные значения каждого столбца.</p>
2
<p>Однако давайте сделаем небольшую ремарку: для наилучшего понимания файлового формата<strong>Parquet</strong>в<a>Hadoop</a>надо взглянуть на<strong>столбчатый формат</strong>, то есть формат, основанный на столбцах. Дело в том, что в нем могут вместе храниться однотипные значения каждого столбца.</p>
3
<p>К примеру, наша запись включает такие поля, как<em>ID</em>,<em>Name</em>и<em>Department</em>. В данном случае все значения столбца<em>ID</em>станут храниться вместе, впрочем, так же, как и значения столбца<em>Name</em>, ну и т. д. Следовательно, таблица получит приблизительно следующий вид:</p>
3
<p>К примеру, наша запись включает такие поля, как<em>ID</em>,<em>Name</em>и<em>Department</em>. В данном случае все значения столбца<em>ID</em>станут храниться вместе, впрочем, так же, как и значения столбца<em>Name</em>, ну и т. д. Следовательно, таблица получит приблизительно следующий вид:</p>
4
<p>В<strong>строковом формате</strong>сохранение данных осуществляется следующим образом:</p>
4
<p>В<strong>строковом формате</strong>сохранение данных осуществляется следующим образом:</p>
5
<p>А вот, как обстоит дело в случае со<strong>столбчатым форматом</strong>файлов:</p>
5
<p>А вот, как обстоит дело в случае со<strong>столбчатым форматом</strong>файлов:</p>
6
<p>Таким образом,<strong>столбчатый формат будет более эффективным, если надо запрашивать из таблицы несколько столбцов</strong>. При использовании такого формата, будут считаны лишь нужные столбцы, т. к. они располагаются по соседству. Следовательно,<strong>операции ввода-вывода будут сведены к минимуму</strong>.</p>
6
<p>Таким образом,<strong>столбчатый формат будет более эффективным, если надо запрашивать из таблицы несколько столбцов</strong>. При использовании такого формата, будут считаны лишь нужные столбцы, т. к. они располагаются по соседству. Следовательно,<strong>операции ввода-вывода будут сведены к минимуму</strong>.</p>
7
<p>Представим, что нужен лишь столбец<em>NAME</em>. Если используется<strong>строковый</strong>формат, то каждую запись в наборе данных надо будет загрузить, разобрать по полям, а потом извлечь данные<em>NAME</em>.<strong>Столбчатый</strong>же формат позволит перейти непосредственно к столбцу<em>Name</em>, ведь все значения для него хранятся вместе. Следовательно, всю запись сканировать не потребуется.</p>
7
<p>Представим, что нужен лишь столбец<em>NAME</em>. Если используется<strong>строковый</strong>формат, то каждую запись в наборе данных надо будет загрузить, разобрать по полям, а потом извлечь данные<em>NAME</em>.<strong>Столбчатый</strong>же формат позволит перейти непосредственно к столбцу<em>Name</em>, ведь все значения для него хранятся вместе. Следовательно, всю запись сканировать не потребуется.</p>
8
<p>Итак, столбчатый формат повысит производительность запросов, ведь для перехода к требуемым столбцам надо меньше времени на поиск. Также сокращается число операций ввода-вывода, так как происходит чтение лишь нужных столбцов.</p>
8
<p>Итак, столбчатый формат повысит производительность запросов, ведь для перехода к требуемым столбцам надо меньше времени на поиск. Также сокращается число операций ввода-вывода, так как происходит чтение лишь нужных столбцов.</p>
9
<p>У<strong>Parquet</strong>существует и уникальная особенность: способность хранить данные со вложенными структурами. К примеру, в файле<strong>Parquet</strong>даже вложенные поля вы сможете читать по отдельности, то есть нет необходимости считывать все поля во вложенной структуре. Что касается хранения вложенных структур, то здесь<strong>Parquet</strong>задействует алгоритм измельчения и сборки (<em>shredding and assembly</em>).</p>
9
<p>У<strong>Parquet</strong>существует и уникальная особенность: способность хранить данные со вложенными структурами. К примеру, в файле<strong>Parquet</strong>даже вложенные поля вы сможете читать по отдельности, то есть нет необходимости считывать все поля во вложенной структуре. Что касается хранения вложенных структур, то здесь<strong>Parquet</strong>задействует алгоритм измельчения и сборки (<em>shredding and assembly</em>).</p>
10
<p>Для понимания формата файла<strong>Parquet</strong>в Hadoop, следует знать ряд терминов:</p>
10
<p>Для понимания формата файла<strong>Parquet</strong>в Hadoop, следует знать ряд терминов:</p>
11
<ol><li><strong>Группа строк (row group)</strong>. Речь идет о логическом горизонтальном разбиении данных на строки. При этом row group состоит из фрагмента каждого столбца в наборе данных.</li>
11
<ol><li><strong>Группа строк (row group)</strong>. Речь идет о логическом горизонтальном разбиении данных на строки. При этом row group состоит из фрагмента каждого столбца в наборе данных.</li>
12
<li><strong>Фрагмент столбца (column chunk)</strong>. В принципе, имеется в виду фрагмент конкретного столбца. Такие фрагменты столбцов "проживают" в определенной группе строк и гарантированно являются смежными в файле.</li>
12
<li><strong>Фрагмент столбца (column chunk)</strong>. В принципе, имеется в виду фрагмент конкретного столбца. Такие фрагменты столбцов "проживают" в определенной группе строк и гарантированно являются смежными в файле.</li>
13
<li><strong>Страница (page)</strong>. Вышеописанные фрагменты столбцов делятся на страницы, которые записаны друг за другом. Страницы имеют общий заголовок, поэтому при чтении ненужные можно пропустить.</li>
13
<li><strong>Страница (page)</strong>. Вышеописанные фрагменты столбцов делятся на страницы, которые записаны друг за другом. Страницы имеют общий заголовок, поэтому при чтении ненужные можно пропустить.</li>
14
</ol><p>На картинке заголовок содержит волшебное число<strong>PAR1</strong>(4 байта), идентифицирующее файл как файл Parquet-формата.</p>
14
</ol><p>На картинке заголовок содержит волшебное число<strong>PAR1</strong>(4 байта), идентифицирующее файл как файл Parquet-формата.</p>
15
<p>Осталось посмотреть, что записано в футере:</p>
15
<p>Осталось посмотреть, что записано в футере:</p>
16
<p><em>По материалам блога<a>MCS.Mail.ru</a>.</em></p>
16
<p><em>По материалам блога<a>MCS.Mail.ru</a>.</em></p>
17
17