Iceberg 1.12.0リリースノート
Apache Iceberg 1.12.0がリリースされました。主な変更点は以下の通りです。
Deprecation / End of Support
- Spark: Spark 3.4のサポートを削除 (#14122)
- Spark: 非推奨の
SparkFiltersを削除 (#17702) - Spark 4.0, 4.1: 非推奨の
SparkTableUtilのメソッドを削除 (#17703) - Spark: 非推奨の
SparkReadConf、SparkWriteConf、SparkSchemaUtilのメソッドを削除 (#17626) - Flink: Flink 2.0のサポートを削除
- Flink: 非推奨の
RewriteDataFiles.Builder.filter(Expression)を削除 (#17624) - Core: 非推奨のREST namespaceエンコーディングヘルパーを削除 (#17697)
- Core: 非推奨の
HadoopFileIO(SerializableSupplier)コンストラクタを削除 (#17704) - Core, ORC: 非推奨のpartition stats読み込み機能を削除 (#14998)
- 非推奨の
DataReaderを削除しPlannedDataReaderに統一 (#17699) - 1.12.0での削除が予定されていた非推奨のメソッドとフィールドを削除 (#17700)
- Data: 非推奨の
GenericAppenderFactoryとBaseFileWriterFactoryを削除 (#17696) - AWS: 非推奨のS3署名クラスとプロパティを削除 (#17627)
- Kafka Connect: 非推奨の
TableReferenceとIcebergWriterResultのメンバーを削除 (#17623) - BigQuery: 非推奨のカタログプロパティ定数を削除 (#17625)
- Core, Data, Spark, Flink: 行データを持つposition delete fileを削除 (#17706)
Behavior change
GeometryTypeとGeographyTypeのtoString()で、解決済みのCRS(geographyの場合はedgeアルゴリズムも含む)を常に表示するよう変更。geometryはgeometry(OGC:CRS84)、geographyはgeography(OGC:CRS84, spherical)と表示されます (#16765)。 以前はデフォルトインスタンスの場合、型名のみ(geometry/geography)が表示されていました。- デフォルトのAWS SDK HTTPクライアントがApache HttpClient 5に移行しました。AWSの依存関係を個別に指定しているユーザーは、
software.amazon.awssdk:apache-clientからsoftware.amazon.awssdk:apache5-clientに切り替える必要があります (#18195)。 - RESTクライアントが、
Idempotency-Key付きのPOSTリクエストについて、リトライ可能なエラー(408、500、502、503、504)の場合は再試行するようになりました (#17947)。
Spec
- 式(expressions)に関する仕様を追加 (#16652)
- loadTableにおけるより細かい読み取り制限を追加 (#13879)
- v4仕様に相対パスを追加 (#15630)
- 仕様にcontent statsを追加 (#14234)
- UDF定義モデルにオプションのspecific-nameを追加 (#16727)
- variant型の分類とprimitive型のスコープを明確化 (#16836)
- decimal型のシリアライズを明確化 (#16798)
- スナップショット内でのcontent fileの一意性を明確化 (#17198)
API
- geometryとgeographyの単一値バイナリシリアライズを追加 (#16607)
RepairTableアクションインターフェースを定義 (#17399)- variantクラスをシリアライズ可能に変更 (#17260)
- 不正なデータが渡された場合でもvariantバイナリパースが堅牢に動作するよう改善 (#16568)
CatalogObjectIdentifierを追加 (#16160)- partition statistics scan APIに対してproject()を実装 (#16569)
- partition statistics scan APIに対してfilter()を実装 (#16582)
- NPEを避けるためIN/NOT_IN述語でnullに対するガードを追加 (#17014)
Core
- Avroでgeometryとgeographyの値を読み書き可能に (#17119)
- 読み取り専用のMumbling bitmap実装を追加 (#16747)
- v4 manifest readerを追加 (#16958)
- v4 manifest readerで相対パスを解決 (#17434)
- v4ロケーションの相対化ユーティリティを追加 (#16174)
- Data FileとDelete Fileを橋渡しするv4 TrackedFileAdaptersを追加 (#16100)
- TrackedFileに
format_versionフィールドを追加 (#16952) - V4 DeletionVectorをkey_metadataフィールドで拡張 (#17438)
DataFile経由でco-locatedなdeletion vectorを公開 (#17928)- V4レイアウトでのParquetおよびAvro manifestの書き込みを許可 (#15634)
- v4 tracked file用のManifestFileアダプターを追加 (#17932)
- サイズ閾値以下のファイルをバッファする
EagerInputFileとEagerInputStreamを追加 (#16729) - manifest content cacheでmanifest listファイルをキャッシュ (#16762)
- Parquetの列ごとのdictionaryエンコーディング (#16713)
- mainブランチのrefをタグに設定できないよう制限 (#16753)
DelegateFileIOとして実装した暗号化IOを追加 (#14876)- マージ時にDV暗号化メタデータを保持 (#15911)
- manifest list暗号化キーを、それを使用するスナップショットと共にコミット (#17984)
- どのデータファイルからも参照されなくなったdelete fileを削除するscanベースのアクションを追加 (#15727)
- manifest内の重複ファイル削除時のスレッド競合を修正 (#16686)
- row lineageのlast updated sequence継承を修正 (#17039)
- snapshot-logの順序を前提としないよう、time-travelのスナップショット検索を修正 (#17360)
- 否定されたall_manifestsフィルタのプルーニングを修正 (#17346)
- entries metadata tableでの誤ったdelete manifestプルーニングを修正 (#17440)
- 同一Puffinファイル内のDVに対するdelete fileの参照を修正 (#17497)
- データファイルが複数スナップショットにまたがる複数DVを持つ場合のコミット検証を修正 (#17764)
- スナップショット失効時にdelete manifestを正しく読み込むよう修正 (#17763)
- position deleteまたはDVがデータファイルのパーティションと一致しない場合にスキャンを失敗させるよう修正 (#16957)
- 浮動小数点値に対するZ-orderバイトエンコーディングを修正 (#17071)
- residualsを無視する場合でもmanifest contentのプルーニングが維持されるよう修正 (#17443)
- フィールドが削除された過去のsort orderで
SerializableTable.sortOrders()が例外を投げる問題を修正 (#16521) RESTMetricsReporter.report()が呼び出し元スレッドをブロックする問題を修正 (#16695)- load tableおよびviewレスポンスでcatalog labelsを読み込み可能に (#18045)
SupportsLabels経由でロード済みテーブルのcatalog labelsを公開 (#18046)- 有効なrewriteオプションに
max-file-group-input-filesを追加 (#17544)
Arrow
- 直接ByteBuffer向けのdict-encodedなVARCHAR/VARBINARY読み込みを修正 (#17055)
- row lineageのベクトル化readerにおける直接メモリリークを修正 (#17296)
- int-to-long昇格時のベクトル化readerでの
ClassCastExceptionを修正 (#16343) - デフォルト値を持つdecimal列のベクトル化読み込みを修正 (#16501)
- 精度が18を超えるdecimalの切り捨てを修正 (#16627)
- 全てnullのDELTAエンコードされたParquetページのベクトル化読み込みを修正 (#17017)
- Arrow dictionaryデコードにおけるint96タイムスタンプオフセットを修正 (#16435)
Parquet
- variant shreddingで、フィールドの型が揃っている場合のみshreddingするよう変更 (#17424)
- Parquetでgeometryとgeography WKB値を読み書き可能に (#16982)
- variant shredded boundsに対して列メトリクスの切り詰め長を考慮 (#17342)
- variant STRINGメトリクスの境界がUTF-8バイト順を使用するよう修正 (#17397)
- variant BINARYの上限値が切り上げで切り詰められるよう修正 (#16880)
- value列に統計情報がない場合のvariantメトリクスのクラッシュを修正 (#16585)
- 大きいdecimal(精度18超)のvariant shreddingを修正 (#17002)
- 適応型bloom filterサイズ調整を追加 (PARQUET-2254) (#16363)
- オプトインの非圧縮row groupサイズ追跡を追加 (#16327)
- timestamp_nsおよびtimestamptz_nsの述語プッシュダウンを修正 (#16619)
- 祖先のstructがnullの場合にネストした初期デフォルト値が適用される問題を修正 (#17320)
- オプショナルなstruct内のネストフィールドの誤ったプルーニングを修正 (#18069)
notStartsWithがnull値を含むrow groupを誤ってスキップする問題を修正 (#17656)- null_count統計情報を持たないParquetファイルのnullカウントを修正 (#17557)
- デフォルト値が設定された列でフィルタした際にinitial-defaultの行が欠落する問題を修正 (#16692)
ORC
- OrcMetricsでのtimestamp_ns列の上限/下限値を修正 (#16922)
- 不正なtimestamp unit属性に対する例外メッセージの文字化けを修正 (#17098)
- timestamp nanoの述語プッシュダウンを修正 (#17750)
- variant列を持つテーブルでのフィルタプッシュダウンを修正 (#17998)
Spark
- Spark 4.0, 4.1: unshredded variant列に対するベクトル化Parquet読み込みを追加 (#16292)
- Spark 4.1:
rewrite_data_filesにHilbert曲線クラスタリング戦略を追加 (#16827) - Spark 4.1: Parquetでgeometryとgeography値を読み書き可能に (#17073)
- Spark 4.1: geometryとgeographyのSpark型をマッピング (#16851)
- DROP TABLE PURGEをRESTカタログに委譲する
rest-catalog-purgeプロパティを追加 (#15614) - セッションレベルのsplitサイズ上書きを追加 (#16154)
- migrateプロシージャにignore_missing_filesを追加 (#16643)
- snapshotプロシージャにignore_missing_filesを追加 (#16710)
- セッションカタログでviewを返せるよう変更 (#16845)
- Spark 4.1: listTableSummariesを実装 (#16891)
- Spark 3.5, 4.0, 4.1: streaming merge-append書き込み設定を追加 (#17347, #17403)
- Spark 3.5, 4.0, 4.1: delete fileのexecutorキャッシュを有効にするrewriteオプションを追加 (#17868)
- null booleanに対するZ-order NPEと大文字小文字を区別しない列解決を修正 (#17669)
- 分散プランニングモードでリネームされた列に対するtime-travelフィルタを修正 (#16523)
- manifest rewrite時のfirst row IDの引き継ぎを修正 (#16699)
- Spark 3.5, 4.0:
rewrite_manifestsプロシージャにsort_byパラメータを追加 (#18065) rewrite_manifestsで書き込まれるmanifestを暗号化 (#17987)
Flink
- Flink 2.2および2.3サポートを追加 (#17849)
- equality deleteをdeletion vectorに変換するFlinkメンテナンスタスク(
ConvertEqualityDeletes)を追加 (#16831, #16844, #16858, #16874, #16889, #16948) - ConvertEqualityDeletesをIcebergSinkと統合 (#17142)
- equality-delete変換の失敗サイクル後に削除済みの行が再出現する問題を修正 (#17630)
- パーティション指定のないequality deleteを、全パーティションに適用されるものとして解決するよう変更 (#17018)
- Flink 2.1, 2.2, 2.3: Avro reader/writerでvariantをサポート (#17737)
- Flink 2.1, 2.2, 2.3: shredded variantの書き込みをサポート (#15596)
- Flink 2.1, 2.2, 2.3: SQL variant Avro動的レコードジェネレーターを追加 (#16450)
- SQLでのIceberg viewの読み込みをサポート (#17859)
- FlinkCatalogでCREATE VIEW、DROP VIEW、ALTER VIEW RENAMEをサポート (#17873)
- DynamicSinkできめ細かいリソース管理のためのslot sharing groupの設定を許可 (#16065)
- ALTER TABLEで列を特定の位置に追加するよう修正 (#16419)
- FlinkSQLでのテーブルコメントの扱いを修正 (#16423)
- 再起動時にFlinkのjobIdが変わるとDynamicCommitterでコミットが重複する問題を修正 (#16011)
- dynamic-sinkのレコードルーティングでスキーマのidentifierフィールドを考慮するよう修正 (#16243)
- スレッド/メモリリークを修正するためwakeupメソッドを実装 (#16545)
- TableMaintenanceオペレーターのuidがジョブ再起動のたびにランダムに変わり、savepointからの復元が壊れる問題を修正 (#17210)
- RANGE distributionがユーザー指定のequalityフィールドを無視してしまう問題を修正 (#17276)
- ファイルがスキップされた場合の
DataIterator.seek()でのファイルオフセット不一致を修正 (#16929) - 配列およびマップ内のtimestampのマイクロ秒切り捨てを修正 (#18001)
- DynamicIcebergSinkのDataConverterでRowKindを保持 (#18101)
- AvroToRowDataConvertersでのtimestamp-micros変換を修正 (#17194)
- read splitのテーブルプロパティが無視される問題を修正 (#17445)
- retain-last未設定時のExpireSnapshots設定でのNPEを修正 (#17277)
Hive
- HMSのcreateTimeとlastAccessTimeにおける整数オーバーフローを修正 (#16620)
- HiveCatalogでのIcebergテーブル一覧取得にサーバーサイドフィルタを使用 (#17317)
Kafka Connect
- Kafka Connectおよびgeneric Recordの書き込みに対してParquet variant shreddingを有効化 (#17520)
- オフセットのコミットを、既存のオフセットより大きい場合のみ行うよう変更 (#17552)
- コミット失敗を黙って無視せず、エラーとして検知できるよう変更 (#16237)
- 一時的なコミット例外に対する有限リトライを追加 (#16434)
- 一部のBigDecimal値で不正なdecimal型が推論される問題を修正 (#16606)
- レコードスキーマが更新されても値がnullの場合にテーブルスキーマを進化させるよう修正 (#16826)
IcebergSinkConfigでのConcurrentModificationExceptionを修正 (#16438)- UUIDのAvroスキーマ変換を修正 (#16828)
- idColumnsがテーブル設定から正しく読み込まれない問題を修正 (#17152)
- control topicのオフセットをhigh-water markとして追跡するよう変更 (#17933)
- 部分的なコミット失敗のメトリクスを追加 (#16433)
- 特定のリバランスシナリオでcoordinatorが前回コミットのファイルをコミットしてしまう問題を修正 (#17713)
Open API / REST
- REST catalog仕様にVariantTypeを追加 (#17256)
- unregister tableエンドポイントを追加 (#16400)
- OpenAPI仕様にlistおよびload functionエンドポイントを追加 (#15180)
- リモート署名の設定をREST仕様として正式に定義 (#16822)
- REST仕様の式(expressions)を、新しい式仕様に合わせて更新 (#17138)
- RFC 3986のパーセントエンコーディングを使用するようパスセグメントのエンコーディングを修正 (#15989)
- REST仕様のdata-accessオブジェクトのスキーマを修正 (#16594)
- UDF定義にspecific-nameを追加 (#17364)
- カタログメタデータ拡充のための
labelsフィールドを追加 (#15750)
Vendor integrations
- AWS: REST SigV4署名でassumed-role認証情報を使用できるよう変更 (#16794)
- AWS: IcebergToGlueConverterのコメントマップで列名が重複する場合に対応 (#16853)
- AWS, Core: RemoteSigningConfigを実装 (#17709)
- Core, AWS, GCP, Dell, Hive: FileIOのリークを修正し、カタログ実装間でclose()を標準化 (#16862)
- API, AWS, Azure, GCP: positioned、vectored、acceleratedな読み込みについても読み取りメトリクスを追跡するよう対応 (#17236)
- Core, AWS: RESTレスポンスヘッダーフィールド名の大文字小文字を区別しない扱いを修正 (#17979)
- GCP: 不正なGCSバッファ読み込み範囲を指定した場合に拒否するよう修正 (#17961)
- GCS, S3, ADLS: 入力ストリームのEOFを正しく処理するよう修正 (#16055)
- Dell: 既知のECS入力ファイル長を保持 (#17870)
- Aliyun: 既知のファイル長を
OSSFileIO.newInputFileに渡すよう変更 (#16870)
Dependencies
- Spark 3.4のサポートを削除
- Flink 2.2および2.3のサポートを追加
- Flink 2.0のサポートを削除
- CVEを修正するためJacksonのバージョンを統一 (#16954)
- CVE GHSA-r7wm-3cxj-wff9を修正するためJacksonをバンプ (#17336)
- ORC: 1.9.8 -> 1.9.9
- Jackson: 2.21.3 -> 2.22.2
- AWS SDK: 2.44.4 -> 2.54.17
- Azure SDK: 1.3.6 -> 1.3.8
- Nessie: 0.107.5 -> 0.108.8
- Netty: 4.2.13.Final -> 4.2.18.Final
- Guava: 33.6.0-jre -> 33.7.1-jre
- Caffeine: 2.9.3 -> 3.2.4
- Calcite: 1.41.0 -> 1.42.0
- Avro: 1.12.1 -> 1.12.2
- Bouncycastle: 1.84 -> 1.86
- Delta: 3.3.2 -> 3.3.3
- Jetty: 12.1.8 -> 12.1.13
LICENSE / NOTICE
- shaded-jarのLICENSE/NOTICEを整理し、不足していたthird-partyの通知を追加 (#16543)