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.
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 prefix
blob_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:
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 );
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 chamadosupport
:-- 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çãosupport
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 chamadamystorageaccount
.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 mystorageaccount
de 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.