【问题标题】:Why does Parquet file size get smaller when copied with Amazon Athena为什么使用 Amazon Athena 复制 Parquet 文件大小会变小
【发布时间】:2019-05-16 14:57:58
【问题描述】:

我有一个由 Hive 填充并作为 Parquet 存储在 S3 上的 Hive 分区表。特定分区的数据大小为 3GB。然后我用 Athena 复制一份:

CREATE TABLE tmp_partition
AS SELECT *
FROM original_table
where hour=11

生成的数据大小不到一半 (1.4GB)。可能是什么原因?

编辑:相关hive表定义语句:

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://...'
TBLPROPERTIES (
  'parquet.compress'='SNAPPY', 
  'transient_lastDdlTime'='1558011438'
)

【问题讨论】:

  • 源和目标的默认压缩编解码器是什么?

标签: amazon-web-services amazon-s3 hive parquet amazon-athena


【解决方案1】:

不同的压缩设置是一种可能的解释。如果您的原始文件没有被压缩或用 Snappy 压缩,那可以解释它。如果您不指定要使用的压缩方式,Athena 将默认使用 gzip,它的压缩效果比 Snappy 好。

如果您想要一个更全面的答案,您必须向我们提供更多详细信息。你是如何创建原始文件的,它们是否被压缩,压缩什么,数据是什么样的,等等。

【讨论】:

  • 原始文件是由 Hive 创建的(如果重要的话,Tez 引擎)。表定义指定了 snappy 压缩。我认为 Athena 文件也在使用 snappy;我可以通过检查文件来确定吗?编辑:用相关的表定义更新了问题
  • 如果您使用问题中的语句创建了新文件,它们是 gzip 压缩的,这是默认设置。我假设您添加的定义是源表。您可以通过下载其中一个文件来验证这一点,并使用例如parquet-tools 来检查文件:parquet-tools meta path/to/file。这会告诉你使用了什么压缩..
  • 你是对的;不仅 Athena 文件是 gzip,而且原始文件是未压缩的!示例列:发布者:BINARY UNCOMPRESSED DO:0 FPO:117676892 SZ:899708/899708/1.00 VC:705318 ENC:RLE,BIT_PACKED,PLAIN_DICTIONARY ST:[此列没有统计信息] vs发布者:BINARY GZIP DO:0 FPO:714686 SZ:695050/918981/1.32 VC:667230 ENC:BIT_PACKED,RLE,PLAIN_DICTIONARY ST:[此列没有统计信息] 现在问题变成了为什么尽管有表定义,但原始的没有压缩到 Snappy
  • 如果您觉得我的回答有帮助,请考虑将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2012-06-27
相关资源
最近更新 更多