在将数据加载到Amazon Redshift Spectrum时删除双引号

时间:2017-06-28 04:45:26

标签: amazon-web-services amazon-redshift amazon-redshift-spectrum

我想将数据加载到amazon redshift外部表。数据采用CSV格式并带引号。 我们是否有类似REMOVEQUOTES的东西,我们在redshift外部的复制命令中有 表。还有什么是在外部表中加载固定长度数据的不同选项。

2 个答案:

答案 0 :(得分:5)

要创建外部Spectrum表,您应该参考Athena提供的CREATE TABLE语法。要加载由双引号转义的CSV,您应使用以下行作为ROW FORMAT

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
    'separatorChar' = ',',
    'quoteChar' = '\"',
    'escapeChar' = '\\'
)

对于固定长度文件,您应该使用RegexSerDe。在这种情况下,CREATE TABLE语句的相关部分将如下所示(假设3个字段的长度为100)。

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "(.{100})(.{100})(.{100})")

答案 1 :(得分:0)

您还可以使用正则表达式来解析由多个字符包围的数据。示例(在CSV文件中,字段用三重双引号(“”“)包围):

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.AbstractSerDe'
WITH SERDEPROPERTIES (
    'input.regex' = "^\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*$"  ) 
)