[英]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 文件
例如
Connect-AzAccount
#Enable MSI for SQL Server
Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
测试
一个。 数据
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.