无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表
Posted
技术标签:
【中文标题】无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表【英文标题】:Can't Access a global view table with SQL by a selected field code converted from a dropdown selection 【发布时间】:2021-06-27 04:10:44 【问题描述】:我在 Databricks/Spark 社区版中使用 SQL 笔记本
%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = "2YD"')
display(education_DF)
上面的代码单元工作正常,并从视图中检索所需的行。 但是下面的代码单元给出了一个错误。
我将 WHERE 子句中的硬编码值“2YD”替换为包含相同值的 variable 调用 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;
我尝试了建议的注入方法,但这次的错误略有不同。我包括了相关代码单元的屏幕截图。似乎education_choice“2YD”没有被识别为文字,而是一个字段或类似的东西。
2YD 周围不应该有引号,比如“2YD”
如果我像这样对 WHERE 子句进行硬编码:WHERE Education = "2YD",则查询工作正常。
下面的图片很小,但是如果你右键点击它并“在新的点击中打开,它是非常可读的。
【问题讨论】:
使用 f-string。变量在字符串中时不能直接使用。 【参考方案1】:*编辑
您将变量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)
【讨论】:
它尝试了您建议的“注入”代码,但出现了稍微不同的错误。我用新的错误和代码单元格和错误的屏幕截图更新了上面的问题块。 我根据你的新问题编辑了答案。让我知道。 谢谢你,它有效。大图是:下拉小部件用于选择教育水平(高中文凭,2 年学位,MD,PHD,...) 然后 getArgument("education") 选项用于查找代码“2YD”一个代码文件。然后将此教育代码移动到一个变量中,在 SQL 语句中使用该变量从人口表中选择所有具有该教育代码的变量。以上是关于无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表的主要内容,如果未能解决你的问题,请参考以下文章
如何从 mysql DB 中搜索与 mojolicious perl 中选定的下拉列表相关的内容
通过从 javascript 文件中查询数据库,根据下拉菜单中的选择更新 div 内容