[英]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.