Шифрование Parquet
Начиная с версии 0.10.0, DuckDB поддерживает чтение и запись зашифрованных файлов Parquet. DuckDB в целом следует спецификации Модульной шифрования Parquet с некоторыми ограничениями.
Чтение и запись зашифрованных файлов
С помощью функции PRAGMA add_parquet_key, можно добавлять в сеанс секретные ключи шифрования длиной 128, 192 или 256 бит. Эти ключи хранятся в оперативной памяти:
PRAGMA add_parquet_key('key128', '0123456789112345');
PRAGMA add_parquet_key('key192', '012345678911234501234567');
PRAGMA add_parquet_key('key256', '01234567891123450123456789112345'); Запись зашифрованных файлов Parquet
После указания ключа (например, key256), файлы можно зашифровать следующим образом:
COPY tbl TO 'tbl.parquet' (ENCRYPTION_CONFIG {footer_key: 'key256'}); Чтение зашифрованных файлов Parquet
Зашифрованный файл Parquet, использующий определенный ключ (например, key256), можно прочитать следующим образом:
COPY tbl FROM 'tbl.parquet' (ENCRYPTION_CONFIG {footer_key: 'key256'}); Или:
SELECT *
FROM read_parquet('tbl.parquet', encryption_config = {footer_key: 'key256'}); Ограничения
Шифрование Parquet в DuckDB в настоящее время имеет следующие ограничения.
-
Он несовместим с шифрованием, например, PyArrow, пока не будут реализованы недостающие детали.
-
DuckDB шифрует подпись и все столбцы с помощью
footer_key. Спецификация Parquet позволяет шифровать отдельные столбцы с использованием различных ключей, например:COPY tbl TO 'tbl.parquet' (ENCRYPTION_CONFIG { footer_key: 'key256', column_keys: {key256: ['col0', 'col1']} });Однако это в настоящее время не поддерживается и вызовет ошибку (на данный момент):
Not implemented Error: Parquet encryption_config column_keys not yet implemented
Последствия для производительности
Обратите внимание, что шифрование оказывает некоторое влияние на производительность. Без шифрования чтение/запись таблицы lineitem из TPC-H в SF1, которая содержит 6 млн строк и 15 столбцов, из/в файл Parquet занимает 0,26 и 0,99 секунды соответственно. При шифровании это занимает 0,64 и 2,21 секунды, что примерно в 2,5 раза медленнее, чем в незашифрованном варианте.
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/data/parquet/encryption.html