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

4

我想将数据加载到亚马逊Redshift外部表中。 数据以CSV格式存在并带有引号。我们是否有类似于对Redshift外部表的复制命令中REMOVEQUOTES的选项。此外,有哪些不同的选项可以用于加载固定长度数据到外部表中。


1
目前为止,很遗憾的是,由于OpenCSV SerDe变体尚未得到支持,因此没有属性可以去除引号。 - grundprinzip
2个回答

9
要创建一个外部光谱表,您应该引用 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})")

0

你也可以使用正则表达式来解析由多个字符包围的数据。例如(在 CSV 文件中,字段被三个双引号("")包围):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接