代码之家  ›  专栏  ›  技术社区  ›  Jimson James

AWS Glue/Athena-S3-表分区

  •  0
  • Jimson James  · 技术社区  · 4 年前

    假设我在AWS Glue中注册了一个外部表,该表位于S3中,由Athena查询。 最佳做法是对数据进行分区。所以在正常情况下,我有两个看似相同的选择,

    1. /data/_path/yyyy/mm/dd/col1/col2/data.parquet
    2. /data/_path/col1/col2/yyyy/mm/dd/data.parquet
    

    我假设Athena扫描/查询的数据对于给定的col1和/或col2都是相同的。 但哪一个更受欢迎,为什么?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Raul Barreto    4 年前

    优选的方式是从粒径最小的变量到粒径最大的变量。

    通常是第一个答案,因为你的年比月少,月比天少,天比冷1少,冷1比冷2少。

    但是,如果你有任何要求col1和col2优先的规范,那么几年后,这将不是问题。

        2
  •  1
  •   Nghia Do    4 年前

    如果数据是基于yyyy/mm/dd快速生成的,那么选项#1。

    例如,一个月内生成的数据发生在01到30(或29,31)的每一天,因此模式很好。

    或者另一个例子,您生成的数据发生在小时级别,因此模式yyyy/mm/dd/hh会很好。

    如果数据是基于col1/col2快速生成的,那么选项#2

    例如,您生成的数据会根据col1(类id)/col2(学生id)进行更改,属于学生id的数据会遵循yyyy/mm/dd,因此您可以继续使用col1/col2/yyyy/mm/d

    或者你可以想到,如果你的用例在查询数据方面更频繁地使用col1/col2,那么选项#2是一个不错的选择。

    对我来说,如果我们比较两个选项的性能,我认为这并不重要。