As tabelas externas do OSS permitem mover dados em massa entre o Object Storage Service (OSS) e o AnalyticDB for PostgreSQL, inclusive entre contas da Alibaba Cloud.
Limitações
A instância do AnalyticDB for PostgreSQL e o bucket do OSS devem estar na mesma região.
Formatos de objeto compatíveis
As tabelas externas do OSS são compatíveis com os seguintes formatos:
Objetos CSV e TEXT não compactados
Objetos CSV e TEXT compactados com GZIP
Objetos binários ORC
Para obter informações sobre o mapeamento de tipos de dados ORC, consulte a seção "Mapeamentos de tipos de dados entre ORC e AnalyticDB for PostgreSQL" em Mapeamentos de tipos de dados para tabelas externas do OSS.
Pré-requisitos
Antes de começar, verifique se você criou os seguintes objetos nesta ordem:
Um servidor OSS: registra o bucket do OSS como source de dados Foreign Data Wrapper (FDW) no AnalyticDB for PostgreSQL. Consulte a seção "Criar um servidor OSS" em Usar tabelas externas do OSS para análise de data lake.
Um mapeamento de usuário: associa um usuário do banco de dados às credenciais AccessKey que autorizam o acesso ao OSS. Consulte a seção "Criar um mapeamento de usuário para o servidor OSS" em Usar tabelas externas do OSS para análise de data lake.
Uma tabela externa do OSS: define o esquema e a localização dos dados no OSS. Consulte a seção "Criar uma tabela externa do OSS" em Usar tabelas externas do OSS para análise de data lake.
Esses três objetos formam uma cadeia: o servidor identifica o bucket do OSS, o mapeamento de usuário fornece as credenciais de acesso e a tabela externa expõe os dados do OSS como uma tabela consultável.
Importar dados do OSS
Os passos a seguir apresentam um exemplo completo de importação de um arquivo CSV do OSS para uma tabela do AnalyticDB for PostgreSQL.
-
Faça upload de um arquivo CSV para o OSS. Este exemplo utiliza um arquivo chamado
example.csv. Para etapas de preparação, consulte a seção "Preparações" em Usar tabelas externas do OSS para análise de data lake. Para instruções de upload, consulte Fazer upload de objetos.Use o mesmo formato de codificação para os objetos no OSS e para o banco de dados a fim de evitar sobrecarga de conversão. A codificação padrão do banco de dados é UTF-8.
Conecte-se a um banco de dados AnalyticDB for PostgreSQL. Consulte Conexão do cliente.
-
Crie um servidor OSS.
Parâmetro
Descrição
endpointEndpoint interno do bucket do OSS. Apenas endpoints internos são compatíveis. Consulte a seção "Nuvem pública da Alibaba Cloud" em Regiões e endpoints.
bucketNome do bucket do OSS. O bucket deve estar na mesma região da instância do AnalyticDB for PostgreSQL.
CREATE SERVER oss_serv FOREIGN DATA WRAPPER oss_fdw OPTIONS ( endpoint 'oss-cn-********.aliyuncs.com', bucket 'adb-pg' ); -
Crie um mapeamento de usuário.
Para transferência de dados entre contas, use o AccessKey ID e o AccessKey secret da conta da Alibaba Cloud proprietária do bucket do OSS.
CREATE USER MAPPING FOR PUBLIC SERVER oss_serv OPTIONS ( id 'LTAI****************', key 'yourAccessKeySecret' ); -
Crie uma tabela externa do OSS chamada
ossexample.CREATE FOREIGN TABLE ossexample ( date text, time text, open float, high float, low float, volume int ) SERVER oss_serv OPTIONS (dir 'oss_adb/', format 'csv'); -
Importe os dados usando um dos métodos a seguir. Método 1: INSERT (recomendado para carregar em uma tabela existente) Crie uma tabela local com o mesmo esquema da tabela externa e insira os dados.
CREATE TABLE adbexample ( date text, time text, open float, high float, low float, volume int ) WITH (APPENDONLY=TRUE, ORIENTATION=COLUMN, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5); INSERT INTO adbexample SELECT * FROM ossexample;Método 2: CREATE TABLE AS (cria a tabela e carrega os dados em uma única etapa)
CREATE TABLE adbexample AS SELECT * FROM ossexample DISTRIBUTED BY (volume);Todos os nós de computação leem objetos do OSS em paralelo por meio de um mecanismo de polling. Por padrão, quatro objetos são lidos simultaneamente. Para obter o melhor throughput, defina o número de objetos paralelos como um múltiplo do total de núcleos dos nós de computação (nós de computação × núcleos por nó). Consulte a seção "Dividir objetos grandes" em Melhores práticas para operações em tabelas externas do OSS .
Se a importação falhar (por exemplo, devido a incompatibilidade de codificação de arquivo ou tipo de dados), verifique se o esquema da tabela externa corresponde à estrutura do objeto no OSS e se as configurações de codificação estão consistentes.
Exportar dados para o OSS
-
Crie uma tabela externa do OSS que aponte para o diretório de saída.
CREATE FOREIGN TABLE foreign_x (i int, j int) SERVER oss_serv OPTIONS (format 'csv', dir 'tt_csv/'); -
Exporte os dados de uma tabela local para o OSS.
INSERT INTO foreign_x SELECT * FROM local_x; Verifique a exportação acessando o diretório
tt_csv/no bucket do OSS. Cada nó de computação grava objetos em paralelo; portanto, vários arquivos estarão visíveis (um ou mais por segmento).
Convenção de nomenclatura para objetos exportados
Os objetos exportados seguem este formato de nomenclatura:
{tablename | prefix}_{timestamp}_{random_key}_{seg}{segment_id}_{fileno}.{ext}[.gz]
|
Componente |
Descrição |
|
|
|
prefix}` |
Se |
|
|
Horário de início da exportação, no formato |
|
|
|
Valor de chave aleatória. |
|
|
|
Identificador do segmento. Por exemplo, |
|
|
|
Número do segmento do objeto, começando em |
|
|
|
Formato do objeto: |
|
|
|
Presente quando o objeto estiver compactado com GZIP. |
Exemplo: exportação para um objeto CSV compactado com GZIP usando o parâmetro dir
CREATE FOREIGN TABLE fdw_t_out_1(a int)
SERVER oss_serv
OPTIONS (format 'csv', filetype 'gzip', dir 'test/');
Os objetos exportados recebem nomes neste formato:
fdw_t_out_1_20200805110207_1718599661_seg-1_0.csv.gz
Exemplo: exportação para um objeto ORC usando o parâmetro prefix
CREATE FOREIGN TABLE fdw_t_out_2(a int)
SERVER oss_serv
OPTIONS (format 'orc', prefix 'test/my_orc_test');
Os objetos exportados recebem nomes neste formato:
my_orc_test_20200924153043_1737154096_seg0_0.orc