Limitations - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Limitations

使用 SUPER 数据类型时,您可以发现以下相关限制:

  • 不能将 SUPER 列定义为分配或排序键。

  • 不支持涉及 SUPER 列的聚合,这些聚合将在即将进行的补丁更新中执行。

  • SUPER 数据类型仅支持单个行最多 1MB 的数据。

  • 您不能对 SUPER 列执行部分更新或转换操作。

  • 您不能在右联接或完全外部联接中使用 SUPER 数据类型及其别名。

  • 涉及超级列引用的 UNLOAD 查询不支持清单选项。

  • 强制转换限制

    SUPER 值可以强制转换到其他数据类型或从其他数据类型转换,但以下情况除外:

    • Amazon Redshift 不会区分小数位数 0 的整数和小数。

    • 如果小数位数不为零,SUPER 数据类型的行为与其他Amazon Redshift数据类型相同,不同之处在于 将 SUPER 相关错误Amazon Redshift转换为 null,如以下示例所示。

      SELECT 5::bool; bool ------- True (1 row) SELECT 5::decimal::bool; ERROR: cannot cast type numeric to boolean SELECT 5::super::bool; bool ------- True (1 row) SELECT 5.0::bool; ERROR: cannot cast type numeric to boolean SELECT 5.0::super::bool; bool ------- (1 row)
    • Amazon Redshift 不会将日期和时间类型转换为 SUPER 数据类型。 Amazon Redshift 只能从 SUPER 数据类型中转换日期和时间数据类型,如以下示例所示。

      SELECT o.o_orderdate FROM customer_orders_lineitem c,c.c_orders o; order_date ------------------ "2001-09-08" (1 row) SELECT JSON_TYPEOF(o.o_orderdate) FROM customer_orders_lineitem c,c.c_orders o; json_typeof ----------------- string (1 row) SELECT o.o_orderdate::date FROM customer_orders_lineitem c,c.c_orders o; order_date ---------------- 2001-09-08 (1 row) --date/time cannot be cast to super SELECT '2019-09-09'::date::super; ERROR: cannot cast type date to super
    • 从非标量值(对象和数组)强制转换为字符串将返回 NULL。要正确序列化这些非标量值,请不要强制转换它们。而应使用 json_serialize 强制转换非标量值。json_serialize 函数返回 varchar。通常,您不需要将非标量值强制转换为 varchar,因为 将Amazon Redshift隐式序列化,如以下第一个示例所示。

      SELECT r_nations FROM region_nations WHERE r_regionkey=300; r_nations ---------------- [1,"abc",null] (1 row) SELECT r_nations::varchar FROM region_nations WHERE r_regionkey=300; r_nations ------------- (1 row) SELECT JSON_SERIALIZE(r_nations) FROM region_nations WHERE r_regionkey=300; json_serialize ----------------- [1,"abc",null] (1 row)