【问题标题】:Specify multiple delimiters for Redshift copy command为 Redshift 复制命令指定多个分隔符
【发布时间】:2017-11-09 07:45:07
【问题描述】:

有没有办法在加载数据时为 Redshift 复制命令指定多个分隔符。

我有一个格式如下的数据文件:-

1 | ab |光盘 | ef

2 | gh | ij | kl

我正在使用这样的命令:-

COPY MY_TBL
  FROM 's3://s3-file-path' 
  iam_role 'arn:aws:iam::ddfjhgkjdfk'
  manifest
  IGNOREHEADER 1
gzip delimiter '|';

字段由 | 分隔并且记录使用换行符分隔。如何将此数据复制到 Redshift。因为我上面的查询给了我一个 delimiter not found 错误

【问题讨论】:

    标签: amazon-s3 amazon-redshift


    【解决方案1】:

    不,分隔符是单个字符。

    来自Data Format Parameters

    指定用于分隔输入文件中的字段的单个 ASCII 字符,例如竖线字符 (|)、逗号 (, ) 或制表符 (\t)。

    您可以使用管道分隔符导入它,然后执行 UPDATE 命令以将空格移出STRIP()

    【讨论】:

      【解决方案2】:

      您上面的错误表明您的数据中的某些内容导致 COPY 命令失败。这可能是很多事情,从文件编码到那里的一些时髦数据。我最近一直在为“找不到分隔符”错误而苦苦挣扎,结果证明是 ESCAPE 参数与我的数据中的尾随反斜杠相结合,导致我的分隔符 (\t) 无法被拾取。

      幸运的是,您可以采取一些步骤来帮助您缩小问题范围:

      stl_load_errors - 此系统表包含有关 Redshift 在 COPY 操作期间记录的任何错误的详细信息。这应该能够识别数据文件中导致问题的行号。

      NOLOAD - 允许您运行复制命令,而无需实际将任何数据加载到 Redshift。这将执行 COPY ANALYZE 操作,并将突出显示 stl_load_errors 表中的所有错误。

      FILLRECORD - 这允许 Redshift “填充”它认为输入数据中缺失的任何列。这本质上是为了处理任何不完整的正确数据文件,但对于帮助诊断可能导致“未找到分隔符”错误的问题很有用。这将允许您将数据加载到 Redshift,然后在数据库中查询以查看您的列开始不合适的位置。

      从您发布的示例来看,您的设置看起来不错,但显然这不是全部。上面的选项应该可以帮助您缩小违规行的范围以帮助解决问题。

      【讨论】:

        猜你喜欢
        • 2014-03-18
        • 2019-12-01
        • 2016-06-15
        • 1970-01-01
        • 2017-07-31
        • 2016-05-03
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多