Cette rubrique explique comment utiliser des tables externes pour interroger les données MongoDB et les importer dans AnalyticDB for MySQL.
Prérequis
Le cluster AnalyticDB for MySQL doit être de type Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
-
L'option ENI Network est activée dans la section Network Information de la page Cluster Information de la console AnalyticDB for MySQL.
ImportantL'activation ou la désactivation du réseau ENI interrompt la connexion à la base de données pendant environ 2 minutes. Durant cette période, les opérations de lecture et d'écriture sont impossibles. Évaluez soigneusement l'impact avant d'activer ou de désactiver le réseau ENI.
L'instance MongoDB et le cluster AnalyticDB for MySQL se trouvent dans le même VPC.
Le bloc CIDR du VPC du cluster AnalyticDB for MySQL a été ajouté à la liste d'autorisation de l'instance MongoDB.
Importer des données depuis des documents non imbriqués dans MongoDB
Exemple de données
Dans cet exemple, une collection nommée person est créée dans la base de données test_mongodb d'une instance MongoDB.
use test_mongodb;
db.createCollection("person");
Insérez des documents dans la collection 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});
Procédure
-
Accédez à l'éditeur de développement SQL.
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez la région où réside le cluster. Dans le volet de navigation de gauche, cliquez sur Clusters, puis cliquez sur l'ID du cluster cible.
Dans le volet de navigation de gauche, choisissez Job Development > SQL Development.
-
Exécutez l'instruction suivante pour créer une base de données externe.
CREATE EXTERNAL DATABASE adb_external_db; -
Créez une table externe.
ImportantLa table externe AnalyticDB for MySQL doit comporter les mêmes noms de champs, nombre de champs, ordre des champs et types de données que le document 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", }';Tableau 1. Paramètres
Paramètre
Description
mapped_name
Nom de la collection MongoDB. Dans cet exemple, le nom est
person.location
Le point de terminaison VPC de l'instance ApsaraDB for MongoDB.
Format :
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/database.Exemple :
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/test_mongodb.RemarqueN'utilisez pas les points de terminaison des nœuds secondaires pour vous connecter à l'instance MongoDB.
username
Le compte de base de données de l'instance MongoDB.
RemarqueMongoDB vérifie le compte et le mot de passe de la base de données de destination. Utilisez le compte de la base de données spécifiée dans le point de terminaison VPC de l'instance MongoDB. En cas de questions, contactez le support technique.
password
Mot de passe du compte de base de données MongoDB.
-
Interrogez les données.
Une fois la table externe créée, utilisez une instruction SELECT pour interroger les données de la collection
person.SELECT * FROM adb_external_db.person;Le résultat suivant est renvoyé :
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+ 4 rows in set (0.35 sec) -
Créez une base de données et une table dans le cluster AnalyticDB for MySQL pour stocker les données importées depuis MongoDB.
-
Créez une base de données nommée
adb_demo.CREATE DATABASE adb_demo; -
Créez une table nommée
adb_demo.adb_import_test.ImportantLa table créée dans le cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition doit comporter les mêmes noms de champs, nombre de champs, ordre des champs et types de données que la table externe AnalyticDB for MySQL.
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
-
-
Importez les données de MongoDB vers le cluster AnalyticDB for MySQL Enterprise Edition, Basic Edition ou Data Lakehouse Edition.
-
Méthode 1 : Utilisez l'instruction
INSERT INTOpour importer les données. Si une valeur de clé primaire est dupliquée, les nouvelles données sont ignorées. Cela équivaut à utiliserINSERT IGNORE INTO. Pour plus d'informations, consultez la rubrique INSERT INTO.INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Méthode 2 : Utilisez l'instruction
INSERT OVERWRITE INTOpour importer les données de manière synchrone. Cette opération écrase les données existantes dans la table.INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Méthode 3 : Utilisez l'instruction
INSERT OVERWRITE INTOpour importer les données de manière asynchrone. Pour plus d'informations, consultez la rubrique Asynchronous write.SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
-
-
Une fois les données importées, utilisez une instruction SELECT pour interroger les données de la table
adb_demo.adb_import_test.SELECT * FROM adb_demo.adb_import_test;Le résultat suivant est renvoyé :
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+
Interroger des documents imbriqués dans MongoDB
Exemple de données
Dans la base de données test_mongodb, créez une collection nommée test_json.
db.createCollection("test_json");
Insérez un document dans la collection test_json. Les champs city et name sont des champs imbriqués.
db.test_json.insert( {
'id': 1,
'details':{'city': "hangzhou", "name":"jack"}
})
Procédure
-
Accédez à l'éditeur de développement SQL.
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez la région où réside le cluster. Dans le volet de navigation de gauche, cliquez sur Clusters, puis cliquez sur l'ID du cluster cible.
Dans le volet de navigation de gauche, choisissez Job Development > SQL Development.
-
Exécutez l'instruction suivante pour créer une base de données externe.
CREATE EXTERNAL DATABASE adb_external_db; -
Créez une table externe.
ImportantLa table externe AnalyticDB for MySQL doit comporter les mêmes noms de champs, nombre de champs, ordre des champs et types de données que le document MongoDB.
Les tables externes ne permettent pas d'écrire des données dans des documents imbriqués de 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", }';Paramètres :
COLUMN_MAPPING: définit les mappages entre les champs de la table externe et les champs du document MongoDB. Par exemple, un mappage est créé entre le champcityde la table externe et le champdetails.citydu document MongoDB.Pour obtenir des informations sur les autres paramètres de la table externe, consultez les Descriptions des paramètres.
-
Interrogez les données.
Une fois la table externe créée, utilisez une instruction SELECT pour interroger les données de la collection
test_json.SELECT * FROM adb_external_db.test_json;Le résultat suivant est renvoyé :
+------+----------+-------+ | id | city | name | +------+----------+-------+ | 1 | hangzhou | jack | +------+----------+-------+RemarquePour importer des données depuis des documents imbriqués de MongoDB vers AnalyticDB for MySQL, vous devez d'abord créer une base de données et une table. Pour plus d'informations, reportez-vous aux étapes 5 à 7 de la section Importer des données depuis des documents non imbriqués dans MongoDB de cette rubrique.
Interroger des champs ObjectId
Exemple de données
Dans la base de données test_mongodb, créez une collection nommée test_objectid.
db.createCollection("test_objectid");
Insérez un document dans la collection test_objectid.
db.test_objectid.insert( {
'id': 1,
})
Interrogez les documents de la collection test_objectid.
db.test_objectid.find()
Le résultat suivant est renvoyé :
{
"_id":"ObjectId("641002ad883a73eb0d7291a7")"
"id":1
}
Procédure
-
Accédez à l'éditeur de développement SQL.
Connectez-vous à la console AnalyticDB for MySQL. Dans le coin supérieur gauche, sélectionnez la région où réside le cluster. Dans le volet de navigation de gauche, cliquez sur Clusters, puis cliquez sur l'ID du cluster cible.
Dans le volet de navigation de gauche, choisissez Job Development > SQL Development.
-
Exécutez l'instruction suivante pour créer une base de données externe.
CREATE EXTERNAL DATABASE adb_external_db; -
Créez une table externe.
ImportantLa table externe AnalyticDB for MySQL doit comporter les mêmes noms de champs, nombre de champs, ordre des champs et types de données que le document 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", }'; -
Interrogez les données.
Une fois la table externe créée, utilisez une instruction SELECT pour interroger les données de la collection
test_objectid.SELECT cast(_id as string) FROM adb_external_db.test_objectid;Exemple de résultat :
+----------------------------+ | CAST(_id AS string) | +----------------------------+ | 641002ad883a73eb0d7291a7 | +----------------------------+RemarquePour importer des données contenant des champs ObjectId dans AnalyticDB for MySQL, vous devez d'abord créer une base de données et une table pour stocker les données. Pour plus d'informations, reportez-vous aux étapes 5 à 7 de la section Importer des données depuis des documents non imbriqués dans MongoDB.
Mappages de types de données entre les tables externes AnalyticDB for MySQL et les collections MongoDB
|
AnalyticDB for MySQL table externe |
Collection MongoDB |
|
Boolean |
Boolean |
|
ObjectId |
ObjectId |
|
String |
String |
|
Int |
32-bit Integer, Int |
|
Bigint |
64-bit Integer Long |
|
Double |
Double |
|
Date |
Date |