Compreender a extensão de Armazenamento do Azure
O Woodgrove Bank decidiu usar o Armazenamento de Blobs do Azure para armazenar seus arquivos de dados históricos na nuvem com segurança. Eles solicitaram a capacidade de carregar em massa seus dados históricos de arquivos CSV armazenados em um contêiner privado em sua conta de armazenamento.
A Microsoft desenvolveu a pg_azure_storage
extensão para permitir trabalhar com dados armazenados em arquivos hospedados no Armazenamento de Blobs do Azure. Usando a extensão, você pode operar em arquivos em uma conta de armazenamento de blob diretamente de um banco de dados do Azure Cosmos DB para PostgreSQL. A extensão permite-lhe:
- Conecte-se com segurança a uma conta de Armazenamento de Blob do Azure diretamente do seu banco de dados.
- Buscar dados de recursos de armazenamento de Blob compartilhados publicamente.
- Liste arquivos no contêiner de armazenamento de Blob.
- Recupere dados de arquivos.
- Importe dados de arquivos CSV diretamente para uma tabela usando o comando COPY PostgreSQL.
Migrar arquivos para uma conta de armazenamento
Os arquivos precisam ser adicionados ou migrados para uma conta de Armazenamento do Azure antes que você possa aproveitar os recursos dessa extensão. Mover arquivos para o Armazenamento de Blobs do Azure permite que você use um serviço de armazenamento seguro nativo da nuvem.
Carregue a extensão pg_azure_storage
Para começar, você precisa carregar a extensão usando uma ou CREATE EXTENSION
a create_extension()
função:
-- Install the extension in the database
SELECT create_extension('azure_storage');
O pg_
é descartado do nome da extensão ao criar e trabalhar com a extensão em seu banco de dados, abreviando-a para simplesmente azure_storage
.
Conceder acesso a uma conta de armazenamento de blob
Um engenheiro da Nuvem do Azure no Woodgrove Bank criou uma conta de armazenamento com o nome stlearnpostgresql
para você usar e adicionou alguns arquivos de exemplo em um contêiner privado chamado historical-data
. A pg_azure_storage
extensão inclui o método para habilitar a account_add()
conexão de uma conta de armazenamento ao seu banco de dados. Adicionar uma conta permite o acesso aos arquivos dentro de contêineres seguros ou privados. Para se conectar a um contêiner privado, você deve fornecer o nome da conta de armazenamento e a chave de acesso, cuja sintaxe é a seguinte:
SELECT azure_storage.account_add('{STORAGE_ACCOUNT_NAME}', '{STORAGE_ACCOUNT_ACCESS_KEY}');
Para fornecer acesso à conta de armazenamento do Woodgrove Bank a partir do banco de dados, você precisa recuperar seu nome e chave de acesso. Você pode obter essas informações na página Chaves de acesso associada à conta de armazenamento no portal do Azure.
Forneça o nome da conta de armazenamento ao executar a seguinte consulta e a chave de acesso concederá à extensão acesso à pg_azure_storage
conta:
SELECT azure_storage.account_add('stlearnpostgresql', '4zzZGx4sUk8TBVnHnoPYt0G7A3w9/DJJBCfdxeeb+VDrR8P3bSwWA3lYsTvO1HwYzrt4XQ37iIEL+AStWuQ/uA==');
O fornecimento de uma chave de acesso só é necessário ao trabalhar com dados em contêineres com um nível de acesso "Privado (sem acesso anônimo)". Suponha que você deseje extrair dados de um contêiner cujo nível de acesso esteja definido como "Contêiner (acesso de leitura anônimo para contêineres e blobs)". Nesse caso, você pode ingerir arquivos do Armazenamento de Blobs do Azure usando suas URLs públicas e enumerar o conteúdo do contêiner sem configurar a pg_azure_storage
chave da conta na extensão.
Listar arquivos no armazenamento de blob
Agora que você está conectado à conta de armazenamento, pode executar várias ações na conta de armazenamento, incluindo listar os blobs em um contêiner nomeado. Para ter uma ideia melhor de quais arquivos de exemplo foram carregados no historical-data
contêiner, você pode executar a seguinte consulta:
SELECT path, content_type, pg_size_pretty(bytes)
FROM azure_storage.blob_list('stlearnpostgresql', 'historical-data');
A blob_list()
função usa a conta de armazenamento e os nomes do contêiner como entrada e gera uma lista de blobs no contêiner:
path | content_type | pg_size_pretty
------------+--------------+----------------
events.csv | text/csv | 17 MB
users.csv | text/csv | 29 MB
Além do caminho, do tipo de conteúdo e do tamanho de cada arquivo (em bytes), você também pode exibir a data da última modificação, a codificação de conteúdo e o hash de conteúdo usando a blob_list()
função.
Carregar dados em massa de blobs
O Woodgrove expressou o desejo de ter os dados históricos armazenados em arquivos CSV em sua conta de Armazenamento de Blob do Azure. Em seguida, os dados devem ser carregados diretamente em tabelas distribuídas no banco de dados do Azure Cosmos DB para PostgreSQL. Para carregar dados em massa de arquivos no armazenamento de blob, pg_azure_storage
estende o comando nativo do PostgreSQL COPY
para torná-lo capaz de lidar com URLs de recursos do Armazenamento de Blob do Azure. Esse recurso é habilitado por padrão e você pode gerenciá-lo usando a pg_azure_storage.enable_copy_command
configuração.
Usando o comando, você pode executar o COPY
seguinte para ingerir dados do usuário na payment_users
tabela:
-- Bulk load data from the user.csv file in Blob Storage into the payment_users table
COPY payment_users FROM 'https://stlearnpostgresql.blob.core.windows.net/historical-data/users.csv';
Uma diferença crucial a ser observada ao executar o COPY
comando com é que você não pode ter um antes COPY
e deve terminar a linha com pg_azure_storage
um \
ponto-e-vírgula. Esse requisito ocorre porque o COPY
comando é executado no nó coordenador ao usar a pg_azure_storage
extensão. A \COPY
versão é usada ao executar o comando no psql
cliente.
A saída do COPY
comando especificará o número de linhas copiadas na tabela, como COPY 264197
.