AnalyticDB for MySQL permite exportar datos desde AnalyticDB for MySQL Data Warehouse Edition (V3.0) a Object Storage Service (OSS) mediante tablas externas y la instrucción INSERT INTO. Esta función de exportación solo admite los formatos de archivo CSV y Parquet.
Requisitos previos
-
Cree un directorio en Object Storage Service (OSS) para los datos de AnalyticDB for MySQL:
-
Nota
El bucket de OSS y su clúster de AnalyticDB for MySQL Data Warehouse Edition (V3.0) deben estar en la misma región.
-
Por ejemplo, cree un directorio llamado
adb_data/en OSS. Los datos exportados desde AnalyticDB for MySQL Data Warehouse Edition (V3.0) se almacenan en este directorio.
-
Debe haber creado un clúster de Data Warehouse Edition (V3.0), configurado su lista de permitidos, y creado una cuenta y una base de datos. Para obtener más información, consulte Quick start for AnalyticDB for MySQL.
Si el clúster de AnalyticDB for MySQL Data Warehouse Edition está en modo elástico, inicie sesión en la consola de AnalyticDB for MySQL para habilitar la red ENI (Elastic Network Interface). En el panel Network Information de la instancia, active el interruptor ENI Network. La red ENI debe estar habilitada en las instancias en modo elástico para importar datos mediante tablas externas.
Procedimiento
Este ejemplo exporta datos de la tabla source_table de la base de datos adb_demo de AnalyticDB for MySQLData Warehouse Edition a la carpeta adb_data en OSS.
Connect to the target cluster y vaya a la base de datos de origen.
En la base de datos
adb_demo, cree una tabla externa. Para obtener más información, consulte Non-partitioned OSS external tables.Ejecute una instrucción de escritura para copiar los datos de origen a la tabla externa creada previamente. Para obtener información sobre la sintaxis compatible con los distintos tipos de tablas externas, consulte Syntax for non-partitioned external tables y Syntax for partitioned external tables.
Una vez completado el trabajo de escritura del paso 3, inicie sesión en la consola de OSS para consultar los archivos de datos exportados en la carpeta de destino. También puede consultar directamente los datos exportados a la tabla externa desde AnalyticDB for MySQL.
Sintaxis para tablas externas sin particiones
Cuando utiliza INSERT INTO o INSERT OVERWRITE SELECT para escribir datos, el trabajo se ejecuta de forma síncrona de manera predeterminada. Si escribe una gran cantidad de datos, como varios cientos de gigabytes, la conexión entre el cliente y el servidor de AnalyticDB for MySQL podría agotar el tiempo de espera, lo que provocaría un error en el trabajo. Por lo tanto, si va a escribir un volumen grande de datos, se recomienda ejecutar la instrucción INSERT OVERWRITE SELECT de forma asíncrona agregando SUBMIT JOB antes de la instrucción. Ejemplo: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Para obtener más información sobre cómo enviar trabajos de forma asíncrona, consulte asynchronous import job submission.
De forma predeterminada, los archivos exportados a OSS contienen solo datos y no incluyen encabezados de columna. Para exportar archivos con encabezados de columna, agregue el hint /*+sql_output_oss_file_head_enable=true*/ antes de la instrucción.
-
Insert select from
-
Descripción: Si sus datos ya existen en otra tabla, puede utilizar
INSERT SELECT FROMpara copiarlos a una tabla externa. Esta instrucción escribe los datos de la tabla de origen en la ubicación de OSS de la tabla externa. Cada operación de escritura genera nuevos archivos de datos en OSS.ImportanteDebe escribir todas las columnas en la tabla externa. No puede especificar solo un subconjunto de columnas.
Sintaxis:
INSERT INTO table_name SELECT select_statement FROM from_statement;Ejemplo:
insert into oss_table select col1, col2, col3 from source_table;
-
-
Insert overwrite select
-
Descripción: Utilice
INSERT OVERWRITE SELECTpara realizar una inserción masiva en una tabla. Si la tabla externa de destino ya contiene datos, esta instrucción primero elimina todos los archivos de datos existentes en la ruta de la tabla externa y luego genera nuevos archivos de datos en OSS.ImportanteDebe escribir todas las columnas en la tabla externa. No puede especificar solo un subconjunto de columnas.
Sintaxis:
INSERT OVERWRITE table_name SELECT select_statement FROM from_statement;Ejemplo:
INSERT OVERWRITE oss_table SELECT col1, col2, col3 FROM source_table;
-
-
Replace select from
Descripción: Dado que las tablas externas de OSS no admiten claves primarias,
REPLACE SELECT FROMse comporta de manera idéntica aINSERT SELECT FROM. Copia los datos a otra tabla. Los datos existentes en la tabla de destino permanecen sin cambios y los nuevos datos se anexan como nuevos archivos de datos en OSS.
-
Exportar a un único archivo de OSS (solo formato CSV; no compatible con formato Parquet)
-
Descripción: Puede utilizar un hint para exportar datos a un único archivo específico en OSS. Si se incluye la palabra clave
OVERWRITE, se sobrescribe cualquier archivo existente con el mismo nombre en el directorio definido enTABLE_PROPERTIESde la tabla externa. Los demás archivos del directorio no se ven afectados.ImportanteDebe escribir todas las columnas en la tabla externa. No puede especificar solo un subconjunto de columnas.
Notas sobre versiones:
Para clústeres de AnalyticDB for MySQL anteriores a la V3.1.2: Esta función no es compatible. El sistema genera automáticamente los nombres de los archivos y exporta los datos en varios archivos. El número de archivos de destino se determina dinámicamente según la concurrencia del trabajo.
Para clústeres de AnalyticDB for MySQL versión 3.1.2 y posteriores, puede utilizar un hint para exportar tablas externas regulares en formato CSV de AnalyticDB for MySQL a un único archivo en OSS. También puede personalizar el nombre del archivo durante la exportación. Sin un hint, el comportamiento de exportación es consistente con el de las versiones anteriores a la 3.1.2: los datos se exportan a varios archivos.
Sintaxis:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] table_name SELECT select_statement FROM from_statement;Ejemplo:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] oss_table SELECT * FROM source_table;
-
Sintaxis para tablas externas con particiones
Cuando utiliza INSERT INTO o INSERT OVERWRITE SELECT para escribir datos, el trabajo se ejecuta de forma síncrona de manera predeterminada. Si escribe una gran cantidad de datos, como varios cientos de gigabytes, la conexión entre el cliente y el servidor de AnalyticDB for MySQL podría agotar el tiempo de espera, lo que provocaría un error en el trabajo. Por lo tanto, si va a escribir un volumen grande de datos, se recomienda ejecutar la instrucción INSERT OVERWRITE SELECT de forma asíncrona agregando SUBMIT JOB antes de la instrucción. Ejemplo: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Para obtener más información sobre cómo enviar trabajos de forma asíncrona, consulte asynchronous import job submission.
De forma predeterminada, los archivos exportados a OSS contienen solo datos y no incluyen encabezados de columna. Para exportar archivos con encabezados de columna, agregue el hint /*+sql_output_oss_file_head_enable=true*/ antes de la instrucción.
Cuando escribe datos desde una tabla con particiones, los archivos de datos no incluyen los datos de las columnas de clave de partición. La información de la partición se almacena en la estructura de directorios de OSS.
No se admite la exportación de datos de una tabla externa con particiones a un único archivo de OSS.
Por ejemplo, considere una tabla con particiones que tiene dos columnas de clave de partición y tres columnas regulares. La clave de partición de primer nivel es pcol1 con un valor de 1, y la clave de partición de segundo nivel es pcol2 con un valor de a. Los datos de la tabla con particiones se exportan a la ruta de OSS adb_data/. Cuando escribe datos en la partición donde pcol1=1 y pcol2=a, la ruta relativa del archivo de datos es adb_data/pcol1=1/pcol2=a/. Los archivos de datos CSV o Parquet resultantes no contienen los valores de pcol1 y pcol2. Solo contienen los valores de las tres columnas regulares.
Insert into partition select from
Función: El comando INSERT INTO PARTITION SELECT FROM realiza una inserción masiva de datos en una tabla externa con particiones. Al escribir datos, puede utilizar la cláusula PARTITION para especificar todas las columnas y valores de partición. Alternativamente, puede especificar solo los valores de partición de nivel superior y permitir que las particiones de nivel inferior se generen dinámicamente. También puede omitir por completo la cláusula PARTITION, lo que genera dinámicamente todos los niveles de partición.
Cuando se escriben los datos, se anexan a la partición correspondiente. Cada operación de escritura genera nuevos archivos de datos en OSS.
Debe escribir todas las columnas en la tabla externa. No puede especificar solo un subconjunto de columnas.
Particiones totalmente estáticas
Sintaxis
INSERT INTO table_name PARTITION(par1=val1,par2=val2,...)
SELECT select_statement FROM from_statement;
Ejemplo
INSERT INTO oss_table_par PARTITION(par1=val1,par2=val2)
select col1, col2, col3 FROM source_table;
Particiones parcialmente estáticas y parcialmente dinámicas
Sintaxis
INSERT INTO table_name PARTITION(par1=val1,par2,...)
SELECT select_statement FROM from_statement;
Ejemplo
INSERT INTO oss_table_par PARTITION(par1=val1,par2)
SELECT col1, col2, col3, par2col FROM source_table;
Particiones totalmente dinámicas
Sintaxis
INSERT INTO table_name
SELECT select_statement FROM from_statement;
Ejemplo
INSERT INTO oss_table_par
SELECT col1, col2, col3, par1col, par2col FROM source_table;
Insert overwrite partition select
Función: El uso es el mismo que INSERT INTO PARTITION SELECT. Sin embargo, este comando también elimina los archivos de datos existentes de las particiones de destino involucradas en la ejecución. Los archivos de datos en particiones que no reciben nuevos datos no se eliminan.
Sintaxis:
INSERT OVERWRITE table_name PARTITION(par1=val1,par2=val2,...)[IF NOT EXISTS]
SELECT select_statement FROM from_statement;
Ejemplo:
INSERT OVERWRITE oss_table_par PARTITION(par1=val1,par2=val2) IF NOT EXISTS
SELECT col1, col2, col3 FROM source_table;
Replace into partition select from
Descripción: Dado que las tablas externas no admiten claves primarias, REPLACE INTO PARTITION SELECT FROM se comporta de manera idéntica a INSERT INTO PARTITION SELECT FROM.
Sintaxis no compatible
Las tablas externas de AnalyticDB for MySQL no admiten la sintaxis de escritura a nivel de fila. Específicamente, las instrucciones INSERT INTO VALUES y REPLACE INTO VALUES no son compatibles.