Bolt Parquet 写入配置
登录后可跨设备保存划线和私人笔记登录
Bolt Parquet 写入配置
本文档概述 Bolt 支持的 Parquet 写入时配置选项。Bolt 的 Parquet 写入器基于 Arrow C++ Parquet 库,主要通过 Hive 连接器暴露。
在本文档中,"支持"表示该配置可以通过 Bolt 的公开配置途径(如 Hive 会话/表属性、QueryConfig)设置并生效。
Spark 层面的配置(参考)
这些标准 Spark 属性并不被 Bolt 的写入器直接使用。相反,Bolt 通过自身的配置机制提供等效功能。
| 属性 | 支持情况 | Bolt 默认值 | 配置路径 | 说明 |
|---|---|---|---|---|
spark.sql.parquet.outputTimestampType | 部分支持 | 禁用 INT96;强制转换为 SECOND | HiveConfig arrowBridgeTimestampUnit,WriterOptions writeInt96AsTimestamp | Bolt 通过 arrowBridgeTimestampUnit(SECOND、MILLI、MICRO、NANO)管理时间戳精度。内部的 writeInt96AsTimestamp 选项可用于覆盖传统 INT96 格式,并具有优先级。参见 bolt/connectors/hive/HiveDataSink.cpp 和 bolt/dwio/parquet/writer/Writer.h。 |
spark.sql.parquet.writeLegacyFormat | 不支持 | 不适用 | 不适用 | Bolt 不使用此标志。格式版本由 parquet.writer.version 属性控制。 |
Bolt 中的 Arrow 写入器属性
这些属性对应于底层 parquet::arrow::WriterProperties 和 parquet::arrow::ArrowWriterProperties 中的设置。Bolt 会直接暴露其中一部分,或将它们从其他配置映射而来。
| 属性 | 支持 | Bolt 默认值 | 配置路径 | 说明 |
|---|---|---|---|---|
write_batch_size | 内部 | 1024 | 未暴露 | 取自 Arrow writer 属性的默认值。Bolt 使用自己的启发式策略(writeBatchBytes、minBatchSize)进行批量处理。参见 bolt/dwio/parquet/arrow/Properties.h。 |
max_row_group_length | 是 | 1,048,576 行 | 刷新策略 | 默认的刷新策略在约 100 万行或约 128 MiB 时触发。可通过 WriterOptions 中的自定义刷新策略工厂进行配置。参见 bolt/dwio/parquet/writer/Writer.h。 |
parquet_block_size | 是 | 128 MiB(启用时) | WriterOptions.parquet_block_size | 仅当 enableFlushBasedOnBlockSize 为 true 时生效,它会覆盖默认的按行/按字节刷新策略。参见 bolt/dwio/parquet/writer/Writer.cpp。 |
data_page_version | 是 | V1 | WriterOptions.dataPageVersion | 可设置为 V1 或 V2。参见 bolt/dwio/parquet/writer/Writer.h。 |
writer.version | 是 | PARQUET_2_6 | WriterOptions.parquetVersion | 控制 Parquet 格式版本。参见 bolt/dwio/parquet/arrow/Properties.h。 |
compression | 是 | UNCOMPRESSED | Hive INSERT compressionKind 属性 | 支持的编解码器:SNAPPY、GZIP、ZSTD、LZ4、UNCOMPRESSED。在 bolt/connectors/hive/HiveDataSink.cpp 中完成映射。 |
compression_level 与 codec_options | 内部 | 随编解码器而异 | WriterOptions.codecOptions | Arrow writer 内部支持,但未通过 Hive 会话/表属性暴露。可按列配置。参见 bolt/dwio/parquet/arrow/Properties.h。 |
dictionary_enabled | 是 | true | WriterOptions.enableDictionary(全局)、columnEnableDictionaryMap(按列) | 字典编码可以全局控制,也可以针对特定列进行控制。参见 bolt/dwio/parquet/writer/Writer.h。 |
data_page_size | 是 | 1 MiB | WriterOptions.dataPageSize(全局)、columnDataPageSizeMap(按列) | 参见 bolt/dwio/parquet/writer/Writer.h。 |
dictionary_page_size_limit | 是 | 1 MiB | WriterOptions.dictionaryPageSizeLimit(全局)、columnDictionaryPageSizeLimitMap(按列) | 参见 bolt/dwio/parquet/writer/Writer.h。 |
page_index_enabled | 内部 | false | 未暴露 | Arrow writer 支持生成页索引,但目前在 Bolt 中不可配置。参见 bolt/dwio/parquet/arrow/Properties.h。 |
statistics_enabled | 内部 | true | 未暴露 | 统计信息默认启用,每列最大大小为 4096 字节。无法从外部配置。参见 bolt/dwio/parquet/arrow/Properties.h。 |
store_decimal_as_integer | 是 | true | WriterOptions.storeDecimalAsInteger | Bolt 默认将兼容的小数以 int32/int64 形式存储以提升效率。参见 bolt/dwio/parquet/writer/Writer.h。 |
created_by | 内部 | "parquet-cpp-bolt" | 硬编码 | 文件元数据中的 created_by 字符串由内部设置。参见 bolt/dwio/parquet/arrow/Properties.h。 |
sorting_columns | 内部 | 未设置 | 未暴露 | Arrow writer 可以存储排序元数据,但 Bolt 未提供设置该值的途径。参见 bolt/dwio/parquet/arrow/Properties.h。 |
page_checksum_enabled | 是 | false | parquet.page.write-checksum.enabled 表属性 | 在内部映射到 Arrow writer 的 enable_page_checksum() 构建方法。参见 bolt/dwio/parquet/arrow/Properties.h。 |
encryption | 内部 | 已禁用 | WriterOptions.encryptionOptions | 如果提供了相关属性,writer 支持 AES_GCM_V1 和 AES_GCM_CTR_V1 加密,但未通过 Hive 连接器暴露。参见 bolt/dwio/parquet/writer/Writer.h。 |
threading (use_threads) | 是 | false(0 个线程) | WriterOptions.threadPoolSize | 若 threadPoolSize > 0,则启用多线程,使用全局静态线程池进行并行列写入。参见 bolt/dwio/parquet/writer/Writer.cpp。 |
compliant_nested_types | 内部 | true | 未暴露 | writer 遵循 Parquet 规范进行嵌套列表元素命名(“element”)。参见 bolt/dwio/parquet/arrow/Properties.h。 |
Parquet-MR 风格设置
下表说明 Bolt 的写入器是否实际支持经典的 parquet-mr Hadoop 配置,通常是通过映射到等效的 WriterOptions 或 WriterProperties 设置来实现的。
| 属性 | 在 Bolt 中生效 | Bolt 默认值 | 配置路径 | 备注 |
|---|---|---|---|---|
parquet.block.size | 是 | 128 MiB | WriterOptions.parquet_block_size | 当 enableFlushBasedOnBlockSize 为 true 时使用。 |
parquet.page.size | 是 | 1 MiB | WriterOptions.dataPageSize | |
parquet.compression | 是 | UNCOMPRESSED | Hive compressionKind 表属性 | 映射到 WriterOptions.compression。 |
parquet.enable.dictionary | 是 | true | WriterOptions.enableDictionary | |
parquet.dictionary.page.size | 是 | 1 MiB | WriterOptions.dictionaryPageSizeLimit | |
parquet.writer.version | 是 | PARQUET_2_6 | WriterOptions.parquetVersion | |
parquet.compression.codec.zstd.level | 是 | 3 | WriterOptions.codecOptions | 通过会话/表属性暴露并进行内部映射。默认值来自 zstd 库。参见 bolt/dwio/parquet/arrow/util/CompressionZstd.cpp。 |
parquet.page.write-checksum.enabled | 是 | false | WriterProperties::Builder | 可通过表属性进行配置。 |
parquet.enable.summary-metadata | 否 | 不适用 | 未实现 | Bolt 不会创建单独的 summary 文件。 |
parquet.bloom.filter.enabled | 否 | 不适用 | 未实现 | 不支持写入布隆过滤器。 |
parquet.crypto.factory.class | 否 | 不适用 | 未实现 | 加密通过 WriterOptions 在内部处理。 |
parquet.compression.codec.zstd.workers | 否 | 不适用 | 未实现 | Bolt 的 Parquet 写入线程由 WriterOptions.threadPoolSize 控制。 |
parquet.validation | 否 | 不适用 | 未实现 |
Bolt 专有的写入选项与行为
以下选项和行为是 Bolt 实现所特有的,可对写入过程进行更细粒度的控制。
- 默认刷新策略:默认情况下,Parquet 写入器在行组达到约 1,048,576 行 或其估算大小超过 128 MiB 时刷新该行组。该策略在
DefaultFlushPolicy中的bolt/dwio/parquet/writer/Writer.h中定义。 enableFlushBasedOnBlockSize:WriterOptions中的bool,用于将刷新行为从默认的行数/字节数策略改为纯粹基于块大小的策略。当启用true时,它使用WriterOptions.parquet_block_size(默认为 128 MiB)来控制行组大小,并将max_row_group_length设置为一个极大的值,以防止它先被触发。这里使用的是 Arrow 写入器的NewBufferedRowGroup()。该选项位于bolt/dwio/parquet/writer/Writer.cpp中。enableRowGroupAlignedWrite:WriterOptions中的bool,用于专门的数据保留场景。它与expectedRowsInEachBlock配合使用,以创建具有精确行数的行组。参见bolt/dwio/parquet/writer/Writer.h。writeBatchBytes/minBatchSize:WriterOptions内部的启发式规则,用于在将大型 BoltVectorPtr批次转换为 ArrowRecordBatch时管理内存和性能。写入器可能会根据这些阈值将大批次拆分为较小的批次(默认值:40 MiB 和 512 行)。参见bolt/dwio/parquet/writer/Writer.cpp。- 文件名扩展名:对于 Hive
INSERT操作,当存储格式为PARQUET时,HiveDataSink会自动为输出文件追加.parquet扩展名。此逻辑在bolt/connectors/hive/HiveDataSink.cpp中处理。 - 时间戳桥接单位:写入 Parquet 的时间戳精度由
arrow_bridge_timestamp_unit会话属性(通过HiveConfig设置)控制,其取值可以为SECOND、MILLI、MICRO或NANO。为保持向后兼容,内部的WriterOptions.writeInt96AsTimestamp(bool)可设置为true,以强制使用已弃用的INT96格式,且该设置优先于桥接单位。参见bolt/connectors/hive/HiveConfig.cpp和bolt/dwio/parquet/writer/Writer.h。
评论
登录后参与评论
正在加载评论…
KnowForge