Todos os produtos
Search
Central de documentação

AnalyticDB:Use external tables to import data from RDS for MySQL

Última atualização: Jun 27, 2026

As tabelas externas permitem que o AnalyticDB for MySQL leia dados diretamente de uma instância do RDS for MySQL pela sua VPC. Use essa abordagem para extrair dados de source para o AnalyticDB for MySQL e executar análises complexas. Opcionalmente, grave os resultados resumidos de volta no RDS for MySQL.

Pré-requisitos

Antes de começar, verifique se:

  • A instância do RDS for MySQL e o cluster do AnalyticDB for MySQL estão na mesma VPC.

  • O bloco CIDR da VPC onde reside o cluster do AnalyticDB for MySQL foi adicionado à lista de permissões de endereços IP da instância do RDS for MySQL. Sem essa configuração, o AnalyticDB for MySQL não consegue acessar a instância do RDS for MySQL e as consultas à tabela externa falham.

  • Para clusters das edições Enterprise, Basic, Data Lakehouse ou Data Warehouse em modo elástico: a opção ENI está ativada na seção Network Information da página Cluster Information no console do AnalyticDB for MySQL.

Importante

Ativar ou desativar a elastic network interface (ENI) interrompe a conectividade com o banco de dados por aproximadamente dois minutos. Durante esse período, as operações de leitura e gravação ficam indisponíveis. Planeje essa alteração durante uma janela de manutenção.

Dados de exemplo

Os exemplos neste tópico usam um banco de dados do RDS for MySQL chamado test_adb, que contém uma tabela goods:

CREATE TABLE goods (
   goods_id bigint(20) NOT NULL,
   price double NOT NULL,
   class bigint(20) NOT NULL,
   name varchar(32) NOT NULL,
   update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (goods_id)
);

Insira linhas de exemplo para usar nas etapas seguintes:

INSERT INTO test_adb.goods
VALUES
  (1, 50, 1, 'Book', '2024-08-07 09:56:53'),
  (2, 80, 2, 'Basketball', '2024-08-08 10:00:55'),
  (3, 150, 3, 'Watch', '2024-08-06 11:00:25'),
  (4, 30, 1, 'Magazine', '2024-08-08 12:25:55'),
  (5, 80, 2, 'Football', '2024-08-07 08:50:35'),
  (6, 25, 4, 'Tea', '2024-08-05 09:25:30'),
  (7, 30, 4, 'Coffee', '2024-08-07 10:20:40'),
  (8, 300, 3, 'Computer', '2024-08-06 10:55:35'),
  (9, 100, 2, 'Baseball', '2024-08-08 11:35:50'),
  (10, 200, 3, 'Phone', '2024-08-07 11:30:25');

Importar dados

As etapas variam conforme a edição do seu cluster.

Enterprise Edition, Basic Edition e Data Lakehouse Edition

Steps overview: Abra o editor SQL → Crie um banco de dados externo → Crie uma tabela externa → Consulte a tabela externa → Crie uma tabela de destino → Importe os dados → Verifique.

  1. Abra o editor SQL.

    1. Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione uma região. No painel de navegação à esquerda, clique em Clusters e, em seguida, clique no ID do seu cluster.

    2. No painel de navegação à esquerda, clique em Job Development > SQL Development.

  2. Selecione o mecanismo XIHE e um grupo de recursos interativo.

  3. Crie um banco de dados externo.

    CREATE EXTERNAL DATABASE adb_external_db;
  4. Crie uma tabela externa mapeada para a tabela goods no RDS for MySQL.

    A tabela externa no AnalyticDB for MySQL deve ter os mesmos nomes de colunas, quantidade de colunas, ordem das colunas e tipos de dados da tabela de source no RDS for MySQL.
    Importante

    Evite codificar credenciais diretamente em instruções SQL salvas ou compartilhadas. Armazene as credenciais com segurança e substitua-as em tempo de execução sempre que possível.

    Espaço reservado

    Descrição

    <mysql-address>

    O nome do host do endpoint interno (VPC) da sua instância do RDS for MySQL. Formato: <hostname>:3306. Para localizar seu endpoint, consulte Visualize ou modifique endpoints e portas internos e públicos.

    <mysql-user-name>

    A conta de banco de dados da instância do RDS for MySQL.

    <mysql-user-password>

    A senha da conta de banco de dados.

    Parâmetro

    Descrição

    url

    O endpoint da VPC da instância do RDS for MySQL e o nome do banco de dados de source. Formato: "jdbc:mysql://<hostname>:3306/<database-name>".

    tablename

    O nome da tabela de source no RDS for MySQL.

    username

    A conta de banco de dados da instância do RDS for MySQL.

    password

    A senha da conta de banco de dados.

    charset

    O conjunto de caracteres. Valores válidos: gbk, utf8 (padrão), utf8mb4.

    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.goods (
        goods_id bigint(20) NOT NULL,
        price double NOT NULL,
        class bigint(20) NOT NULL,
        name varchar(32) NOT NULL,
        update_time timestamp,
        PRIMARY KEY (goods_id)
    ) ENGINE = 'MYSQL' TABLE_PROPERTIES = '{
      "url":"jdbc:mysql://<mysql-address>:3306/test_adb",
      "tablename":"goods",
      "username":"<mysql-user-name>",
      "password":"<mysql-user-password>",
      "charset":"utf8"
    }';

    Substitua os seguintes espaços reservados. Principais parâmetros em TABLE_PROPERTIES: Para a sintaxe completa de CREATE EXTERNAL TABLE, consulte CREATE EXTERNAL TABLE.

  5. Verifique a tabela externa consultando dados do RDS for MySQL pelo AnalyticDB for MySQL.

    SELECT * FROM adb_external_db.goods;

    Saída esperada:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+
  6. Crie um banco de dados e uma tabela de destino no AnalyticDB for MySQL para armazenar os dados importados.

    CREATE DATABASE adb_demo;
    CREATE TABLE IF NOT EXISTS adb_demo.mysql_import_test (
        goods_id bigint(20) NOT NULL,
        price double NOT NULL,
        class bigint(20) NOT NULL,
        name varchar(32) NOT NULL,
        update_time timestamp,
        PRIMARY KEY (goods_id)
    )
    DISTRIBUTED BY HASH(goods_id);
  7. Importe os dados da tabela externa para a tabela de destino.

    INSERT INTO adb_demo.mysql_import_test
    SELECT * FROM adb_external_db.goods;
  8. Verifique a importação.

    SELECT * FROM adb_demo.mysql_import_test;

    Saída esperada:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+

Data Warehouse Edition

Steps overview: Conecte-se ao cluster → Crie um banco de dados de destino → Crie uma tabela externa → Crie uma tabela de destino → Importe os dados → Verifique.

  1. Conecte-se ao cluster do AnalyticDB for MySQL. Para mais detalhes, consulte Conectar-se a um cluster.

  2. Crie um banco de dados de destino. Para mais detalhes, consulte Criar um banco de dados. Neste exemplo, o banco de dados de destino chama-se adb_demo.

  3. Crie uma tabela externa em adb_demo mapeada para a tabela goods no RDS for MySQL.

    Importante

    Evite codificar credenciais diretamente em instruções SQL salvas ou compartilhadas. Armazene as credenciais com segurança e substitua-as em tempo de execução sempre que possível.

    Parâmetro

    Descrição

    ENGINE='mysql'

    Defina o MySQL como o mecanismo de armazenamento da tabela externa.

    TABLE_PROPERTIES

    Um objeto JSON que define como o AnalyticDB for MySQL se conecta ao RDS for MySQL.

    url

    O endpoint da VPC da instância do RDS for MySQL e o nome do banco de dados de source. Formato: "jdbc:mysql://<hostname>:3306/<database-name>". Para localizar seu endpoint, consulte Visualize ou modifique endpoints e portas internos e públicos.

    tablename

    O nome da tabela de source no RDS for MySQL.

    username

    A conta de banco de dados da instância do RDS for MySQL.

    password

    A senha da conta de banco de dados.

    charset

    O conjunto de caracteres. Valores válidos: gbk, utf8 (padrão), utf8mb4.

    CREATE TABLE IF NOT EXISTS adb_demo.goods_external_table (
        goods_id bigint(20) NOT NULL,
        price double NOT NULL,
        class bigint(20) NOT NULL,
        name varchar(32) NOT NULL,
        update_time timestamp,
        PRIMARY KEY (goods_id)
    )
    ENGINE='mysql'
    TABLE_PROPERTIES='{
      "url":"jdbc:mysql://<mysql-vpc-address>:3306/test_adb",
      "tablename":"goods",
      "username":"<mysql-user-name>",
      "password":"<mysql-user-password>",
      "charset":"utf8"
    }';

    Principais parâmetros:

  4. Crie uma tabela de destino para armazenar os dados importados.

    CREATE TABLE IF NOT EXISTS adb_demo.mysql_import_test (
        goods_id bigint(20) NOT NULL,
        price double NOT NULL,
        class bigint(20) NOT NULL,
        name varchar(32) NOT NULL,
        update_time timestamp,
        PRIMARY KEY (goods_id)
    )
    DISTRIBUTED BY HASH(goods_id);
  5. Importe os dados da tabela externa para a tabela de destino.

    REPLACE INTO adb_demo.mysql_import_test
    SELECT * FROM adb_demo.goods_external_table;
  6. Verifique a importação.

    SELECT * FROM adb_demo.mysql_import_test LIMIT 100;

    Saída esperada:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+

Próximos passos

  • Para gravar resultados de volta no RDS for MySQL, crie uma tabela externa apontando para a tabela de destino no RDS e use INSERT INTO ... SELECT para enviar dados do AnalyticDB for MySQL para o RDS for MySQL.

  • Para a referência completa de DDL de tabelas externas, consulte CREATE EXTERNAL TABLE.