[英]How to handle white spaces in varchar not null column from azure synapse table to spark databricks
當我從突觸數據庫讀取 spark 中的表(使用 azure databricks)時遇到問題。 該表定義如下:
CREATE TABLE A
(
[ID] [int] NOT NULL,
[Value] [int] NOT NULL,
[Description] [nvarchar](30) NOT NULL,
)
字段Description
可以為空白(即""
)或可以包含空格。 在突觸中,我對這個字段沒有任何問題,當我用 spark 將它放入數據幀時讀取表時也沒有問題。 當我編寫df.show()
或df.count()
類的東西時,問題就出現了。 出現以下錯誤:
com.databricks.spark.sqldw.SqlDWSideException: Azure Synapse Analytics failed to execute the JDBC query produced by the connector.
Py4JJavaError: An error occurred while calling o1779.showString.
: com.databricks.spark.sqldw.SqlDWSideException: Azure Synapse Analytics failed to execute the JDBC query produced by the connector.
Underlying SQLException(s):
- com.microsoft.sqlserver.jdbc.SQLServerException: Query aborted-- the maximum reject threshold (0 rows) was reached while reading from an external source: 1 rows rejected out of total 1 rows processed.
Column ordinal: 2, Expected data type: NVARCHAR(30) collate SQL_Latin1_General_CP1_CI_AS NOT NULL. [ErrorCode = 107090] [SQLState = S0001]
免責聲明:由於已經四個月了,我假設您可能已經解決了這個問題或有一個解決方法。
我遇到了同樣的問題,這是 Databricks 在從 Synapse 讀取時如何處理空值與空字符串的錯誤。 快速修復是將您的 Synapse 表設置為允許空值(即將 NOT NULL 更改為 NULL)。 盡管空字符串在設置為 NOT NULL 的 Synapse 字段中 100% 有效,但出於某種原因,Databricks 正在從 Synapse 進行完整讀取期間應用驗證,這會破壞讀取並導致失敗。 它知道 Synapse 模式,但沒有正確理解和應用驗證規則。 由於 Spark 的懶惰執行,您只會在執行 show() 或 count() 時看到這一點。 請注意,我正在向 Databricks 提交此錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.