在 SPARK SQL 中参数化 Where 子句

Posted

技术标签:

【中文标题】在 SPARK SQL 中参数化 Where 子句【英文标题】:Parameterise a Where clause in SPARK SQL 【发布时间】:2021-06-22 10:39:37 【问题描述】:

如何参数化包含带有可变数量参数的 IN 子句的查询,例如这个?

SELECT * FROM Tags 
WHERE ID IN ('01',
        '02',
        '03',
        '04',
        '05',
        '15',
        '16',
        '20',
        '21',
        '22',
        '24',
        '25',
        '27',
        '31',
        '34',
        '43',
        '53',
        '57',
        '60',
        '61',
        '68',
        '70',
        '80',
        '85',
        'A8',
        'A9',
        'B1',
        'B2',
        'B3',
        'B4')

在 SQL (Sql server ) 中是创建一个表值参数 如何在 SPark SQL 中实现这一点?或者有什么方法可以将 where 条件值作为 pyspark 函数输出?

【问题讨论】:

一种方法可能是创建一个包含一列的临时表并提及该列中的所有值。这样就可以引用为 SELECT * FROM Tags WHERE ID IN (select id from temptable) ***.com/questions/40218473/spark-sql-in-clause/… 【参考方案1】:

来自手册(Manual):

>>> df[df.name.isin("Bob", "Mike")].collect()
[Row(age=5, name='Bob')]
>>>df[df.age.isin([1, 2, 3])].collect()
[Row(age=2, name='Alice')]

这样……

tags = ['01', '02', ... 'B4']
df[ df.id.isin(tags) ].collect()

【讨论】:

谢谢,但是它是如何连接到 SQL 中的 where 子句的 @Nat - PySpark 为您处理。如果你不清楚如何,你应该在你的问题中包含你已经写的内容,并询问如何将这个 sn-p 添加到那个。

以上是关于在 SPARK SQL 中参数化 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

哪个更快? Spark SQL with Where 子句或在 Spark SQL 之后在 Dataframe 中使用过滤器

Spark SQL 中的 where 子句与 join 子句

如果 where 子句已经修复,如何加快 spark sql 过滤器查询?

spark sql 在不使用 where 子句的情况下将所有数据加载到内存中

Spark SQL - IN 子句

C#操作sql时注意点