Bu konu, MongoDB verilerini sorgulamak ve verileri AnalyticDB for MySQL içine aktarmak için dış tabloların nasıl kullanılacağını açıklar.
Önkoşullar
AnalyticDB for MySQL kümeniz Enterprise Edition, Basic Edition veya Data Lakehouse Edition sürümündedir.
-
AnalyticDB for MySQL konsolundaki Cluster Information sayfasının Network Information bölümünde ENI Network anahtarı etkinleştirilmiştir.
ÖnemliENI ağını etkinleştirmek veya devre dışı bırakmak veritabanı bağlantısını yaklaşık 2 dakika kesintiye uğratır. Bu süre zarfında okuma ve yazma işlemleri yapılamaz. ENI ağını etkinleştirmeden veya devre dışı bırakmadan önce etkileri dikkatlice değerlendirin.
MongoDB örneği ve AnalyticDB for MySQL kümesi aynı VPC içinde yer alır.
AnalyticDB for MySQL kümesinin VPC CIDR bloğu, MongoDB örneğinin izin listesine eklenmiştir.
MongoDB'deki iç içe olmayan belgelerden veri aktarma
Örnek veriler
Bu örnekte, bir MongoDB örneğinin test_mongodb veritabanında person adlı bir koleksiyon oluşturulur.
use test_mongodb;
db.createCollection("person");
person koleksiyonuna belgeler ekleyin.
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});
Yordam
-
SQL geliştirme düzenleyicisine gidin.
AnalyticDB for MySQL konsoluna giriş yapın. Sol üst köşeden kümenin bulunduğu bölgeyi seçin. Sol gezinme bölmesinde Clusters öğesine tıklayın ve ardından hedef kümenin ID değerine tıklayın.
Sol gezinme bölmesinde Job Development > SQL Development seçeneklerini belirleyin.
-
Dış bir veritabanı oluşturmak için aşağıdaki deyimi çalıştırın.
CREATE EXTERNAL DATABASE adb_external_db; -
Dış bir tablo oluşturun.
ÖnemliAnalyticDB for MySQL dış tablosu, MongoDB belgesiyle aynı alan adlarına, alan sayısına, alan sırasına ve veri türlerine sahip olmalıdır.
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", }';Tablo 1. Parametreler
Parameter
Description
mapped_name
MongoDB koleksiyonunun adı. Bu örnekte ad
personşeklindedir.location
ApsaraDB for MongoDB örneğinin VPC uç noktası.
Biçim:
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/database.Örnek:
mongodb://testuser:**@dds-bp113d414bca8.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8**.mongodb.rds.aliyuncs.com:3717/test_mongodb.NotMongoDB örneğine bağlanmak için ikincil düğümlerin uç noktalarını kullanmayın.
username
MongoDB örneğinin veritabanı hesabı.
NotMongoDB, hedef veritabanındaki veritabanı hesabını ve parolayı doğrular. MongoDB örneğinin VPC uç noktasında belirtilen veritabanının hesabını kullanın. Sorularınız varsa teknik destek ile iletişime geçin.
password
MongoDB veritabanı hesabının parolası.
-
Verileri sorgulayın.
Dış tablo oluşturulduktan sonra,
personkoleksiyonundaki verileri sorgulamak için bir SELECT deyimi kullanabilirsiniz.SELECT * FROM adb_external_db.person;Aşağıdaki sonuç döndürülür:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+ 4 rows in set (0.35 sec) -
MongoDB'den aktarılan verileri depolamak için AnalyticDB for MySQL kümesinde bir veritabanı ve tablo oluşturun.
-
adb_demoadlı bir veritabanı oluşturun.CREATE DATABASE adb_demo; -
adb_demo.adb_import_testadlı bir tablo oluşturun.ÖnemliAnalyticDB for MySQL Enterprise Edition, Basic Edition veya Data Lakehouse Edition kümesinde oluşturulan tablo, AnalyticDB for MySQL dış tablosuyla aynı alan adlarına, alan sayısına, alan sırasına ve veri türlerine sahip olmalıdır.
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(id int,name varchar(1023),age int ) DISTRIBUTED BY HASH(id);
-
-
Verileri MongoDB'den AnalyticDB for MySQL Enterprise Edition, Basic Edition veya Data Lakehouse Edition kümesine aktarın.
-
Yöntem 1: Verileri aktarmak için
INSERT INTOdeyimini kullanın. Birincil anahtar değeri yinelenirse yeni veriler yoksayılır. Bu,INSERT IGNORE INTOkullanmaya eşdeğerdir. Daha fazla bilgi için bkz. INSERT INTO.INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Yöntem 2: Verileri senkronize olarak aktarmak için
INSERT OVERWRITE INTOdeyimini kullanın. Bu işlem, tabloda bulunan mevcut verilerin üzerine yazar.INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person; -
Yöntem 3: Verileri eşzamansız olarak aktarmak için
INSERT OVERWRITE INTOdeyimini kullanın. Daha fazla bilgi için bkz. Eşzamansız yazma.SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
-
-
Veriler aktarıldıktan sonra,
adb_demo.adb_import_testtablosundaki verileri sorgulamak için bir SELECT deyimi kullanabilirsiniz.SELECT * FROM adb_demo.adb_import_test;Aşağıdaki sonuç döndürülür:
+------+-------+------+ | id | name | age | +------+-------+------+ | 1 | james | 10 | | 2 | bond | 20 | | 3 | jack | 30 | | 4 | lock | 40 | +------+-------+------+
MongoDB'deki iç içe geçmiş belgeleri sorgulama
Örnek veriler
test_mongodb veritabanında test_json adlı bir koleksiyon oluşturun.
db.createCollection("test_json");
test_json koleksiyonuna bir belge ekleyin. city ve name alanları iç içe geçmiş alanlardır.
db.test_json.insert( {
'id': 1,
'details':{'city': "hangzhou", "name":"jack"}
})
Yordam
-
SQL geliştirme düzenleyicisine gidin.
AnalyticDB for MySQL konsoluna giriş yapın. Sol üst köşeden kümenin bulunduğu bölgeyi seçin. Sol gezinme bölmesinde Clusters öğesine tıklayın ve ardından hedef kümenin ID değerine tıklayın.
Sol gezinme bölmesinde Job Development > SQL Development seçeneklerini belirleyin.
-
Dış bir veritabanı oluşturmak için aşağıdaki deyimi çalıştırın.
CREATE EXTERNAL DATABASE adb_external_db; -
Dış bir tablo oluşturun.
ÖnemliAnalyticDB for MySQL dış tablosu, MongoDB belgesiyle aynı alan adlarına, alan sayısına, alan sırasına ve veri türlerine sahip olmalıdır.
Dış tablolar, MongoDB'deki iç içe geçmiş belgelere veri yazmak için kullanılamaz.
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", }';Parametreler:
COLUMN_MAPPING: Dış tablonun alanları ile MongoDB belgesinin alanları arasındaki eşlemeleri tanımlar. Örneğin, dış tablonuncityalanı ile MongoDB belgesinindetails.cityalanı arasında bir eşleme oluşturulur.Dış tablo için diğer parametreler hakkında bilgi edinmek için bkz. Parametre açıklamaları.
-
Verileri sorgulayın.
Dış tablo oluşturulduktan sonra,
test_jsonkoleksiyonundaki verileri sorgulamak için bir SELECT deyimi kullanabilirsiniz.SELECT * FROM adb_external_db.test_json;Aşağıdaki sonuç döndürülür:
+------+----------+-------+ | id | city | name | +------+----------+-------+ | 1 | hangzhou | jack | +------+----------+-------+Notİç içe geçmiş belgelerdeki verileri MongoDB'den AnalyticDB for MySQL içine aktarmak için öncelikle bir veritabanı ve tablo oluşturmanız gerekir. Daha fazla bilgi için bu konunun MongoDB'deki iç içe olmayan belgelerden veri aktarma bölümündeki 5. ila 7. adımlara bakın.
ObjectId alanlarını sorgulama
Örnek veriler
test_mongodb veritabanında test_objectid adlı bir koleksiyon oluşturun.
db.createCollection("test_objectid");
test_objectid koleksiyonuna bir belge ekleyin.
db.test_objectid.insert( {
'id': 1,
})
test_objectid koleksiyonundaki belgeleri sorgulayın.
db.test_objectid.find()
Aşağıdaki sonuç döndürülür:
{
"_id":"ObjectId("641002ad883a73eb0d7291a7")"
"id":1
}
Yordam
-
SQL geliştirme düzenleyicisine gidin.
AnalyticDB for MySQL konsoluna giriş yapın. Sol üst köşeden kümenin bulunduğu bölgeyi seçin. Sol gezinme bölmesinde Clusters öğesine tıklayın ve ardından hedef kümenin ID değerine tıklayın.
Sol gezinme bölmesinde Job Development > SQL Development seçeneklerini belirleyin.
-
Dış bir veritabanı oluşturmak için aşağıdaki deyimi çalıştırın.
CREATE EXTERNAL DATABASE adb_external_db; -
Dış bir tablo oluşturun.
ÖnemliAnalyticDB for MySQL dış tablosu, MongoDB belgesiyle aynı alan adlarına, alan sayısına, alan sırasına ve veri türlerine sahip olmalıdır.
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", }'; -
Verileri sorgulayın.
Dış tablo oluşturulduktan sonra,
test_objectidkoleksiyonundaki verileri sorgulamak için bir SELECT deyimi kullanabilirsiniz.SELECT cast(_id as string) FROM adb_external_db.test_objectid;Örnek sonuç:
+----------------------------+ | CAST(_id AS string) | +----------------------------+ | 641002ad883a73eb0d7291a7 | +----------------------------+NotObjectId alanları içeren verileri AnalyticDB for MySQL içine aktarmak için öncelikle verileri depolamak üzere bir veritabanı ve tablo oluşturmanız gerekir. Daha fazla bilgi için MongoDB'deki iç içe olmayan belgelerden veri aktarma bölümündeki 5. ila 7. adımlara bakın.
AnalyticDB for MySQL dış tabloları ile MongoDB koleksiyonları arasında veri türü eşlemeleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|