Todos os produtos
Search
Central de documentação

AnalyticDB:Analyze data lakes with OSS foreign tables

Última atualização: Jul 03, 2026

Use tabelas externas do OSS para importar e analisar dados do Object Storage Service (OSS). Baseadas no wrapper de dados externos do OSS (FDW), essas tabelas também permitem a importação de dados entre contas.

Limitações

A instância do AnalyticDB for PostgreSQL e o bucket do OSS devem estar na mesma região.

Recursos

O OSS FDW baseia-se na estrutura PostgreSQL Foreign Data Wrapper (FDW) e permite:

  • Importar dados do OSS para tabelas locais orientadas a linhas ou colunas, acelerando a análise.

  • Consultar e analisar diretamente grandes volumes de dados no OSS.

  • Combinar tabelas externas do OSS com tabelas locais para análise.

O OSS FDW oferece suporte a vários formatos de arquivo de dados, incluindo:

Antes de começar

Prepare os dados do OSS

Prepare o arquivo de exemplo example.csv.

Encontre as informações do bucket do OSS

Esta seção descreve como localizar os campos Buckets, Bucket Name, Port e Bucket Domain Name.

  1. Faça login no console do OSS.

  2. No painel de navegação à esquerda, clique em Access from ECS over the VPC (internal network).

  3. Na página Endpoint, clique no bucket desejado.

    Na página Object Management, localize o nome do bucket.

  4. Na página Object Management, localize o caminho do objeto.

  5. No painel de navegação à esquerda, clique em Overview.

  6. Na seção Port da página Overview, localize o endpoint e o nome de domínio do bucket.

    Recomendamos usar o endpoint para Access from ECS over the VPC (internal network).

Obtenha um AccessKey ID e AccessKey Secret

Para obter um AccessKey ID e AccessKey Secret, consulte Criar um AccessKey.

Crie um servidor OSS

Use a instrução CREATE SERVER para criar um servidor OSS. Esse servidor define a conexão com o serviço OSS que você deseja acessar. Para mais informações sobre CREATE SERVER, consulte CREATE SERVER.

Sintaxe

CREATE SERVER server_name
    FOREIGN DATA WRAPPER fdw_name
    [ OPTIONS ( option 'value' [, ... ] ) ]

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

server_name

STRING

Sim

Nome do servidor OSS.

fdw_name

STRING

Sim

Nome do wrapper de dados externos que gerencia o servidor. Defina este parâmetro como oss_fdw.

A tabela a seguir descreve os parâmetros da cláusula OPTIONS.

Parâmetro

Tipo

Obrigatório

Descrição

endpoint

STRING

Sim

Endpoint usado para acessar o OSS. O AnalyticDB for PostgreSQL aceita apenas endpoints internos. Para mais informações, consulte a seção de nuvem pública em Regiões e endpoints.

bucket

STRING

Não

Nome do bucket onde os arquivos de dados estão armazenados. Para detalhes sobre como obter o nome do bucket, consulte Preparações.

Nota
  • Especifique a opção bucket para o servidor OSS ou para o OSS FDW. Para mais informações sobre esta opção quando usada com um OSS FDW, consulte Criar um OSS FDW.

  • Se a opção bucket for especificada tanto para o servidor OSS quanto para o OSS FDW, a opção definida para o OSS FDW terá precedência.

speed_limit

NUMERIC

Não

Quantidade mínima de dados a transferir dentro do período especificado por speed_time para evitar timeout. Unidade: bytes. O valor padrão é 1024.

Use esta opção junto com a opção speed_time.

Nota

Por padrão, ocorre timeout se menos de 1024 bytes de dados forem transferidos em 90 segundos consecutivos. Para mais informações, consulte Tratamento de Erros do SDK do OSS.

speed_time

NUMERIC

Não

Período de tempo dentro do qual a quantidade mínima de transferência de dados especificada por speed_limit deve ser atendida. Unidade: segundos. O valor padrão é 90.

Use esta opção junto com a opção speed_limit.

Nota

Por padrão, ocorre timeout se menos de 1024 bytes de dados forem transferidos em 90 segundos consecutivos. Para mais informações, consulte Tratamento de Erros do SDK do OSS.

connect_timeout

NUMERIC

Não

Tempo limite de conexão. Unidade: segundos. O valor padrão é 10.

dns_cache_timeout

NUMERIC

Não

Tempo limite do cache DNS. Unidade: segundos. O valor padrão é 60.

Exemplos

CREATE SERVER oss_serv
    FOREIGN DATA WRAPPER oss_fdw
    OPTIONS (
        endpoint 'oss-cn-********.aliyuncs.com',
        bucket 'adb-pg'
  );

Também é possível usar a instrução ALTER SERVER para modificar a configuração do servidor OSS. Para mais informações, consulte ALTER SERVER.

Exemplos:

  • Modifique uma opção do servidor OSS.

    ALTER SERVER oss_serv OPTIONS(SET endpoint 'oss-cn-********.aliyuncs.com');
  • Adicione uma opção ao servidor OSS.

    ALTER SERVER oss_serv OPTIONS(ADD connect_timeout '20');
  • Remova uma opção do servidor OSS.

    ALTER SERVER oss_serv OPTIONS(DROP connect_timeout);

Para excluir o servidor OSS, use a instrução DROP SERVER. Para mais informações, consulte DROP SERVER.

Crie um mapeamento de usuário do OSS

Após criar um servidor OSS, crie também um mapeamento de usuário. A instrução CREATE USER MAPPING define um mapeamento entre um usuário no banco de dados AnalyticDB for PostgreSQL e as credenciais para acessar o servidor OSS. Para mais informações, consulte CREATE USER MAPPING.

Sintaxe

CREATE USER MAPPING FOR { username | USER | CURRENT_USER | PUBLIC }
    SERVER <server_name>
    [ OPTIONS ( option 'value' [, ... ] ) ]

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

username

string

Sim. Especifique uma das quatro opções.

Nome de um usuário existente a ser mapeado na instância AnalyticDB for PostgreSQL.

USER

string

Mapeia o usuário atual da instância AnalyticDB for PostgreSQL.

CURRENT_USER

string

PUBLIC

string

Cria um mapeamento público aplicável a todos os usuários da instância AnalyticDB for PostgreSQL, incluindo aqueles criados posteriormente.

server_name

string

Sim

Nome do servidor OSS.

A tabela a seguir descreve os parâmetros da cláusula OPTIONS.

Parâmetro

Tipo

Obrigatório

Descrição

id

string

Sim

AccessKey ID. Para obter um, consulte Criar um par de AccessKey.

key

string

Sim

AccessKey Secret. Para obter um, consulte Criar um par de AccessKey.

Nota

Ao importar ou exportar dados entre contas da Alibaba Cloud, configure o AccessKey ID e o AccessKey Secret da conta proprietária do bucket do OSS.

Exemplo

CREATE USER MAPPING FOR PUBLIC
    SERVER oss_serv
    OPTIONS (
        id 'LTAI****************',
        key 'yourAccessKeySecret'
    );

Também é possível usar a instrução DROP USER MAPPING para excluir um mapeamento de usuário. Para mais informações, consulte DROP USER MAPPING.

Crie uma tabela externa do OSS

Depois de configurar um servidor OSS e um usuário com acesso a ele, use a instrução CREATE FOREIGN TABLE para criar uma tabela externa do OSS. Para mais informações, consulte CREATE FOREIGN TABLE.

Sintaxe

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
    column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
      [, ... ]
] )
    SERVER server_name
  [ OPTIONS ( option 'value' [, ... ] ) ]

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

table_name

string

Sim

Nome da tabela externa do OSS.

column_name

string

Sim

Nome da coluna.

data_type

string

Sim

Tipo de dados da coluna.

A tabela a seguir lista os parâmetros da cláusula OPTIONS.

Parâmetro

Tipo

Obrigatório

Descrição

filepath

string

Sim. Um destes três parâmetros é obrigatório.

Caminho completo e nome de um único objeto no OSS.

Se você usar este parâmetro, apenas o objeto especificado será selecionado.

prefix

string

Prefixo para os caminhos dos objetos. Apenas objetos cujos caminhos começam com este prefixo são selecionados. Não há suporte a expressões regulares.

Exemplos:

  • Se você definir prefix como test/filename, os seguintes objetos serão importados:

    • test/filename

    • test/filenamexxx

    • test/filename/aa

    • test/filenameyyy/aa

    • test/filenameyyy/bb/aa

  • Se você definir prefix como test/filename/, apenas o seguinte objeto da lista anterior será importado:

    • test/filename/aa

dir

string

O caminho do diretório no OSS deve terminar com /, por exemplo, test/mydir/.

Seleciona todos os objetos no diretório especificado, excluindo objetos em seus subdiretórios.

bucket

string

Não

Nome do bucket que contém os objetos de dados. Consulte Preparações para saber como obter o nome do bucket.

Nota
  • Especifique o parâmetro bucket para o servidor OSS ou para a tabela externa do OSS.

  • Se o parâmetro bucket for especificado tanto para o servidor OSS quanto para a tabela externa do OSS, o valor da tabela externa do OSS terá precedência.

format

string

Sim

Formato do objeto. Valores válidos:

  • csv

  • text

  • orc

  • avro

  • parquet

  • json

    Para mais informações sobre a especificação JSON, consulte Especificação JSON.

  • jsonline

    Representa dados JSON em que cada linha é um objeto JSON válido. Todos os dados legíveis com jsonline também são legíveis com json, mas não o contrário. Recomendamos o uso de jsonline sempre que possível. Para mais informações sobre a especificação JSON Lines, consulte Especificação JSONLINE.

filetype

string

Não

Tipo de compactação do objeto. Valores válidos:

  • plain (padrão): Lê dados binários brutos sem processamento extra.

  • gzip: Lê dados binários brutos e os descompacta usando GZIP.

  • snappy: Lê dados binários brutos e os descompacta usando Snappy.

    Apenas a compactação Snappy padrão tem suporte. Objetos compactados com Hadoop-Snappy não têm suporte.

Nota
  • Este parâmetro aplica-se apenas a objetos nos formatos csv, text, json e jsonline.

  • A opção snappy não aceita objetos nos formatos json e jsonline.

log_errors

boolean

Não

Define se os erros devem ser registrados em um arquivo de log. O valor padrão é false. Para mais informações, consulte Tolerância a falhas.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

segment_reject_limit

numeric

Não

Limiar de erro que causa a interrupção da tarefa de carregamento de dados.

Se o valor incluir um sinal de porcentagem (%), ele representa uma porcentagem de linhas. Caso contrário, representa um número absoluto de linhas. Exemplos:

  • segment_reject_limit = '10': A tarefa para e reporta um erro se o número de linhas com erro exceder 10.

  • segment_reject_limit = '10%': A tarefa para e reporta um erro se o número de linhas com erro exceder 10% do total de linhas processadas.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

header

boolean

Não

Define se o objeto de source contém uma linha de cabeçalho. Valores válidos:

  • true: O objeto contém uma linha de cabeçalho.

  • false (padrão): O objeto não contém uma linha de cabeçalho.

Nota

Este parâmetro aplica-se apenas a objetos no formato csv.

delimiter

string

Não

Delimitador que separa os campos. Deve ser um caractere de byte único.

  • Para objetos csv, o padrão é uma vírgula (,).

  • Para objetos text, o padrão é um caractere de tabulação.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

quote

string

Não

Caractere de citação para campos. Deve ser um caractere de byte único. O padrão é aspas duplas (").

Nota

Este parâmetro aplica-se apenas a objetos no formato csv.

escape

string

Não

Caractere de escape que precede um caractere com significado especial. Deve ser um caractere de byte único. O padrão é aspas duplas (").

Nota

Este parâmetro aplica-se apenas a objetos no formato csv.

null

string

Não

String que representa um valor NULL no objeto de dados.

  • Para o formato csv, o padrão é \N.

  • Para o formato text, o padrão é uma string vazia sem aspas.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

encoding

string

Não

Codificação dos objetos de dados. O padrão é a codificação do cliente.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

force_not_null

boolean

Não

Define se os valores dos campos podem ser strings vazias. Valores válidos:

  • true: Os valores dos campos não podem ser strings vazias.

  • false (padrão): Os valores dos campos podem ser strings vazias.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

force_null

boolean

Não

Define como lidar com strings vazias. Valores válidos:

  • true: Trata todas as strings vazias como NULL, independentemente de estarem entre aspas.

  • false (padrão): Trata apenas strings vazias sem aspas como NULL.

Nota

Este parâmetro aplica-se apenas a objetos nos formatos csv e text.

Exemplo

CREATE FOREIGN TABLE ossexample (
    date text,
    time text,
    open float,
    high float,
    low float,
    volume int
) SERVER oss_serv OPTIONS (dir 'dir_oss_adb/', format 'csv');
Nota

Após criar uma tabela externa do OSS, use um dos seguintes métodos para verificar a quais objetos do OSS a tabela está mapeada:

  • Método 1:

    EXPLAIN VERBOSE SELECT * FROM <OSS foreign table name>;
  • Método 2:

    SELECT * FROM get_oss_table_meta('<OSS foreign table name>');

Também é possível usar a instrução DROP FOREIGN TABLE para remover a tabela externa do OSS. Para mais informações, consulte DROP FOREIGN TABLE.

Consulte e analise dados do OSS

Consulte uma tabela externa do OSS da mesma forma que consulta uma tabela local. Os exemplos a seguir mostram consultas comuns.

  • Consulte dados usando um filtro de chave-valor.

    SELECT * FROM ossexample WHERE volume = 5;
  • Consulte dados usando uma função de agregação.

    SELECT count(*) FROM ossexample WHERE volume = 5;
  • Consulte dados usando as cláusulas GROUP BY e LIMIT.

    SELECT low, sum(volume)
      FROM ossexample
     GROUP BY low
     ORDER BY low
     limit 5;

Análise de junção com tabelas externas do OSS

  1. Crie uma tabela local chamada example e insira dados de teste.

    CREATE TABLE example (id int, volume int);
    INSERT INTO example VALUES(1,1), (2,3), (4,5);
  2. Execute uma consulta de junção nas tabelas example e ossexample.

    SELECT example.volume, min(high), max(low)
    FROM
    ossexample,
    example
    WHERE ossexample.volume = example.volume
    GROUP BY(example.volume)
    ORDER BY example.volume;

Tolerância a falhas

O OSS FDW fornece tolerância a falhas usando os parâmetros log_errors e segment_reject_limit. Isso evita que erros nos dados brutos interrompam as varreduras de uma tabela externa do OSS.

Para mais informações sobre os parâmetros log_errors e segment_reject_limit, consulte Criar uma tabela externa do OSS.

  • Crie uma tabela externa do OSS com tolerância a falhas.

    CREATE FOREIGN TABLE oss_error_sales (id int, value float8, x text)
        SERVER oss_serv
        OPTIONS (log_errors 'true', -- Enable error logging.
                 segment_reject_limit '10', -- Set the reject limit to 10 rows. The scan is aborted if this limit is exceeded.
                 dir 'error_sales/', -- Specify the OSS object directory for the foreign table.
                 format 'csv', -- Specify the object format as CSV.
                 encoding 'utf8'); -- Specify the encoding. 
  • Consulte o log de erros.

    SELECT * FROM gp_read_error_log('oss_error_sales');
  • Limpe o log de erros.

    SELECT gp_truncate_error_log('oss_error_sales');

Perguntas frequentes

P: Excluir dados de uma tabela externa do OSS também exclui os dados subjacentes no OSS?

R: Não. Excluir dados de uma tabela externa do OSS não exclui os dados subjacentes no OSS.

Documentação relacionada