文字列およびバイナリデータ型

このトピックでは、Snowflakeでサポートされているバイナリ文字列を含む文字列/テキストデータ型と、文字列定数/リテラルでサポートされている形式について説明します。

このトピックの内容:

テキスト文字列のデータ型

Snowflakeは、テキスト(文字)文字列に対して次のデータ型をサポートしています。

VARCHAR

VARCHAR は、Unicode文字を保持します。

最大長は16 MB (非圧縮)です。 VARCHAR 列に保存できるUnicode文字の最大数は、文字がシングルバイトかマルチバイトかによって異なります。

シングルバイト

16,777,216

マルチバイト

8,388,608(1文字あたり2バイト)と4,194,304(1文字あたり4バイト)の間

長さが指定されていない場合、デフォルトは最大長になっています。

列は、保存されている実際のデータ量のストレージのみを消費します。例えば、 VARCHAR(16777216)列の1文字の文字列は、1文字のみを消費します。

全長の VARCHAR 宣言 VARCHAR(16777216)、またはそれより小さなサイズを使用しても、パフォーマンスの違いはありません。リレーショナルデータベースでは、 WHERE 句が VARCHAR 列または文字列列を参照する SELECT ステートメントは、日付または数値列条件を使用してフィルター処理された SELECT ステートメントほど高速ではありません。

一部の BI/ETL ツールは、ストレージまたはメモリ内の VARCHAR データの最大サイズを定義します。列の最大サイズがわかっている場合は、列を追加するときにサイズを制限できます。

CHAR , CHARACTER

VARCHAR と同義語です。ただし、長さが指定されていない場合は、 CHAR(1)がデフォルトです。

注釈

Snowflakeは現在、一般的な CHAR セマンティクスとは異なり、最大長より短い文字列は最後にスペースが埋め込まれません。

STRING , TEXT

VARCHARと同義語です。

テーブル列の文字列の例

CREATE OR REPLACE TABLE test_text(v VARCHAR,
                                  v50 VARCHAR(50),
                                  c CHAR,
                                  c10 CHAR(10),
                                  s STRING,
                                  s20 STRING(20),
                                  t TEXT,
                                  t30 TEXT(30)
                                  );

DESC TABLE test_text;

+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| V    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| V50  | VARCHAR(50)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C    | VARCHAR(1)        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| C10  | VARCHAR(10)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| S20  | VARCHAR(20)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T    | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| T30  | VARCHAR(30)       | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+

バイナリ文字列のデータ型

Snowflakeは、バイナリ文字列に対して次のデータ型をサポートしています。

BINARY

最大長は8 MB (8,388,608バイト)です。VARCHARとは異なり、 BINARY データ型にはUnicode文字の概念がないため、長さは常にバイト単位で測定されます。

長さが指定されていない場合、デフォルトは最大長になっています。

VARBINARY

VARBINARY は、 BINARYと同義語です。

内部表現

BINARY データ型は、8ビットバイトのシーケンスを保持します。

Snowflakeが BINARY データ値を表示するとき、Snowflakeは多くの場合、各バイトを2つの16進文字として表します。たとえば、単語「HELP」は 48454C50 として表示される場合があります。「48」は ASCII (Unicode)文字「H」に相当する16進数で、「45」は「E」などの文字を表す16進数です。

BINARY データの入力と表示の詳細については、 バイナリ入出力 をご参照ください。

テーブル列のバイナリ例

CREATE OR REPLACE TABLE test_binary(b BINARY,
                                    b100 BINARY(100),
                                    vb VARBINARY
                                    );

DESC TABLE test_binary;

+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type            | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| B    | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| B100 | BINARY(100)     | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| VB   | BINARY(8388608) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+-----------------+--------+-------+---------+-------------+------------+-------+------------+---------+

文字列定数

定数 (別名 リテラル)は、固定データ値を指します。Snowflakeの文字列定数は、常に区切り文字で囲む必要があります。Snowflakeは、文字列定数を区切るための一重引用符またはドル記号の使用をサポートしています。

一重引用符付き文字列定数

文字列定数は、一重引用符区切り文字で囲むことができます(例: 'This is a string')。文字列定数内に一重引用符を含めるには、2つの隣接する一重引用符を入力します(例: ''

例:

SELECT 'Today''s sales projections', '-''''-';

+------------------------------+----------+
| 'TODAY''S SALES PROJECTIONS' | '-''''-' |
|------------------------------+----------|
| Today's sales projections    | -''-     |
+------------------------------+----------+

注釈

2つの一重引用符は、(必要に応じて)オブジェクト識別子を区切るために使用される二重引用符(")とは 異なります。詳細については、 識別子の要件 をご参照ください。

エスケープシーケンス

一重引用符で囲まれた文字列定数内では、一重引用符文字と他の特殊文字をエスケープシーケンスに含めることができます。バックスラッシュ文字(\)は、バックスラッシュエスケープシーケンスを開始します。

エスケープシーケンスには、シンプル、8進数、16進数の3種類があります。

エスケープシーケンス

文字表現

'

一重引用符(')文字

"

二重引用符(")文字

\

バックスラッシュ(\)文字

b

バックスペース文字

f

改ページ文字

n

改行(ラインフィード)文字

r

復帰文字

t

タブ文字

ooo

ASCII 8進表記の文字

xhhh

ASCII 16進表記の文字

例:

SELECT $1, $2 FROM
VALUES
('Tab','Hel\tlo'),
('Newline','Hel\nlo'),
('Octal','-\041-'),
('Hexadecimal','-\x21-')
;

+-------------+-----+
| $1          | $2  |
|-------------+-----|
| Tab         | Hel lo     |
| Newline     | Hel |
|             | lo  |
| Octal       | -!- |
| Hexadecimal | -!- |
+-------------+-----+

バックスラッシュでエスケープされた非特殊文字は、単にその文字として解釈されます。例えば、 '\z''z' になります。

ドル記号付き文字列定数

文字列に多くの引用文字が含まれている場合、文字列定数を一重引用符ではなくドル記号で囲む方が簡単な場合があります。ドル引用符で囲まれた文字列定数は、ドル記号($$)のペアで囲まれた文字列内の文字で構成されます。

例えば、次の文字列定数は同等です。

'string with a \' character'

$$string with a ' character$$

ドル引用符で囲まれた文字列定数には、引用符などの文字を含めることができますが、エスケープする必要はありません。文字列の内容は常に文字通り書き込まれます。文字列定数にダブルドル記号を含めることはできません。

例:

SELECT $1, $2 FROM VALUES ('row1', $$a
                                      ' \ \t
                                      \0x123 z $ $$);

+------+-------------------------------------------------------+
| $1   | $2                                                    |
|------+-------------------------------------------------------|
| row1 | a                                                     |
|      |                                           ' \ \t      |
|      |                                           \0x123 z $  |
+------+-------------------------------------------------------+