You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建PyArrow Parquet加密属性以加密Pandas DataFrame?

解决PyArrow Parquet加密属性创建问题

要创建encryption_properties,你需要使用PyArrow Parquet模块提供的加密相关类,核心是EncryptionProperties,配合密钥材料提供者和加密算法实现。以下是完整的可运行代码示例:

步骤1:导入加密相关模块

除基础的pandas和pyarrow外,还需导入Parquet加密的专用类:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
from pyarrow.parquet import (
    EncryptionProperties,
    AesGcmV1Encryption,
    LocalKeyMaterialProvider
)
import secrets

步骤2:生成加密密钥

AES-GCM加密要求密钥长度为16、24或32字节(对应128、192、256位加密),用secrets模块生成安全随机密钥:

# 生成256位(32字节)的AES密钥
encryption_key = secrets.token_bytes(32)
# 为密钥指定唯一ID(解密时需匹配)
key_id = b"my-secret-key-id"

步骤3:创建密钥材料提供者

使用LocalKeyMaterialProvider关联密钥与ID:

key_provider = LocalKeyMaterialProvider()
key_provider.add_key(key_id, encryption_key)

步骤4:构建加密属性

支持两种加密模式,按需选择:

选项A:文件级全加密

加密整个Parquet文件:

# 指定加密算法为AES-GCM v1
encryption_algorithm = AesGcmV1Encryption()
# 创建加密属性
enc_prop = EncryptionProperties(
    encryption_algorithm=encryption_algorithm,
    key_material_provider=key_provider,
    encryption_key_id=key_id
)

选项B:列级加密(仅加密指定列)

仅对特定列加密,比如示例中的col2:

enc_prop = EncryptionProperties(
    encryption_algorithm=AesGcmV1Encryption(),
    key_material_provider=key_provider,
    encryption_key_id=key_id,
    encrypted_columns=["col2"]  # 指定需要加密的列名
)

步骤5:加密保存Parquet文件

将DataFrame转为PyArrow Table后,传入加密属性写入:

# 创建示例DataFrame
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
# 转为PyArrow Table
table = pa.Table.from_pandas(df)
# 加密写入Parquet
pq.write_table(table, "test_encrypted.parquet", encryption_properties=enc_prop)

额外注意事项

  • 解密时需使用相同的密钥ID、密钥及对应密钥提供者配置。
  • 密钥需妥善保管,丢失密钥会导致数据无法恢复。
  • 确保PyArrow版本在6.0.0及以上(该版本开始支持Parquet加密功能)。

内容的提问来源于stack exchange,提问作者seb2704

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:21:47