首页 > 解决方案 > 根据 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)

有没有更好的办法?

标签: sqlsubqueryprestoamazon-athena

解决方案


连接应该更有效:

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

推荐阅读