Zum Inhalt springen

Parquet-Verschlüsselung

Ab Version 0.10.0 unterstützt DuckDB das Lesen und Schreiben verschlüsselter Parquet-Dateien. DuckDB folgt weitgehend der Parquet-Modular-Encryption-Spezifikation mit einigen Einschränkungen.

Verschlüsselte Dateien lesen und schreiben

Mit der Funktion PRAGMA add_parquet_key können benannte Schlüssel mit 128, 192 oder 256 Bit zu einer Sitzung hinzugefügt werden. Die Schlüssel werden im Speicher gehalten:

PRAGMA add_parquet_key('key128', '0123456789112345');
PRAGMA add_parquet_key('key192', '012345678911234501234567');
PRAGMA add_parquet_key('key256', '01234567891123450123456789112345');
PRAGMA add_parquet_key('key256base64', 'MDEyMzQ1Njc4OTExMjM0NTAxMjM0NTY3ODkxMTIzNDU=');

Verschlüsselte Parquet-Dateien schreiben

Nach Angabe des Schlüssels (z. B. key256) können Dateien wie folgt verschlüsselt werden:

COPY tbl TO 'tbl.parquet' (ENCRYPTION_CONFIG {footer_key: 'key256'});

Verschlüsselte Parquet-Dateien lesen

Eine mit einem bestimmten Schlüssel (z. B. key256) verschlüsselte Parquet-Datei kann dann so gelesen werden:

COPY tbl FROM 'tbl.parquet' (ENCRYPTION_CONFIG {footer_key: 'key256'});

Oder:

SELECT *
FROM read_parquet('tbl.parquet', encryption_config = {footer_key: 'key256'});

Interoperabilität

DuckDB kann einheitlich verschlüsselte Parquet-Dateien lesen, die von der Arrow-C++-API geschrieben wurden (z. B. über PyArrow), sofern derselbe Schlüssel für Footer und alle Spalten verwendet wird.

Einschränkungen

Die Parquet-Verschlüsselung von DuckDB hat derzeit die folgenden Einschränkungen.

DuckDB verschlüsselt Footer und alle Spalten mit dem footer_key. Die Parquet-Spezifikation erlaubt die Verschlüsselung einzelner Spalten mit unterschiedlichen Schlüsseln, z. B.:

COPY tbl TO 'tbl.parquet'
(ENCRYPTION_CONFIG {
footer_key: 'key256',
column_keys: {key256: ['col0', 'col1']}
});

Das wird derzeit nicht unterstützt und führt (vorerst) zu einem Fehler:

Terminal window
Not implemented Error: Parquet encryption_config column_keys not yet implemented

Auswirkungen auf die Leistung

Beachten Sie, dass Verschlüsselung die Leistung beeinflusst. Ohne Verschlüsselung dauert das Lesen bzw. Schreiben der Tabelle lineitem aus TPC-H bei SF1 (6 Mio. Zeilen, 15 Spalten) aus bzw. in eine Parquet-Datei 0.26 bzw. 0.99 Sekunden. Mit Verschlüsselung dauert es 0.64 bzw. 2.21 Sekunden, beides etwa 2,5× langsamer als die unverschlüsselte Variante.