Azure Synapse无服务器SQL池复制数据库创建外部文件格式报错
解决Azure Synapse无服务器SQL池创建外部表的"replicated database"错误
问题原因
无服务器SQL池的系统数据库(比如默认的master)属于复制型数据库,这类数据库限制了CREATE EXTERNAL FILE FORMAT、CREATE EXTERNAL DATA SOURCE等外部对象的创建操作,只能在用户手动创建的数据库中执行这些命令。
具体解决步骤
- 创建用户自定义数据库
先在无服务器SQL池中创建一个专属数据库,示例脚本:CREATE DATABASE MySynapseUserDB; - 切换到新数据库上下文
执行脚本切换操作数据库:USE MySynapseUserDB; - 重新执行外部表相关操作
在这个用户数据库中,按流程创建外部数据源、文件格式和外部表即可,示例流程:- 创建数据库主密钥(首次操作需执行):
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourSecurePassword123!'; - 创建数据库范围凭据(用于ADLS访问授权):
CREATE DATABASE SCOPED CREDENTIAL ADLS_SAS_Cred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'your-valid-sas-token-here'; - 创建外部数据源:
CREATE EXTERNAL DATA SOURCE ADLS_DataSource WITH ( LOCATION = 'abfss://your-container@your-storage-account.dfs.core.windows.net/', CREDENTIAL = ADLS_SAS_Cred ); - 创建外部文件格式:
CREATE EXTERNAL FILE FORMAT Parquet_File_Format WITH ( FORMAT_TYPE = PARQUET, DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec' ); - 创建外部表:
CREATE EXTERNAL TABLE Product_Data ( ProductID INT, ProductName VARCHAR(200), Category VARCHAR(100) ) WITH ( LOCATION = 'data/product-data/', DATA_SOURCE = ADLS_DataSource, FILE_FORMAT = Parquet_File_Format );
- 创建数据库主密钥(首次操作需执行):
额外注意事项
- 确保操作上下文是无服务器SQL池,不要混淆到专用SQL池环境。
- 若使用托管身份访问ADLS,需调整数据库范围凭据的创建逻辑,并确保身份拥有ADLS的读取权限。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

