AWS Glue гусеничный считыватель GZIP информация заголовка
Я настроил сканер в Glue, который сканирует сжатые файлы CSV (формат GZIP) из корзины S3. У меня есть работа ETL, которая конвертирует этот CSV в паркет и другой гусеничный механизм, который читает файл паркета и заполняет паркетный стол.
Первый сканер, который читает сжатый CSV-файл (формат GZIP), похоже на чтение информации заголовка файла GZIP. Файл CSV имеет пять полей. Ниже приведен пример данных
3456789,1,200,20190118,9040
Однако после того, как сканер заполняет таблицу, строка выглядит следующим образом.
xyz.csv0000644000175200017530113404730513420142427014701 0ustar wlsadmin3456789 1 200 20190118 9040
Первый столбец содержит некоторые дополнительные данные, которые имеют имя файла и имя пользователя компьютера, на котором создан файл GZIP.
Любая идея, как я могу избежать этой ситуации и прочитать правильные значения.
1 ответ
По моему мнению, вы не сможете создать таблицу с помощью 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
Я предлагаю создать таблицу вручную, используя команду Create в 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')