Azure Synapse Analytics加载超长nvarchar字段截断报错解决
长文本字段写入Azure Synapse Analytics截断报错解决方案
问题现象
通过Azure Databricks向Azure Synapse Analytics写入数据时,单条长度约80000、包含Unicode字符的描述类字段加载失败。
初始在Synapse侧为该字段定义的数据类型为nvarchar,写入时曾尝试配置参数.option('maxStrLength', 4000),但该参数支持的最大配置值仅为4000,无法满足长字段存储要求,任务抛出如下异常:
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: HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopSqlException: String or binary data would be truncated. [ErrorCode = 107090] [SQLState = S0001]
报错根因为字段长度配置与实际写入数据长度不匹配,触发数据截断校验拦截。
解决步骤
完成以下两项配置调整即可解决问题:
- 移除Databricks写入Synapse代码中的
.option('maxStrLength', 4000)配置项,该参数仅适用于长度不超过4000的常规字符串字段,会阻断超长字符串的写入逻辑 - 将Synapse目标表中对应长文本字段的数据类型声明为
nvarchar(max),该类型最大支持2GB的Unicode文本存储,可完全覆盖80000长度字段的存储需求
调整完成后重新执行写入任务,即可正常加载全量数据,不会再触发字符串截断报错。
内容的提问来源于stack exchange,提问作者Batman
相关产品推荐
相关产品推荐

