Todos los productos
Search
Centro de documentos

AnalyticDB:Uso de una tabla externa para importar datos de OSS

Última actualización: Sep 23, 2026

AnalyticDB for PostgreSQL puede importar datos de Object Storage Service (OSS) en paralelo mediante la función de tablas externas gpossext. Cada nodo de cómputo lee los objetos de OSS de forma simultánea, por lo que este método es mucho más rápido que la inserción fila por fila en cargas masivas de datos.

Esta función solo aplica a instancias de AnalyticDB for PostgreSQL V6.0. Para la versión V7.0, consulte Uso de tablas externas de OSS para importar y exportar datos .

Funcionamiento

La función gpossext amplía AnalyticDB for PostgreSQL con un controlador de protocolo oss://. Después de instalar la extensión oss_ext, se define una tabla externa de lectura que se asigna a los objetos de OSS. Al ejecutar INSERT INTO ... SELECT * FROM, cada nodo de cómputo lee un subconjunto de objetos de OSS en paralelo mediante un mecanismo de sondeo. Posteriormente, redistribuye las filas hacia las particiones de destino correctas.

OSS

gpossext lee archivos TEXT y CSV, con o sin compresión GZIP.

La sintaxis para crear y usar tablas externas es la misma que en Greenplum Database, excepto por la sintaxis de los parámetros relacionados con la ubicación.

Requisitos previos

Antes de empezar, compruebe que cuenta con lo siguiente:

  • Una instancia de AnalyticDB for PostgreSQL V6.0.

  • Un bucket de OSS en la misma región que su instancia.

  • Un AccessKey ID y un AccessKey secret con permisos de lectura sobre el bucket.

  • Los datos de origen ya cargados en OSS como archivos TEXT o CSV (sin comprimir o comprimidos con GZIP).

Importación de datos desde OSS

Paso 1: Instalar la extensión oss_ext

Ejecute la siguiente instrucción en cada base de datos que requiera acceso a OSS:

CREATE EXTENSION IF NOT EXISTS oss_ext;

Paso 2: Distribuir los archivos de origen para lecturas en paralelo

Cada nodo de cómputo utiliza un mecanismo de sondeo para reclamar objetos de OSS. Para obtener el mejor throughput, establezca la cantidad de objetos de OSS como un múltiplo entero del número de nodos de cómputo de su instancia. Por ejemplo, si tiene 4 nodos de cómputo, use 4, 8 o 12 objetos.

Para obtener más información sobre cómo los nodos de cómputo distribuyen el trabajo, consulte Overview of OSS foreign tables.

Paso 3: Crear una tabla externa de lectura

CREATE [READABLE] EXTERNAL TABLE tablename
    ( columnname datatype [, ...] | LIKE othertable )
    LOCATION ('ossprotocol')
    FORMAT 'TEXT'
        [( [HEADER]
           [DELIMITER [AS] 'delimiter' | 'OFF']
           [NULL [AS] 'null string']
           [ESCAPE [AS] 'escape' | 'OFF']
           [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
           [FILL MISSING FIELDS] )]
       | 'CSV'
        [( [HEADER]
           [QUOTE [AS] 'quote']
           [DELIMITER [AS] 'delimiter']
           [NULL [AS] 'null string']
           [FORCE NOT NULL column [, ...]]
           [ESCAPE [AS] 'escape']
           [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
           [FILL MISSING FIELDS] )]
    [ ENCODING 'encoding' ]
    [ [LOG ERRORS [INTO error_table]] SEGMENT REJECT LIMIT count
           [ROWS | PERCENT] ]
ossprotocol:
    oss://oss_endpoint [prefix=prefix_name|dir=[folder/[folder/]...]/file_name|filepath=[folder/[folder/]...]/file_name]
     id=userossid key=userosskey bucket=ossbucket compressiontype=[none|gzip] async=[true|false]

Parámetros obligatorios

Parámetro

Descripción

oss://oss_endpoint

Endpoint de OSS con el formato oss://oss_endpoint. Ejemplo: oss://oss-cn-hangzhou.aliyuncs.com. Si su instancia de AnalyticDB se ejecuta en un servidor de Alibaba Cloud, utilice un endpoint interno (la URL del endpoint contiene la palabra clave internal) para evitar cargos por tráfico de Internet.

id

Su AccessKey ID. Consulte Create an AccessKey pair.

key

Su AccessKey secret. Consulte Create an AccessKey pair.

bucket

El nombre del bucket de OSS. Cree el bucket antes de ejecutar la importación.

Parámetros de ruta (mutuamente excluyentes: especifique exactamente uno)

Parámetro

Descripción

prefix

Prefijo de ruta para los objetos de OSS. Importa todos los objetos cuyas rutas comiencen con dicho prefijo. No admite expresiones regulares. Por ejemplo, prefix=test/filename/ importa únicamente test/filename/aa, mientras que prefix=test/filename importa test/filename, test/filenamexxx, test/filename/aa, test/filenameyyy/aa y test/filenameyyy/bb/aa.

dir

Ruta del directorio de OSS. La ruta debe terminar con / (ejemplo: test/mydir/). Importa todos los objetos ubicados directamente en el directorio y excluye los subdirectorios.

filepath

El nombre del objeto que contiene la ruta del objeto de OSS. Solo para tablas externas de lectura.

Parámetros opcionales

Parámetro

Valor predeterminado

Descripción

FORMAT

—

Formato del archivo: TEXT o CSV.

ENCODING

—

Codificación de caracteres de los objetos, como utf8.

compressiontype

none

Formato de compresión. Valores válidos: none, gzip.

compressionlevel

6

Nivel de compresión para los archivos escritos en OSS. Valores válidos: del 1 al 9.

async

true

Habilita la importación asíncrona mediante hilos auxiliares. Establezca el valor en false o f para deshabilitarla. La importación asíncrona consume más recursos de hardware que la importación de datos convencional.

oss_connect_timeout

10 (segundos)

Tiempo de espera de conexión.

oss_dns_cache_timeout

60 (segundos)

Tiempo de espera de resolución DNS.

oss_speed_limit

1024 (bytes/s)

Tasa mínima de transmisión. Debe configurarse junto con oss_speed_time.

oss_speed_time

15 (segundos)

Duración máxima durante la cual la tasa de transmisión puede mantenerse por debajo de oss_speed_limit antes de que ocurra un tiempo de espera. Debe configurarse junto con oss_speed_limit. Con los valores predeterminados, se activa un tiempo de espera si la tasa permanece por debajo de 1 KB/s durante 15 segundos consecutivos.

LOG ERRORS

—

Omite las filas cuya importación falla y las escribe en error_table. Utilice count para establecer el umbral de tolerancia a errores.

Paso 4: (Opcional) Comprobar que la tabla externa permite lectura

Antes de ejecutar la importación completa, confirme que la tabla externa puede leer desde OSS:

-- Check a sample of rows
SELECT * FROM <External table> LIMIT 10;

-- Inspect the query plan to confirm parallel reads
EXPLAIN INSERT INTO <Destination table> SELECT * FROM <External table>;

El plan de consulta debe mostrar nodos External Scan ejecutándose en todos los segmentos. Esto confirma que los nodos de cómputo leerán los objetos de OSS en paralelo.

Paso 5: Ejecutar la importación en paralelo

INSERT INTO <Destination table> SELECT * FROM <External table>;

Cada nodo de cómputo lee los objetos de OSS asignados e inserta las filas en la tabla de destino. El nodo de movimiento de redistribución calcula el hash de las filas y las enruta a los nodos de cómputo correctos según la clave de distribución.

Ejemplo

Este ejemplo importa datos bursátiles desde OSS hacia una tabla llamada example.

1. Instale la extensión.

CREATE EXTENSION IF NOT EXISTS oss_ext;

2. Cree la tabla de destino.

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

Para lograr el mejor rendimiento de importación, utilice almacenamiento orientado a columnas con compresión. Por ejemplo, puede especificar la siguiente cláusula: WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576). Para obtener más información, consulte CREATE TABLE.

3. Cree la tabla externa. Elija el parámetro de ruta que coincida con la organización de sus archivos en OSS.

Con prefix (importa todos los objetos cuyo prefijo de ruta coincida; admite GZIP):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    prefix=osstest/example id=XXX
    key=XXX bucket=testbucket compressiontype=gzip')
    FORMAT 'csv' (QUOTE '''' DELIMITER E'\t')
    ENCODING 'utf8'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

Con dir (importa todos los objetos ubicados directamente en el directorio; no admite GZIP):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    dir=osstest/ id=XXX
    key=XXX bucket=testbucket')
    FORMAT 'csv'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

Con filepath (importa el objeto especificado):

CREATE READABLE EXTERNAL TABLE ossexample
    (date text, time text, open float, high float,
    low float, volume int)
    location('oss://oss-cn-hangzhou.aliyuncs.com
    filepath=osstest/example.csv id=XXX
    key=XXX bucket=testbucket')
    FORMAT 'csv'
    LOG ERRORS SEGMENT REJECT LIMIT 5;

4. Importe los datos.

INSERT INTO example SELECT * FROM ossexample;

El plan de consulta confirma que los cuatro nodos de cómputo leen desde OSS en paralelo:

EXPLAIN INSERT INTO example SELECT * FROM ossexample;
                                            QUERY PLAN
-------------------------------------------------------------------------------------------------
 Insert (slice0; segments: 4)  (rows=250000 width=92)
   ->  Redistribute Motion 4:4  (slice1; segments: 4)  (cost=0.00..11000.00 rows=250000 width=92)
         Hash Key: ossexample.date
         ->  External Scan on ossexample  (cost=0.00..11000.00 rows=250000 width=92)
(4 rows)

Referencia de formatos TEXT y CSV

A continuación se describen los parámetros que controlan cómo gpossext analiza sintácticamente los archivos TEXT y CSV. Especifíquelos en la cláusula FORMAT de su instrucción CREATE EXTERNAL TABLE.

  • \n: delimitador de línea (carácter de nueva línea).

  • DELIMITER: separador de columnas. Si se especifica, también debe indicarse QUOTE. Opciones comunes: ,, |, \t.

  • QUOTE: envuelve los valores de columna que contienen caracteres especiales. Debe ser distinto de DELIMITER. Valor predeterminado: ". Los valores que incluyen caracteres QUOTE también deben usar ESCAPE.

  • ESCAPE: se coloca antes de cualquier carácter que deba tratarse como literal. Valor predeterminado: el mismo que QUOTE. También suele utilizarse la barra invertida (\).

Todos los caracteres de control deben ser de un solo byte.

Caracteres de control predeterminados

Carácter de control

TEXT

CSV

DELIMITER

\t (tabulación)

, (coma)

QUOTE

" (comillas dobles)

" (comillas dobles)

ESCAPE

N/A

" (comillas dobles)

NULL

\N (barra invertida n)

Cadena vacía sin comillas

Solución de problemas

Revisión de errores de importación

Si utilizó LOG ERRORS al crear la tabla externa, recupere las filas con errores mediante la siguiente instrucción:

SELECT * FROM gp_read_error_log('external_table_name');

Para borrar el registro de errores después de revisarlo, ejecute:

SELECT gp_truncate_error_log('external_table_name');
El registro de errores se elimina automáticamente cuando se borra la tabla externa.

Interpretación de los campos de error del SDK

Los errores del SDK de OSS en el registro de importación incluyen los siguientes campos:

Campo

Descripción

code

Código de estado HTTP de la solicitud con errores.

error_code

Código de error de OSS.

error_msg

Mensaje de error de OSS.

req_id

UUID de la solicitud con errores. Proporcione este identificador al soporte técnico de Alibaba Cloud cuando reporte problemas persistentes.

Para obtener detalles sobre los códigos de error de OSS, consulte Respuestas de error.

Corrección de errores de tiempo de espera

Ajuste oss_speed_limit y oss_speed_time de manera conjunta para configurar el comportamiento de los tiempos de espera. Para conocer el manejo general de tiempos de espera en OSS, consulte Manejo de erroresManejo de errores.

Pasos siguientes