繁体   English   中英

Azure SQL:从无法识别存储的 Blob 添加

[英]Azure SQL: Adding from Blob Not Recognizing Storage

我正在尝试按照https: //docs.microsoft.com/en-usinsert-sql 中的步骤将 CSV 文件中的数据加载到我的 Azure 数据库中的表中?view=sql-server-ver15#f-importing-data-from-a-file-in-azure-blob-storage ,使用托管标识选项。 当我运行查询时,我收到此错误: Failed to execute query. Error: Referenced external data source "adfst" not found. Failed to execute query. Error: Referenced external data source "adfst" not found.

这是我在存储帐户中创建的容器的名称。 我也尝试过使用我的存储帐户,但出现同样的错误。 审查https://docs.microsoft.com/en-us/sql/relational-databases/import-export/examples-of-bulk-access-to-data-in-azure-blob-storage?view=sql-server -ver15没有提供关于可能导致问题的任何进一步的见解。 我的存储帐户没有配置公共(匿名)访问。

我假设我缺少一个可以解决此问题的简单项目,但我无法弄清楚它是什么。 我的 SQL 查询如下,修改为不包含不需要的内容。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**************';
GO
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = '***********************';
CREATE EXTERNAL DATA SOURCE adfst
WITH ( TYPE = BLOB_STORAGE,
          LOCATION = 'https://**********.blob.core.windows.net/adfst'
          , CREDENTIAL= msi_cred
);
BULK INSERT [dbo].[Adventures]
FROM 'Startracker_scenarios.csv'
WITH (DATA_SOURCE = 'adfst');

如果要在运行BULK INSERT命令时使用托管标识访问 Azure Blob 存储。 您需要为 SQL 服务器启用托管标识。 否则,您将收到错误Referenced external data source "***" not found 此外,您还需要将Storage Blob Data Contributor分配给 MSI。 如果不这样做,则无法访问存储在 Azure blob 中的 CVS 文件

例如

  1. 为 SQL 服务器启用托管标识
Connect-AzAccount

#Enable MSI for SQL Server
Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
  1. 通过 Azure 门户分配角色 在您的存储帐户下,导航到访问控制 (IAM)和 select添加角色分配 存储 Blob 数据参与者 RBAC 角色分配给您已向 Azure Active Directory (AAD) 注册的服务器

在此处输入图像描述

  1. 测试

    一个。 数据

    1,James,Smith,19750101 2,Meggie,Smith,19790122 3,Robert,Smith,20071101 4,Alex,Smith,20040202

    湾。 脚本

CREATE TABLE CSVTest
(ID INT,
FirstName VARCHAR(40),
LastName VARCHAR(40),
BirthDate SMALLDATETIME)
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
GO

--> Change to using Managed Identity instead of SAS key 
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Identity';
GO

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
          LOCATION = 'https://jimtestdiag417.blob.core.windows.net/test'
          , CREDENTIAL= msi_cred 
);
GO
BULK INSERT CSVTest
FROM 'mydata.csv'
WITH (
 FIELDTERMINATOR = ',', 
  ROWTERMINATOR = '\n', 
DATA_SOURCE = 'MyAzureBlobStorage');
GO

select * from CSVTest;
GO

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM