You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法导入SerDe:S3大型压缩TSV文件无法接入Glue/Athena

问题:S3上大型GZIP压缩TSV文件无法导入Athena/Glue

我在S3上存储了一个结构简单但体积庞大的GZIP压缩TSV文件(制表符分隔格式),尝试导入Glue或Athena时,无论用爬虫、Athena查询还是调整Hive配置都没法正常读取。以下是文件内容片段:
(第一行是字节形式,第二行是解码后的字符串)

[b'0\taaa.11111\t1\n', b'1\taaa.aa\t1\n', b'2\taaa.aaa\t4\n', b'3\taaa.aaaa\t1\n', b'4\taaa.aaaaaa\t1\n', b'5\taaa.aaaaaaa\t1\n', b'6\taaa.aaaaaaaa\t1\n', b'7\taaa.aaaaaaaaa\t1\n']
['0\taaa.11111\t1\n', '1\taaa.aa\t1\n', '2\taaa.aaa\t4\n', '3\taaa.aaaa\t1\n', '4\taaa.aaaaaa\t1\n', '5\taaa.aaaaaaa\t1\n', '6\taaa.aaaaaaaa\t1\n', '7\taaa.aaaaaaaaa\t1\n']

我使用的Athena DDL语句如下:

CREATE EXTERNAL TABLE `edge4`(
  `id` bigint, 
  `domain` string,
  'num_hosts' bigint
)

ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t' 
  LINES TERMINATED BY '\n' 
WITH SERDEPROPERTIES ( 
  'escape.delim'='\\') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://commoncrawl/projects/hyperlinkgraph/cc-main-2023-may-sep-nov/domain'
TBLPROPERTIES (
  'transient_lastDdlTime'='1705429326', 
  'write.compression'='GZIP')

解决办法

1. 修正DDL语法错误

原DDL中num_hosts字段用单引号包裹是语法错误,Athena/Hive要求字段名必须用反引号(`)包裹,否则会被识别为字符串常量,导致表结构定义失效。

2. 更换更稳定的SerDe处理TSV

默认的ROW FORMAT DELIMITED对特殊字符兼容性较差,推荐使用OpenCSVSerDe处理TSV文件,它对分隔符、转义字符的支持更可靠。

3. 调整表属性

无需指定write.compression,Athena会自动识别GZIP压缩文件;如果文件没有表头,也不需要额外设置跳过行数。

以下是修正后的DDL:

CREATE EXTERNAL TABLE `edge4`(
  `id` bigint, 
  `domain` string,
  `num_hosts` bigint
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  'separatorChar' = '\t',
  'quoteChar' = '\"',
  'escapeChar' = '\\'
)
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://commoncrawl/projects/hyperlinkgraph/cc-main-2023-may-sep-nov/domain'
TBLPROPERTIES (
  'transient_lastDdlTime'='1705429326',
  'has_encrypted_data'='false'
);

4. Glue爬虫配置建议

如果使用Glue爬虫,配置时需注意:

  • 选择“分隔符”为制表符(\t)
  • 指定压缩格式为GZIP
  • 爬虫会自动扫描S3路径生成表结构,若字段类型不符,可手动调整表结构。

内容的提问来源于stack exchange,提问作者leeprevost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:05:45