Partilhar via


pg_azure_storage extensão

APLICA-SE A: Azure Cosmos DB para PostgreSQL (alimentado pela extensão de banco de dados Citus para PostgreSQL)

A extensão pg_azure_storage permite carregar dados em vários formatos de arquivo diretamente do armazenamento de blobs do Azure para seu cluster do Azure Cosmos DB for PostgreSQL. Ativar a extensão também desbloqueia novos recursos do comando COPY . Contêineres com nível de acesso "Privado" ou "Blob" requer a adição de chave de acesso privada.

Você pode criar a extensão executando:

SELECT create_extension('azure_storage');

azure_storage.account_add

Função permite adicionar acesso a uma conta de armazenamento.

azure_storage.account_add
        (account_name_p text
        ,account_key_p text);

Argumentos

account_name_p

Uma conta de armazenamento de blob do Azure (ABS) contém todos os seus objetos ABS: blobs, arquivos, filas e tabelas. A conta de armazenamento fornece um namespace exclusivo para seu ABS que pode ser acessado de qualquer lugar do mundo por HTTPS.

account_key_p

Suas chaves de acesso de armazenamento de blob do Azure (ABS) são semelhantes a uma senha de root para sua conta de armazenamento. Tenha sempre o cuidado de proteger as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança. A chave da conta é armazenada em uma tabela acessível pelo superusuário do postgres, azure_storage_admin e todas as funções concedidas a essas permissões de administrador. Para ver quais contas de armazenamento existem, use a função account_list.

azure_storage.account_remove

Função permite revogar o acesso da conta à conta de armazenamento.

azure_storage.account_remove
        (account_name_p text);

Argumentos

account_name_p

A conta de armazenamento de blobs do Azure (ABS) contém todos os seus objetos ABS: blobs, arquivos, filas e tabelas. A conta de armazenamento fornece um namespace exclusivo para seu ABS que pode ser acessado de qualquer lugar do mundo por HTTPS.

azure_storage.account_user_add

A função permite adicionar acesso para uma função a uma conta de armazenamento.

azure_storage.account_user_add
        ( account_name_p text
        , user_p regrole);

Argumentos

account_name_p

Uma conta de armazenamento de blob do Azure (ABS) contém todos os seus objetos ABS: blobs, arquivos, filas e tabelas. A conta de armazenamento fornece um namespace exclusivo para seu ABS que pode ser acessado de qualquer lugar do mundo por HTTPS.

user_p

Função criada pelo usuário visível no cluster.

Nota

account_user_add,account_add,account_remove,account_user_remove as funções exigem permissões de configuração para cada nó individual no cluster.

azure_storage.account_user_remove

A função permite remover o acesso de uma função a uma conta de armazenamento.

azure_storage.account_user_remove
        (account_name_p text
        ,user_p regrole);

Argumentos

account_name_p

Uma conta de armazenamento de blob do Azure (ABS) contém todos os seus objetos ABS: blobs, arquivos, filas e tabelas. A conta de armazenamento fornece um namespace exclusivo para seu ABS que pode ser acessado de qualquer lugar do mundo por HTTPS.

user_p

Função criada pelo usuário visível no cluster.

azure_storage.lista_de_contas

A função lista a conta & função que tem acesso ao armazenamento de blob do Azure.

azure_storage.account_list
        (OUT account_name text
        ,OUT allowed_users regrole[]
        )
Returns TABLE;

Argumentos

account_name

A conta de armazenamento de blobs do Azure (ABS) contém todos os seus objetos ABS: blobs, arquivos, filas e tabelas. A conta de armazenamento fornece um namespace exclusivo para seu ABS que pode ser acessado de qualquer lugar do mundo por HTTPS.

allowed_users

Lista os usuários que têm acesso ao armazenamento de blob do Azure.

Tipo de retorno

TABELA

azure_storage.blob_list

A função lista os arquivos de blob disponíveis dentro de um contêiner de usuário com suas propriedades.

azure_storage.blob_list
        (account_name text
        ,container_name text
        ,prefix text DEFAULT ''::text
        ,OUT path text
        ,OUT bytes bigint
        ,OUT last_modified timestamp with time zone
        ,OUT etag text
        ,OUT content_type text
        ,OUT content_encoding text
        ,OUT content_hash text
        )
Returns SETOF record;

Argumentos

account_name

O storage account name fornece um namespace exclusivo para seus dados de armazenamento do Azure que pode ser acessado de qualquer lugar do mundo por HTTPS.

container_name

Um contentor organiza um conjunto de blobs, de forma semelhante a um diretório num sistema de ficheiros. Uma conta de armazenamento pode incluir um número ilimitado de contentores, e um contentor pode armazenar um número ilimitado de blobs. Um nome de contêiner deve ser um nome DNS válido, pois faz parte do URI exclusivo usado para endereçar o contêiner ou seus blobs. Siga estas regras ao nomear um contêiner:

  • Os nomes dos contêineres podem ter entre 3 e 63 caracteres.
  • Os nomes de contêiner devem começar com uma letra ou número e podem conter apenas letras minúsculas, números e o caractere traço (-).
  • Dois ou mais caracteres de traço consecutivos não são permitidos em nomes de contêiner.

O URI de um contêiner é semelhante a: https://myaccount.blob.core.windows.net/mycontainer

prefixo

Retorna o arquivo do contêiner de blob com iniciais de cadeia de caracteres correspondentes.

path

Caminho qualificado completo do diretório de blob do Azure.

bytes

Tamanho do objeto de arquivo em bytes.

last_modified

Quando o conteúdo do arquivo foi modificado pela última vez.

etag

Uma propriedade ETag é usada para simultaneidade otimista durante as atualizações. Não é um carimbo de data/hora, pois há outra propriedade chamada Timestamp que armazena a última vez que um registro foi atualizado. Por exemplo, se você carregar uma entidade e quiser atualizá-la, o ETag deverá corresponder ao que está armazenado no momento. Definir a ETag apropriada é importante porque, se você tiver vários usuários editando o mesmo item, não deseja que eles substituam as alterações uns dos outros.

content_type

O objeto Blob representa um blob, que é um objeto semelhante a um arquivo de dados brutos imutáveis. Eles podem ser lidos como texto ou dados binários, ou convertidos em um ReadableStream para que seus métodos possam ser usados para processar os dados. Os blobs podem representar dados que não estão necessariamente em um formato nativo de JavaScript.

content_encoding

O Armazenamento do Azure permite definir a propriedade Content-Encoding em um blob. Para conteúdo compactado, você pode definir a propriedade como GZIP. Quando o navegador acessa o conteúdo, ele descompacta automaticamente o conteúdo.

content_hash

Esse hash é usado para verificar a integridade do blob durante o transporte. Quando esse cabeçalho é especificado, o serviço de armazenamento verifica o hash que chegou com o que foi enviado. Se os dois hashes não corresponderem, a operação falhará com o código de erro 400 (Solicitação incorreta).

Tipo de retorno

CONJUNTO de recordes

Nota

Permissões Agora você pode listar contêineres definidos como níveis de acesso Privado e Blob para esse armazenamento, mas apenas como o citus user, que tem a azure_storage_admin função concedida a ele. Se você criar um novo usuário chamado support, ele não terá permissão para acessar o conteúdo do contêiner por padrão.

azure_storage.blob_get

A função permite carregar o conteúdo do arquivo \ arquivos de dentro do contêiner, com suporte adicional na filtragem ou manipulação de dados, antes da importação.

azure_storage.blob_get
        (account_name text
        ,container_name text
        ,path text
        ,decoder text DEFAULT 'auto'::text
        ,compression text DEFAULT 'auto'::text
        ,options jsonb DEFAULT NULL::jsonb
        )
RETURNS SETOF record;

Há uma versão sobrecarregada da função, contendo o parâmetro rec que permite definir convenientemente o registro do formato de saída.

azure_storage.blob_get
        (account_name text
        ,container_name text
        ,path text
        ,rec anyelement
        ,decoder text DEFAULT 'auto'::text
        ,compression text DEFAULT 'auto'::text
        ,options jsonb DEFAULT NULL::jsonb
        )
RETURNS SETOF anyelement;

Argumentos

conta

A conta de armazenamento fornece um namespace exclusivo para seus dados de Armazenamento do Azure que pode ser acessado de qualquer lugar do mundo por HTTPS.

contentor

Um contentor organiza um conjunto de blobs, de forma semelhante a um diretório num sistema de ficheiros. Uma conta de armazenamento pode incluir um número ilimitado de contentores, e um contentor pode armazenar um número ilimitado de blobs. Um nome de contêiner deve ser um nome DNS válido, pois faz parte do URI exclusivo usado para endereçar o contêiner ou seus blobs.

path

Nome do blob existente no contêiner.

rec

Defina a estrutura de saída do registro.

descodificador

Especifique o formato de blob O decodificador pode ser definido como automático (padrão) ou qualquer um dos seguintes valores

Descrição do descodificador

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

compressão

Define o formato de compactação. As opções disponíveis são auto, gzip & none. O uso da auto opção (padrão), adivinha a compressão com base na extensão do arquivo (.gz == gzip). A opção none força a ignorar a extensão e não tentar decodificar. Enquanto o gzip força o uso do decodificador gzip (para quando você tem um arquivo compactado com uma extensão não padrão). Atualmente, não suportamos nenhum outro formato de compressão para a extensão.

options

Para lidar com cabeçalhos personalizados, separadores personalizados, caracteres de escape, options etc, funciona de forma semelhante ao COPY comando no PostgreSQL, parâmetro utiliza para blob_get função.

Tipo de retorno

SETOF Record / qualquerelemento

Nota

Existem quatro funções de utilidade, chamadas como um parâmetro dentro blob_get que ajudam a construir valores para ele. Cada função do utilitário é designada para o descodificador correspondente ao seu nome.

azure_storage.options_csv_get

A função atua como uma função de utilidade chamada como um parâmetro dentro blob_get, que é útil para decodificar o conteúdo csv.

azure_storage.options_csv_get
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,header boolean DEFAULT NULL::boolean
        ,quote text DEFAULT NULL::text
        ,escape text DEFAULT NULL::text
        ,force_not_null text[] DEFAULT NULL::text[]
        ,force_null text[] DEFAULT NULL::text[]
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumentos

delimitador

Especifica o caractere que separa as colunas dentro de cada linha (linha) do arquivo. O padrão é um caractere de tabulação no formato de texto, uma vírgula no formato CSV. Deve ser um único caractere de um byte.

null_string

Especifica a cadeia de caracteres que representa um valor nulo. O padrão é \N (barra invertida-N) no formato de texto e uma cadeia de caracteres vazia sem aspas no formato CSV. Você pode preferir uma cadeia de caracteres vazia, mesmo em formato de texto, para casos em que não deseja distinguir nulos de cadeias de caracteres vazias.

Especifica que o arquivo contém uma linha de cabeçalho com os nomes de cada coluna no arquivo. Na saída, a primeira linha contém os nomes das colunas da tabela.

citação

Especifica o caractere de cotação a ser usado quando um valor de dados é cotado. O padrão é aspas duplas. Deve ser um único caractere de um byte.

escape

Especifica o caractere que deve aparecer antes de um caractere de dados que corresponda ao valor QUOTE. O padrão é o mesmo que o valor QUOTE (para que o caractere de cotação seja dobrado se aparecer nos dados). Deve ser um único caractere de um byte.

force_not_null

Não corresponda aos valores das colunas especificadas com a cadeia de caracteres nula. No caso padrão em que a cadeia de caracteres nula está vazia, isso significa que os valores vazios são lidos como cadeias de caracteres de comprimento zero em vez de nulos, mesmo quando não estão entre aspas.

force_null

Corresponda os valores das colunas especificadas com a cadeia de caracteres nula, mesmo que ela tenha sido citada, e se uma correspondência for encontrada, defina o valor como NULL. No caso padrão em que a cadeia de caracteres nula está vazia, ela converte uma cadeia de caracteres vazia entre aspas em NULL.

content_encoding

Especifica que o arquivo é codificado no encoding_name. Se a opção for omitida, a codificação do cliente atual será usada.

Tipo de retorno

jsonb

azure_storage.options_copy

A função atua como uma função de utilidade chamada como um parâmetro dentro blob_get.

azure_storage.options_copy
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,header boolean DEFAULT NULL::boolean
        ,quote text DEFAULT NULL::text
        ,escape text DEFAULT NULL::text
        ,force_quote text[] DEFAULT NULL::text[]
        ,force_not_null text[] DEFAULT NULL::text[]
        ,force_null text[] DEFAULT NULL::text[]
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumentos

delimitador

Especifica o caractere que separa as colunas dentro de cada linha (linha) do arquivo. O padrão é um caractere de tabulação no formato de texto, uma vírgula no formato CSV. Deve ser um único caractere de um byte.

null_string

Especifica a cadeia de caracteres que representa um valor nulo. O padrão é \N (barra invertida-N) no formato de texto e uma cadeia de caracteres vazia sem aspas no formato CSV. Você pode preferir uma cadeia de caracteres vazia, mesmo em formato de texto, para casos em que não deseja distinguir nulos de cadeias de caracteres vazias.

cabeçalho

Especifica que o arquivo contém uma linha de cabeçalho com os nomes de cada coluna no arquivo. Na saída, a primeira linha contém os nomes das colunas da tabela.

citação

Especifica o caractere de cotação a ser usado quando um valor de dados é cotado. O padrão é aspas duplas. Deve ser um único caractere de um byte.

escape

Especifica o caractere que deve aparecer antes de um caractere de dados que corresponda ao valor QUOTE. O padrão é o mesmo que o valor QUOTE (para que o caractere de cotação seja dobrado se aparecer nos dados). Deve ser um único caractere de um byte.

force_quote

Força a cotação a ser usada para todos os valores não-NULL em cada coluna especificada. A saída NULL nunca é citada. Se * for especificado, valores não NULL serão citados em todas as colunas.

force_not_null

Não corresponda aos valores das colunas especificadas com a cadeia de caracteres nula. No caso padrão em que a cadeia de caracteres nula está vazia, isso significa que os valores vazios são lidos como cadeias de caracteres de comprimento zero em vez de nulos, mesmo quando não estão entre aspas.

force_null

Corresponda os valores das colunas especificadas com a cadeia de caracteres nula, mesmo que ela tenha sido citada, e se uma correspondência for encontrada, defina o valor como NULL. No caso padrão em que a cadeia de caracteres nula está vazia, ela converte uma cadeia de caracteres vazia entre aspas em NULL.

content_encoding

Especifica que o arquivo é codificado no encoding_name. Se a opção for omitida, a codificação do cliente atual será usada.

Tipo de retorno

jsonb

azure_storage.options_tsv

A função atua como uma função de utilidade chamada como um parâmetro dentro blob_get. É útil para decodificar o conteúdo tsv.

azure_storage.options_tsv
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumentos

delimitador

Especifica o caractere que separa as colunas dentro de cada linha (linha) do arquivo. O padrão é um caractere de tabulação no formato de texto, uma vírgula no formato CSV. Deve ser um único caractere de um byte.

null_string

Especifica a cadeia de caracteres que representa um valor nulo. O padrão é \N (barra invertida-N) no formato de texto e uma cadeia de caracteres vazia sem aspas no formato CSV. Você pode preferir uma cadeia de caracteres vazia, mesmo em formato de texto, para casos em que não deseja distinguir nulos de cadeias de caracteres vazias.

content_encoding

Especifica que o arquivo é codificado no encoding_name. Se a opção for omitida, a codificação do cliente atual será usada.

Tipo de retorno

jsonb

azure_storage.options_binary

A função atua como uma função de utilidade chamada como um parâmetro dentro blob_get. É útil para decodificar o conteúdo binário.

azure_storage.options_binary
        (content_encoding text DEFAULT NULL::text)
Returns jsonb;

Argumentos

content_encoding

Especifica que o arquivo é codificado no encoding_name. Se essa opção for omitida, a codificação do cliente atual será usada.

Tipo de Retorno

jsonb

Nota

Permissões Agora você pode listar contêineres definidos como níveis de acesso Privado e Blob para esse armazenamento, mas apenas como o citus user, que tem a azure_storage_admin função concedida a ele. Se você criar um novo usuário chamado support, ele não terá permissão para acessar o conteúdo do contêiner por padrão.

Exemplos

Os exemplos usados usam uma conta (pgquickstart) de armazenamento do Azure de exemplo com arquivos personalizados carregados para adicionar à cobertura de diferentes casos de uso. Podemos começar criando a tabela usada em todo o conjunto de exemplos usados.

CREATE TABLE IF NOT EXISTS public.events
        (
         event_id bigint
        ,event_type text
        ,event_public boolean
        ,repo_id bigint
        ,payload jsonb
        ,repo jsonb
        ,user_id bigint
        ,org jsonb
        ,created_at timestamp without time zone
        );

Adicionar chave de acesso da conta de armazenamento (obrigatório para o nível de acesso = privado)

O exemplo ilustra a adição de chave de acesso para a conta de armazenamento para obter acesso para consulta de uma sessão no cluster do Azure Cosmos DB para Postgres.

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

Gorjeta

Na sua conta de armazenamento, abra as chaves de acesso. Copie o nome da conta de armazenamento e copie a seção Chave da chave1 (você deve selecionar Mostrar ao lado da chave primeiro).

Captura de ecrã da secção Segurança + chaves de acesso de rede > de uma página de Armazenamento de Blobs do Azure no portal do Azure.

Removendo a chave de acesso da conta de armazenamento

O exemplo ilustra a remoção da chave de acesso de uma conta de armazenamento. Essa ação resultaria na remoção do acesso a arquivos hospedados em bucket privado no contêiner.

SELECT azure_storage.account_remove('pgquickstart');

Adicionando acesso para uma função ao armazenamento de Blob do Azure

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

Listar todas as funções com acesso no armazenamento de Blob do Azure

SELECT * FROM azure_storage.account_list();

Removendo as funções com acesso no armazenamento de Blob do Azure

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

Listar os objetos dentro de um public contêiner

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer');

Listar os objetos dentro de um private contêiner

SELECT * FROM azure_storage.blob_list('pgquickstart','privatecontainer');

Nota

A adição da chave de acesso é obrigatória.

Listar os objetos com iniciais de cadeia de caracteres específicas dentro do contêiner público

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer','e');

Alternativamente

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer') WHERE path LIKE 'e%';

Ler conteúdo de um objeto em um contêiner

A blob_get função recupera um arquivo do armazenamento de blob. Para que blob_get saiba como analisar os dados, você pode passar um valor (NULL::table_name), que tem o mesmo formato do arquivo.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv.gz'
        , NULL::events)
LIMIT 5;

Alternativamente, podemos definir explicitamente as colunas na FROM cláusula.

SELECT * FROM azure_storage.blob_get('pgquickstart','publiccontainer','events.csv')
AS res (
         event_id BIGINT
        ,event_type TEXT
        ,event_public BOOLEAN
        ,repo_id BIGINT
        ,payload JSONB
        ,repo JSONB
        ,user_id BIGINT
        ,org JSONB
        ,created_at TIMESTAMP WITHOUT TIME ZONE)
LIMIT 5;

Utilizar a opção de descodificador

O exemplo ilustra o uso da decoder opção. Normalmente, o formato é inferido a partir da extensão do arquivo, mas quando o conteúdo do arquivo não tem uma extensão correspondente, você pode passar o argumento do decodificador.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events'
        , NULL::events
        , decoder := 'csv')
LIMIT 5;

Use a compactação com a opção de decodificador

O exemplo mostra como impor o uso da compactação gzip em um arquivo compactado gzip sem uma extensão .gz padrão.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events-compressed'
        , NULL::events
        , decoder := 'csv'
        , compression := 'gzip')
LIMIT 5;

Importar conteúdo filtrado & modificar antes de carregar do objeto de formato csv

O exemplo ilustra a possibilidade de filtrar & modificar o conteúdo que está sendo importado do objeto no contêiner antes de carregá-lo em uma tabela SQL.

SELECT concat('P-',event_id::text) FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv'
        , NULL::events)
WHERE event_type='PushEvent'
LIMIT 5;

Consultar conteúdo de arquivo com cabeçalhos, separadores personalizados, caracteres de escape

Você pode usar separadores personalizados e caracteres de escape passando o resultado de azure_storage.options_copy para o options argumento.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events_pipe.csv'
        ,NULL::events
        ,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
        );

Consulta de agregação no conteúdo de um objeto no contêiner

Dessa forma, você pode consultar dados sem importá-los.

SELECT event_type,COUNT(1) FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv'
        , NULL::events)
GROUP BY event_type
ORDER BY 2 DESC
LIMIT 5;

Próximos passos