从s3读取时需要跳过CSV标头

时间:2019-02-13 05:24:46

标签: amazon-athena

当我尝试从s3加载csv文件时,标头注入到列中。我试图跳过标题

   TBLPROPERTIES (
    "skip.header.line.count"="1")

但仍然没有用。 有什么建议吗?

CREATE EXTERNAL TABLE skipheader(
  permalink string, 
  company string, 
  numemps bigint, 
  category string, 
  city string, 
  state string, 
  fundeddate string, 
  raisedamt bigint, 
  raisedcurrency string, 
  round string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://bucketname/filename/'
  TBLPROPERTIES (
    "skip.header.line.count"="1")

2 个答案:

答案 0 :(得分:0)

查看the release notes的功能发布时间

  

支持忽略标题。定义表时,可以使用skip.header.line.count属性,以允许Athena忽略标题。当前,使用OpenCSV SerDe的查询支持此功能,而不是Grok或Regex SerDes的查询。

我对此的解释是,它与LazySimpleSerde不兼容,这就是说ROW FORMAT DELIMITED时得到的,并且必须使用OpenCSV serde:< / p>

CREATE EXTERNAL TABLE skipheader ( … )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ('separatorChar' = ',')
STORED AS TEXTFILE
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://bucketname/filename/'
TBLPROPERTIES ("skip.header.line.count"="1")

OpenCSV Serde的工作方式与LazySimpleSerde不同,它对数据类型的支持有限得多,但另一方面,它却更具可配置性。

答案 1 :(得分:0)

如果您可以按照Theo的描述使用OpenCSV SerDe并使其适合您,请继续使用。但是,如果您有其他格式的其他表,即使有点麻烦,也可以通过以下方式解决它。您可以简单地添加一个WHERE子句,该子句不包含标题  SELECT * FROM skipheader WHERE permalink != 'permalink'。最近,Athena添加了根据查询(https://docs.aws.amazon.com/athena/latest/ug/create-table-as.html)创建新表的功能,因此,如果您更适合的话,甚至可以过滤掉标头并使用Athena保存到新位置。

相关问题