IN子句中的Spark sql限制

Posted

技术标签:

【中文标题】IN子句中的Spark sql限制【英文标题】:Spark sql limit in IN clause 【发布时间】:2019-07-12 07:36:08 【问题描述】:

我在spark-sql 中有一个查询,IN 子句中有很多值:

select * from table where x in (<long list of values>)

当我运行此查询时,我从spark 中的MetastoreClient 得到一个TransportException。 x 列是表的分区列。配置单元元存储在 Oracle 上。

in 子句中可以包含多少个值是否有硬性限制? 或者我可以将超时值设置得更高,以给元存储更多的时间来回答。

【问题讨论】:

我建议从该列表创建数据框并使用连接。这样你就知道有没有其他问题了。 gorros 建议值的数据帧,并广播此数据帧以提高性能。 【参考方案1】:

是的,您最多可以在 IN 子句中传递 1000 个值。 但是,您可以在 IN 子句中使用 OR 运算符并将值列表分割成多个 1000 个窗口。

【讨论】:

以上是关于IN子句中的Spark sql限制的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL - IN 子句

SQL IN 子句 1000 项限制

在 SPARK SQL 中参数化 Where 子句

Spark SQL 中的 where 子句与 join 子句

Informix:IN 子句中的项目数量限制?

linqpad - 大 NOT IN 子句超出限制 - 还有其他方式吗? - Linq to SQL