【问题标题】:In Redshift, how can I copy a table, add dist and sort keys, and preserve column encodings?在 Redshift 中,如何复制表、添加 dist 和排序键以及保留列编码?
【发布时间】:2016-07-22 00:28:48
【问题描述】:

我想在 Redshift 中复制一个表,这样我就可以保留现有的列编码,同时还可以添加 DIST 和 SORT 键。有没有一种简单可重复的方法来做到这一点?

之前我复制了 DDL 表(没有编码),分析了表,手动输入列编码,手动添加 DIST 和 SORT 键,创建新表,插入数据,删除旧表,然后换了新的。这非常耗时且容易出错。

有没有更好的办法?

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

    Redshift 自动将压缩应用于新的空表。请注意,在这种情况下,它通常默认为 LZO

    您可以在CREATE TABLE … AS 查询中指定DISTKEYSORTKEY。所以做你想做的最简单的方法是:

    CREATE TABLE new_table 
    DISTKEY(new_dist_col) 
    SORTKEY(new_sortkey_1, new_sortkey_2)
    AS 
    SELECT * FROM old_table;
    

    编辑:要保留现有编码,请使用 v_generate_tbl_ddl view from our Utils library 获取现有表的 DDL 与编码。然后修改它以从旧表中创建新目标和INSERT INTO

    SELECT ddl 
    FROM admin.v_generate_tbl_ddl 
    WHERE tablename = 'old_table'
    ;
                       ddl
    -------------------------------------------------
     --DROP TABLE "my_schema"."old_table";
     CREATE TABLE IF NOT EXISTS "my_schema"."old_table"
     (
             "dist_col" BIGINT   ENCODE zstd
             ,"sortkey_2" TIMESTAMP
             ,"sortkey_1" NUMERIC(28,4)   ENCODE zstd
             ,"column_d" VARCHAR(256)   ENCODE zstd
     )
     DISTSTYLE KEY
     DISTKEY ("dist_col")
     SORTKEY (
             "sortkey_2"
             "sortkey_1"
             )
     ;
    

    【讨论】:

    • 这个问题明确要求“保留现有的列编码”。使用 CREATE TABLE ... AS 不会保留现有的列编码。
    【解决方案2】:

    您可以解析内置元数据表“information_schema.tables”和“information_schema.columns”(以及其他),以便以编程方式确定表定义。然后可以完全自动创建新的表克隆,并将一个表中的所有行插入到另一个表中。

    【讨论】:

    • 你有例子吗?
    【解决方案3】:

    Amazon (AWS Labs) 维护一个包含ColumnEncodingUtilityamazon-redshift-utils 存储库,它支持就地Updates to Distribution and Sort Keys(除了优化现有表的列编码压缩的主要功能之外)。

    此实用程序仅执行您问题中概述的迁移过程(根据原始 DDL 创建新表,更新列编码和 DIST/SORT 键,使用 INSERT...SELECT... 迁移数据,然后更改重命名新表替换旧表)。但是,该实用程序完全自动化了该过程,并且由 Amazon 官方维护,因此与每次手动执行这些步骤相比,它更不容易出错。

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 2013-07-26
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多