全部产品
Search
文档中心

AnalyticDB:Impor data MongoDB menggunakan tabel eksternal

更新时间:Oct 22, 2025

Topik ini menjelaskan cara menggunakan tabel eksternal untuk menanyakan data MongoDB dan mengimpor data tersebut ke AnalyticDB for MySQL.

Prasyarat

  • Sebuah kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse telah dibuat.

  • Saklar ENI Network diaktifkan di bagian Informasi Jaringan pada halaman Cluster Information di AnalyticDB for MySQL.

    Penting

    Mengaktifkan atau menonaktifkan jaringan ENI akan memutus koneksi database selama sekitar 2 menit. Selama periode ini, operasi baca dan tulis tidak dapat dilakukan. Evaluasi dengan hati-hati dampaknya sebelum Anda mengaktifkan atau menonaktifkan jaringan ENI.

  • Instans MongoDB dan kluster AnalyticDB for MySQL berada di VPC yang sama.

  • Blok CIDR VPC dari kluster AnalyticDB for MySQL ditambahkan ke daftar putih instans MongoDB.

Impor data dari dokumen non-nested di MongoDB

Data contoh

Dalam contoh ini, sebuah koleksi bernama person dibuat di dalam database test_mongodb dari sebuah instans MongoDB.

use test_mongodb;
db.createCollection("person");

Masukkan dokumen ke dalam koleksi 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});

Prosedur

  1. Pergi ke editor SQL.

    1. Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.

    2. Di panel navigasi di sebelah kiri, klik Job Development > SQL Development.

  2. Eksekusi pernyataan berikut untuk membuat database eksternal.

    CREATE EXTERNAL DATABASE adb_external_db;
  3. Buat tabel eksternal.

    Penting

    Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen 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",
    }';

    Tabel 1. Parameter

    Parameter

    Deskripsi

    mapped_name

    Nama koleksi MongoDB. Dalam contoh ini, namanya adalah person.

    location

    Titik akhir VPC dari instans ApsaraDB for MongoDB.

    Format: mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/database.

    Contoh: mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb.

    Catatan

    Jangan gunakan titik akhir node sekunder untuk terhubung ke instans MongoDB.

    username

    Akun database dari instans MongoDB.

    Catatan

    MongoDB memverifikasi akun database dan kata sandi di database tujuan. Gunakan akun dari database yang ditentukan dalam titik akhir VPC instans MongoDB. Jika Anda memiliki pertanyaan, hubungi dukungan teknis.

    password

    Kata sandi dari akun database MongoDB.

  4. Tanyakan data.

    Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam koleksi person.

    SELECT * FROM adb_external_db.person;

    Hasil berikut dikembalikan:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lock  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  5. Buat database dan tabel di kluster AnalyticDB for MySQL untuk menyimpan data yang diimpor dari MongoDB.

    1. Buat database bernama adb_demo.

      CREATE DATABASE adb_demo; 
    2. Buat tabel bernama adb_demo.adb_import_test.

      Penting

      Tabel yang dibuat di kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan tabel eksternal AnalyticDB for MySQL.

       CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
  6. Impor data dari MongoDB ke kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.

    • Metode 1: Gunakan pernyataan INSERT INTO untuk mengimpor data. Jika nilai kunci utama duplikat, data baru diabaikan. Ini setara dengan menggunakan INSERT IGNORE INTO. Untuk informasi lebih lanjut, lihat INSERT INTO.

      INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
    • Metode 2: Gunakan pernyataan INSERT OVERWRITE INTO untuk mengimpor data secara sinkron. Ini menimpa data yang ada di tabel.

      INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
    • Metode 3: Gunakan pernyataan INSERT OVERWRITE INTO untuk mengimpor data secara asinkron. Untuk informasi lebih lanjut, lihat Penulisan Asinkron.

      SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
  7. Setelah data diimpor, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam tabel adb_demo.adb_import_test.

    SELECT * FROM adb_demo.adb_import_test;

    Hasil berikut dikembalikan:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lock  |   40 |
    +------+-------+------+

Tanyakan dokumen nested di MongoDB

Data contoh

Di dalam database test_mongodb, buat koleksi bernama test_json.

db.createCollection("test_json");

Masukkan dokumen ke dalam koleksi test_json. Bidang city dan name adalah bidang nested.

db.test_json.insert(    {
        'id': 1,
        'details':{'city': "hangzhou", "name":"jack"}
    })

Prosedur

  1. Pergi ke editor SQL.

    1. Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.

    2. Di panel navigasi di sebelah kiri, klik Job Development > SQL Development.

  2. Eksekusi pernyataan berikut untuk membuat database eksternal.

    CREATE EXTERNAL DATABASE adb_external_db;
  3. Buat tabel eksternal.

    Penting
    • Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen MongoDB.

    • Tabel eksternal tidak dapat digunakan untuk menulis data ke dokumen nested di 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",
    }';

    Parameter:

    • COLUMN_MAPPING: Menentukan pemetaan antara bidang tabel eksternal dan bidang dokumen MongoDB. Sebagai contoh, pemetaan dibuat antara bidang city dari tabel eksternal dan bidang details.city dari dokumen MongoDB.

    • Untuk informasi tentang parameter lainnya untuk tabel eksternal, lihat Deskripsi Parameter.

  4. Tanyakan data.

    Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam koleksi test_json.

    SELECT * FROM adb_external_db.test_json;

    Hasil berikut dikembalikan:

    +------+----------+-------+
    | id   |  city    |  name |
    +------+----------+-------+
    |    1 | hangzhou |  jack |
    +------+----------+-------+
    Catatan

    Untuk mengimpor data dari dokumen nested di MongoDB ke AnalyticDB for MySQL, Anda harus terlebih dahulu membuat database dan tabel. Untuk informasi lebih lanjut, lihat Langkah 5 hingga 7 di bagian Impor Data dari Dokumen Non-Nested di MongoDB dari topik ini.

Tanyakan bidang ObjectId

Data contoh

Di dalam database test_mongodb, buat koleksi bernama test_objectid.

db.createCollection("test_objectid");

Masukkan dokumen ke dalam koleksi test_objectid.

db.test_objectid.insert(    {
        'id': 1,
    })

Tanyakan dokumen dalam koleksi test_objectid.

db.test_objectid.find()

Hasil berikut dikembalikan:

{
   "_id":"ObjectId("641002ad883a73eb0d7291a7")"
   "id":1
}

Prosedur

  1. Pergi ke editor SQL.

    1. Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi di sisi kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster.

    2. Di panel navigasi di sebelah kiri, klik Job Development > SQL Development.

  2. Eksekusi pernyataan berikut untuk membuat database eksternal.

    CREATE EXTERNAL DATABASE adb_external_db;
  3. Buat tabel eksternal.

    Penting

    Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan dokumen 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",
    }';
  4. Tanyakan data.

    Setelah tabel eksternal dibuat, Anda dapat menggunakan pernyataan SELECT untuk menanyakan data dalam koleksi test_objectid.

    SELECT cast(_id as string) FROM adb_external_db.test_objectid;

    Hasil contoh:

    +----------------------------+
    |    CAST(_id AS string)     | 
    +----------------------------+
    |  641002ad883a73eb0d7291a7  |
    +----------------------------+
    Catatan

    Untuk mengimpor data yang berisi bidang ObjectId ke AnalyticDB for MySQL, Anda harus terlebih dahulu membuat database dan tabel untuk menyimpan data tersebut. Untuk informasi lebih lanjut, lihat Langkah 5 hingga 7 di Impor Data dari Dokumen Non-Nested di MongoDB.

Pemetaan tipe data antara tabel eksternal AnalyticDB for MySQL dan koleksi MongoDB

AnalyticDB for MySQL tabel eksternal

Koleksi MongoDB

Boolean

Boolean

ObjectId

ObjectId

String

String

Int

Integer 32-bit, Int

Bigint

Integer 64-bit Long

Double

Double

Date

Date