AWS Glue гусеничный считыватель GZIP информация заголовка - PullRequest
0 голосов
/ 21 января 2019

Я настроил сканер в Glue, который сканирует сжатые файлы CSV (формат GZIP) из корзины S3.У меня есть задание ETL, которое преобразует этот CSV в Parquet и другой сканер, который читает файл паркета и заполняет таблицу паркета.

Первый сканер, который читает сжатый файл CSV (формат GZIP), похоже на чтение информации заголовка файла GZIP.Файл CSV имеет пять полей.Ниже приведены примеры данных

3456789,1,200,20190118,9040

Однако после того, как сканер заполняет таблицу, строка выглядит следующим образом.

xyz.csv0000644000175200017530113404730513420142427014701 0ustar wlsadmin3456789 1 200 20190118 9040

В первом столбце содержатся некоторые дополнительные данные, которые содержат имя файла и имя пользователя компьютера, на котором создан файл GZIP.

* 1016Как я могу избежать этой ситуации и прочитать правильные значения.

1 Ответ

0 голосов
/ 21 января 2019

По моему мнению, вы не сможете создать таблицу с помощью AWS Glue Crawler в вашем случае.

https://docs.aws.amazon.com/glue/latest/dg/add-classifier.html

Конечно, вы можете попробовать реализовать Glue Grok Custom Classifier, но это может быть затруднительно.

https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok

Я предлагаю создать таблицу вручную, используя команду «Создать» в Athena или в консоли Glue. Поскольку вам нужно пропустить первую строку, вы должны установить опцию 'skip.header.line.count' = '1' в TBLPROPERTIES. Определение этой таблицы может выглядеть следующим образом:

 CREATE EXTERNAL TABLE `gzip_test`(
  `col1` bigint, 
  `col2` bigint, 
  `col3` bigint, 
  `col4` bigint, 
  `col5` bigint)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://example/example'
TBLPROPERTIES (
  'classification'='csv', 
  'columnsOrdered'='true', 
  'compressionType'='gzip', 
  'delimiter'=',', 
  'skip.header.line.count'='1', 
  'typeOfData'='file')
...