不能在Eclipse中使用JDBC刪除數據
問題
您不能使用JDBC從本地Eclipse環境中刪除Delta表中的數據。同樣的刪除操作也適用於筆記本電腦。
您可以從本地環境連接到Databricks。
選擇查詢可以工作。
整數數=namedlocalJdbcTemplate.queryForObject(SELECT 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”連接連接=零;連接=DriverManager.getConnection(CONNECTION_URL);
檢查初始化驅動程序類有關建立JDBC連接的更多信息的Simba文檔。
設置好之後UseNativeQuery
值為1時,必須重寫插入查詢,使其不指定列名。
例如,插入成<表名稱>值(>,>,>,>,>,>,>,>)
.
這是因為Spark SQL在使用insert命令時不支持列名稱。