VARBYTE 類型 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

VARBYTE 類型

使用 VARBYTE、VARBINARY 或 BINARY VARYING 欄來儲存具有固定限制的可變長度二進位值。

varbyte [ (n) ]

最大位元組數 (n) 的範圍可以介於 1 - 1,024,000 之間。預設值為 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_VARBYTE。從 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 資料類型與 Amazon Redshift 搭配使用時的限制

以下是將 VARBYTE 資料類型與 Amazon Redshift 搭配使用時的限制:

  • 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;
  • 您不能將 VARBYTE 資料類別搭配 Python 或 Lambda 使用者定義函數 (UDF) 使用。

  • 您無法從 VARBYTE 欄建立 HLLSKETCH 欄,也無法在 VARBYTE 欄上使用 APPROXIMATE COUNT DISTINCT。