Aracılığıyla paylaş


Azure Blob Depolama'daki verilere toplu erişim örnekleri

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen Örneği

BULK INSERT ve OPENROWSET deyimleri Azure Blob Depolama'daki bir dosyaya doğrudan erişebilir. Aşağıdaki örneklerde, depolama hesabında (inv-2017-01-19.csvadlı) depolanan bir kapsayıcıda (Week3adlı) depolanan csv (virgülle ayrılmış değer) dosyasından (newinvoicesadlı) veriler kullanılır.

Kapsayıcıya ve Blob Depolamadaki dosyalara giden tüm yollar, büyük/küçük harfe duyarlıdır. Doğru değilse, aşağıdaki örneğe benzer bir hata döndürebilir:

Toplu yükleme yapılamıyor. "file.csv" dosyası yok veya dosya erişim haklarınız yok.

Kimlik bilgilerini oluşturma

Dış veri kaynağı, SHARED ACCESS SIGNATURE kimliğini kullanan veritabanı kapsamına sahip bir kimlik bilgisiyle oluşturulmalıdır. Depolama hesabınız için paylaşılan erişim imzası (SAS) oluşturmak için Azure portaldaki depolama hesabı özellik sayfasındaki Paylaşılan erişim imzası özelliğine bakın. Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme. Kimlik bilgileri hakkında daha fazla bilgi için CREATE DATABASE SCOPED CREDENTIAL'a bakınız.

IDENTITYkullanarak, SHARED ACCESS SIGNATUREolması gereken veritabanı kapsamlı bir kimlik bilgisi oluşturun. Blob Depolama hesabı için oluşturulan SAS belirtecini kullanın. SAS belirtecinizin önünde bir ?bulunmadığını, yüklenmesi gereken nesne üzerinde en az okuma iznine sahip olduğunuzdan ve SAS belirtecinin geçerlilik süresinin geçerli olduğunu doğrulayın (tüm tarihler UTC saatindedir).

Mesela:

CREATE DATABASE SCOPED CREDENTIAL UploadInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-08-31T02:25:19Z&st=2019-07-30T18:25:19Z&spr=https&sig=KS51p%2BVnfUtLjMZtUTW1siyuyd2nlx294tL0mnmFsOk%3D';

Bilinen sorunlar

SAS belirteçleri kullanan Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nden gelen istekler aşağıdaki hatayla engellenebilir:

Msg 4861, Level 16, State 1, Line 27
Cannot bulk load because the file "FileName.extension" could not be opened. Operating system error code 5(Access is denied.).

Azure hizmetlerinin yalnızca bir alt kümesi şu anda güvenilen hizmetler listesindedir. Azure depolama güvenlik duvarı ayarlarındaki güvenilen hizmetlerin ve güncelleştirmelerin tam listesi için bkz. aboneliğinizde kayıtlı kaynaklar için güvenilen erişim.

Örnekler

Bu makaledeki örneklerin yanı sıra GitHub'da Azure SQL Veritabanı veri içe aktarma örneklerini de gözden geçirebilirsiniz.

Azure Blob Depolama konumuna başvuran CSV dosyasındaki verilere erişme

Aşağıdaki örnek, MyAzureInvoicesadlı bir Azure depolama hesabına işaret eden bir dış veri kaynağı kullanır.

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://newinvoices.blob.core.windows.net',
    CREDENTIAL = UploadInvoices
);

Ardından OPENROWSET deyimi, dosya açıklamasına kapsayıcı adını (week3) ekler. Dosya inv-2017-01-19.csvolarak adlandırılır.

SELECT * FROM OPENROWSET(
   BULK 'week3/inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   FORMAT = 'CSV',
   FORMATFILE = 'invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
) AS DataFile;

BULK INSERTkullanarak kapsayıcıyı ve dosya açıklamasını kullanın:

BULK INSERT Colors2
FROM 'week3/inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices', FORMAT = 'CSV');

Azure Blob Depolama konumundaki bir kapsayıcıya başvuran CSV dosyasındaki verilere erişme

Aşağıdaki örnekte, Azure depolama hesabındaki bir kapsayıcıya (week3adlı) işaret eden bir dış veri kaynağı kullanılır.

CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = UploadInvoices
);

Ardından OPENROWSET deyimi, dosya açıklamasında kapsayıcı adını içermez:

SELECT * FROM OPENROWSET(
   BULK 'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoicesContainer',
   FORMAT = 'CSV',
   FORMATFILE = 'invoices.fmt',
   FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
) AS DataFile;

BULK INSERTkullanarak, dosya açıklamasında kapsayıcı adını kullanmayın:

BULK INSERT Colors2
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoicesContainer', FORMAT = 'CSV');