|iceberg-tm|バイナリ列を最大サイズに制限する(プレビュー)¶
|iceberg-tm|テーブルの列にbinaryデータ型を指定すると、列は常にIceberg binaryデータ型にマッピングされます。
- 変更前:
Icebergテーブルの新しい列には、関連する最大長Lを持つ:code:`binary(L)`データ型を指定できます。:code:`binary(L)`データ型は、Iceberg binaryデータ型ではなくIceberg :code:`fixed(L)`データ型にマッピングされます。さらに、構造化された型の新しい列のキーと要素にbinary(L)データ型を指定することもできます。これもIceberg :code:`fixed(L)`データ型にマッピングされます。CTASステートメントの場合、ソーステーブルの:code:`binary(L)`列は、新しいテーブルでも:code:`binary(L)`列として作成されます。
- 変更後:
Icebergテーブルでは、:code:`binary data`型をbinaryまたは:code:`binary(67108864)`として指定する必要があります。この要件は、新しい列を作成する場合や、構造化された型の列のキーや要素を定義する場合に適用されます。どちらの型でも、Icebergの binary データ型にマッピングされます。CTASステートメントの場合、ソーステーブルの:code:`binary(L)`列は、新しいテーブルでも:code:`binary(67108864)`列として作成されます。この変更は、新しいテーブル、および既存のテーブルに追加される新しい列にのみ適用されます。
この仕様変更は、Snowflake の Iceberg テーブルにおけるバイナリ列を、最大長の制限を持たない|iceberg-tm|のテーブル仕様(binary型)に準拠させるために導入されました。これにより、Iceberg 仕様と矛盾し、外部エンジンとの相互運用性の問題を引き起こしていた曖昧な:code:binary(L)`定義が排除されます。例えば変更前は、:code:`binary(10) のように最大長が指定されたbinary型の新しい列を追加できましたが、その場合、その列に対して外部エンジンが定義された最大長を超える値を挿入できてしまうという問題がありました。
参照:2244