SQL 一般:文字列およびバイナリデータ型の新しいデフォルトの列サイズ(保留中)¶
この動作変更バンドルを有効にすると、 :doc:` 文字列およびバイナリデータ型 </sql-reference/data-types-text>` のデフォルトのサイズが変更されます。
- 変更前:
テキスト文字列データ型 のデフォルトのサイズは16 MB でした。
バイナリデータ型 のデフォルトサイズは8 MB でした。
- 変更後:
テキスト文字列データ型のデフォルトのサイズは128 MB です。
バイナリデータ型のデフォルトのサイズは64 MB です。
この変更の前は、 DDL ステートメントで、テキスト文字列列の場合は16 MB より大きいサイズ、バイナリ列の場合は8 MB より大きいサイズを明示的に指定できましたが、サイズが指定されていない場合のデフォルトはそれぞれ16 MB と8 MB でした。
この動作変更後、 DDL ステートメントでサイズが指定されていない場合、デフォルトのサイズはテキスト文字列列の場合は128 MB 、バイナリ列の場合は64 MB です。そのため、 INSERT ステートメントでは、明示的に大きいサイズを指定しなくても、テキスト文字列列には 16 MB より大きい値を挿入でき、バイナリ列には 8 MB より大きい値を挿入できます。
注釈
この変更は、 Apache Iceberg™ テーブルとユーザー定義関数( UDFs )の DDL ステートメントには影響しません。これらのテーブルとユーザー定義関数では、すでに大きいデフォルトサイズが使用されているためです。
この変更は、 VARCHAR データ型の列と、 STRING などの VARCHAR と同義のデータ型の列に適用されます。ただし、デフォルトサイズが1のデータ型( CHAR 、 CHARACTER 、 NCHAR など)は除きます。この変更は、 BINARY データ型の列と、 VARBINARY など、 BINARY と同義のデータ型の列にも適用されます。
たとえば、次のステートメントでは、列の最大サイズを指定せずにテーブルを作成します。
CREATE TABLE test_new_default_sizes (
name VARCHAR,
profile_image BINARY);
列の最大サイズを表示するには、次のクエリを実行します。
DESCRIBE TABLE test_new_default_sizes
->> SELECT "name", "type" FROM $1;
動作変更前は、クエリによって次の出力が返されます。
+---------------+-------------------+
| name | type |
|---------------+-------------------|
| NAME | VARCHAR(16777216) |
| PROFILE_IMAGE | BINARY(8388608) |
+---------------+-------------------+
動作変更後、クエリによって次の出力が返されます。
+---------------+--------------------+
| name | type |
|---------------+--------------------|
| NAME | VARCHAR(134217728) |
| PROFILE_IMAGE | BINARY(67108864) |
+---------------+--------------------+
ビューとマテリアライズドビューは、大きなデフォルトサイズを継承できます。¶
場合によっては、列定義で式を使用するビューまたはマテリアライズドビューを作成すると、ソーステーブルの列で明示的に小さいサイズが指定されていても、列は新しいデフォルトサイズを継承します。
たとえば、 VARCHAR データ型の列の最大サイズを明示的に16777216に設定するソーステーブルを作成します。
CREATE TABLE test_default_size_source_table (
id INTEGER,
description VARCHAR(16777216));
列定義で式を使用せずに、このテーブルに基づいてビューとマテリアライズドビューを作成します。
CREATE VIEW test_default_size_view AS
SELECT id, description FROM test_default_size_source_table;
CREATE MATERIALIZED VIEW test_default_size_mv AS
SELECT id, description FROM test_default_size_source_table;
列の最大サイズを表示するには、次のクエリを実行します。
DESCRIBE VIEW test_default_size_view
->> SELECT "name", "type" FROM $1;
DESCRIBE MATERIALIZED VIEW test_default_size_mv
->> SELECT "name", "type" FROM $1;
変更前も変更後も、これらのクエリは次の出力を返します。
+-------------+-------------------+
| name | type |
|-------------+-------------------|
| ID | NUMBER(38,0) |
| DESCRIPTION | VARCHAR(16777216) |
+-------------+-------------------+
ソーステーブルに基づいてビューとマテリアライズドビューを作成し、列定義で式を使用します。
CREATE VIEW test_default_size_view_with_exp AS
SELECT description || RANDSTR(10, 1) AS col
FROM test_default_size_source_table;
CREATE MATERIALIZED VIEW test_default_size_mv_with_exp AS
SELECT description || RANDSTR(10, 1) AS col
FROM test_default_size_source_table;
列の最大サイズを表示するには、次のクエリを実行します。
DESCRIBE VIEW test_default_size_view_with_exp
->> SELECT "name", "type" FROM $1;
DESCRIBE MATERIALIZED VIEW test_default_size_mv_with_exp
->> SELECT "name", "type" FROM $1;
動作変更前、これらのクエリは次の出力を返します。
+------+-------------------+
| name | type |
|------+-------------------|
| COL | VARCHAR(16777216) |
+------+-------------------+
動作変更後、これらのクエリは次の出力を返します。
+------+--------------------+
| name | type |
|------+--------------------|
| COL | VARCHAR(134217728) |
+------+--------------------+
CREATE TABLE AS SELECT を使用して作成されたテーブルは、大きなデフォルトサイズを継承できます。¶
場合によっては、列定義で式を使用する CREATE TABLE AS SELECT ( CTAS )ステートメントを使用してテーブルを作成すると、ソーステーブルの列で明示的に小さいサイズが指定されていても、列は新しいデフォルトサイズを継承します。
たとえば、 VARCHAR 列と BINARY 列の最大サイズを明示的に設定するソーステーブルを作成します。
CREATE TABLE test_default_size_ctas_source_table (
small_text VARCHAR(1000),
medium_text VARCHAR(50000),
large_text VARCHAR(16777216),
binary_data BINARY(1000000));
CTAS ステートメントを使用して、このソーステーブルからテーブルを作成します。
CREATE TABLE test_default_size_ctas AS
SELECT small_text,
medium_text,
large_text || RANDSTR(10, 1) AS processed_text,
binary_data
FROM test_default_size_ctas_source_table;
この例では、 processed_text 列の列定義に式を使用しています。
列の最大サイズを表示するには、次のクエリを実行します。
DESCRIBE TABLE test_default_size_ctas
->> SELECT "name", "type" FROM $1;
動作変更前は、クエリは次の出力を返し、 processed_text 列には小さい方のデフォルトサイズが表示されます。
+----------------+-------------------+
| name | type |
|----------------+-------------------|
| SMALL_TEXT | VARCHAR(1000) |
| MEDIUM_TEXT | VARCHAR(50000) |
| PROCESSED_TEXT | VARCHAR(16777216) |
| BINARY_DATA | BINARY(1000000) |
+----------------+-------------------+
動作変更後、クエリは次の出力を返し、 processed_text 列には大きい方のデフォルトサイズが表示されます。
+----------------+--------------------+
| name | type |
|----------------+--------------------|
| SMALL_TEXT | VARCHAR(1000) |
| MEDIUM_TEXT | VARCHAR(50000) |
| PROCESSED_TEXT | VARCHAR(134217728) |
| BINARY_DATA | BINARY(1000000) |
+----------------+--------------------+
参照:2118