AWS Athena CTAS:压缩镶木地板文件并控制块大小(行分组)

问题描述 投票:0回答:1

我希望使用 AWS Athena 在我的 S3 数据湖中执行镶木地板压缩。基本上,我有许多小文件(例如每个 5-20 kb),我定期希望将它们组合成更大的文件(例如每个 512 MB)。这可以通过以下查询来完成:

CREATE TABLE database.new_table
    WITH (
        format = 'PARQUET',
        parquet_compression = 'SNAPPY',
        bucketed_by = ARRAY['my_column'], 
        bucket_count = 1
    ) AS
    SELECT * FROM database.original_table

我的问题是生成的输出镶木地板文件不使用任何形式的行分组。下面是两个约 50 MB 的 parquet 文件的比较 - 我的原始模拟文件和由 Athena CTAS 查询创建的文件(MATLAB 的分析输出)。请注意,这些文件不包含完全相同的#observations,这在本例中是预期的。

>> parquetinfo("C:\Users\css\Downloads\00000000\00000000.parquet")

ans = 

  ParquetInfo with properties:

               Filename: "C:\Users\css\Downloads\00000000\00000000.parquet"
               FileSize: 56965797
           NumRowGroups: 3
        RowGroupHeights: [1000000 1000000 592000]
          VariableNames: ["t"    "a1"    "a2"]
          VariableTypes: ["datetime"    "double"    "double"]
    VariableCompression: ["snappy"    "snappy"    "snappy"]
       VariableEncoding: ["dictionary"    "dictionary"    "dictionary"]
                Version: "2.0"

>> parquetinfo("C:\Users\css\Downloads\00000000\00000000_athena.parquet")

ans = 

  ParquetInfo with properties:

               Filename: "C:\Users\css\Downloads\00000000\00000000_athena.parquet"
               FileSize: 58940690
           NumRowGroups: 1
        RowGroupHeights: 2591476
          VariableNames: ["t"    "a1"    "a2"]
          VariableTypes: ["datetime"    "double"    "double"]
    VariableCompression: ["snappy"    "snappy"    "snappy"]
       VariableEncoding: ["dictionary"    <missing>    <missing>]
                Version: "1.0"

>> 

显然,Athena 创建的文件有许多差异(例如版本、变量编码等)。但重要的是,我的原始文件根据

RowGroupHeights
字段分为行组。 Athena CTAS 文件只有 1 组,等于 #observations 总数。

这意味着,在 Athena CTAS 输出文件(4 x 50 MB,总共 200 MB,计算所有数据的列的平均值)上运行时,我的查询速度慢了约 50%。如果我使用 Athena CTAS 将文件拆分为 11 个文件而不是 4 个文件,我会得到速度相当的结果,这强调了性能问题很可能与缺乏行分组有关。

有推荐的解决方法吗?我在 CTAS 查询语句中看不到任何用于指定块大小或行分组的选项。

amazon-web-services amazon-athena
1个回答
0
投票

我们得出的结论是,AWS Athena CTAS 压缩对于我们的用例来说并不理想,而是采用日期样式分区投影,如此处

所述
© www.soinside.com 2019 - 2024. All rights reserved.