sql - 根据 Amazon Athena DB 中的子查询结果设置标志的最佳方法是什么?
问题描述
我在我的 s3 存储桶 internal_user 中有一个基于 .csv 的视图,其中包含我所有的内部用户 ID。我想用一个 case 语句为我的 customerALL 表中的所有用户设置一个标志 0,1。这些在使用“in”子句时不起作用:
(CASE WHEN customer_id in (select customer_id from "internal_user")) THEN 1 else 0 END)
(CASE WHEN customer_id in (select array_agg(customer_id ) from internal_user) THEN 1 else 0 END)
使用 Presto Array Functions 中的 contains 和 array_agg 确实有效,但速度很慢。我有 60K 用户和 2.5K 在内部用户表中。运行时间超过 3 分钟。
(CASE WHEN ((select contains((select (array_agg(customer_id ))from internal_user), customer_id) )) THEN 0 else 1 END)
有没有更好的办法?
解决方案
连接应该更有效:
with db as (select distinct customer_id from internal_user)
select customerAll.customer_id,
case when db.customer_id is not null then 1 else 0 end
from customerAll left join db on customerAll.customer_id=db.customer_id
推荐阅读
- django - 如何将日期选择器添加到表单 Django
- amazon-web-services - AWS:对于查看器事件,您的 Lambda 函数的最大压缩大小不能超过 1 MB
- java - 单向 @OnetoMany 映射删除所有关系并重新添加剩余的关系,而不是删除特定的关系
- python - 为什么从方法参数中的环境变量读取在 python 中给出 None 或默认值。调用前设置环境变量
- javafx - 对对话框执行字段检查时未显示 JavaFX 警报
- css - 如何解决悬停 JSX 和 React 上扩展填充的 CSS 错误
- unity3d - 等轴测线上的弹跳球
- javascript - 你能用 github 托管一个不和谐的机器人吗?
- python - Python中的特定近似匹配
- numpy - 如何引用numpy数组的列?