AWS Glue搜寻器读取GZIP标头信息

时间:2019-01-21 08:15:12

标签: amazon-web-services csv header gzip aws-glue

我在Glue中设置了一个搜寻器,可以从S3存储桶中搜寻压缩的CSV文件(GZIP格式)。我有一个ETL作业,它将这个CSV转换为Parquet,另一个爬行器读取Parquet文件并填充Parquet表。

第一个读取压缩的CSV文件(GZIP格式)的搜寻器似乎在读取GZIP文件头信息。 CSV文件有五个字段。下面是示例数据

3456789,1,200,20190118,9040

但是,在搜寻器填充表格之后,行如下所示。

xyz.csv0000644000175200017530113404730513420142427014701 0ustar wlsadmin3456789 1 200 20190118 9040

第一列包含一些其他数据,这些数据包含文件名和创建GZIP文件的计算机的用户名。

任何想法,如何避免这种情况并读取正确的值。

1 个答案:

答案 0 :(得分:0)

我认为您将无法通过使用AWS Glue Crawler创建表。

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

当然,您可以尝试实现Glue Grok自定义分类器,但是这样做很困难。

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

我建议使用Athena或Glue控制台中的Create命令手动创建表。因为您需要跳过第一行,所以必须在TBLPROPERTIES中设置'skip.header.line.count'='1'选项。该表的定义如下例所示:

 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')