【问题标题】:Azure Synapse Analytics - column load with high lengthAzure Synapse Analytics - 高长度的列负载
【发布时间】:2022-01-06 18:25:19
【问题描述】:

我有一列包含描述,长度约为 80000(包含 unicode 字符)。我无法将其加载到 Azure Synapse Analytics。 Synapse 中定义的数据类型是 nvarchar。 我们正在使用 Azure Databricks。我尝试了 maxStrLength (.option('maxStrLength', 4000)) 的选项,但最大值是 4000。所以,我收到了这个错误。

:com.databricks.spark.sqldw.SqlDWSideException:Azure Synapse Analytics 无法执行连接器生成的 JDBC 查询。 底层 SQLException(s):

  • com.microsoft.sqlserver.jdbc.SQLServerException:HdfsBridge::recordReaderFillBuffer - 填充记录读取器缓冲区时遇到意外错误:HadoopSqlException:字符串或二进制数据将被截断。 [错误代码 = 107090] [SQLState = S0001]

请问有什么办法可以解决这个问题吗?

更新 - 通过在将数据帧写入 Synapse 并将目标数据类型声明为 nvarchar(max) 时删除 .option('maxStrLength', 4000) 解决了该问题

【问题讨论】:

  • 遇到此错误时您正在运行什么代码?请发布匿名版本。在 Synapse 专用 SQL 池中使用外部表时遇到类似错误,解决方法是创建一个具有 NVARCHAR(MAX) 数据类型的表并且使用聚集列存储索引。

标签: azure apache-spark azure-synapse


【解决方案1】:

您可以使用nvarchar [ ( n | max ) ] 存储多达 10 亿个 2 字节 Unicode 字符。

可变长度的 Unicode 字符串数据。 n 定义字符串长度和 可以是 1 到 4,000 之间的值。 max 表示最大值 存储大小为 2^31-1 字节 (2 GB)。存储大小(以字节为单位)为 输入数据的实际长度的两倍 + 2 个字节。国际标准化组织 nvarchar 的同义词是国家字符变化和国家字符 变化无常。

您可以参考下面提到的相关SO线程:

How does SQL Server store more than 4000 characters in NVARCHAR(max)?

SQL query variable nvarchar(max) can not store more than 4000 characters

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2020-09-05
    • 2021-01-14
    • 2022-06-23
    • 2020-08-16
    • 2021-10-18
    • 2021-06-02
    • 2015-08-09
    • 2022-12-21
    相关资源
    最近更新 更多