如何在Azure Synapse Link同步的Dataverse表上创建视图(无需ADF管道)
解决方案:在Synapse Analytics中使用Dataverse同步表创建视图
问题原因
通过Azure Synapse Link for Dataverse同步到Synapse的表所在数据库为复制数据库,这类数据库处于只读状态,不允许直接执行CREATE/ALTER VIEW操作。
无需ADF管道的可行方案
1. 使用Synapse Serverless SQL池创建视图
Serverless SQL池不受复制数据库的只读限制,可直接基于Dataverse同步的Delta存储文件创建视图。示例语句如下(需替换占位符内容):
CREATE VIEW [dbo].[HotelRooms] AS SELECT h.HotelName, r.RoomName FROM OPENROWSET( BULK 'https://<你的存储账户>.dfs.core.windows.net/<Synapse Link容器>/<Dataverse环境>/dbo.Hotel/*', FORMAT = 'DELTA' ) AS h INNER JOIN OPENROWSET( BULK 'https://<你的存储账户>.dfs.core.windows.net/<Synapse Link容器>/<Dataverse环境>/dbo.Room/*', FORMAT = 'DELTA' ) AS r ON h.<关联列名> = r.<关联列名>;
注意:需补充正确的表关联列,否则会出现语法错误。
2. 专用SQL池中创建外部表再生成视图
通过外部表指向Dataverse同步的存储文件,绕开复制数据库的只读限制:
- 第一步:创建外部数据源、文件格式及外部表
-- 创建外部数据源 CREATE EXTERNAL DATA SOURCE DataverseSyncStorage WITH ( LOCATION = 'abfss://<容器名>@<存储账户>.dfs.core.windows.net/<Synapse Link容器>/<Dataverse环境>/', TYPE = HADOOP ); -- 创建Delta格式的外部文件格式 CREATE EXTERNAL FILE FORMAT DeltaFormat WITH ( FORMAT_TYPE = DELTA ); -- 创建Hotel外部表(需补充完整列定义) CREATE EXTERNAL TABLE dbo.Hotel_External ( HotelName NVARCHAR(255), <其他列定义>, <关联列名> <对应数据类型> ) WITH ( LOCATION = 'dbo.Hotel/', DATA_SOURCE = DataverseSyncStorage, FILE_FORMAT = DeltaFormat ); -- 创建Room外部表(需补充完整列定义) CREATE EXTERNAL TABLE dbo.Room_External ( RoomName NVARCHAR(255), <其他列定义>, <关联列名> <对应数据类型> ) WITH ( LOCATION = 'dbo.Room/', DATA_SOURCE = DataverseSyncStorage, FILE_FORMAT = DeltaFormat );
- 第二步:基于外部表创建视图
CREATE VIEW dbo.HotelRooms AS SELECT h.HotelName, r.RoomName FROM dbo.Hotel_External h INNER JOIN dbo.Room_External r ON h.<关联列名> = r.<关联列名>;
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

