Как включить сжатие данных в Greenplum, какие алгоритмы сжатия поддерживает эта MPP-СУБД и можно ли установить разные параметры сжатия для отдельных столбцов и разделов больших таблиц. Примеры SQL-запросов и рекомендацию по настройке.
Как Greenplum сжимает данные: примеры настроек и SQL-запросов
Эффективное сжатие данных позволяет Greenplum снижать потребление памяти и повышать производительность SQL-запросов. Greenplum предлагает несколько методов сжатия данных, снижения затрат на хранение и повышения производительности запросов.
В Greenplum доступны два типа сжатия в базе данных. Сжатие на уровне таблицы применяется ко всей таблице. Сжатие на уровне столбца применяется к конкретному столбцу. К разным столбцам можно применять разные алгоритмы сжатия на уровне столбца. Сжатие снижает использование диска и улучшает ввод-вывод во всей системе, однако оно увеличивает производительность при сжатии и распаковке данных. Разная ориентация таблицы поддерживает разные алгоритмы сжатия.
Ориентация таблицы |
Доступные типы сжатия |
Поддерживаемые алгоритмы |
Строковая |
На уровне таблицы |
ZLIB и ZSTD |
Колоночная |
На уровне столбца и таблицы |
RLE_TYPE, ZLIB и ZSTD |
Для использования алгоритма ZLIB требуются пакеты ПО, установленные в хост-системе Greenplum.
Например, следующий SQL-запрос позволяет создать таблицу со сжатием на уровне строк и на уровне таблицы с использованием алгоритма zlib:
CREATE TABLE table_name (id INT, name TEXT) WITH (APPENDOPTIMIZED=TRUE, COMPRESSTYPE=zlib);
Эта команда создает новую таблицу с названием table_name, в которой каждый сегмент Greenplum сжимает добавленные строки с использованием алгоритма сжатия ZLIB.
А следующий запрос создаст таблицу со сжатием по столбцам и на уровне таблицы:
CREATE TABLE table_name (id INT, name TEXT) WITH (APPENDOPTIMIZED=TRUE, orientation=column, COMPRESSTYPE=zstd);
Greenplum поддерживает разные уровни для разных алгоритмов сжатия. Более высокий уровень имеет большее сжатие, но скорость сжатия и распаковки остаются прежними. Уровень сжатия ZTSD может быть установлен на значения от 1 до 19. Уровень сжатия ZLIB может быть установлен на значения от 1 до 9. Уровень сжатия RLE может быть установлен на значения от 1 до 4. К примеру, запрос
CREATE TABLE table_name (id INT, name TEXT) WITH (APPENDOPTIMIZED=TRUE, COMPRESSTYPE=zstd, COMPRESSLEVEL=5);
создает AO-таблицу с названием table_name, применяя к ней алгоритм сжатия ZTSD с уровнем сжатия 5.
Можно использовать различные кодеки сжатия для разных столбцов колоночно-ориентированной таблицы:
CREATE TABLE T1 (c1 int ENCODING (compresstype=zstd), c2 char ENCODING (compresstype=zlib, blocksize=65536), c3 char) WITH (appendoptimized=true, orientation=column);
В этом примере столбец c1 сжимается с помощью кодека ZTSD и использует размер блока, определенный системой. Столбец c2 сжимается с помощью алгоритма ZLIB и использует размер блока 65536. Столбец c3 не сжимается и использует размер блока, определенный системой.
Примечательно, что можно изменить параметры сжатия для уже существующих таблиц, используя команду ALTER TABLE, например:
ALTER TABLE table_name SET (COMPRESSTYPE=zstd);
Аналогично с помощью этой же команды можно отключить сжатие, ранее настроенное для уже существующих таблиц, установив значение none в параметр COMPRESSTYPE:
ALTER TABLE table_name SET (COMPRESSTYPE=none);
Greenplum предоставляет встроенные функции для проверки степени сжатия таблицы, оптимизированной для добавления. Функции принимают либо идентификатор объекта, либо имя таблицы. К примеру, следующая команда покажет степень сжатия AO-таблицы с названием table_name:
SELECT get_ao_compression_ratio(’ table_name’);
При загрузке объемных данных из файла CSV в сжатую таблицу автоматически применяется установленный метод сжатия, например, следующая команда заполняет таблицу products данными из CSV-файла /home/gpadmin/products.csv, разделителем столбцов в котором является запятая, а пропуски значений маркируются как отсутствующие данные (NULL):
COPY products FROM ‘/home/gpadmin/products.csv’ WITH DELIMITER ‘,’ NULL as ‘NULL’;
В заключение отметим, что сжатие также можно использовать в партиционированных таблицах, задавая различные настройки сжатия для каждого из разделов. Поменять параметры сжатия для одного или нескольких разделов можно с помощью команды ALTER TABLE.
Некоторые утилиты базы данных Greenplum поддерживают сжатие для ускорения передачи или обработки данных, например gpbackup, gprestore, gpcopy, gpload и gplogfilter. Например, команда резервного копирования gpcopy сжимает данные во время передачи из исходной базы данных в целевую при копировании данных на другой хост. Если для gpcopy указан флаг –no-compression, данные передаются без сжатия.
Читайте в нашей новой статье о других приемах эффективного управления данными в Greenplum и Arenadata DB.
Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники