不能在Eclipse中使用JDBC刪除數據

問題

您不能使用JDBC從本地Eclipse環境中刪除Delta表中的數據。同樣的刪除操作也適用於筆記本電腦。

您可以從本地環境連接到Databricks。

選擇查詢可以工作。

整數namedlocalJdbcTemplatequeryForObjectSELECT COUNT(*) FROM  "MapSqlParameterSource(),整數);

您嚐試刪除操作,但操作失敗。

namedlocalJdbcTemplate。update("DELETE FROM  WHERE id =: id ", parameters);其中parameter是MapSqlParameterSource params = new MapSqlParameterSource();參數個數。addValue (" Id ", " 001 ");

你會收到SparkJDBCDriver錯誤消息。

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;SQL [DELETE FROM  WHERE Id = ?];SQL狀態[HY000];錯誤碼[500051];[Simba][SparkJDBCDriver](500051)錯誤處理查詢/語句。Error Code: 0, SQL state: Error running query: org.apache.spark.sql.AnalysisException: cannot resolve ' ' . SQL狀態異常。Id "給定輸入列:[];第1行pos 41;'DeleteCommandEdge Delta[version=0, s3://], ('. table-name>. 'Id = 001)

導致

發生此錯誤時UseNativeQuery值為0。

ODBC驅動程序解析查詢並在UseNativeQuery值為0。有些工具(如PowerBI)依賴於這種轉換。例如,PowerBI生成的標準ANSI SQL需要轉換為Spark SQL。如果應用程序已經生成了Spark SQL,它可能會添加不必要的偵聽。

解決方案

UseNativeQuery到IDE中的JDBC連接字符串中的值1。這迫使ODBC驅動程序傳遞提交的查詢而不重寫它。

請注意

UseNativeQuery = 0將提交的查詢作為ANSI SQL-92,並將其重寫為Spark SQL。UseNativeQuery = 1逐字接受所提交的查詢並按原樣提交。

字符串CONNECTION_URL" jdbc:火花:/ / <服務器主機>:443 /違約;運輸方式= http; ssl = 1; httpPath = sql / protocolv1 / o / 0 / xxxx-xxxxxx-xxxxxxxx; AuthMech = 3; UID =令牌;PWD = < personal-access-token >; UseNativeQuery = 1”連接連接連接DriverManagergetConnectionCONNECTION_URL);

檢查初始化驅動程序類有關建立JDBC連接的更多信息的Simba文檔。

設置好之後UseNativeQuery值為1時,必須重寫插入查詢,使其不指定列名。

例如,插入<表名稱>(,,,,,,,)

這是因為Spark SQL在使用insert命令時不支持列名稱。