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:
Not implemented Error: Parquet encryption_config column_keys not yet implementedAuswirkungen 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.