为Redshift copy命令指定多个分隔符

时间:2017-06-07 19:35:04

标签: amazon-s3 amazon-redshift

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

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

1 | ab | cd | 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中。因为上面的查询给了我一个未找到分隔符的错误

2 个答案:

答案 0 :(得分:0)

不,分隔符是单个字符。

来自Data Format Parameters

  

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

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

答案 1 :(得分:0)

上面的错误表明数据中的某些内容导致COPY命令失败。这可能是许多事情,从文件编码到那里的一些时髦数据。我找不到"未找到的分隔符"最近的错误,结果是ESCAPE参数与我的数据中的尾部反斜杠相结合,这阻止了我的分隔符(\ t)被拾取。

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

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

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

FILLRECORD - 这允许Redshift“填充”#34;它在输入数据中看到的任何列都丢失了。这主要是为了处理任何不合格的数据文件,但在帮助诊断可能导致未找到分隔符的问题时非常有用。错误。这样您就可以将数据加载到Redshift,然后在数据库中查询以查看列的开始位置。

从您发布的示例中,您的设置看起来不错,但显然这不是整个图片。上面的选项可以帮助您缩小有问题的行,以帮助解决问题。