Partilhar via


Extensão de Armazenamento do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

Um caso de uso comum para clientes da Microsoft é a capacidade de importar e exportar dados entre o Armazenamento de Blobs do Azure e uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL. A extensão de Armazenamento do Azure (azure_storage) no Banco de Dados do Azure para servidor flexível PostgreSQL simplifica esse caso de uso.

Armazenamento de Blobs do Azure

O Armazenamento de Blobs do Azure é uma solução de armazenamento de objetos para a cloud. O armazenamento de Blob é otimizado para armazenar grandes quantidades de dados não estruturados. Os dados não estruturados são dados que não seguem uma definição ou um modelo de dados particular, como texto ou dados binários.

O Armazenamento de Blobs oferece uma hierarquia de três tipos de recursos:

  • A conta de armazenamento é uma entidade administrativa que contém serviços para itens como blobs, arquivos, filas, tabelas ou discos.

    Ao criar uma conta de armazenamento no Azure, você obtém um namespace exclusivo para seus recursos de armazenamento. Esse namespace exclusivo faz parte da URL. O nome da conta de armazenamento deve ser exclusivo em todos os nomes de conta de armazenamento existentes no Azure.

  • Um contêiner está dentro de uma conta de armazenamento. Um contêiner é como uma pasta onde os blobs são armazenados.

    Você pode definir políticas de segurança e atribuir políticas ao contêiner. Essas políticas são transmitidas em cascata para todos os blobs no contêiner.

    Uma conta de armazenamento pode conter um número ilimitado de contêineres. Cada contêiner pode conter um número ilimitado de blobs, até o tamanho máximo da conta de armazenamento de 500 TB.

    Depois de colocar um blob em um contêiner que está dentro de uma conta de armazenamento, você pode fazer referência ao blob usando uma URL neste formato: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>.

  • Um blob é um pedaço de dados que reside no contêiner.

O diagrama seguinte mostra a relação entre estes recursos.

Diagrama que mostra um exemplo de recursos de armazenamento.

Principais benefícios de armazenar dados como blobs no Armazenamento de Blobs do Azure

O Armazenamento de Blobs do Azure pode fornecer os seguintes benefícios:

  • É uma solução de armazenamento em nuvem escalável e econômica. Você pode usá-lo para armazenar dados de qualquer tamanho e aumentar ou diminuir a escala com base em suas necessidades.
  • Ele fornece camadas de segurança para ajudar a proteger seus dados, como criptografia em repouso e em trânsito.
  • Ele se comunica com outros serviços do Azure e aplicativos parceiros. É uma solução versátil para uma ampla gama de casos de uso, como backup e recuperação de desastres, arquivamento e análise de dados.
  • É uma solução económica para gerir e armazenar grandes quantidades de dados na nuvem, quer a organização seja uma pequena empresa ou uma grande empresa. Você paga apenas pelo armazenamento de que precisa.

Importar dados do Armazenamento de Blobs do Azure para o Banco de Dados do Azure para servidor flexível PostgreSQL

Para carregar dados do Armazenamento de Blobs do Azure, você precisa permitir a azure_storage extensão PostgreSQL. Em seguida, instale a extensão no banco de dados usando o CREATE EXTENSION comando:

 CREATE EXTENSION azure_storage;

Quando você cria uma conta de armazenamento, o Azure gera duas chaves de acesso de conta de armazenamento de 512 bits para essa conta. Você pode usar essas chaves para autorizar o acesso aos dados em sua conta de armazenamento por meio da autorização de chave compartilhada.

Antes de importar os dados, você precisa mapear a conta de armazenamento usando o account_add método. Forneça a chave de acesso à conta que foi definida quando você criou a conta. O exemplo de código a seguir mapeia a conta mystorageaccount de armazenamento e usa a cadeia de caracteres SECRET_ACCESS_KEY como o parâmetro de chave de acesso:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Depois de mapear o armazenamento, você pode listar o conteúdo da conta de armazenamento e escolher os dados para importação. O exemplo a seguir pressupõe que você criou uma conta de armazenamento chamada mystorageaccount e um contêiner de blob chamado mytestblob:

SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('mystorageaccount','mytestblob'); 

Você pode filtrar a saída dessa instrução usando uma cláusula regular SQL WHERE ou o prefixblob_list parâmetro do método. Listar conteúdo de contêiner requer uma conta e chave de acesso ou um contêiner com acesso anônimo habilitado.

Finalmente, você pode usar a COPY instrução ou a blob_get função para importar dados do Armazenamento de Blobs do Azure para uma tabela de servidor flexível existente do Banco de Dados do Azure para PostgreSQL.

Importar dados usando uma instrução COPY

O exemplo a seguir mostra a importação de dados de um arquivo de employee.csv que reside no contêiner mytestblob de blob na mesma mystorageaccount conta de armazenamento do Azure por meio do COPY comando:

  1. Crie uma tabela de destino que corresponda ao esquema do arquivo de origem:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. Use uma COPY instrução para copiar dados para a tabela de destino. Especifique que a primeira linha é cabeçalhos.

    COPY employees
    FROM 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee.csv'
    WITH (FORMAT 'csv', header);
    

Importar dados usando a função blob_get

A blob_get função recupera um arquivo do Blob Storage. Para certificar-se de que blob_get pode analisar os dados, você pode passar um valor com um tipo que corresponde às colunas no arquivo ou definir explicitamente as colunas na FROM cláusula.

Você pode usar a blob_get função no seguinte formato:

azure_storage.blob_get(account_name, container_name, path)

O próximo exemplo mostra a mesma ação da mesma origem para o mesmo destino usando a blob_get função:

INSERT INTO employees 
SELECT * FROM azure_storage.blob_get('mystorageaccount','mytestblob','employee.csv',options:= azure_storage.options_csv_get(header=>true)) AS res (
  CustomerId int,
  LastName varchar(50),
  FirstName varchar(50))

O COPY comando e blob_get a função suportam as seguintes extensões de arquivo para importação:

File format Description
.csv Formato de valores separados por vírgulas usado pelo PostgreSQL COPY
.tsv Valores separados por tabulações, o formato PostgreSQL COPY padrão
binário Formato binário PostgreSQL COPY
texto Arquivo que contém um único valor de texto (por exemplo, JSON ou XML grande)

Exportar dados do Banco de Dados do Azure para servidor flexível PostgreSQL para o Armazenamento de Blob do Azure

Para exportar dados do Banco de Dados do Azure para o servidor flexível PostgreSQL para o Armazenamento de Blobs do Azure, você precisa permitir a azure_storage extensão. Em seguida, instale a azure_storage extensão PostgreSQL no banco de dados usando o CREATE EXTENSION comando:

CREATE EXTENSION azure_storage;

Quando você cria uma conta de armazenamento, o Azure gera duas chaves de acesso de conta de armazenamento de 512 bits para essa conta. Você pode usar essas chaves para autorizar o acesso aos dados em sua conta de armazenamento por meio de autorização de chave compartilhada ou por meio de tokens de assinatura de acesso compartilhado (SAS) assinados com a chave compartilhada.

Antes de importar os dados, você precisa mapear a conta de armazenamento usando o account_add método. Forneça a chave de acesso à conta que foi definida quando você criou a conta. O exemplo de código a seguir mapeia a conta mystorageaccount de armazenamento e usa a cadeia de caracteres SECRET_ACCESS_KEY como o parâmetro de chave de acesso:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Você pode usar a COPY instrução ou a blob_put função para exportar dados de uma tabela do Banco de Dados do Azure para PostgreSQL para o Armazenamento de Blobs do Azure. O exemplo a seguir mostra a exportação de dados de uma tabela de funcionários para um novo arquivo chamado employee2.csv por meio do COPY comando. O arquivo reside no contêiner mytestblob de blob na mesma mystorageaccount conta de armazenamento do Azure.

COPY employees 
TO 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee2.csv'
WITH (FORMAT 'csv');

Da mesma forma, você pode exportar dados de uma tabela de funcionários por meio da função, o blob_put que lhe dá ainda mais controle finito sobre os dados exportados. O exemplo a seguir exporta apenas duas colunas da tabela EmployeeId e LastName. Ele pula a FirstName coluna.

SELECT azure_storage.blob_put('mystorageaccount', 'mytestblob', 'employee2.csv', res) FROM (SELECT EmployeeId,LastName FROM employees) res;

O COPY comando e a blob_put função suportam as seguintes extensões de arquivo para exportação:

File format Description
.csv Formato de valores separados por vírgulas usado pelo PostgreSQL COPY
.tsv Valores separados por tabulações, o formato PostgreSQL COPY padrão
binário Formato binário PostgreSQL COPY
texto Um arquivo que contém um único valor de texto (por exemplo, JSON ou XML grande)

Listar objetos no Armazenamento do Azure

Para listar objetos no Armazenamento de Blobs do Azure, você precisa permitir a azure_storage extensão. Em seguida, instale a azure_storage extensão PostgreSQL no banco de dados usando o CREATE EXTENSION comando:

CREATE EXTENSION azure_storage;

Quando você cria uma conta de armazenamento, o Azure gera duas chaves de acesso de conta de armazenamento de 512 bits para essa conta. Você pode usar essas chaves para autorizar o acesso aos dados em sua conta de armazenamento por meio de autorização de chave compartilhada ou por meio de tokens SAS assinados com a chave compartilhada.

Antes de importar os dados, você precisa mapear a conta de armazenamento usando o account_add método. Forneça a chave de acesso à conta que foi definida quando você criou a conta. O exemplo de código a seguir mapeia a conta mystorageaccount de armazenamento e usa a cadeia de caracteres SECRET_ACCESS_KEY como o parâmetro de chave de acesso:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

A extensão de Armazenamento do Azure fornece um blob_list método. Você pode usar esse método para listar objetos no Armazenamento de Blob no seguinte formato:

azure_storage.blob_list(account_name, container_name, prefix)

O exemplo a seguir mostra a listagem de objetos no Armazenamento do Azure usando o blob_list método de uma conta de armazenamento chamada mystorageaccount e um contêiner de blob chamado mytestbob. Os arquivos no contêiner têm a cadeia de caracteres employee.

SELECT path, size, last_modified, etag FROM azure_storage.blob_list('mystorageaccount','mytestblob','employee');

Atribuir permissões a uma conta não administrativa para acessar dados do Armazenamento do Azure

Por padrão, somente a função administrativa azure_pg_admin pode adicionar uma chave de conta e acessar a conta de armazenamento no Banco de Dados do Azure para servidor flexível PostgreSQL.

Você pode conceder as permissões para acessar dados no Armazenamento do Azure para usuários flexíveis não administrativos do Banco de Dados do Azure para PostgreSQL de duas maneiras, dependendo da granularidade da permissão:

  • Atribua azure_storage_admin ao usuário não administrativo. Essa função é adicionada com a instalação da extensão de Armazenamento do Azure. O exemplo a seguir concede essa função a um usuário não administrativo chamado support:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Chame a account_user_add função. O exemplo a seguir adiciona permissões à função support no Banco de Dados do Azure para servidor flexível PostgreSQL. É uma permissão mais finita, porque dá ao usuário acesso apenas a uma conta de armazenamento do Azure chamada mystorageaccount.

    SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');
    

Os usuários administrativos do Banco de Dados do Azure para servidor flexível PostgreSQL podem obter uma lista de contas de armazenamento e permissões na saída da account_list função. Esta função mostra todas as contas com teclas de acesso definidas.

SELECT * FROM azure_storage.account_list();

Quando o administrador do servidor flexível do Banco de Dados do Azure para PostgreSQL decide que o usuário não deve mais ter acesso, o administrador pode usar o método ou a account_user_remove função para remover esse acesso. O exemplo a seguir remove a função support do acesso à conta mystorageaccountde armazenamento:

SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');

Próximos passos

  • Se não vir uma extensão que pretende utilizar, informe-nos. Vote em pedidos existentes ou crie novos pedidos de feedback no nosso fórum de comentários.