Databricks中多列使用IN运算符报错,该语法是否合法?
Databricks SQL多列IN语法可行性说明
这种多列组合匹配的IN语法在Databricks SQL中是可行的,但你遇到的报错是因为旧版本Databricks会把(column1,column2,column3)解析为命名结构体(named_struct)而非行构造器,导致解析失败。
解决方法有两种:
- 显式使用ROW()构造行值(兼容绝大多数Databricks版本):
select * from table_1 where ROW(column1, column2, column3) IN ( ROW('foo','bar','2023-01-01'), ROW('one','two','2023-01-02') )
- 使用简化语法(仅支持Databricks Runtime 11.0及以上版本):
如果你的集群是较新版本,直接保留原写法也能正常运行,新版本已经支持省略ROW()的行构造器语法。
另外,也可以用等价的多条件OR写法替代,但多列IN的写法更简洁:
select * from table_1 where (column1 = 'foo' and column2 = 'bar' and column3 = '2023-01-01') or (column1 = 'one' and column2 = 'two' and column3 = '2023-01-02')
内容的提问来源于stack exchange,提问作者runrig
相关产品推荐
相关产品推荐

