データベースオブジェクトの新しい最大サイズ制限(保留中)

注意

この動作変更は2025_03バンドルで変更されます。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

注釈

この動作変更はもともと2025_02バンドルで導入されましたが、2025_03バンドルに移されました。この動作変更は、2025_03ではデフォルトで無効のままです。

この動作変更バンドルが有効になると、データベースオブジェクトのストレージが以下のように変更されます。

変更前:

以下のタイプの列の場合、許容される最大長は 16 MB です。

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

以下のタイプの列の場合、許容される最大長は 8 MB です。

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

これらの最大許容長を超える値を格納しようとするステートメントは失敗します。

変更後:

以下のタイプの列の場合、許容される最大長は 128 MB です。

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

以下のタイプの列の場合、許容される最大長は 64 MB です。

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

新しい最大許容長までの値を格納しようとするステートメントは成功します。これらの最大許容長を超える値を格納しようとするステートメントは失敗します。

既存のテーブルでも、変更後に作成されたテーブルでも、VARIANT、ARRAY、OBJECTのタイプの列のデフォルトの長さは128 MBであり、GEOGRAPHY、GEOMETRYのタイプの列のデフォルトの長さは64 MBです。

ただし、VARCHARとBINARYタイプの列のデフォルトの長さは、それぞれ16 MBと8 MBです。VARCHARタイプの列については、新しいテーブルを作成する際や既存のテーブルを変更する際に明示的に指定することで、長さを増やすことができます。BINARYタイプの列については、新しいテーブルを作成する際に明示的に指定することで長さを増やすことができます。既存のテーブルのBINARY列の長さを変更することはできません。

テーブルが新しい制限を持ち、16 MBを超えるオブジェクトを格納する場合、そのテーブルから CREATE TABLE AS SELECT (CTAS) を使用して作成されたダウンストリームテーブルは失敗します。この失敗を防ぐには、CTASステートメントを調整し、対応するVARCHAR列のサイズを134217728(BINARYの場合は67108864)に明示的にセットします。

2025_03バンドルが有効で、その後無効になっても、テーブルのサイズ制限が大きいデータベースオブジェクトはアクセス可能なままです。大容量オブジェクトの読み込みのサポートは、 BCR-1779 で導入され、すでにすべてのアカウントで有効になっており、無効にすることはできません。

新しいサイズ制限の詳細については、 データベースオブジェクトのサイズ制限 をご覧ください。

16 MBを超えるサイズはクエリ結果に表示されます。

VARCHARの16 MBおよびBINARYの8 MBを超えるサイズは、クエリ結果に表示されます。例えば、 SYSTEM$TYPEOF 関数を呼び出すクエリや、関数やプロシージャに関する情報を提供するビュー(例、INFORMATION_SCHEMA FUNCTIONS ビュー)のクエリでは、サイズが表示されます。

次の例は、16 MBのサイズの2つの列を連結しています。

CREATE OR REPLACE TABLE test_larger_sizes(col1 VARCHAR, col2 VARCHAR) AS
  SELECT 'foo', 'bar';

SELECT SYSTEM$TYPEOF(CONCAT(col1, col2)) FROM test_larger_sizes;
Copy
+-----------------------------------+
| SYSTEM$TYPEOF(CONCAT(COL1, COL2)) |
|-----------------------------------|
| VARCHAR(33554432)[LOB]            |
+-----------------------------------+

関数とプロシージャについては、新しいサイズがINFORMATION_SCHEMA FUNCTIONSビューに表示されます。

CREATE OR REPLACE FUNCTION test_larger_sized_func(in_arg VARCHAR)
  RETURNS VARCHAR
  LANGUAGE JAVASCRIPT
  CALLED ON NULL INPUT AS
$$
  RETURN NULL;
$$
;

SELECT data_type FROM INFORMATION_SCHEMA.FUNCTIONS
  WHERE function_name = 'TEST_LARGER_SIZED_FUNC';
Copy
+--------------------+
| DATA_TYPE          |
|--------------------|
| VARCHAR(134217728) |
+--------------------+

16 MBを超えるサイズではエラーメッセージが変更されます。

クエリによってはエラーメッセージが変わることがあります。

以下は、エラーを返すVARCHAR列への挿入の例です。

CREATE OR REPLACE TABLE test_larger_size_error(col VARCHAR);
INSERT INTO test_larger_size_error SELECT RANDSTR(20000000, 1);
Copy

変更前に以下のエラーメッセージが返されます。

100082 (22000): Max LOB size (16777216) exceeded, actual size of parsed column is 20000000

変更後に以下のエラーメッセージが返されます。

100078 (22000): String
'CaFHJdoX3upWliCCdAPXXgytQuXzQpFO4laQEFdmiE1NDOywjwHoBqSNTCzTW66ynuR7EsI4ZxStCh3VMIBMYeHWgv1gUZRmHEK4kGmZcC02jGQhnnFJ0jtcIEWBIN6vKGkvSwG482IvfgVVwF3FTj7sb86t1SK9qigI6ujlSNByytIYBk0lkI1MM0zpRFeH2BNvGxtI.'
is too long and would be truncated

サポート対象ドライバー

より大きなデータベースオブジェクトをサポートするドライバーバージョンに更新する必要があるかもしれません。そうでない場合は、以下のようなエラーが返されることがあります。

100067 (54000): The data length in result column <column_name> is not supported by this version of the client.
Actual length <actual_size> exceeds supported length of 16777216.

サポート対象ドライバーの詳細については、 結果セットの大容量オブジェクトをサポートするドライバーバージョン をご覧ください。

Icebergサポート

管理されていないIcebergテーブルの場合、VARCHARとBINARY列のデフォルトの長さ 128 MBです。この制限は、新しく作成または更新されたテーブルに適用されます。新しいサイズ制限が有効になる前に作成され、更新されなかったテーブルには、古いサイズ制限が残っています。既存のテーブルを更新して、サイズ制限を増やします。

管理されているIcebergテーブルでは、VARCHARとBINARY列のデフォルトの長さは128 MBです。新しいサイズ制限が有効になる前に作成されたテーブルには、古いサイズ制限が残っています。

これらのテーブルのVARCHARタイプの列に新しいサイズを適用するには、テーブルを再作成するか、列を変更してください。以下の例では、列を変更して新しいサイズ制限を使用しています。

ALTER ICEBERG TABLE my_iceberg_table
  ALTER COLUMN col1 SET DATA TYPE VARCHAR(134217728);
Copy

これらのテーブルのBINARYタイプの列に新しいサイズを適用するには、テーブルを再作成してください。既存のテーブルのBINARY列の長さを変更することはできません。

Ref: 1942