小编nul*_*ull的帖子

AWS Athena 分区获取所有路径

最近,当分区数量非常多时,我遇到了 AWS Athena 问题。

旧版本的数据库和表只有 1 个分区级别,比如 id=x。我们拿一张桌子;例如,我们存储每个 id(产品)的支付参数,并且没有很多 ID。假设它在 1000-5000 左右。现在,在查询该表时,在 where 子句上传递 id 号,例如“.. where id = 10”。实际上,查询返回的速度非常快。假设我们每天更新数据两次。

最近,我们一直在考虑为一天添加另一个分区级别,例如“../id=x/dt=yyyy-mm-dd/..”。这意味着如果一个月过去了,分区数每天增长 xID 倍,如果我们有 3000 个 ID,我们每月大约会得到 3000x30=90000 个分区。因此,分区数量迅速增长。

假设 3 个月前的数据(约 27 万个分区),我们希望看到如下查询最多在 20 秒左右返回。

select count(*) from db.table where id = x and dt = 'yyyy-mm-dd'

这需要一分钟。

真实案例

事实证明,Athena 首先获取所有分区(元数据)和 s3 路径(无论使用 where 子句),然后过滤您希望在 where 条件下查看的那些 s3 路径。第一部分(按分区获取所有 s3 路径的持续时间与分区数量成正比)

您拥有的分区越多,执行查询的速度就越慢。

直觉上,我希望 Athena 只获取 where 子句中规定的 s3 路径,我的意思是这将是分区的一种神奇方式。也许它获取所有路径

  • 有没有人知道解决方法,或者我们是否以错误的方式使用 Athena?
  • Athena 是否应该仅用于少量分区?

编辑

为了澄清上述声明,我从支持邮件中添加了一段。

来自支持

... 你提到你的新系统有 360000,这是一个很大的数字。因此,当您执行此操作时select …

amazon-web-services nosql presto amazon-athena aws-glue

11
推荐指数
1
解决办法
776
查看次数

将一组组合合并为一个更大的组(反向组合)

我正在尝试创建一个函数,该函数采用子集列表,如果所有组合都存在,则将它们合并为更大的集合。

基本上,假设我们有 n=4(即 index_domain = {0,1,2,3}),我们有以下组合作为输入

[(0, 2), (0, 3), (1, 3), (2, 3)]
Run Code Online (Sandbox Code Playgroud)

该函数应接受此输入并生成以下输出:

[(0, 2, 3), (1, 3)]
Run Code Online (Sandbox Code Playgroud)

因此, (0, 2, 3) 因为所有组合(2 的组合)都存在于输入列表中。(1, 3) 保持原样,因为我们没有 1 的另一个组合。

对于索引域 D ? ? 和输入列表L,案例的主要特点是:

  • L 可以是空列表。(题外话)
  • L 总是包含 2 的组合,即对,如果不是空的。
  • 这些对是对称的,并且 L 中只包含其中一个对(没有重复)。也就是说,如果一对 (i, j) 应该包含在 L 中,那么对 (i, j) 存在于 L 中并且 (j, i) 永远不会被包含,其中 i < j 和 i, j ?D.
  • 在 L, i 中从来没有一对 (i, i) ?D.

简单地说,它是相反的组合(n,2)。我已经搜索了“反向组合”这个主题,到目前为止我还没有找到合适的资源。我已经考虑了一些选项,比如输入的双重迭代来检查是否所有组合都存在,但这不是最好的方法。我还没有想出一个有效的解决方案。欣赏任何有效解决方案的想法。

谢谢。

python algorithm combinations graph-theory python-3.x

3
推荐指数
1
解决办法
98
查看次数