【问题标题】:Creating default value row in Redshift dimension table to prevent null values in reports在 Redshift 维度表中创建默认值行以防止报告中出现空值
【发布时间】:2016-10-24 18:21:22
【问题描述】:

我正在将数据仓库架构和默认数据负载从 MySQL 移植到 Redshift 用于生产的初始开发。根据http://www.kimballgroup.com/2010/10/design-tip-128-selecting-default-values-for-nulls/,将初始默认数据创建为维度表中的一行,并在自动增量列中设置了 -1 值。

将架构移至 Redshift 后,应将列从 auto_increment 更改为标识,以保留数据库主键生成,但这不再允许插入返回的标识列

ERROR: cannot set an identity column to a value
SQL state: 0A000

在这种情况下,ETL 加载作业是否应该负责自动增加维度键,或者是否有另一个来创建插入值?

【问题讨论】:

    标签: data-warehouse amazon-redshift


    【解决方案1】:

    据我所知,覆盖自动生成的值不适用于INSERT。如果您有可能将数据上传到 S3,您可以使用 Redshift 的 COPY 命令将数据从 S3 加载到表中。它让你指定选项EXPLICIT_IDS,例如:

    COPY your_table from 's3://path_to_your/data.csv' CREDENTIALS '' EXPLICIT_IDS;
    

    来自documentation

    如果您想用表的源数据文件中的显式值覆盖自动生成的值,请对具有 IDENTITY 列的表使用 EXPLICIT_IDS。如果命令包含列列表,则该列表必须包含 IDENTITY 列才能使用此参数。 EXPLICIT_IDS 值的数据格式必须与 CREATE TABLE 定义指定的 IDENTITY 格式匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多