

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# VARBYTE 型
<a name="r_VARBYTE_type"></a>

一定の制限を持つ可変長のバイナリ値を格納するには、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\$1VARBYTE](r_TO_VARBYTE.md)」を参照してください。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 の各機能は以下のとおりです。
+ [VARBYTE 演算子](r_VARBYTE_OPERATORS.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [LENGTH 関数](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [SUBSTRING 関数](r_SUBSTRING.md)
+ [FROM\$1HEX](r_FROM_HEX.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [FROM\$1VARBYTE](r_FROM_VARBYTE.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [VARBYTE データ型の列のロード](copy-usage-varbyte.md)
+ [VARBYTE データ型の列のアップロード](r_UNLOAD.md#unload-usage-notes)

## Amazon Redshift で VARBYTE データ型を使用する際の制約事項
<a name="varbyte-limitations"></a>

Amazon Redshift で VARBYTE データを使用する際の制約事項を以下に示します。
+ Amazon Redshift Spectrum は、Parquet ファイルと ORC ファイルに対してのみ VARBYTE データ型をサポートします。
+ Amazon Redshift のクエリエディタと Amazon Redshift クエリエディタ v2 は、現段階で VARBYTE データ型を完全にはサポートしていません。したがって、VARBYTE 表現を処理する際には、他の SQL クライアントを使用してください。

  クエリエディタを使用する際の回避策として、データの長さが 16,000,000 バイト 以下で、かつコンテンツが有効な 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)