Azure Synapse Analytics’te sunucusuz SQL havuzunu kullanarak dış depolama alanına erişme
Bu makalede, kullanıcıların sunucusuz SQL havuzunda Azure Depolama depolanan dosyalardan verileri nasıl okuyabileceği açıklanmaktadır. Kullanıcılar depolamaya erişmek için aşağıdaki seçeneklere sahiptir:
- Azure Depolama'daki dosyalar üzerinde geçici sorgular çalıştırmayı sağlayan OPENROWSET işlevi.
- Dış dosya kümesinin üzerine kurulmuş önceden tanımlanmış bir veri yapısı olan dış tablo .
Kullanıcı, Microsoft Entra geçiş kimlik doğrulaması (Microsoft Entra sorumluları için varsayılan) ve SAS kimlik doğrulaması (SQL sorumluları için varsayılan) gibi farklı kimlik doğrulama yöntemleri kullanabilir.
OPENROWSET kullanarak dosyaları sorgulama
OPENROWSET, kullanıcıların depolama alanına erişimi varsa Azure depolamadaki dış dosyaları sorgulamasına olanak tanır. Sunucusuz SQL havuzuna bağlı bir kullanıcı, Azure depolamadaki dosyaların içeriğini okumak için aşağıdaki sorguyu kullanmalıdır:
SELECT * FROM
OPENROWSET(BULK 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/*.parquet', format= 'parquet') as rows
Kullanıcı aşağıdaki erişim kurallarını kullanarak depolamaya erişebilir:
- Microsoft Entra kullanıcısı -
OPENROWSET
Azure Depolama erişmek veya anonim erişimle depolamaya erişmek için çağıranın Microsoft Entra kimliğini kullanır. - SQL kullanıcısı –
OPENROWSET
anonim erişimle depolamaya erişecek veya SAS belirteci veya Çalışma alanının Yönetilen kimliği kullanılarak kimliğine bürünülebilir.
SQL sorumluları, ÇALıŞMA alanının SAS belirteçleri veya Yönetilen Kimliği ile korunan dosyaları doğrudan sorgulamak için OPENROWSET'i de kullanabilir. Bir SQL kullanıcısı bu işlevi yürütürse, izni olan ALTER ANY CREDENTIAL
bir güç kullanıcı işlevindeki URL ile eşleşen (depolama adı ve kapsayıcı kullanarak) sunucu kapsamlı bir kimlik bilgisi oluşturmalı ve OPENROWSET işlevini çağırana bu kimlik bilgisi için REFERENCES izni vermelidir:
EXECUTE AS somepoweruser
CREATE CREDENTIAL [https://<storage_account>.dfs.core.windows.net/<container>]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sas token';
GRANT REFERENCES ON CREDENTIAL::[https://<storage_account>.dfs.core.windows.net/<container>] TO sqluser
URL ile eşleşen sunucu düzeyinde KIMLIK BILGISI yoksa veya SQL kullanıcısının bu kimlik bilgisi için başvuru izni yoksa hata döndürülür. SQL sorumluları bazı Microsoft Entra kimliklerini kullanarak kimliğine bürünemez.
Dekont
OPENROWSET'in bu sürümü, varsayılan kimlik doğrulaması kullanılarak hızlı ve kolay veri keşfi için tasarlanmıştır. Kimliğe bürünme veya Yönetilen Kimlik'i kullanmak için, sonraki bölümde açıklanan DATA_SOURCE ile OPENROWSET'i kullanın.
OPENROWSET kullanarak veri kaynaklarını sorgulama
OPENROWSET, kullanıcının bazı dış veri kaynaklarına yerleştirilen dosyaları sorgulamasına olanak tanır:
SELECT * FROM
OPENROWSET(BULK 'file/path/*.parquet',
DATA_SOURCE = MyAzureInvoices,
FORMAT= 'parquet') as rows
Bu sorguyu yürüten kullanıcının dosyalara erişebilmesi gerekir. Microsoft Entra kimliklerini veya anonim erişimlerini kullanarak dosyalara doğrudan erişemiyorlarsa, kullanıcıların SAS belirteci veya Çalışma alanının Yönetilen Kimliği kullanılarak kimliğine bürünülmeleri gerekir.
DATABASE SCOPED CREDENTIAL
, başvuruda bulunan veri kaynağındaki dosyalara (şu anda SAS ve Yönetilen Kimlik) nasıl erişildiğini belirtir. İzinli CONTROL DATABASE
power user'ın depolamaya erişmek için kullanılacak ve EXTERNAL DATA SOURCE
kullanılacak veri kaynağının URL'sini ve kimlik bilgilerini belirten bir oluşturması DATABASE SCOPED CREDENTIAL
gerekir:
EXECUTE AS somepoweruser;
-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/' ,
CREDENTIAL = AccessAzureInvoices) ;
Çağıranın OPENROWSET işlevini yürütmek için aşağıdaki izinlerden birine sahip olması gerekir:
- OPENROWSET yürütme izinlerinden biri:
ADMINISTER BULK OPERATIONS
OPENROWSET işlevini yürütmek için oturum açmayı etkinleştirir.ADMINISTER DATABASE BULK OPERATIONS
veritabanı kapsamlı kullanıcının OPENROWSET işlevini yürütmesini sağlar.
REFERENCES DATABASE SCOPED CREDENTIAL
içinde başvuruda bulunan kimlik bilgilerine geçinEXTERNAL DATA SOURCE
.
DıŞ TABLO
Tabloyu okuma izinlerine sahip olan kullanıcı, Azure Depolama klasörleri ve dosyaları kümesi üzerinde oluşturulan bir EXTERNAL TABLE kullanarak dış dosyalara erişebilir.
Dış tablo oluşturma izinleri olan kullanıcı (örneğin CREATE TABLE ve ALTER ANY CREDENTIAL veya REFERENCES DATABASE SCOPED CREDENTIAL) Azure Depolama veri kaynağının üzerinde bir tablo oluşturmak için aşağıdaki betiği kullanabilir:
CREATE EXTERNAL TABLE [dbo].[DimProductexternal]
( ProductKey int, ProductLabel nvarchar, ProductName nvarchar )
WITH
(
LOCATION='/DimProduct/year=*/month=*' ,
DATA_SOURCE = AzureDataLakeStore ,
FILE_FORMAT = TextFileFormat
) ;
Bu tablodan veri okuyan kullanıcının dosyalara erişebilmesi gerekir. Microsoft Entra kimliklerini veya anonim erişimlerini kullanarak dosyalara doğrudan erişemiyorlarsa, kullanıcıların SAS belirteci veya Çalışma alanının Yönetilen Kimliği kullanılarak kimliğine bürünülmeleri gerekir.
DATABASE SCOPED CREDENTIAL, başvuruda bulunan veri kaynağındaki dosyalara nasıl erişeceklerini belirtir. CONTROL DATABASE iznine sahip kullanıcının, depolamaya erişmek için kullanılacak DATABASE SCOPED CREDENTIAL ve kullanılması gereken veri kaynağının URL'sini ve kimlik bilgilerini belirten EXTERNAL DATA SOURCE oluşturması gerekir:
EXECUTE AS somepoweruser;
-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';
CREATE DATABASE SCOPED CREDENTIAL cred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>' ,
CREDENTIAL = cred
) ;
EXTERNAL TABLE ile dış dosyaları okuma
EXTERNAL TABLE, standart SQL SELECT deyimini kullanarak veri kaynağı aracılığıyla başvuruda bulunılan dosyalardan verileri okumanızı sağlar:
SELECT *
FROM dbo.DimProductsExternal
Çağıranın verileri okumak için aşağıdaki izinlere sahip olması gerekir:
SELECT
dış tablo üzerinde izinREFERENCES DATABASE SCOPED CREDENTIAL
izni varsaDATA SOURCE
CREDENTIAL
İzinler
Aşağıdaki tabloda, yukarıda listelenen işlemler için gerekli izinler listelenmiştir.
Sorgu | Gerekli izinler |
---|---|
Veri kaynağı olmadan OPENROWSET(BULK) | ADMINISTER BULK OPERATIONS , ADMINISTER DATABASE BULK OPERATIONS veya SQL oturum açma bilgileri SAS korumalı depolama için REFERENCES CREDENTIAL::<URL> olmalıdır |
Kimlik bilgisi olmadan veri kaynağı ile OPENROWSET(BULK) | ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS , |
Kimlik bilgilerine sahip veri kaynağı ile OPENROWSET(BULK) | REFERENCES DATABASE SCOPED CREDENTIAL ve veya ADMINISTER BULK OPERATIONS ADMINISTER DATABASE BULK OPERATIONS |
CREATE EXTERNAL DATA SOURCE | ALTER ANY EXTERNAL DATA SOURCE ve REFERENCES DATABASE SCOPED CREDENTIAL |
DıŞ TABLO OLUŞTURMA | CREATE TABLE , ALTER ANY SCHEMA , ALTER ANY EXTERNAL FILE FORMAT ve ALTER ANY EXTERNAL DATA SOURCE |
DıŞ TABLODAN SEÇ | SELECT TABLE ve REFERENCES DATABASE SCOPED CREDENTIAL |
CETAS | Tablo oluşturmak için : CREATE TABLE , ALTER ANY SCHEMA , ALTER ANY DATA SOURCE ve ALTER ANY EXTERNAL FILE FORMAT . Verileri okumak için: ADMINISTER BULK OPERATIONS veya REFERENCES CREDENTIAL SELECT TABLE sorgudaki her tablo/görünüm/işlev için + depolama üzerinde R/W izni |
Sonraki adımlar
Artık aşağıdaki Nasıl Yapılır makaleleriyle devam etmeye hazırsınız: