如何在Spark SQL语句中使用从Widget获取的参数值
解决方法
你原来的写法存在两个问题:一是在Spark SQL字符串中直接调用Python的dbutils.widgets.get()函数是无效的,Spark会将其当作SQL语法解析,无法识别Python代码;二是SQL语句的括号和语法存在错误。
下面是几种正确的参数代入方式:
方式一:使用Python f-string(简洁直观)
适用于Python 3.6及以上版本,直接将变量嵌入SQL字符串。注意如果字段是字符串类型,需要用单引号包裹变量值;如果是数值类型则不需要。# 假设flexcell和werks是字符串类型 mt_flex_1 = spark.sql(f"select * from table_name where flexcell = '{it_flex_range}' and werks = '{iv_werks}'")方式二:使用Spark SQL参数化查询(安全防注入)
这是更推荐的方式,能避免SQL注入风险,同时不需要手动处理引号:mt_flex_1 = spark.sql( "select * from table_name where flexcell = :flex_range and werks = :plant", params={"flex_range": it_flex_range, "plant": iv_werks} )方式三:使用字符串format方法
和f-string类似,兼容性更好:mt_flex_1 = spark.sql("select * from table_name where flexcell = '{}' and werks = '{}'".format(it_flex_range, iv_werks))
内容的提问来源于stack exchange,提问作者bhavana s Shetty
相关产品推荐
相关产品推荐

