

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 使用十六進位格式來列印 VARBYTE 值。例如，下列 SQL 會將十六進位字串 `6162` 轉換成二進位值。即使傳回的值是二進位值，結果仍會列印為十六進位 `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 來說是兩個位元組、對於 INTEGER 來說是四個位元組、對於 BIGINT 來說是八個位元組。

下列 SQL 陳述式將 VARCHAR 字串轉換為 VARBYTE。即使傳回的值是二進位值，結果仍會列印為十六進位 `616263`。

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

下列 SQL 陳述式將欄中的 CHAR 值轉換為 VARBYTE。這個範例會建立一個包含 CHAR(10) 欄 (c) 的資料表，插入長度小於 10 的字元值。產生的轉換將結果以空格字元 (hex'20') 填入定義的欄大小。即使傳回的值是二進位值，結果仍會列印為十六進位。

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

下列 SQL 陳述式將 SMALLINT 字串轉換為 VARBYTE。即使傳回的值是二進位值，結果仍會列印為十六進位 `0005`，即兩個位元組或四個十六進位字元。

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

下列 SQL 陳述式將 INTEGER 轉換為 VARBYTE。即使傳回的值是二進位值，結果仍會列印為十六進位 `00000005`，即四個位元組或八個十六進位字元。

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

下列 SQL 陳述式將 BIGINT 轉換為 VARBYTE。即使傳回的值是二進位值，結果仍會列印為十六進位 `0000000000000005`，即八個位元組或 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)

## 將 VARBYTE 資料類型與 Amazon Redshift 搭配使用時的限制
<a name="varbyte-limitations"></a>

以下是將 VARBYTE 資料類型與 Amazon Redshift 搭配使用時的限制：
+ 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;
  ```
+ 您不能將 VARBYTE 資料類別搭配 Python 或 Lambda 使用者定義函數 (UDF) 使用。
+ 您無法從 VARBYTE 欄建立 HLLSKETCH 欄，也無法在 VARBYTE 欄上使用 APPROXIMATE COUNT DISTINCT。
+ 大於 1MB 的 VARBYTE 值只能從下列檔案格式擷取：
  + Parquet
  + 文字
  + 逗號分隔值 (CSV)