Todos os produtos
Search
Central de documentação

AnalyticDB:Use an OSS foreign table to export data to OSS at high speed

Última atualização: Jun 27, 2026

O AnalyticDB for PostgreSQL permite exportar dados para o Object Storage Service (OSS) em paralelo usando o recurso de tabela externa do OSS (gpossext). O gpossext oferece suporte aos formatos TEXT e CSV, com compressão GZIP opcional para reduzir o tamanho dos arquivos e os custos de armazenamento.

Nota

Este recurso aplica-se a instâncias do AnalyticDB for PostgreSQL V6.0. Para a versão V7.0, consulte Usar tabelas externas do OSS para importar e exportar dados.

Como funciona

OSS

Cada nó de computação exporta dados diretamente para o OSS em paralelo, sem redistribuição entre os nós. A exportação segue um padrão de três etapas: instale a extensão oss_ext uma vez por banco de dados, crie uma tabela externa gravável e execute uma instrução INSERT INTO ... SELECT.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma instância do AnalyticDB for PostgreSQL V6.0

  • Um bucket do OSS na mesma região da sua instância

  • Um AccessKey ID e um AccessKey secret com permissão de gravação no bucket. Para criar um par de AccessKey, consulte Criar um par de AccessKey

Importante

Mantenha o bucket do OSS e a instância do AnalyticDB for PostgreSQL na mesma região para maximizar o throughput e evitar custos de transferência entre regiões.

Configurar a extensão

Execute a seguinte instrução uma vez por banco de dados para instalar a extensão oss_ext antes de exportar dados:

CREATE EXTENSION IF NOT EXISTS oss_ext;

Essa execução é necessária apenas uma vez por banco de dados, não sendo preciso repeti-la antes de cada exportação.

Exportar dados para o OSS

Etapa 1: Criar uma tabela externa gravável

CREATE WRITABLE EXTERNAL TABLE table_name
    ( column_name data_type [, ...] | LIKE other_table )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
               [( [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [ESCAPE [AS] 'escape' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] 'quote']
               [DELIMITER [AS] 'delimiter']
               [NULL [AS] 'null string']
               [FORCE QUOTE column [, ...]] ]
               [ESCAPE [AS] 'escape'] )]
    [ ENCODING 'encoding' ]
    [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]

ossprotocol:
    oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name]
     id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

A palavra-chave WRITABLE é obrigatória. Ela define uma tabela externa somente de gravação para exportação de dados.

Parâmetros de conexão e caminho

Parâmetro

Descrição

oss://oss_endpoint

Endpoint do OSS no formato oss://oss_endpoint. Exemplo: oss://oss-cn-hangzhou.aliyuncs.com. Ao acessar a partir de um servidor Alibaba Cloud, use um endpoint interno (contém a palavra-chave internal) para evitar tráfego de Internet.

id

Seu AccessKey ID.

key

Seu AccessKey secret.

bucket

Bucket do OSS de destino. Crie o bucket antes de executar a exportação.

prefix

Prefixo de caminho para os arquivos exportados. Não há suporte para expressões regulares. Os arquivos exportados usam o prefixo como início do nome do arquivo. Por exemplo, definir prefix=osstest/exp/outfromhdb grava arquivos no caminho osstest/exp/ com nomes começando por outfromhdb. Mutuamente exclusivo com dir.

dir

Diretório do OSS de destino. O caminho deve terminar com /, por exemplo, test/mydir/. Os arquivos exportados são nomeados no formato filename.x, onde x é um número (os valores podem não ser consecutivos). Mutuamente exclusivo com prefix.

Parâmetros de formato

Parâmetro

Descrição

FORMAT

Formato do arquivo. Valores suportados: TEXT e CSV.

ENCODING

Codificação de caracteres para o conteúdo do arquivo, como UTF-8.

DISTRIBUTED BY

Chave de distribuição que determina qual nó de computação grava cada linha.

Caracteres de controle padrão

Todos os caracteres de controle devem ser caracteres de byte único.

Caractere de controle

TEXT

CSV

DELIMITER

\t (tabulação)

, (vírgula)

QUOTE

" (aspas duplas)

" (aspas duplas)

ESCAPE

N/A

" (aspas duplas)

NULL

\N

String vazia sem aspas

Regras para parâmetros de formato:

  • Ao especificar DELIMITER, também especifique QUOTE.

  • QUOTE e DELIMITER não podem ser o mesmo caractere.

  • Se os dados do usuário contiverem caracteres QUOTE, inclua caracteres ESCAPE para distinguir os dados do usuário dos caracteres de controle.

Parâmetros de desempenho e compressão

Parâmetro

Padrão

Valores válidos

Descrição

compressiontype

none

none, gzip

Formato de compressão para arquivos exportados. Apenas GZIP é suportado.

num_parallel_worker

3

1–8

Número de threads de compressão paralelas por segmento.

oss_flush_block_size

32 MB

1–128 MB

Tamanho de cada bloco de dados gravado no OSS.

oss_file_max_size

1024 MB

8–4000 MB

Tamanho máximo do arquivo. Quando um arquivo atinge esse limite, os dados subsequentes são gravados em um novo arquivo.

oss_connect_timeout

10 s

Tempo limite de conexão.

oss_dns_cache_timeout

60 s

Tempo limite para resolução de DNS.

oss_speed_limit

1024 bytes/s

Taxa mínima aceitável de transferência. Configure junto com oss_speed_time.

oss_speed_time

15 s

Duração máxima que a taxa de transferência pode ficar abaixo de oss_speed_limit antes de acionar um tempo limite. Configure junto com oss_speed_limit.

Nota

Com os valores padrão, ocorre um tempo limite se a taxa de transferência permanecer abaixo de 1 KB/s por 15 segundos consecutivos. Para mais informações, consulte Tratamento de erros.

Etapa 2: Executar a exportação

INSERT INTO <external_table> SELECT * FROM <source_table>;

Cada nó de computação exporta seus dados locais diretamente para o OSS. Nenhuma redistribuição de dados ocorre entre os nós.

Exemplo

Este exemplo exporta dados de uma tabela local chamada example para um bucket do OSS.

1. Crie a tabela de origem:

CREATE TABLE example
    (date text, time text, open float,
     high float, low float, volume int)
    DISTRIBUTED BY (date);

2. Crie a tabela externa gravável.

Usando prefix para especificar o caminho de saída:

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    prefix=osstest/exp/outfromhdb id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

Usando dir para especificar o caminho de saída:

CREATE WRITABLE EXTERNAL TABLE ossexample_exp
    (date text, time text, open float, high float,
     low float, volume int)
    LOCATION ('oss://oss-cn-hangzhou.aliyuncs.com
    dir=osstest/exp/ id=<your-access-key-id>
    key=<your-access-key-secret> bucket=testbucket')
    FORMAT 'csv'
    DISTRIBUTED BY (date);

Substitua os espaços reservados pelos seus valores reais:

Espaço reservado

Descrição

<your-access-key-id>

Seu AccessKey ID

<your-access-key-secret>

Seu AccessKey secret

3. Exporte os dados:

INSERT INTO ossexample_exp SELECT * FROM example;

4. Verifique a exportação:

Execute EXPLAIN para confirmar que cada nó de computação exporta dados diretamente para o OSS:

EXPLAIN INSERT INTO ossexample_exp SELECT * FROM example;

Saída esperada:

                          QUERY PLAN
---------------------------------------------------------------
 Insert (slice0; segments: 3)  (rows=1 width=92)
   ->  Seq Scan on example  (cost=0.00..0.00 rows=1 width=92)
(2 rows)

O valor segments: 3 indica que todos os três nós de computação exportam dados em paralelo. Após a conclusão da exportação, verifique se os arquivos aparecem no console do OSS no caminho especificado.

Considerações sobre desempenho

Para maximizar o throughput de exportação:

  • Utilize armazenamento orientado a colunas com compressão ao criar tabelas de origem. Exemplo:

    WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576)

    Para mais informações, consulte CREATE TABLE.

  • Mantenha o bucket do OSS e a instância do AnalyticDB for PostgreSQL na mesma região.

  • Ajuste num_parallel_worker, oss_flush_block_size e oss_file_max_size com base no volume de dados e nas condições de rede.

Limitações

  • Apenas instâncias V6.0 são suportadas. Para V7.0, use tabelas externas do OSS.

  • Somente os formatos TEXT e CSV são suportados.

  • Apenas a compressão GZIP é suportada (compressiontype=gzip).

  • prefix e dir são mutuamente exclusivos — especifique apenas um por tabela externa.

  • Não há suporte para expressões regulares em prefix.

  • Todos os caracteres de controle de formato (DELIMITER, QUOTE, ESCAPE, NULL) devem ser caracteres de byte único.

  • A sintaxe da tabela externa segue as convenções do Greenplum Database, exceto pelos parâmetros relacionados à localização.

Solução de problemas

Quando ocorre um erro de exportação, o log de erros inclui:

Campo

Descrição

code

Código de status HTTP da solicitação com falha.

error_code

Código de erro retornado pelo OSS.

error_msg

Mensagem de erro retornada pelo OSS.

req_id

UUID da solicitação com falha. Forneça este ID ao suporte técnico do OSS se o problema persistir.

Para obter uma lista completa de códigos de erro, consulte Respostas de erro. Para corrigir erros relacionados a tempo limite, ajuste os parâmetros oss_speed_limit e oss_speed_time.Respostas de erro da API do OSSRespostas de erro da API do OSS

Consulte também