amazon-redshift - 复制用双引号括起来的 Redshift Pipe Delimited
问题描述
我正在尝试将文件从 S3 加载到 Redshift。文件以 Pipe 分隔,但有包含 Pipe 和其他特殊字符的 value,但如果 value 有 Pipe,则用双引号括起来。
例子:
Field1|Field2
"abc|dh"|123
efh@ih|233
我尝试使用以下命令,但我收到错误说无效数字。这是由于复制命令将值中的管道视为分隔符。
copy table
from 's3'
iam_role 'arn'
region 'us-east-1'
MAXERROR AS 10 NULL AS '(null)'
'ESCAPE "'
IGNOREHEADER AS 1
DELIMITER '|' timeformat 'auto' GZIP;
解决方案
您正在寻找REMOVEQUOTES
参数。https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-removequotes
ESCAPE
要求您的数据准备好嵌入转义字符。例如,如果您的转义字符是,\
那么您需要准备数据,以便内容是"abc\|dh"
.
例子:
DROP TABLE IF EXISTS public.quote_test;
CREATE TABLE IF NOT EXISTS public.quote_test (col_a VARCHAR(10), col_b VARCHAR(10));
SELECT * FROM quote_test;
echo '"a|b"|"c|d"' > ~/simple_quotes.txt
aws s3 cp ~/simple_quotes.txt s3://my-bucket/simple_quotes.txt
--Will fail
COPY quote_test FROM 's3://my-bucket/simple_quotes.txt'
CREDENTIALS 'aws_iam_role=arn:aws:iam::012345678901:role/redshift-cluster'
DELIMITER '|' REGION 'us-west-2';
--Succeeds with REMOVEQUOTES
COPY quote_test FROM 's3://benchmark-files/simple_quotes.txt'
CREDENTIALS 'aws_iam_role=arn:aws:iam::012345678901:role/redshift-cluster'
REMOVEQUOTES DELIMITER '|' REGION 'us-west-2';
SELECT * FROM quote_test;
-- col_a | col_b
-- -------+-------
-- a|b | c|d
推荐阅读
- javascript - 如何将数据显示键设置为来自 JSON API 的变量
- sonarqube - 詹金斯:org.sonarsource.scanner.api.internal.ScannerException:无法执行 SonarQube
- angular - 根据条件动态添加/删除验证器
- airflow - 考虑到只有在所有父母都完成执行并且任何父母失败的两个条件下,如何触发气流中的任务?
- datatables-1.10 - Datatable-angular 导出数据按钮仅创建列标题而不是数据
- elasticsearch-curator - ElasticSearch Curator 删除,除非最后一个条目
- react-native - 以下软件包使用不推荐使用的“rnpm”配置,该配置将从下一个版本停止工作
- linux - 使用启用密码的 sudo 帐户更改 root 密码身份验证的脚本
- c++ - 如何将大对象复制到循环内的 omp 任务中?
- c# - 禁止 C# 文本框中的空格