Exemplos de acesso a dados em massa no Armazenamento de Blobs do Azure

Aplica-se a: simSQL Server 2017 (14.x) e posterior SimBanco de Dados SQL do Azure

As instruções BULK INSERT e OPENROWSET podem acessar diretamente um arquivo no armazenamento de blobs do Azure. Os exemplos a seguir usam dados de um arquivo CSV (valores separados por vírgula) (denominado inv-2017-01-19.csv), armazenado em um contêiner (chamado Week3), armazenado em uma conta de armazenamento (chamada newinvoices). O caminho para o arquivo de formato pode ser usado, mas não está incluído nesses exemplos.

O acesso em massa para o armazenamento de blobs do Azure do SQL Server requer, no mínimo, SQL Server 2017 (14.x) CTP 1.1.

Importante

Todos os caminhos para o contêiner e os arquivos de blob são CASE SENSITIVE. Se não estiver correto, poderá retornar um erro como "Não é possível carregar em massa. O arquivo "file.csv" não existe ou você não tem direitos de acesso ao arquivo".

Criar credencial

Todos os exemplos a seguir exigem uma credencial com escopo de banco de dados fazendo referência a uma assinatura de acesso compartilhado.

Importante

A fonte de dados externa deve ser criada com uma credencial com escopo de banco de dados que usa a identidade SHARED ACCESS SIGNATURE. Para criar uma assinatura de acesso compartilhado para sua conta de armazenamento, consulte a propriedade Assinatura de acesso compartilhado na página de propriedades da conta de armazenamento, no portal do Azure. Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado). Para mais informações, consulte CRIAR CREDENCIAL COM ESCOPO DE BANCO DE DADOS.

Crie uma credencial com escopo de banco de dados usando o IDENTITY, que deve ser SHARED ACCESS SIGNATURE. Use o token SAS gerado para a conta de armazenamento de blobs. Verifique se o token SAS não tem um entrelinhamento ?, se você tem pelo menos permissão de leitura no objeto que deve ser carregado e se o período de expiração é válido (todas as datas estão em UTC).

Por exemplo:

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';

Acessando dados em um arquivo CSV que referencia um local de armazenamento de blobs do Azure

O exemplo a seguir usa uma fonte de dados externa apontando para uma conta de armazenamento do Azure, denominada MyAzureInvoices.

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

A instrução OPENROWSET adiciona o nome do contêiner (week3) à descrição do arquivo. O arquivo é denominado inv-2017-01-19.csv.

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

Usando BULK INSERT, use o contêiner e a descrição do arquivo:

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

Acessando dados em um arquivo CSV que referencia um contêiner em um local de armazenamento de blobs do Azure

O exemplo a seguir usa uma fonte de dados externa apontando para um contêiner (denominado week3) em uma conta de armazenamento do Azure.

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

A instrução OPENROWSET não adiciona o nome do contêiner à descrição do arquivo:

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

Usando BULK INSERT, não use o nome do contêiner na descrição do arquivo:

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

Consulte Também