This is an automated email from the ASF dual-hosted git repository.
yuanzhou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git
The following commit(s) were added to refs/heads/main by this push:
new a4e565577a [VL] Enhance VeloxIceberg documentation with SQL options
(#11586)
a4e565577a is described below
commit a4e565577a4a073ae46a7d135987d4751ac0a8f7
Author: BInwei Yang <[email protected]>
AuthorDate: Wed Feb 11 23:22:03 2026 -0800
[VL] Enhance VeloxIceberg documentation with SQL options (#11586)
* Enhance VeloxIceberg documentation with SQL options
Added detailed configuration options for Spark SQL, including support
status for various parameters related to reading and writing operations.
---
docs/get-started/VeloxIceberg.md | 214 +++++++++++++++++++++++++++++++++++++--
1 file changed, 204 insertions(+), 10 deletions(-)
diff --git a/docs/get-started/VeloxIceberg.md b/docs/get-started/VeloxIceberg.md
index a0cdecca48..f28accbadb 100644
--- a/docs/get-started/VeloxIceberg.md
+++ b/docs/get-started/VeloxIceberg.md
@@ -99,7 +99,7 @@ the added column name is same to the deleted column, the scan
will fall back.
## Configuration
### Catalogs
-Supports all the catalog options, which is not used in native engine.
+All the catalog configurations are transparent to Gluten
### SQL Extensions
Fallback
@@ -107,14 +107,208 @@ Fallback
Supports the option `spark.sql.extensions`, fallback the SQL command `CALL`.
### Runtime configuration
+The "Gluten Support" column is now ready to be populated with:
+
+✅ Supported<br>
+❌ Not Supported<br>
+⚠️ Partial Support<br>
+🔄 In Progress<br>
+🚫 Not applied or transparent to Gluten<br>
+
+### Spark SQL Options
+| Spark option | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| spark.sql.iceberg.vectorization.enabled | Table default | Enables vectorized
reads of data files |❌|
+| spark.sql.iceberg.parquet.reader-type | ICEBERG | Sets Parquet reader
implementation (ICEBERG,COMET) |✅ |
+| spark.sql.iceberg.check-nullability | true | Validate that the write
schema's nullability matches the table's nullability |✅ |
+| spark.sql.iceberg.check-ordering | true | Validates the write schema column
order matches the table schema order |✅ |
+| spark.sql.iceberg.planning.preserve-data-grouping | false | When true,
co-locate scan tasks for the same partition in the same read split, used in
Storage Partitioned Joins |✅ |
+| spark.sql.iceberg.aggregate-push-down.enabled | true | Enables pushdown of
aggregate functions (MAX, MIN, COUNT) | |
+| spark.sql.iceberg.distribution-mode | See Spark Writes | Controls
distribution strategy during writes | ✅ |
+| spark.wap.id | null | Write-Audit-Publish snapshot staging ID | |
+| spark.wap.branch | null | WAP branch name for snapshot commit | |
+| spark.sql.iceberg.compression-codec | Table default | Write compression
codec (e.g., zstd, snappy) | |
+| spark.sql.iceberg.compression-level | Table default | Compression level for
Parquet/Avro | |
+| spark.sql.iceberg.compression-strategy | Table default | Compression
strategy for ORC | |
+| spark.sql.iceberg.data-planning-mode | AUTO | Scan planning mode for data
files (AUTO, LOCAL, DISTRIBUTED) | |
+| spark.sql.iceberg.delete-planning-mode | AUTO | Scan planning mode for
delete files (AUTO, LOCAL, DISTRIBUTED) | |
+| spark.sql.iceberg.advisory-partition-size | Table default | Advisory size
(bytes) used for writing to the Table when Spark's Adaptive Query Execution is
enabled. Used to size output files | |
+| spark.sql.iceberg.locality.enabled | false | Report locality information for
Spark task placement on executors |✅ |
+| spark.sql.iceberg.executor-cache.enabled | true | Enables cache for
executor-side (currently used to cache Delete Files) |❌|
+| spark.sql.iceberg.executor-cache.timeout | 10 | Timeout in minutes for
executor cache entries |❌|
+| spark.sql.iceberg.executor-cache.max-entry-size | 67108864 (64MB) | Max size
per cache entry (bytes) |❌|
+| spark.sql.iceberg.executor-cache.max-total-size | 134217728 (128MB) | Max
total executor cache size (bytes) |❌|
+| spark.sql.iceberg.executor-cache.locality.enabled | false | Enables
locality-aware executor cache usage |❌|
+| spark.sql.iceberg.merge-schema | false | Enables modifying the table schema
to match the write schema. Only adds columns missing columns |✅|
+| spark.sql.iceberg.report-column-stats | true | Report Puffin Table
Statistics if available to Spark's Cost Based Optimizer. CBO must be enabled
for this to be effective |✅|
+
#### Read options
+| Spark option | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| snapshot-id | (latest) | Snapshot ID of the table snapshot to read |✅|
+| as-of-timestamp | (latest) | A timestamp in milliseconds; the snapshot used
will be the snapshot current at this time. |✅|
+| split-size | As per table property | Overrides this table's
read.split.target-size and read.split.metadata-target-size |✅|
+| lookback | As per table property | Overrides this table's
read.split.planning-lookback |✅|
+| file-open-cost | As per table property | Overrides this table's
read.split.open-file-cost |✅|
+| vectorization-enabled | As per table property | Overrides this table's
read.parquet.vectorization.enabled |❌|
+| batch-size | As per table property | Overrides this table's
read.parquet.vectorization.batch-size |❌|
+| stream-from-timestamp | (none) | A timestamp in milliseconds to stream from;
if before the oldest known ancestor snapshot, the oldest will be used | |
+| streaming-max-files-per-micro-batch | INT_MAX | Maximum number of files per
microbatch | |
+| streaming-max-rows-per-micro-batch | INT_MAX | Maximum number of rows per
microbatch | |
+
+#### Write options
+
+| Spark option | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| write-format | Table write.format.default | File format to use for this
write operation; parquet, avro, or orc |⚠️ Parquet only|
+| target-file-size-bytes | As per table property | Overrides this table's
write.target-file-size-bytes | |
+| check-nullability | true | Sets the nullable check on fields | |
+| snapshot-property.custom-key | null | Adds an entry with custom-key and
corresponding value in the snapshot summary (the snapshot-property. prefix is
only required for DSv2) | |
+| fanout-enabled | false | Overrides this table's write.spark.fanout.enabled
|✅|
+| check-ordering | true | Checks if input schema and table schema are same | |
+| isolation-level | null | Desired isolation level for Dataframe overwrite
operations. null => no checks (for idempotent writes), serializable => check
for concurrent inserts or deletes in destination partitions, snapshot => checks
for concurrent deletes in destination partitions. | |
+| validate-from-snapshot-id | null | If isolation level is set, id of base
snapshot from which to check concurrent write conflicts into a table. Should be
the snapshot before any reads from the table. Can be obtained via Table API or
Snapshots table. If null, the table's oldest known snapshot is used. | |
+| compression-codec | Table write.(fileformat).compression-codec | Overrides
this table's compression codec for this write | |
+| compression-level | Table write.(fileformat).compression-level | Overrides
this table's compression level for Parquet and Avro tables for this write | |
+| compression-strategy | Table write.orc.compression-strategy | Overrides this
table's compression strategy for ORC tables for this write | |
+| distribution-mode | See Spark Writes for defaults | Override this table's
distribution mode for this write |🚫|
+| delete-granularity | file | Override this table's delete granularity for
this write | |
+
+### Iceberg Table Properties
+extracted from https://iceberg.apache.org/docs/latest/configuration/
+
+#### READ Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| read.split.target-size | 134217728 (128 MB) | Target size when combining
data input splits | |
+| read.split.metadata-target-size | 33554432 (32 MB) | Target size when
combining metadata input splits | |
+| read.split.planning-lookback | 10 | Number of bins to consider when
combining input splits | |
+| read.split.open-file-cost | 4194304 (4 MB) | The estimated cost to open a
file, used as a minimum weight when combining splits. | |
+| read.parquet.vectorization.enabled | true | Controls whether Parquet
vectorized reads are used | |
+| read.parquet.vectorization.batch-size | 5000 | The batch size for parquet
vectorized reads | |
+| read.orc.vectorization.enabled | false | Controls whether orc vectorized
reads are used | |
+| read.orc.vectorization.batch-size | 5000 | The batch size for orc vectorized
reads | |
+
+#### WRITE Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| write.format.default | parquet | Default file format for the table; parquet,
avro, or orc | |
+| write.delete.format.default | data file format | Default delete file format
for the table; parquet, avro, or orc | |
+| write.parquet.row-group-size-bytes | 134217728 (128 MB) | Parquet row group
size | |
+| write.parquet.page-size-bytes | 1048576 (1 MB) | Parquet page size | |
+| write.parquet.page-row-limit | 20000 | Parquet page row limit | |
+| write.parquet.dict-size-bytes | 2097152 (2 MB) | Parquet dictionary page
size | |
+| write.parquet.compression-codec | zstd | Parquet compression codec: zstd,
brotli, lz4, gzip, snappy, uncompressed | |
+| write.parquet.compression-level | null | Parquet compression level | |
+| write.parquet.bloom-filter-enabled.column.col1 | (not set) | Hint to parquet
to write a bloom filter for the column: 'col1' | |
+| write.parquet.bloom-filter-max-bytes | 1048576 (1 MB) | The maximum number
of bytes for a bloom filter bitset | |
+| write.parquet.bloom-filter-fpp.column.col1 | 0.01 | The false positive
probability for a bloom filter applied to 'col1' (must > 0.0 and < 1.0) | |
+| write.parquet.stats-enabled.column.col1 | (not set) | Controls whether to
collect parquet column statistics for column 'col1' | |
+| write.avro.compression-codec | gzip | Avro compression codec: gzip(deflate
with 9 level), zstd, snappy, uncompressed | |
+| write.avro.compression-level | null | Avro compression level | |
+| write.orc.stripe-size-bytes | 67108864 (64 MB) | Define the default ORC
stripe size, in bytes | |
+| write.orc.block-size-bytes | 268435456 (256 MB) | Define the default file
system block size for ORC files | |
+| write.orc.compression-codec | zlib | ORC compression codec: zstd, lz4, lzo,
zlib, snappy, none | |
+| write.orc.compression-strategy | speed | ORC compression strategy: speed,
compression | |
+| write.orc.bloom.filter.columns | (not set) | Comma separated list of column
names for which a Bloom filter must be created | |
+| write.orc.bloom.filter.fpp | 0.05 | False positive probability for Bloom
filter (must > 0.0 and < 1.0) | |
+| write.location-provider.impl | null | Optional custom implementation for
LocationProvider | |
+| write.metadata.compression-codec | none | Metadata compression codec; none
or gzip | |
+| write.metadata.metrics.max-inferred-column-defaults | 100 | Defines the
maximum number of columns for which metrics are collected. Columns are included
with a pre-order traversal of the schema: top level fields first; then all
elements of the first nested s... | |
+| write.metadata.metrics.default | truncate(16) | Default metrics mode for all
columns in the table; none, counts, truncate(length), or full | |
+| write.metadata.metrics.column.col1 | (not set) | Metrics mode for column
'col1' to allow per-column tuning; none, counts, truncate(length), or full | |
+| write.target-file-size-bytes | 536870912 (512 MB) | Controls the size of
files generated to target about this many bytes | |
+| write.delete.target-file-size-bytes | 67108864 (64 MB) | Controls the size
of delete files generated to target about this many bytes | |
+| write.distribution-mode | not set, see engines for specific defaults, for
example Spark Writes | Defines distribution of write data: none: don't shuffle
rows; hash: hash distribute by partition key ; range: range distribute by
partition key or sort key if table has an SortOrder | |
+| write.delete.distribution-mode | (not set) | Defines distribution of write
delete data | |
+| write.update.distribution-mode | (not set) | Defines distribution of write
update data | |
+| write.merge.distribution-mode | (not set) | Defines distribution of write
merge data | |
+| write.wap.enabled | false | Enables write-audit-publish writes | |
+| write.summary.partition-limit | 0 | Includes partition-level summary stats
in snapshot summaries if the changed partition count is less than this limit |
|
+| write.metadata.delete-after-commit.enabled | false | Controls whether to
delete the oldest tracked version metadata files after each table commit. See
the Remove old metadata files section for additional details | |
+| write.metadata.previous-versions-max | 100 | The max number of previous
version metadata files to track | |
+| write.spark.fanout.enabled | false | Enables the fanout writer in Spark that
does not require data to be clustered; uses more memory | |
+| write.object-storage.enabled | false | Enables the object storage location
provider that adds a hash component to file paths | |
+| write.object-storage.partitioned-paths | true | Includes the partition
values in the file path | |
+| write.data.path | table location + /data | Base location for data files | |
+| write.metadata.path | table location + /metadata | Base location for
metadata files | |
+| write.delete.mode | copy-on-write | Mode used for delete commands:
copy-on-write or merge-on-read (v2 and above) | |
+| write.delete.isolation-level | serializable | Isolation level for delete
commands: serializable or snapshot | |
+| write.update.mode | copy-on-write | Mode used for update commands:
copy-on-write or merge-on-read (v2 and above) | |
+| write.update.isolation-level | serializable | Isolation level for update
commands: serializable or snapshot | |
+| write.merge.mode | copy-on-write | Mode used for merge commands:
copy-on-write or merge-on-read (v2 and above) | |
+| write.merge.isolation-level | serializable | Isolation level for merge
commands: serializable or snapshot | |
+| write.delete.granularity | partition | Controls the granularity of generated
delete files: partition or file | |
+
+#### COMMIT Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| commit.retry.num-retries | 4 | Number of times to retry a commit before
failing | |
+| commit.retry.min-wait-ms | 100 | Minimum time in milliseconds to wait before
retrying a commit | |
+| commit.retry.max-wait-ms | 60000 (1 min) | Maximum time in milliseconds to
wait before retrying a commit | |
+| commit.retry.total-timeout-ms | 1800000 (30 min) | Total retry timeout
period in milliseconds for a commit | |
+| commit.status-check.num-retries | 3 | Number of times to check whether a
commit succeeded after a connection is lost before failing due to an unknown
commit state | |
+| commit.status-check.min-wait-ms | 1000 (1s) | Minimum time in milliseconds
to wait before retrying a status-check | |
+| commit.status-check.max-wait-ms | 60000 (1 min) | Maximum time in
milliseconds to wait before retrying a status-check | |
+| commit.status-check.total-timeout-ms | 1800000 (30 min) | Total timeout
period in which the commit status-check must succeed, in milliseconds | |
+| commit.manifest.target-size-bytes | 8388608 (8 MB) | Target size when
merging manifest files | |
+| commit.manifest.min-count-to-merge | 100 | Minimum number of manifests to
accumulate before merging | |
+| commit.manifest-merge.enabled | true | Controls whether to automatically
merge manifests on writes | |
+
+#### HISTORY Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| history.expire.max-snapshot-age-ms | 432000000 (5 days) | Default max age of
snapshots to keep on the table and all of its branches while expiring snapshots
| |
+| history.expire.min-snapshots-to-keep | 1 | Default min number of snapshots
to keep on the table and all of its branches while expiring snapshots | |
+| history.expire.max-ref-age-ms | Long.MAX_VALUE (forever) | For snapshot
references except the main branch, default max age of snapshot references to
keep while expiring snapshots. The main branch never expires. | |
+| format-version | 2 | Table's format version (can be 1 or 2) as defined in
the Spec. Defaults to 2 since version 1.4.0. | |
+
+#### COMPATIBILITY Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| compatibility.snapshot-id-inheritance.enabled | false | Enables committing
snapshots without explicit snapshot IDs (always true if the format version is >
1) | |
+| catalog-impl | null | a custom Catalog implementation to use by an engine |
|
+| io-impl | null | a custom FileIO implementation to use in a catalog | |
+| warehouse | null | the root path of the data warehouse | |
+| uri | null | a URI string, such as Hive metastore URI | |
+| clients | 2 | client pool size | |
+| cache-enabled | true | Whether to cache catalog entries | |
+
+#### CACHE Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| cache.expiration-interval-ms | 30000 | How long catalog entries are locally
cached, in milliseconds; 0 disables caching, negative values disable expiration
|❌|
+| metrics-reporter-impl | org.apache.iceberg.metrics.LoggingMetricsReporter |
Custom MetricsReporter implementation to use in a catalog. See the Metrics
reporting section for additional details |❌|
+| lock-impl | null | a custom implementation of the lock manager, the actual
interface depends on the catalog used |❌|
+
+#### LOCK Properties
+
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| lock.table | null | an auxiliary table for locking, such as in AWS DynamoDB
lock manager | |
+| lock.acquire-interval-ms | 5000 (5 s) | the interval to wait between each
attempt to acquire a lock | |
+| lock.acquire-timeout-ms | 180000 (3 min) | the maximum time to try acquiring
a lock | |
+| lock.heartbeat-interval-ms | 3000 (3 s) | the interval to wait between each
heartbeat after acquiring a lock | |
+| lock.heartbeat-timeout-ms | 15000 (15 s) | the maximum time without a
heartbeat to consider a lock expired | |
+
+#### ICEBERG Properties
-| Spark option | Status |
-|-----------------------|-------------|
-| snapshot-id | Support |
-| as-of-timestamp | Support |
-| split-size | Support |
-| lookback | Support |
-| file-open-cost | Support |
-| vectorization-enabled | Not Support |
-| batch-size | Not Support |
+| Property | Default | Description | Gluten Support |
+| --- | --- | --- | --- |
+| iceberg.hive.client-pool-size | 5 | The size of the Hive client pool when
tracking tables in HMS | |
+| iceberg.hive.lock-creation-timeout-ms | 180000 (3 min) | Maximum time in
milliseconds to create a lock in the HMS | |
+| iceberg.hive.lock-creation-min-wait-ms | 50 | Minimum time in milliseconds
between retries of creating the lock in the HMS | |
+| iceberg.hive.lock-creation-max-wait-ms | 5000 | Maximum time in milliseconds
between retries of creating the lock in the HMS | |
+| iceberg.hive.lock-timeout-ms | 180000 (3 min) | Maximum time in milliseconds
to acquire a lock | |
+| iceberg.hive.lock-check-min-wait-ms | 50 | Minimum time in milliseconds
between checking the acquisition of the lock | |
+| iceberg.hive.lock-check-max-wait-ms | 5000 | Maximum time in milliseconds
between checking the acquisition of the lock | |
+| iceberg.hive.lock-heartbeat-interval-ms | 240000 (4 min) | The heartbeat
interval for the HMS locks. | |
+| iceberg.hive.metadata-refresh-max-retries | 2 | Maximum number of retries
when the metadata file is missing | |
+| iceberg.hive.table-level-lock-evict-ms | 600000 (10 min) | The timeout for
the JVM table lock is | |
+| iceberg.engine.hive.lock-enabled | true | Use HMS locks to ensure atomicity
of commits | |
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]