带有Azure存储datalake Gen2的Azure SQL数据仓库Polybase在文件夹级别不适用于MSI

时间:2019-07-24 12:13:53

标签: azure-data-lake azure-sql-data-warehouse

我在使用MSI时出现错误,该错误已在文件夹级别授予MSI访问权限。

信息105019,第16级,第1行,第45行 外部文件访问由于内部错误而失败:“访问HDFS时发生错误:调用HdfsBridge_Connect时引发Java异常。 Java异常消息: 头https://polybasetestsa.dfs.core.windows.net/produced?resource=filesystem&timeout=90 状态码= 403 StatusDescription =此请求无权使用此权限执行此操作。 ErrorCode = ErrorMessage ='

我正在使用MSI在带有数据湖Gen2的Azure SQL数据仓库中探索Polybase方法,其中已使用存储资源管理器在文件夹级别对MSI对象id(azure sql服务器仓库服务标识)进行了文件夹访问。

根据给定的代码示例,已访问MSI的“ data”文件夹。

*注意:如果我在IAM中的容器/文件系统/存储帐户级别授予MSI的角色基础访问权限(存储Blob数据读取器),则此方法工作正常。 这也可以使用服务主体与Gen 1 datalake一起使用。

    CREATE DATABASE SCOPED CREDENTIAL [ADLS_Gen2_DatabaseScopedCredential]
WITH
    IDENTITY = 'Managed Service Identity'
;
GO
IF EXISTS ( SELECT * FROM sys.external_file_formats WHERE name = 'EXT_CsvFileFormatSnappy' )
        DROP EXTERNAL FILE FORMAT [EXT_CsvFileFormatSnappy];
GO
CREATE EXTERNAL FILE FORMAT [EXT_CsvFileFormatSnappy] 
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
             FIELD_TERMINATOR = ','
             ,USE_TYPE_DEFAULT =  TRUE ),
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'
    )
GO
CREATE EXTERNAL DATA SOURCE [ADLS_Gen2_External_DataSource] 
WITH (
    TYPE = HADOOP, 
    LOCATION = N'abfss://produced@polybasetestsa.dfs.core.windows.net/', 
    CREDENTIAL = ADLS_Gen2_DatabaseScopedCredential)
Go
CREATE EXTERNAL TABLE [TB_EXT_CSV_DATA]
(
    First [nvarchar](2000) NULL,
    Last [nvarchar](2000) NULL

)
WITH (DATA_SOURCE = [ADLS_Gen2_External_DataSource],
LOCATION = N'/data',
FILE_FORMAT = [EXT_CsvFileFormatSnappy],REJECT_TYPE = VALUE,REJECT_VALUE = 0);
Go

按照下面的网址,实际上也支持MSI,它与databrick和azure数据工厂都可以正常工作。

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vnet-service-endpoint-rule-overview?toc=%2fazure%2fstorage%2fblobs%2ftoc.json#azure-sql-data-warehouse-polybase

0 个答案:

没有答案