4

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

4

2 回答 2

7

要创建外部 Spectrum 表,您应该参考CREATE TABLEAthena 提供的语法。要加载由双引号转义的 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})")
于 2017-06-28T21:09:07.120 回答
0

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

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.AbstractSerDe'
WITH SERDEPROPERTIES (
    'input.regex' = "^\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*,\"*([^\"]*)\"*$"  ) 
) 
于 2020-11-21T05:19:02.090 回答