突触分区表

问题描述

我正在尝试基于 Spark(突触)上的分区表在我的 sqlDW(突触)上创建一个新的分区表

%%spark
val df1 = spark.sql("SELECT * FROM sparkTable")
df1.write.partitionBy("year").sqlanalytics("My_sql_Pool.dbo.StudentFromSpak",Constants.INTERNAL )

错误:StructuredStream-spark 包版本:2.4.5-1.3.1 StructuredStream-spark 包版本:2.4.5-1.3.1 StructuredStream-spark 包版本:2.4.5-1.3.1 java.sql.sqlException: com.microsoft.sqlserver.jdbc.sqlServerException:外部文件访问 由于内部错误而失败:'文件 /synapse/workspaces/test-partition-workspace/sparkpools/myspark/sparkpoolinstances/c5e00068-022d-478f-b4b8-843900bd656b/livysessions/2021/03/09/1/tempdata/sqlAnalyticsConnectorStaging/application_1615298536360_0001/aDtD9ywSeuk_shiw47zntKz.tbl/year=2000 /part-00004-5c3e4b1a-a580-4c7e-8381-00d92b0d32ea.c000.snappy.parquet: HdfsBridge::CreateRecordReader - 遇到意外错误 创建记录阅读器:HadoopExecutionException: Column count 不匹配。源文件有 5 列,外部表定义有 6 列。' 在 com.microsoft.spark.sqlanalytics.utils.sqlAnalyticsJDBCWrapper.executeUpdateStatement(sqlAnalyticsJDBCWrapper.scala:89) 在

谢谢

解决方法

sqlanalytics() 函数名称已更改为 synapsesql()。它目前不支持写入分区表,但您可以自己实现,例如通过将多个表写回专用 SQL 池并使用分区切换回那里。

语法很简单(按照the documentation):

df.write.synapsesql("<DBName>.<Schema>.<TableName>",<TableType>)

一个例子是:

df.write.synapsesql("yourDb.dbo.yourTablePartition1",Constants.INTERNAL)
df.write.synapsesql("yourDb.dbo.yourTablePartition2",Constants.INTERNAL)

现在使用 ALTER TABLE ... SWITCH PARTITION 语法在数据库中进行分区切换。