我已根据 ADLS Gen2 容器中存储的 parquet 文件在 Azure Synapse 中创建了一个外部表。我使用以下三个查询来创建数据源、文件格式和表:
CREATE EXTERNAL DATA SOURCE demo_external_datasource
WITH
( LOCATION = 'https://<Storage account>.dfs.core.windows.net/<container>'
)
CREATE EXTERNAL FILE FORMAT demo_parquet_file_format
WITH
(
FORMAT_TYPE = PARQUET
)
CREATE EXTERNAL TABLE <DATABASE>.<SCHEMA>.<TABLE NAME>
(
[infa_operation_time] nvarchar(4000),
[channel_key] bigint,
[channel_name] nvarchar(4000)
)
WITH (
LOCATION = '/<FOLDER>/',
DATA_SOURCE = demo_external_datasource,
FILE_FORMAT = demo_parquet_file_format
)
如果我将 Web 客户端 (Synapse studio) 与数据库管理员用户一起使用,我可以查询表并获取结果,但是当我尝试通过 SQL Server Management Studio 进行相同的连接时,它会抛出以下错误:
Not able to validate external location because The remote server returned an error: (401) Unauthorized.
我尝试连接数据库管理员和我的 Azure Active Directory 用户(Synapse 工作区和 ADLS 存储帐户的所有者),得到相同的结果。
谢谢。
最佳答案
我相信您需要创建一个 Database Scoped Credential到您的 ADLS 帐户:
CREATE DATABASE SCOPED CREDENTIAL AdlsCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE' ,
SECRET = '{yourSecret}'
然后在您的外部数据源声明中引用该内容:
CREATE EXTERNAL DATA SOURCE {yourEDSname}
WITH
(
LOCATION = 'https://{youradls}.blob.core.windows.net/{yourpath}/' ,
CREDENTIAL = AdlsCredentials
) ;
关于sql-server - 突触外部表 "Unauthorized",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71617320/