【问题标题】:Remove double quotes " while loading data to Amazon Redshift Spectrum在将数据加载到 Amazon Redshift Spectrum 时删除双引号 "
【发布时间】:2017-12-01 07:22:36
【问题描述】:

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

【问题讨论】:

  • 到目前为止,很遗憾,由于尚不支持 OpenCSV SerDe 变体,因此没有属性可以删除引号。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    要创建外部 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})")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-24
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多