SQL 语句中的 Databricks 错误:AnalysisException:无法解析 '``' 给定的输入列:
Posted
技术标签:
【中文标题】SQL 语句中的 Databricks 错误:AnalysisException:无法解析 \'``\' 给定的输入列:【英文标题】:Databricks Error in SQL statement: AnalysisException: cannot resolve '``' given input columns:SQL 语句中的 Databricks 错误:AnalysisException:无法解析 '``' 给定的输入列: 【发布时间】:2018-12-23 16:27:15 【问题描述】:我不确定我是否属于这个问题的正确组。 我在 Databricks 中创建了以下 sql 代码,但是我收到了错误消息;
SQL 语句出错:AnalysisException:无法解析 '
a.COUNTRY_ID
' 给定输入列: [a."PK_LOYALTYACCOUNT";"COUNTRY_ID";"CDC_TYPE", b."PK_LOYALTYACCOUNT";"COUNTRY_ID";"CDC_TYPE"];第 7 行第 7 行;
我知道代码可以正常工作,因为我已经在我的 SQL Server 上成功运行了代码 代码如下:
tabled = spark.read.csv("adl://carlslake.azuredatalakestore.net/testfolder/dbo_tabled.csv",inferSchema=True,header=True)
tablee = spark.read.csv("adl://carlslake.azuredatalakestore.net/testfolder/dbo_tablee.csv",inferSchema=True,header=True)
tabled.createOrReplaceTempView('tabled')
tablee.createOrReplaceTempView('tablee')
%sql
; with cmn as
( SELECT a.CDC_TYPE,
a. PK_LOYALTYACCOUNT, --Add these also in CTE result set
a.COUNTRY_ID --Add these also in CTE result set
FROM tabled a
INNER JOIN tablee b
ON a.COUNTRY_ID = b.COUNTRY_ID
AND a.PK_LOYALTYACCOUNT = b.PK_LOYALTYACCOUNT
AND a.CDC_TYPE = 'U'
)
SELECT 1 AS is_deleted,
a.*
FROM tabled a
INNER JOIN cmn
ON a.CDC_TYPE = cmn.CDC_TYPE
and a.COUNTRY_ID = cmn.COUNTRY_ID
AND a.PK_LOYALTYACCOUNT = cmn.PK_LOYALTYACCOUNT
UNION ALL
SELECT 0 AS is_deleted,
b.*
FROM tablee b
INNER JOIN cmn
ON b.CDC_TYPE = cmn.CDC_TYPE
and b.COUNTRY_ID = cmn.COUNTRY_ID
AND b.PK_LOYALTYACCOUNT = cmn.PK_LOYALTYACCOUNT
UNION ALL
SELECT NULL,
a.*
FROM tabled a
WHERE a.CDC_TYPE = 'N'
UNION ALL
SELECT NULL,
b.*
FROM tablee b
WHERE b.CDC_TYPE = 'N'
当我运行简单查询时...
示例1 =
spark.sql("""select * from tablee""")
或示例2 =
spark.sql("""select * from tabled""")
我得到以下输出,所以我知道表格在那里
任何建议都会受到欢迎。
【问题讨论】:
您看到此查询有什么错误(如果有)?SELECT a.COUNTRY_ID FROM tabled a;
该表中是否真的有一个 COUNTRY_ID 字段?
@JonJaussi,这是很好的观察。当我运行命令 SELECT a.COUNTRY_ID FROM tabled a;我没有看到您建议的 COUNTRY_ID 字段。但是,这是标准 sql(即使它在 Databricks 上运行)。当我在我的 SQL Server 上运行相同的命令时,它工作正常。
【参考方案1】:
从 csv 读取时使用分号分隔符
tabled = spark.read.option("delimiter", ";").csv("adl://carlslake.azuredatalakestore.net/testfolder/dbo_tabled.csv",inferSchema=True,header=True)
或
tabled = spark.read.load("adl://carlslake.azuredatalakestore.net/testfolder/dbo_tabled.csv",
format="csv", sep=";", inferSchema="true", header="true")
参考: https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#manually-specifying-options
【讨论】:
【参考方案2】:由于使用的分隔符是分号 (;) 并且作业正在查找逗号,因此无法正确识别列。问题解决了
【讨论】:
以上是关于SQL 语句中的 Databricks 错误:AnalysisException:无法解析 '``' 给定的输入列:的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Databricks 中的 SQL 语句输出创建变量
如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表
SQL 错误:“嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句必须具有 OUTPUT 子句。” - 在 Azure Databricks 中执行时