我目前拥有一个大数据架构,其中一些数据管道生成数据输出并将其存储在AWS S3上。我也有一个内部元数据存储,在其中跟踪每个S3 URL和状态(指示URL是否有效)。
有一个计划的AWS胶搜寻器,该搜寻器搜寻S3前缀并将新生成的S3路径作为新分区添加到关联的外部athena表中。因此,我的外部表中的数据将自动刷新并可供查询。这很好。
这是我要与该体系结构集成的新要求- 用户可以在自我管理的元存储中将某些S3 URL标记为无效,并且我想从我的外部表中自动删除这些分区。
想知道什么是解决此问题的最佳方法?
例如:考虑到S3存储桶中有50个URL,它反映在如下所示的自我管理元存储中-
似乎即使我通过查询大型存储中无效的分区来删除分区,它们也会在下次运行粘合爬虫时再次显示。从S3前缀移动/删除数据是这里唯一的选择吗?谢谢!
答案 0 :(得分:0)
如果您的流程简单且不需要太多的灵活性或自定义,则Glue搜寻器会很好地工作。我喜欢它作为起点。我不认为它在复杂的系统上能很好地工作。
在这种情况下,我将关闭Glue搜寻器。您是对的-搜寻器只会重新添加那些删除的分区。
public static BigDecimal nPi(int value, int pointer) {
return new BigDecimal(Math.PI * value).movePointLeft(pointer);
}
从Athena表中轻松add和drop分区。 ALTER TABLE
命令。这非常简单-具有Lambda函数来侦听S3的对象创建事件。
当用户标记为删除时,显式调用ALTER TABLE ADD PARTITION
命令。
唯一需要注意的是,我认为Athena分区必须是“文件夹”,即分区的位置必须以ALTER TABLE DROP PARTITION
结尾,并且您不能将单个文件添加为划分。 Athena知道的“文件夹”中添加的任何文件都将添加到任何查询中。在这种情况下,您可能需要修改文件结构(基于已发布的示例)。