无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表

问题描述

我在 Databricks/Spark 社区版中使用 sql 笔记本

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = "2YD"')
display(education_DF)

上面的代码单元格工作正常并从视图中检索所需的行。 但是,以下代码单元格给出了错误

我将 WHERE 子句中的硬编码值“2YD”替换为包含相同值的变量调用education_choice

似乎我没有在 sql 中正确使用变量。我将如何进行这项工作?

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = education_choice')
display(education_DF)

(这是错误

org.apache.spark.sql.AnalysisException: cannot resolve '`education_choice`' given input columns: [global_temp.population_globaltmp_view.Salary,global_temp.population_globaltmp_view.Address,global_temp.population_globaltmp_view.Race,global_temp.population_globaltmp_view.MiddleI,global_temp.population_globaltmp_view.Education,global_temp.population_globaltmp_view.HairColor,global_temp.population_globaltmp_view.Age,global_temp.population_globaltmp_view.FullName,global_temp.population_globaltmp_view.City,global_temp.population_globaltmp_view.FirstName,global_temp.population_globaltmp_view.State,global_temp.population_globaltmp_view.LastName,global_temp.population_globaltmp_view.Height,global_temp.population_globaltmp_view.Fertility,global_temp.population_globaltmp_view.Employment,global_temp.population_globaltmp_view.Zip,global_temp.population_globaltmp_view.Weight,global_temp.population_globaltmp_view.Gender]; line 1 pos 72;

我尝试了建议的注入方法,但这次得到了一个稍微不同的错误。我包含了相关代码单元格的屏幕截图。似乎教育选择“2YD”没有被识别为文字,而是一个字段或类似的东西。

2YD 不应该像“2YD”那样用引号括起来

如果我像这样对 WHERE 子句进行硬编码:WHERE Education = "2YD" 查询工作正常。

下面的图片很小,但是如果您右键单击它并“在新的水龙头中打开,它的可读性很强。

enter image description here

解决方法

*编辑

您将变量 education_choice 用作硬编码字符串。相反,您应该像这样在 SQL 表达式字符串中注入 education_choice 的值。

*edit - 用引号包裹变量。

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = "{}"'.format(education_choice))
display(education_DF)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...