Importación de datos de Amazon S3 a una instancia de base de datos de RDS para PostgreSQL - Amazon Relational Database Service

Importación de datos de Amazon S3 a una instancia de base de datos de RDS para PostgreSQL

Para importar datos desde su bucket de Amazon S3, utilice la función table_import_from_s3 de la extensión aws_s3. Para obtener información de referencia, consulte aws_s3.table_import_from_s3.

nota

En los siguientes ejemplos se utiliza el método de rol de IAM para permitir el acceso al bucket de Amazon S3. Por tanto, no hay parámetros de credenciales en las llamadas a la función aws_s3.table_import_from_s3.

A continuación se muestra un ejemplo típico.

postgres=> SELECT aws_s3.table_import_from_s3( 't1', '', '(format csv)', :'s3_uri' );

Los parámetros son los siguientes:

  • t1: nombre de la tabla en la instancia de base de datos de PostgreSQL en la que desea copiar los datos.

  • '': lista opcional de columnas en la tabla de la base de datos. Puede utilizar este parámetro para indicar qué columnas de los datos de S3 van en las columnas de la tabla. Si no se especifica ninguna columna, se copian en la tabla todas las columnas. Para obtener un ejemplo de uso de una lista de columnas, consulte Importación de un archivo de Amazon S3 que utiliza un delimitador personalizado.

  • (format csv): argumentos de COPY de PostgreSQL. El proceso de copia utiliza los argumentos y el formato del comando COPY de PostgreSQL para importar los datos. Las opciones de formato incluyen un valor separado por comas (CSV), como se muestra en este ejemplo, texto y binario. El valor predeterminado es texto.

  • s3_uri: una estructura que contiene la información que identifica el archivo de Amazon S3. Para ver un ejemplo de cómo utilizar la función aws_commons.create_s3_uri para crear una estructura s3_uri, consulte Información general sobre la importación de datos desde los datos de Amazon S3.

Para obtener más información acerca de esta función, consulte aws_s3.table_import_from_s3.

La función aws_s3.table_import_from_s3 devuelve texto. Para especificar otros tipos de archivos que se van a importar desde un bucket de Amazon S3, consulte uno de los siguientes ejemplos.

nota

Si importa 0 bytes, se producirá un error.

Importación de un archivo de Amazon S3 que utiliza un delimitador personalizado

En el siguiente ejemplo se muestra cómo importar un archivo que utiliza un delimitador personalizado. También se muestra cómo controlar dónde colocar los datos en la tabla de la base de datos usando el parámetro column_list de la función aws_s3.table_import_from_s3.

En este ejemplo, supongamos que la siguiente información está organizada en columnas delimitadas por barras verticales en el archivo de Amazon S3.

1|foo1|bar1|elephant1 2|foo2|bar2|elephant2 3|foo3|bar3|elephant3 4|foo4|bar4|elephant4 ...
Para importar un archivo que utiliza un delimitador personalizado
  1. Cree una tabla en la base de datos para los datos importados.

    postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
  2. Utilice el siguiente formulario de la función aws_s3.table_import_from_s3 para importar datos desde el archivo de Amazon S3.

    Puede incluir la llamada a la función aws_commons.create_s3_uri insertada dentro de la llamada a la función aws_s3.table_import_from_s3 para especificar el archivo.

    postgres=> SELECT aws_s3.table_import_from_s3( 'test', 'a,b,d,e', 'DELIMITER ''|''', aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2') );

Los datos se encuentran ahora en la tabla en las siguientes columnas.

postgres=> SELECT * FROM test; a | b | c | d | e ---+------+---+---+------+----------- 1 | foo1 | | bar1 | elephant1 2 | foo2 | | bar2 | elephant2 3 | foo3 | | bar3 | elephant3 4 | foo4 | | bar4 | elephant4

Importación de un archivo comprimido (gzip) de Amazon S3

El siguiente ejemplo muestra cómo importar un archivo comprimido con gzip desde Amazon S3. El archivo que se importa debe tener los siguientes metadatos de Simple Storage Service (Amazon S3):

  • Clave: Content-Encoding

  • Valor: gzip

Si carga el archivo con la AWS Management Console, el sistema suele aplicar los metadatos. Para obtener información sobre cómo cargar archivos en Simple Storage Service (Amazon S3) con la AWS Management Console, la AWS CLI o la API, consulte Carga de objetos en la Guía del usuario de Amazon Simple Storage Service.

Para obtener más información acerca de los metadatos de Simple Storage Service (Amazon S3) y detalles acerca de los metadatos proporcionados por el sistema, consulte Edición de metadatos de objeto en la consola de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

Importe el archivo gzip en su instancia de RDS para la base de datos PostgreSQL como se muestra a continuación.

postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text); postgres=> SELECT aws_s3.table_import_from_s3( 'test_gzip', '', '(format csv)', 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2' );

Importación de un archivo de Amazon S3 codificado

El siguiente ejemplo muestra cómo importar un archivo desde Amazon S3 que tenga codificación Windows-1252.

postgres=> SELECT aws_s3.table_import_from_s3( 'test_table', '', 'encoding ''WIN1252''', aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2') );