VARBYTE 类型 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

VARBYTE 类型

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

varbyte [ (n) ]

最大字节数(n)范围为 1 到 1,024,000。默认值为 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_VARBYTE。从 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 功能包括:

将空间数据与 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 列上使用近似去重统计。