apachespark事件数据的delta湖分区策略

oxiaedzo  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(327)

我试图建立一个系统,摄取,存储和查询应用程序事件数据。在未来,它将用于其他任务(ml、分析等),因此我认为databricks可能是一个很好的选择(目前)。
主要用例将检索应用程序中发生的用户操作事件。成批的事件数据大约每5-30分钟就会落在一个s3存储桶中,databricks auto loader会将它们收集起来并存储在delta表中。
典型的查询是:获取cola=x在过去一天、一周或一个月内的所有事件。
我认为这里的典型策略是按日期划分。例如:

date_trunc("day", date) # 2020-04-11T00:00:00:00.000+000

这将在一年内创建365个分区。我希望每个分区能容纳大约1gb的数据。除了分区之外,我还计划对where子句中经常使用的高基数列之一使用z排序。
分区太多了吗?有没有更好的方法来划分这些数据?既然我是按天分区的,而且数据每5-30分钟就来一次,那么是否可以将数据“附加”到一个天分区中呢?

ac1kyiln

ac1kyiln1#

这实际上取决于每天的数据量以及需要读取多少文件才能回答您的查询。如果是10 gb,那么每天分区就可以了。但您也可以按截断为周的时间戳进行分区,在这种情况下,您每年只能得到52个分区。zordering将有助于保持文件的优化,但是如果您每5-30分钟追加一次数据,那么分区内每天至少会有24个文件,因此您需要运行 OPTIMIZE 每天晚上用zorder或者类似的方法来减少文件的数量。另外,请确保您使用的是优化的写入操作—虽然这会降低写入操作的速度,但会减少生成的文件数(如果您计划使用zordering,那么启用自动比较是没有意义的)

相关问题