首页 > 解决方案 > 突触上的分区表

问题描述

我正在尝试基于 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.recordReader:创建遇到错误:读者:HadoopExecutionException:列数不匹配。源文件有 5 列,外部表定义有 6 列。 在 com.microsoft.spark.sqlanalytics.utils.SQLAnalyticsJDBCWrapper.executeUpdateStatement(SQLAnalyticsJDBCWrapper.scala:89) 在

谢谢

标签: partitionazure-synapse

解决方案


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

语法很简单(根据文档):

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现在使用语法在数据库中进行分区切换。


推荐阅读