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限制的主要内容,如果未能解决你的问题,请参考以下文章