Este tópico descreve como usar tabelas externas para consultar dados do MongoDB e importá-los para o AnalyticDB for MySQL.
Pré-requisitos
O cluster do AnalyticDB for MySQL deve ser da Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
-
A chave ENI Network está ativada na seção Network Information da página Cluster Information no console do AnalyticDB for MySQL.
ImportanteAtivar ou desativar a rede ENI interrompe a conexão com o banco de dados por cerca de 2 minutos. Durante esse período, não é possível executar operações de leitura e escrita. Avalie cuidadosamente o impacto antes de ativar ou desativar a rede ENI.
A instância do MongoDB e o cluster do AnalyticDB for MySQL devem estar na mesma VPC.
O bloco CIDR da VPC do cluster do AnalyticDB for MySQL foi adicionado à lista de permissões da instância do MongoDB.
Importar dados de documentos não aninhados no MongoDB
Dados de exemplo
Neste exemplo, uma coleção chamada person é criada no banco de dados test_mongodb de uma instância do MongoDB.
use test_mongodb;
db.createCollection("person");
Insira documentos na coleção person.
db.person.insert({"id":1,"name":"james","age":10});
db.person.insert({"id":2,"name":"bond","age":20});
db.person.insert({"id":3,"name":"jack","age":30});
db.person.insert({"id":4,"name":"lock","age":40});
Procedimento
-
Acesse o editor de desenvolvimento SQL.
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione a região onde o cluster está localizado. No painel de navegação à esquerda, clique em Clusters e, em seguida, clique no ID do cluster de destino.
No painel de navegação à esquerda, escolha Job Development > SQL Development.
-
Execute a seguinte instrução para criar um banco de dados externo.
CREATE EXTERNAL DATABASE adb_external_db; -
Crie uma tabela externa.
ImportanteA tabela externa do AnalyticDB for MySQL deve ter os mesmos nomes de campos, quantidade de campos, ordem dos campos e tipos de dados do documento do MongoDB.
CREATE EXTERNAL TABLE adb_external_db.person ( id int, name string, age int ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{ "mapped_name":"person", "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb", "username":"testuser", "password":"password", }';Tabela 1. Parâmetros
Parâmetro
Descrição
mapped_name
Nome da coleção do MongoDB. Neste exemplo, o nome é
person.location
Endpoint da VPC da instância do ApsaraDB for MongoDB.
Formato:
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/database.Exemplo:
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/test_mongodb.NotaNão use endpoints de nós secundários para se conectar à instância do MongoDB.
username
Conta do banco de dados da instância do MongoDB.
NotaO MongoDB verifica a conta e a senha no banco de dados de destino. Use a conta do banco de dados especificada no endpoint da VPC da instância do MongoDB. Em caso de dúvidas, entre em contato com o suporte técnico.
password
Senha da conta do banco de dados MongoDB.
-
Visualize os dados.
Após criar a tabela externa, use uma instrução SELECT para consultar dados na coleção
person.SELECT * FROM adb_external_db.person;Resultado retornado:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+ 4 rows in set (0.35 sec) -
Crie um banco de dados e uma tabela no cluster do AnalyticDB for MySQL para armazenar os dados importados do MongoDB.
-
Crie um banco de dados chamado
adb_demo.CREATE DATABASE adb_demo; -
Crie uma tabela chamada
adb_demo.adb_import_test.ImportanteA tabela criada no cluster do AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition deve ter os mesmos nomes de campos, quantidade de campos, ordem dos campos e tipos de dados da tabela externa do AnalyticDB for MySQL.
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
-
-
Importe os dados do MongoDB para o cluster do AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
-
Método 1: Use a instrução
INSERT INTOpara importar dados. Se houver duplicidade de valor de chave primária, os novos dados serão ignorados. Isso equivale a usarINSERT IGNORE INTO. Para mais informações, consulte INSERT INTO.INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Método 2: Use a instrução
INSERT OVERWRITE INTOpara importar dados de forma síncrona. Essa operação substitui os dados existentes na tabela.INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Método 3: Use a instrução
INSERT OVERWRITE INTOpara importar dados de forma assíncrona. Para mais informações, consulte Gravação assíncrona.SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
-
-
Após importar os dados, use uma instrução SELECT para consultar dados na tabela
adb_demo.adb_import_test.SELECT * FROM adb_demo.adb_import_test;Resultado retornado:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+
Consultar documentos aninhados no MongoDB
Dados de exemplo
No banco de dados test_mongodb, crie uma coleção chamada test_json.
db.createCollection("test_json");
Insira um documento na coleção test_json. Os campos city e name são campos aninhados.
db.test_json.insert( {
'id': 1,
'details':{'city': "hangzhou", "name":"jack"}
})
Procedimento
-
Acesse o editor de desenvolvimento SQL.
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione a região onde o cluster está localizado. No painel de navegação à esquerda, clique em Clusters e, em seguida, clique no ID do cluster de destino.
No painel de navegação à esquerda, escolha Job Development > SQL Development.
-
Execute a seguinte instrução para criar um banco de dados externo.
CREATE EXTERNAL DATABASE adb_external_db; -
Crie uma tabela externa.
ImportanteA tabela externa do AnalyticDB for MySQL deve ter os mesmos nomes de campos, quantidade de campos, ordem dos campos e tipos de dados do documento do MongoDB.
Não é possível usar tabelas externas para gravar dados em documentos aninhados no MongoDB.
CREATE EXTERNAL TABLE adb_external_db.test_json ( id int, city string, name string ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{ "mapped_name":"test_json", "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb", "username":"testuser", "password":"password", "COLUMN_MAPPING":"city,details.city;name,details.name", }';Parâmetros:
COLUMN_MAPPING: Defina os mapeamentos entre os campos da tabela externa e os campos do documento do MongoDB. Por exemplo, cria-se um mapeamento entre o campocityda tabela externa e o campodetails.citydo documento do MongoDB.Para obter informações sobre outros parâmetros da tabela externa, consulte Descrições de parâmetros.
-
Visualize os dados.
Após criar a tabela externa, use uma instrução SELECT para consultar dados na coleção
test_json.SELECT * FROM adb_external_db.test_json;Resultado retornado:
+------+----------+-------+ | id | city | name | +------+----------+-------+ | 1 | hangzhou | jack | +------+----------+-------+NotaPara importar dados de documentos aninhados no MongoDB para o AnalyticDB for MySQL, crie primeiro um banco de dados e uma tabela. Para mais informações, consulte as etapas 5 a 7 na seção Importar dados de documentos não aninhados no MongoDB deste tópico.
Consultar campos ObjectId
Dados de exemplo
No banco de dados test_mongodb, crie uma coleção chamada test_objectid.
db.createCollection("test_objectid");
Insira um documento na coleção test_objectid.
db.test_objectid.insert( {
'id': 1,
})
Consulte os documentos na coleção test_objectid.
db.test_objectid.find()
Resultado retornado:
{
"_id":"ObjectId("641002ad883a73eb0d7291a7")"
"id":1
}
Procedimento
-
Acesse o editor de desenvolvimento SQL.
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione a região onde o cluster está localizado. No painel de navegação à esquerda, clique em Clusters e, em seguida, clique no ID do cluster de destino.
No painel de navegação à esquerda, escolha Job Development > SQL Development.
-
Execute a seguinte instrução para criar um banco de dados externo.
CREATE EXTERNAL DATABASE adb_external_db; -
Crie uma tabela externa.
ImportanteA tabela externa do AnalyticDB for MySQL deve ter os mesmos nomes de campos, quantidade de campos, ordem dos campos e tipos de dados do documento do MongoDB.
CREATE EXTERNAL TABLE adb_external_db.test_objectid ( id int, _id objectid ) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{ "mapped_name":"test_objectid", "location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb", "username":"testuser", "password":"password", }'; -
Visualize os dados.
Após criar a tabela externa, use uma instrução SELECT para consultar dados na coleção
test_objectid.SELECT cast(_id as string) FROM adb_external_db.test_objectid;Resultado de exemplo:
+----------------------------+ | CAST(_id AS string) | +----------------------------+ | 641002ad883a73eb0d7291a7 | +----------------------------+NotaPara importar dados que contêm campos ObjectId para o AnalyticDB for MySQL, crie primeiro um banco de dados e uma tabela para armazenar os dados. Para mais informações, consulte as etapas 5 a 7 em Importar dados de documentos não aninhados no MongoDB.
Mapeamentos de tipos de dados entre tabelas externas do AnalyticDB for MySQL e coleções do MongoDB
|
Tabela externa do AnalyticDB for MySQL |
Coleção do MongoDB |
|
Boolean |
Boolean |
|
ObjectId |
ObjectId |
|
String |
String |
|
Int |
32-bit Integer, Int |
|
Bigint |
64-bit Integer Long |
|
Double |
Double |
|
Date |
Date |