Compreender a extensão de Armazenamento do Azure

Concluído

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.

Screenshot of the access keys option highlighted in the left-hand menu of the Storage account page.

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 COPYe 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.