Ошибка при записи фрейма данных с длиной столбца больше значения по умолчанию (256) в хранилище SQL - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь записать фрейм данных из 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]

1 Ответ

0 голосов
/ 26 апреля 2019

Столбец определен как varchar, и вы можете изменить его на varchar (max) или исследовать, присутствуют ли в данных какие-либо дополнительные или двухбайтовые символы, что может привести к тому, что общее число символов превысит определение ширины столбца.чем 4000 в DWH.

Быстрый тест, чтобы попробовать: ("maxStrLength ","3500") и посмотреть, принята ли строка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...