feat(amber): columnar hardening (versioning, compression, sink)
メンテナーはふだん 1 日以内に返信
評価
この issue はまだ評価されていません。
説明
Feature Summary
In one sentence: harden the columnar path for real use: version the wire format, add optional compression, offer a vectorized write-to-Iceberg sink, and speed up the row decode for the cases that still need rows.
Parent: #8556 (opt-in columnar execution). PR 4 (final) of the stacked series; pairs with apache/texera#8561.
What is this?
The earlier PRs made columnar execution work. This one makes it safe to evolve and cheaper at the edges: a version stamp so old and new workers never misread each other, optional compression to shrink what crosses the network, a sink that writes Arrow straight to storage, and faster decode helpers for the fallback path.
Proposed Solution or Design
Wire versioning. ColumnarFrame now carries a format version. A worker that sees a version it does not support rejects it loudly instead of quietly misreading the bytes. This is the seatbelt that lets the format change later without silent corruption.
%%{init: {'theme':'dark', 'themeVariables': {'background':'#000000','lineColor':'#000000'}}}%%
flowchart TD
IN[ColumnarFrame v=N] --> Q{N supported?}
Q -->|yes| GO[read batch]
Q -->|no| ERR[reject with a clear error]
classDef default fill:#000,color:#fff,stroke:#888,stroke-width:1px
style GO stroke:#1B7F3B
style ERR stroke:#B0451E
Optional wire compression. LZ4_FRAME or ZSTD via arrow-compression, config-gated. The reader auto-detects compressed versus uncompressed, so a compressed sender and a plain sender interoperate.
Vectorized Iceberg sink. IcebergTableWriter.writeArrowBatch writes an Arrow batch straight to Iceberg through a lazy ArrowRecordView that reads values from the Arrow columns, materializing no intermediate rows. Gated by enable-vectorized-sink.
%%{init: {'theme':'dark', 'themeVariables': {'background':'#000000','lineColor':'#0F766E'}}}%%
flowchart LR
A[Arrow batch] --> V[ArrowRecordView: read straight from columns]
V --> ICE[Iceberg data file]
classDef default fill:#000,color:#fff,stroke:#888,stroke-width:1px
Faster decode. Schema-once and projected decode helpers in ArrowUtils, so the fallback-to-rows path pays less.
| Concern | Before | After |
|---|---|---|
| format change | silent misread risk | version stamp, explicit reject |
| network size | uncompressed | optional LZ4/ZSTD |
| sink write | decode to rows first | Arrow straight to Iceberg |
| decode | resolve schema per row | resolve once, decode only needed columns |
Verified: batches round-trip unchanged including compressed and versioned frames; 2-worker shuffle row == columnar with the vectorized sink on.
High-level overview. Part of #8556.
- 主要言語
- Scala
- スター
- 321
- フォーク
- 192
- 平均マージ
- 2日 19時間
- マージ済み PR(30日)
- 146
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/texera のほかの issue
-
Search bar autocomplete stops working after a model appears in the suggestions対応中かも @aglinxinyuan が 19 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
apache/texera#8700 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
apache/texera#8682 · コメント 5 件 ·
メンテナーはふだん 1 日以内に返信
-
JSONL File Scan reads a JSON null as the text "null"対応中かも @CaroFernando が 17 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
apache/texera#8674 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
LARGE_BINARY test leaves a real S3 object behind on every S3-reachable run対応中かも @ShawnGarello が 2 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
Missing workflow returns 500 from workflow type endpoint再び着手できるかも @VuMartin が 42 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/texera#8300 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1時間未満 初心者へのやさしさ 70/100
-
dependencies
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
apache/pekko-http#1354 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] HiveDialect shares its colspecs dict with SQLAlchemy's DefaultDialect (python/pyhive)対応中かも @rusackas が 1 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 80/100
apache/kyuubi#7786 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 2 日以内に返信
-
ST_AddMeasure assigns incorrect measures on bent lines and MultiLineStrings対応中かも @vera-rubin が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信