【问题标题】:How to alter redshift column encoding in place?如何就地更改红移列编码?
【发布时间】:2016-03-17 02:15:05
【问题描述】:

有没有办法在原始表上添加/更改表列编码而不创建新表并将旧表中的所有内容选择到新表中?

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    不,不支持。

    来自documentation,您拥有的选项:

    • 在创建表时手动将压缩类型或编码应用于表中的列
    • 使用 COPY 命令自动分析和应用压缩(在空表上)
    • 使用 ALTER TABLE 命令将列添加到表时指定其编码

    来自相同的文档,

    创建表后,您无法更改列的压缩编码。

    【讨论】:

    • 现在(从 2020 年 10 月起)允许使用 ALTER TABLE tablename ALTER COLUMN columnname ENCODE newencode。公告:aws.amazon.com/ru/about-aws/whats-new/2020/10/…
    • 关于此公告的惊人好消息。用多年的日常负载回填 TB 规模表非常痛苦,现在应该比解决方法更容易。
    【解决方案2】:

    科坦是正确的。 AWS 确实提供了一个实用程序 https://github.com/awslabs/amazon-redshift-utils/tree/master/src/ColumnEncodingUtility,它可以为您处理它。

    【讨论】:

    • 这个实用程序基本上完成了原始问题所描述的内容。它创建一个新表,然后执行“插入 select * from ”,然后重命名表。
    【解决方案3】:

    您实际上不必使用新编码创建一个并行表。您可以通过添加具有所需压缩率的新列来更改现有表,使用旧列中的值更新新列,最后删除旧列。

    【讨论】:

    • 我发现这种方法实现起来非常简单,而且将新列设置为旧列也很快。不知道有什么警告。
    【解决方案4】:

    是的 - 自 2020 年 10 月 20 日起,这是一个受支持的选项,请参阅 AWS 文档:

    ALTER TABLE table_name 
    {
    | ALTER COLUMN column_name ENCODE new_encode_type 
    

    https://aws.amazon.com/about-aws/whats-new/2020/10/amazon-redshift-supports-modifying-column-comprression-encodings-to-optimize-storage-utilization-query-performance/

    https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多