【问题标题】:Error while writing dataframe with column length more that default value (256) to SQL warehouse将列长度大于默认值 (256) 的数据帧写入 SQL 仓库时出错
【发布时间】:2019-04-27 03:49:24
【问题描述】:

我正在尝试将数据框从 Spark 写入 SQL 仓库表。此表中的一列具有长度大于字符串 (256) 的默认值的值。根据此链接, https://docs.databricks.com/spark/latest/data-sources/azure/sql-data-warehouse.html “maxStrLength”指定加载到 SQL 仓库时字符串可以使用的最大长度,但是这个选项并不能帮助我从默认值增加 varchar 的长度。你能建议吗?以下是我正在执行的数据框写入语句,如果您需要更多详细信息,请告诉我。

df.write
.format("com.databricks.spark.sqldw")
.option("url", sqlDwUrlSmall).option( "forward_spark_azure_storage_credentials","True").option("tempDir",tempDir).option("maxStrLength ","4000").option("dbTable",sqlschemaName + "."  + sqlDwhTbl)
.option("tableOptions", "DISTRIBUTION = ROUND_ROBIN")
.mode("overwrite")
.save()

错误信息:

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]

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    该列定义为 varchar,您可以将其更改为 varchar(max) 或调查数据中是否存在任何填充或双字节字符,这可能导致总字符数超过列宽定义在 DWH 中超过 4000。

    快速测试一下:("maxStrLength ","3500") 看看字符串是否被接受?

    【讨论】:

    • 我遇到了同样的问题,设置 maxStrLenght 或增加 DB 列大小并不能解决问题。
    • 如果数据超出列定义,请看下面的配置示例,将数据写入临时位置进行必要的转换,然后将数据复制回SQL DW:docs.databricks.com/spark/latest/data-sources/azure/…
    • 您可能有太多数据要插入到目标列中,并且您需要转换其中的某些部分。如果你提供细节,那会很有帮助。
    猜你喜欢
    • 2022-10-21
    • 2019-06-18
    • 2016-02-22
    • 2020-05-02
    • 1970-01-01
    • 2012-05-21
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多