簡體   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