尝试使用 SOH 作为从 AWS S3

问题描述

问题:有没有办法让 AWS S3 导入 Postres 以使用需要转义的分隔符?

我有分隔格式的表格数据。它存储在 Amazon (AWS) S3 中。分隔符是 SOH (ASCII 001),因为我们的数据分析师发现它没有用于表数据。

我正在尝试使用 AWS postgres 扩展库 aws_s3 将这些分隔文件导入 Postgres (Amazon RDS)。

导入语句的形式如下:

SELECT aws_s3.table_import_from_s3 (
  'path_type_attribution_summary','path_creation_method,method,path_type,path_interaction_index,interaction_attrib_share,path_interaction','DELIMITER ''|''',aws_commons.create_s3_uri(
    'ci-360-datahub-data-dev-us-east-1','test_chdole/test2/path_type_attribution_summary/path_type_attribution_summary','us-east-1')
);

该示例使用竖线分隔符(单个字符)。为了在那里获得 SOH,我需要使用某种逃生方法。类似的东西:

  'DELIMITER ''\001''',

我尝试了多种方法。我每次都遇到同样的错误

ERROR:  copY delimiter must be a single one-byte character
CONTEXT:  sql statement "copy path_type_attribution_summary (path_creation_method,path_interaction) from '/rdsdbdata/extensions/aws_s3/amazon-s3-fifo-32165-20210115T161944Z-0' with DELIMITER '\001'"
sql function "table_import_from_s3" statement 1
sql state: 0A000

我不确定问题是出在 Postgres 还是 aws_s3 库上。

有人做过这样的事情吗?

解决方法

作为分隔符,SOH = ASCII 代码 001 是不可打印的字符。您必须使用扩展字符串语法,即

DELIMITER E'\001'

更多信息click here