我们有一个查询,其中参数值列表在" IN"中提供。查询的子句。一段时间后,这个查询无法按照" IN"中的数据大小执行。子句变得非常大,因此生成的查询超出了REDSHIFT中查询的16 MB限制。结果,我们尝试批量处理数据,以限制数据,而不是超过16 MB的限制。 我的问题是在为" IN"提供如此大的数据时要记住的因素/陷阱是什么?查询的子句或者是否有任何替代方法可以处理" IN"条款?
答案 0 :(得分:1)
如果您可以控制生成代码的方式,可以按如下方式将其拆分
要提交的第一个代码,删除并重新创建过滤器表:
drop table if exists myfilter;
create table myfilter (filter_text varchar(max));
第二步是以适当大小的部分填充过滤表,例如,一次1000个值
insert into myfilter
values({{myvalue1}},{{myvalue2}},{{myvalue3}} etc etc up to 1000 values );
多次重复上述步骤,直到插入所有值
然后,使用该过滤表如下
select * from master_table
where some_value in (select filter_text from myfilter);
drop table myfilter;
答案 1 :(得分:0)
大IN本身并不是最佳实践,最好使用大型列表的连接:
with
your_list as (
select 'first_value' as search_value
union select 'second_value'
...
)
select ...
from target_table t1
join your_list t2
on t1.col=t2.search_value