

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# VARBYTE 类型
VARBYTE 类型

使用 VARBYTE、VARBINARY 或 BINARY VARYING 列存储具有固定限制的可变长度二进制值。

```
varbyte [ (n) ]
```

最大字节数（*n*）范围为 1 到 16,777,216。默认值为 64,000。

下面是一些你可能想使用 VARBYTE 数据类型的示例:
+ 在 VARBYTE 列上联接表。
+ 创建包含 VARBYTE 列的实体化视图。支持包含 VARBYTE 列的实体化视图的增量刷新。但是，除了 COUNT、MIN、MAX 和 GROUP BY 以外，VARBYTE 列上的聚合函数不支持增量刷新。

为确保所有字节都是可打印字符，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 是 2 个字节，INTEGER 是 4 个字节，BIGINT 是 8 个字节。

以下 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` 打印，为 2 个字节或 4 个十六进制字符。

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

以下 SQL 语句将 INTEGER 转换为 VARBYTE。尽管返回值是二进制值，但结果将以十六进制形式 `00000005` 打印，为 4 个字节或 8 个十六进制字符。

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

以下 SQL 语句将 BIGINT 转换为 VARBYTE。尽管返回值是二进制值，但结果将以十六进制形式 `0000000000000005` 打印，为 8 个字节或 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 数据类型与 Amazon Redshift 一起使用时的限制：
+ Amazon Redshift Spectrum 仅支持 Parquet 和 ORC 文件的 VARBYTE 数据类型。
+ Amazon Redshift 查询编辑器和 Amazon Redshift 查询编辑器 v2 尚未完全支持 VARBYTE 数据类型。因此，在处理 VARBYTE 表达式时，请使用不同的 SQL 客户端。

  作为使用查询编辑器的解决方法，如果您的数据长度等于或少于 1600 万个字节且内容是有效的 UTF-8，则您可以将 VARBYTE 值转换为 VARCHAR，例如：

  ```
  select to_varbyte('6162', 'hex')::varchar;
  ```
+ 您不能将 VARBYTE 数据类型与 Python 或 Lambda 用户定义的函数（UDF）结合使用。
+ 您不能从 VARBYTE 列创建 HLLSKETCH 列，也不能在 VARBYTE 列上使用近似去重统计。
+ 大于 1 MB 的 VARBYTE 值只能从以下文件格式中摄取：
  + Parquet
  + 文本
  + 逗号分隔值（CSV）