在中的jupyter笔记本文件中,在%python下面创建了python变量。如何访问同一个变量以在%sql下进行比较。下面是一个例子:
%python
RunID_Goal = sqlContext.sql("SELECT CONCAT(SUBSTRING(RunID,1,6),SUBSTRING(RunID,1,6),'01_')
FROM RunID_Pace").first()[0]
AS RunID_Goal%sql
SELECT Type , KPIDate, Value
FROM table
WHERE
RunID = RunID_Goal (This is the variable created under %python and want to compare over here)当我运行它时,它会抛出一个错误: SQL语句中的错误: AnalysisException:无法解析给定的“RunID_Goal”输入列:我是新的azure,并激发sql --任何类型的帮助都会很感激。
发布于 2021-08-28 07:36:49
解决方法之一是使用窗口小部件在单元格之间传递参数。例如,在Python方面,可以如下所示:
# generate test data
import pyspark.sql.functions as F
spark.range(100).withColumn("rnd", F.rand()).write.mode("append").saveAsTable("abc")
# set widgets
import random
vl = random.randint(0, 100)
dbutils.widgets.text("my_val", str(vl))然后,您可以引用SQL代码中小部件的值:
%sql
select * from abc where id = getArgument('my_val')会给你:

另一种方法是通过星火配置传递变量。您可以像这样设置变量值(请注意,变量应该有前缀-在本例中是c.):
spark.conf.set("c.var", "some-value")然后在SQL中将变量称为${var-name}。
%sql
select * from table where column = '${c.var}'这样做的一个优点是,您也可以将此变量用于表名等。缺点是您需要对变量进行转义,例如将字符串值放入单引号中。
发布于 2021-08-16 08:27:43
您无法访问此变量。这是在文档中解释的
当您调用语言魔术命令时,命令会在笔记本的执行上下文中被分派到REPL。在一种语言中定义的变量(因此在该语言的REPL中定义)在另一种语言的REPL中不可用。REPL只能通过外部资源(如DBFS中的文件或对象存储中的对象)共享状态。
发布于 2022-01-09 11:21:32
这是另一个解决办法。
# Optional code to use databricks widgets to assign python variables
dbutils.widgets.text('my_str_col_name','my_str_col_name')
dbutils.widgets.text('my_str_col_value','my_str_col_value')
my_str_col_name = dbutils.widgets.get('my_str_col_name')
my_str_col_value = dbutils.widgets.get('my_str_col_value')
# Query with string formatting
query = """
select *
from my_table
where {0} < '{1}'
"""
# Modify query with the values of Python variable
query = query.format(my_str_col_name,my_str_col_value)
# Execute the query
display(spark.sql(query))https://stackoverflow.com/questions/68794549
复制相似问题