如何处理从azure synapse表到spark databricks的varchar not null列中的空白



当我从synapse数据库读取spark中的一个表(使用azure数据块(时,遇到了一个问题。该表定义如下:

CREATE TABLE A
(
[ID] [int] NOT NULL,
[Value] [int] NOT NULL,
[Description] [nvarchar](30) NOT NULL,

)

字段Description可以是空白的(即""(或者可以包含空白空间。在synapse中,我对这个字段没有问题,当我用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读取时如何处理null和空字符串的一个错误。快速修复方法是将Synapse表设置为允许NULL(即将NOT NULL更改为NULL(。尽管空字符串在设置为NOT NULL的Synapse字段中是100%有效的,但由于某种原因,Databricks在从Synapse进行完全读取时正在应用验证,这会破坏读取并导致失败。它知道Synapse模式,但不正确地理解和应用验证规则。由于Spark的懒惰执行,只有在执行show((或count((时才会看到这种情况。注意,我正在向Databricks提交这个错误。

最新更新