使用 Athena 指定压缩类型

Specify compression type with Athena

我有 GZIP 压缩的 S3 数据。我正在尝试使用此文件在 Athena 中创建一个 table,并且我的 CREATE TABLE 语句成功 - 但是当我查询 table 所有行都是空的。

create external table mydatabase.table1 (
   date date,
   week_begin_date date,
   week_end_date date,
   value float
)
row format delimited fields terminated by ','
stored as inputformat 'org.apache.hadoop.mapred.TextInputFormat'     
outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location 's3://my-bucket/some/path/'

我怎样才能坚持让 Athena 以 GZIP 的身份读取我的文件?

虽然 Athena 支持 TBLPROPERTIES 元数据(我们可以在 CREATE TABLEALTER TABLE to set these properties, and SHOW TBLPROPERTIES 中设置属性以显示任何 table 的属性),但它 尊重TBLPROPERTIES ('compressionType'='gzip')选项。

没有明显的方法来强制压缩/解压缩算法。 Athena 尝试根据文件扩展名来识别压缩。具有 .gz 后缀的 GZIP 文件将是可读的;没有该后缀的 GZIP 文件将不会。

同样,带有 .gz 后缀的未压缩文件将失败。报告的错误是

HIVE_CURSOR_ERROR: incorrect header check

一些调查揭示了以下内容:

  • 让 Athena 将文件识别为 GZIP 的唯一已知方法是使用 .gz 后缀命名它。
  • 其他起作用的类似后缀包括.gzip.zip[^.]gz
  • GZIP 和未压缩的文件可以愉快地并存于 Athena table 或分区中 - 压缩检测是在文件级别完成的,而不是在 table 级别。