Ошибка блока данных в операторе SQL: AnalysisException: не удается разрешить `` `'заданных входных столбцов: - PullRequest
0 голосов
/ 23 декабря 2018

Я не уверен, что я в правильной группе для этого вопроса.Любой я создал следующий код sql в Databricks, однако я получаю сообщение об ошибке:

Ошибка в выражении 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'

при запуске простогозапрос ...

example1 =

spark.sql("""select * from tablee""") 

или example2 =

spark.sql("""select * from tabled""") 

Я получаю следующий вывод, так что я знаю, что таблицы есть

output

Любые предложения будут хорошо приняты.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Используйте точку с запятой при чтении из 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")

ref: https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#manually-specifying-options

0 голосов
/ 24 декабря 2018

Столбцы не идентифицировались должным образом, поскольку в качестве разделителя использовалась точка с запятой (;), а задание искало запятые.Проблема решена

...