在今天的数据驱动环境中,组织越来越倾向于使用AWS Data Lake等强大的解决方案来集中化大量结构化和非结构化数据。AWS Data Lake是一个可扩展和安全的存储库,允许企业按其原生格式存储数据,便于进行各种分析和机器学习任务。查询这个庞大信息库的一种流行工具是Amazon Athena,它是一个无服务器的、交互式查询服务,可以使用标准SQL直接在Amazon S3中分析数据。然而,随着数据量呈指数级增长,性能挑战可能会出现。大数据集、复杂查询和次优的表结构可能导致查询时间和成本增加,可能削弱这些解决方案所带来的好处。本文特别深入探讨了如何利用分区投影的力量来解决这些性能挑战。
在深入研究Athena中的分区投影这一高级概念之前,了解分区的基本概念至关重要,特别是在数据湖的背景下。
AWS数据湖中的分区是什么?
在数据存储和检索领域,分区是指根据一个或多个列的值对表的数据进行划分。可以将其类比为根据流派(列值)将一个庞大的书架(数据)分成不同的部分(分区)。通过这样做,当您要找到特定类型的书(数据)时,只需在相关部分(分区)中搜索,而不必搜索整个书架。
在数据湖中,分区通常是包含数据文件的目录。每个目录对应于分区列的特定值或值范围。
分区的重要性是什么?
提高效率:没有分区,查询庞大的数据集将涉及扫描每个文件,这既耗时又昂贵。通过分区,只需扫描相关的目录,大大减少了处理的数据量。
- 节省成本:在像AWS这样的云环境中,按扫描的数据量付费,分区可以带来大幅度的成本降低。
- 可扩展性:随着数据增长,分区的重要性也增加。它们确保即使数据湖中有更多数据,检索时间也可以得到管理。
分区的挑战
虽然分区提供了许多好处,但也面临一些挑战:
- 维护:随着新数据的到来,可能需要创建新的分区,更新现有的分区。
- 最佳分区:太少的分区可能意味着仍然需要扫描大量不必要的数据。相反,太多的分区可能导致大量小文件,也可能降低性能。
了解了数据湖中分区的基本概念,我们现在可以更深入地了解Athena中的分区投影概念以及它们如何解决这些挑战。
分区投影是什么?
分区剪枝是一种技术,只选择与查询相关的元数据,消除不必要的数据。这种方法通常可以加快查询速度。Athena对具有分区列的所有表都使用了这种策略。在典型情况下,当Athena处理查询时,它首先与AWS Glue Data Catalog通信,进行GetPartitions请求,然后进行分区剪枝操作。然而,如果一个表拥有大量分区,这个调用可能会减慢速度。
为了避免在高度分区的表上进行这种昂贵的操作,AWS引入了分区投影技术。使用分区投影,Athena不需要进行GetPartitions调用。相反,分区投影中提供的配置使Athena能够自行创建分区所需的全部内容。
分区投影的好处
- 提高查询性能:通过减少扫描的数据量,查询运行更快更高效。
- 减少成本:在Athena中,您付费的是扫描的数据量。通过扫描更少的数据,可以减少成本。
- 简化数据管理:虚拟分区消除了持续的分区维护任务,例如在新数据到达时添加新分区。
设置分区投影
为了利用分区投影:
1. 定义投影类型:Athena支持多种投影类型,包括`integer`、`enum`、`date`和`injected`。每种类型都可以用于特定的用例,如生成整数范围或日期范围。
2. 指定投影配置:这涉及定义投影的规则和模式。例如,对于日期投影,您需要指定开始日期、结束日期和日期格式。
3. 修改表属性:一旦定义了投影,修改Athena中的表属性以使用这些投影。
示例用例
让我们以一个示例为例,假设我们的数据存储在数据湖中,按照customer_id和dt进行分区。数据以parquet格式存储,这是一种列式数据格式。
s3://my-bucket/data/customer_id/yyyy-MM-dd/*.parquet
在我们的示例中,假设我们有一年的数据,即365天和100个顾客。这将导致数据湖上的365*100=36500个分区。
让我们对该表进行带有和不带有分区投影的查询基准测试。
让我们获取五个顾客整年的所有记录数。
查询
不带分区投影
不启用分区投影时,查询的总运行时间为7.3秒。其中,规划花费了78%的时间,执行查询花费了20%的时间。
查询结果
规划:%78 = 5.6秒执行 20% = 1.46秒
带有分区投影
现在,让我们为该表启用分区投影。看一下所有以”partition.*”为后缀的表属性。在这个例子中,我们有两个分区,dt和cutsomer_id。我们将使用日期类型投影,对于customer_id,我们将使用枚举类型投影。对于枚举类型,您可以构建一个自动化作业来在有新记录时更新表属性。
查询结果
规划:1.69秒执行:0.6秒
结果
我们可以看到查询性能大约提高了70%。这是因为Athena避免了调用远程AWS Glue来获取分区,而是通过此功能能够投影这些分区的值。
限制和注意事项
尽管功能强大,但分区投影并不能解决所有问题。
- 复杂的设置:设置投影需要对数据及其遵循的模式有深入的了解。
- 并非总是最佳选择:对于不遵循可预测模式或具有不规则更新的数据集,传统的分区可能更合适。
结论
AWS在Athena中引入分区投影,这证明了他们提高用户体验和效率的承诺。通过利用这个功能,组织可以通过最小的配置更改实现更快的查询性能。与所有工具一样,了解其优点和限制是充分发挥其潜力的关键。