在S3存储桶中,我有成千上万的文件存储,其名称的结构可以归结为前缀和数字:
A-0001
A-0002
A-0003
B-0001
B-0002
C-0001
C-0002
C-0003
C-0004
C-0005
给定前缀的新对象应具有不同的频率,但可能不会。较旧的物体可能会消失。
有没有办法有效地查询S3以获得每个前缀的最大数量,即没有列出整个存储桶?我想要的结果是:
A-0003
B-0002
C-0005
S3 API本身似乎没有提供任何可用的东西。然而,也许像雅典娜这样的另一项服务可以做到吗?到目前为止,我只发现它能够在对象内搜索,但我所关心的只是它们的关键名称。如果它可以报告存储桶中对象的内容,那么就不能在存储桶本身上进行报告吗?
我可以使用每个前缀的最新修改日期,但我希望避免必须切换到只有前缀作为名称的版本化存储桶才能实现。
答案 0 :(得分:1)
我认为这就是你要找的东西:
变量名是$ path,你可以regexp来获取你正在查询的模式......
WHERE regexp_extract(sp。“$ path”,'[^ /] + $')就像concat('%',cast(current_date - 间隔'1'日为varchar),'。csv')
答案 1 :(得分:0)
S3 API本身似乎没有提供任何可用的东西。 但是,也许像雅典娜这样的其他服务可以做到吗?
目前是的,没有直接的方法只能使用AWS S3。即使使用Athena,它也会通过文件查询其内容,但使用Athena的标准SQL支持会更容易,并且由于查询并行运行会更快。
到目前为止,我发现它只能在对象内搜索,但是 我所关心的只是他们的关键名称。
Athena和S3 Select都是按内容查询而不是按键。
我建议的最佳方法是使用AWS DynamoDB来保存文件的元数据,包括文件名以便更快地查询。