⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Parquet Encryption

从版本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文件

使用特定密钥(例如,key256)加密的Parquet文件,可以按如下方式读取:

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

或者:

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

Limitations

DuckDB的Parquet加密目前有以下限制。

  1. 在实现缺失的细节之前,它与例如PyArrow的加密不兼容。

  2. 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
    

性能影响

请注意,加密会对性能产生一些影响。 在没有加密的情况下,从/到Parquet文件读取/写入TPC-Hlineitem表(SF1,600万行和15列)分别需要0.26秒和0.99秒。 使用加密后,这需要0.64秒和2.21秒,两者都比未加密版本慢约2.5倍。