我在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文件的计算机的用户名。
任何想法,如何避免这种情况并读取正确的值。
答案 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')