我使用磚來轉換數據,並將數據推入datalake。
數據正在推動如果字符串字段的長度是255或更少,但拋出錯誤如果除此之外。
“SQL DW未能執行JDBC查詢產生的連接器。
底層SQLException異常(s): - com.microsoft.sqlserver.jdbc。SQLServerException: HdfsBridge:: recordReaderFillBuffer——意想不到的錯誤遇到填充記錄讀者緩衝:HadoopSqlException:將截斷字符串或二進製數據。[ErrorCode = 107090] [SQLState = S0001”
我用以下代碼來將數據傳送到數據倉庫
testdf.write
.format (“com.databricks.spark.sqldw”)。
選項(“url”, sqlDwUrlSmall)。
選項(“數據表”、“dbo.testAddress”)。
選項(“forward_spark_azure_storage_credentials”,“真正的”)
tempdir .option (“tempdir”)
.mode(“覆蓋”)
.save ()
這個表隻有一列,這個字段的長度是4000。
我有一個類似的問題與ms sql Azure服務器數據倉庫(DWH)
盡管我已經設置目標列在MS SQL Server DWH nvarchar (4000)
這是代碼:
spark.conf。(“spark.sql.parquet設置。writeLegacyFormat”、“真實”)dwDF.write.format (com.databricks.spark.sqldw) .option (“url”, sqlDwUrlSmall) .option(“數據表”,表名).option .option (“forward_spark_azure_storage_credentials”、“true”) (“tempdir”, tempdir) .mode(“覆蓋”).save ()
我得到以下錯誤。
——com.microsoft.sqlserver.jdbc。SQLServerException: HdfsBridge:: recordReaderFillBuffer——意想不到的錯誤遇到填充記錄讀者緩衝:HadoopSqlException:將截斷字符串或二進製數據。[ErrorCode = 107090] [SQLState = S0001]
關於這種情況我也有同樣的問題。
創建表[dbo] [SampleTable14]。(
[名字]varchar(8000)為空,
(姓)nvarchar(300)為空,
(性別)nvarchar(300)為空,
[地點][nvarchar](300)為空,
[subscription_type] [nvarchar](300)零
)
與
(
= ROUND_ROBIN分布,
集群COLUMNSTORE索引
)
去
我也試著通過最大化表長度為1000年和8000年數據長度。
你必須設置maxStrLength選項值大於你的源數據最長的字符串
synapseDF。寫\ .format (com.databricks.spark.sqldw) \ .option (“url”, connStr) \ .mode(“追加”)\ .option (“tempDir”, synapse_tempDir) \ .option (“forwardSparkAzureStorageCredentials”,“真正的”)\ .option (“maxStrLength”、“1024”) \ .option(“數據表”,synapse_targetschema +“。”+ synapse_targettable ) \ .save()
突觸創建一個臨時的外部表加載數據與混合基,所以即使你創建你的目標表列的適當的寬度,你仍然可以截斷誤差從這個臨時表如果你不設置maxStrLength