Нужно пропустить CSV заголовок при чтении с s3 - PullRequest
0 голосов
/ 13 февраля 2019

когда я пытаюсь загрузить CSV-файл из s3, заголовки вводятся в столбцы.Я попытался пропустить заголовок на

   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 голосов
/ 17 февраля 2019

Если вы можете использовать OpenCSV SerDe и заставить его работать для вас, как описано Тео, сделайте это.Тем не менее, если у вас есть другие таблицы других форматов, вы можете обойти это следующим образом, даже если это что-то вроде хака.Вы можете просто добавить предложение WHERE, которое исключает заголовки, такие как SELECT * FROM skipheader WHERE permalink != 'permalink'.Недавно Афина добавила возможность создания новой таблицы в результате запроса (https://docs.aws.amazon.com/athena/latest/ug/create-table-as.html), так что если вы могли бы даже отфильтровать заголовки и сохранить в новом месте с помощью Афины, если это было лучше для вас.

0 голосов
/ 13 февраля 2019

Глядя на в примечаниях к выпуску , когда функция была выпущена, говорится:

Поддержка игнорирования заголовков.Вы можете использовать свойство skip.header.line.count при определении таблиц, чтобы позволить Athena игнорировать заголовки.В настоящее время это поддерживается для запросов, использующих OpenCSV SerDe, а не для Grok или Regex SerDes.

Моя интерпретация этого заключается в том, что он не будет работать с LazySimpleSerde , чтоэто то, что вы получаете, когда говорите ROW FORMAT DELIMITED, и что вы должны использовать OpenCSV serde:

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 , он имеет гораздо более ограниченную поддержку типов данных, но, с другой стороны, он более настраиваемый.

...