VARBYTE 型 - Amazon Redshift

VARBYTE 型

一定の制限を持つ可変長のバイナリ値を格納するには、VARBYTE 列、VARBINARY 列または BINARY VARYING 列を使用します。

varbyte [ (n) ]

最大バイト数 (n) の範囲は 1~16,777,216 です。デフォルト値は 64,000 です。

以下に、VARBYTE データ型を使用する場合の例をいくつか示します。

  • VARBYTE 列でのテーブルの結合。

  • VARBYTE 列を含むマテリアライズドビューの作成。VARBYTE 列を含むマテリアライズド・ビューでは、増分更新がサポートされます。ただし、VARBYTE 列の COUNT、MIN、MAX および GROUP BY 以外の集計関数は、増分更新をサポートしません。

すべてのバイトが表示可能な文字であることを保証するために、Amazon Redshift は 16 進数形式を使用して VARBYTE 値を出力します。例えば、次の SQL では 16 進数の文字列 6162 をバイナリ値に変換しています。戻り値がバイナリ値であっても、結果は 16 進数の 6162 で出力されます。

select from_hex('6162'); from_hex ---------- 6162

Amazon Redshift では、VARBYTE と以下に示すデータ型間でのキャストがサポートされています。

  • CHAR

  • VARCHAR

  • SMALLINT

  • INTEGER

  • BIGINT

CHAR と VARCHAR をキャストする場合は、UTF-8 形式が使用されます。UTF-8 形式の詳細については、「TO_VARBYTE」を参照してください。SMALLINT、INTEGER、BIGINT からキャストする場合、元のデータ型のバイト数は維持されます。つまり、SMALLINT の場合は 2 バイト、INTEGER の場合は 4 バイト、BIGINT の場合は 8 バイトとなります。

次の SQL ステートメントは、VARCHAR 文字列を VARBYTE にキャストします。戻り値がバイナリ値であっても、結果は 16 進数の 616263 で出力されます。

select 'abc'::varbyte; varbyte --------- 616263

次の SQL ステートメントは、列内の CHAR 値を VARBYTE にキャストします。次の使用例では、CHAR (10) 列 (c) を持つテーブルを作成し、長さが 10 より短い文字値を挿入します。出力されるキャストでは、スペース文字 (hex'20') を使用して、定義された列サイズに結果がパディングされます。戻り値がバイナリ値の場合でも、結果は 16 進数で表示されます。

create table t (c char(10)); insert into t values ('aa'), ('abc'); select c::varbyte from t; c ---------------------- 61612020202020202020 61626320202020202020

次の SQL ステートメントは、SMALLINT 文字列を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 0005 (2 バイトつまり 4 桁の 16 進数文字列) として表示されます。

select 5::smallint::varbyte; varbyte --------- 0005

次の SQL ステートメントは、INTEGER を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 00000005 (4 バイトつまり 8 桁の16進数文字列) として出力されます。

select 5::int::varbyte; varbyte ---------- 00000005

次の SQL ステートメントは、BIGINT を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 0000000000000005 (8 バイトつまり 16 桁の 16 進数文字列) として出力されます。

select 5::bigint::varbyte; varbyte ------------------ 0000000000000005

VARBYTE データ型をサポートする Amazon Redshift の各機能は以下のとおりです。

Amazon Redshift で VARBYTE データ型を使用する際の制約事項

Amazon Redshift で VARBYTE データを使用する際の制約事項を以下に示します。

  • Amazon Redshift Spectrum は、Parquet ファイルと ORC ファイルに対してのみ VARBYTE データ型をサポートします。

  • Amazon Redshift のクエリエディタと Amazon Redshift クエリエディタ v2 は、現段階で VARBYTE データ型を完全にはサポートしていません。したがって、VARBYTE 表現を処理する際には、他の SQL クライアントを使用してください。

    クエリエディタを使用する際の回避策として、データの長さが 64 KB 未満で、かつコンテンツが有効な UTF-8 で構成されている場合は、VARBYTE 値を VARCHAR にキャストできます。次にこの例を示します。

    select to_varbyte('6162', 'hex')::varchar;
  • Python または Lambda ユーザー定義関数 (UDF) では VARBYTE データ型を使用することはできません。

  • VARBYTE 列から HLLSKETCH 列を作成したり、VARBYTE 列で APPROXIMATE COUNT DISTINCT を使用したりすることはできません。

  • 1 MB を超える VARBYTE 値は、以下のファイル形式からのみ取り込むことができます。

    • Parquet

    • テキスト

    • カンマ区切り値 (CSV)