Aracılığıyla paylaş


PolyBase'i MongoDB'deki dış verilere erişecek şekilde yapılandırma

Şunlar için geçerlidir: SQL Server

Bu makalede, MongoDB'deki dış verileri sorgulamak için SQL Server örneğinde PolyBase'in nasıl kullanılacağı açıklanmaktadır.

Önkoşullar

Windows'a PolyBase Yükleme'yi yükleyin.

Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, kimlik bilgilerini korumak için bir veritabanı ana anahtarı (DMK) oluşturun. Daha fazla bilgi için bkz. CREATE MASTER KEY .

MongoDB dış veri kaynağını yapılandırma

MongoDB veri kaynağındaki verileri sorgulamak için dış verilere başvurmak için dış tablolar oluşturmanız gerekir. Bu bölüm, bu dış tabloları oluşturmak için örnek kod sağlar.

Bu bölümde aşağıdaki Transact-SQL komutları kullanılır:

  1. MongoDB kaynağına erişmek için veritabanına özgü bir kimlik bilgisi oluşturun.

    Aşağıdaki betik, veritabanında tanımlı bir kimlik bilgisi oluşturur. Betiği çalıştırmadan önce ortamınız için güncelleştirin:

    • Değiştirin <credential_name> kimlik bilgisi için bir adla.
    • <username>'yi dış kaynağın kullanıcı adıyla değiştirin.
    • yerine uygun parolayı yazın <password> .
    CREATE DATABASE SCOPED CREDENTIAL [<credential_name>]
    WITH IDENTITY = '<username>',
         SECRET = '<password>';
    

    Önemli

    PolyBase için MongoDB ODBC Bağlayıcısı, Kerberos kimlik doğrulamasını değil yalnızca temel kimlik doğrulamasını destekler.

  2. Dış veri kaynağı oluşturma.

    Aşağıdaki komut dosyası harici veri kaynağını oluşturur. Referans olarak, CREATE EXTERNAL DATA SOURCE'a bakınız. Betiği çalıştırmadan önce ortamınız için güncelleştirin:

    • Konumu güncelleştirin. <server> ve <port> ortamınız için ayarlayın.
    • <credential_name>'yi önceki adımda oluşturduğunuz kimlik bilgilerinin adıyla değiştirin.
    • İsteğe bağlı olarak, dış kaynağa itme aşağı hesaplaması belirlemek istiyorsanız PUSHDOWN = ON veya PUSHDOWN = OFF belirtin.
    CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH (LOCATION = '<mongodb://<server>[:<port>]>'
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] PUSHDOWN = { ON | OFF } ])
    [ ; ]
    
  3. MongoDB'de dış şemayı sorgula.

    sp_data_source_objects kullanarak diziler içeren MongoDB koleksiyonlarının koleksiyon şemasını (sütunlar) tespit edin ve dış tabloyu manuel olarak oluşturun. sp_data_source_table_columns saklı yordamı, MongoDB sürücüsü için PolyBase ODBC Sürücüsü aracılığıyla da otomatik olarak düzleştirme gerçekleştirir.

  4. Dış bir tablo oluşturun.

    Şemayı manuel olarak sağlamak için, aşağıdaki örnek betiği kullanarak bir dış tablo oluşturmayı düşünün. Daha fazla bilgi için bkz CREATE EXTERNAL TABLE.

    Betiği çalıştırmadan önce ortamınız için güncelleştirin:

    • Alan adlarını, sıralama düzenlerini güncelleyin ve eğer koleksiyonsalar koleksiyon adını ve alan adını belirtin. Örnekte, friends özel bir veri türüdür.

    • Konumu güncelleştirin. Veritabanı adını ve tablo adını ayarlayın. Üç bölümlü adlara izin verilmez, bu nedenle tablo için system.profile oluşturamazsınız. Ayrıca, meta verileri ondan alamadığı için bir görünüm belirtemezsiniz.

    • Veri kaynağını önceki adımda oluşturduğunuz adıyla güncelleştirin.

    CREATE EXTERNAL TABLE [MongoDbRandomData]
    (
        [_id] NVARCHAR (24) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [RandomData_friends_id] INT,
        [RandomData_tags] NVARCHAR (MAX) COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = [MongoDb],
        LOCATION = 'MyDb.RandomData'
    );
    
  5. İsteğe bağlı: Dış tabloda istatistikler oluşturun.

    En iyi sorgu performansı için özellikle birleştirmeler, filtreler ve toplamalar için kullanılanlar olmak üzere dış tablo sütunlarında istatistikler oluşturun.

    CREATE STATISTICS statistics_name
        ON customer(C_CUSTKEY)
        WITH FULLSCAN;
    

MongoDB bağlantı seçenekleri

MongoDB bağlantı seçenekleri hakkında bilgi için mongoDB belgelerine bakın: Bağlantı Dizesi URI Biçimi.

Düzleştirme

MongoDB belge koleksiyonlarından iç içe ve yinelenen verilerde düzleştirme etkinleştirilir. MongoDB belge koleksiyonları üzerinde iç içe veya yinelenen veriler içeren ilişkisel bir şemayı etkinleştirmeniz create an external table ve açıkça belirtmeniz gerekir.

JSON iç içe yerleştirilmiş ve yinelenen veri türleri aşağıdaki gibi düzleştirilmiştir:

  • Nesne: süslü parantez içine alınmış sıralanmamış anahtar/değer koleksiyonu (iç içe).

    • SQL Server her nesne anahtarı için bir tablo sütunu oluşturur

      • Sütun adı: <objectname>_<keyname>
  • Dizi: virgülle ayrılmış, köşeli ayraç içine alınmış sıralı değerler (yinelenen)

    • SQL Server her dizi öğesi için yeni bir tablo satırı ekler

    • SQL Server, dizi öğesi dizinini depolamak için dizi başına bir sütun oluşturur

      • Sütun adı: <arrayname>_index

      • Veri Türü: bigint

Bu teknik aşağıdakiler gibi çeşitli sorunlara neden olabilir:

  • Boş bir yinelenen alan, aynı kaydın düz alanlarındaki verileri maskeler.

  • Birden çok yinelenen alan, üretilen satır sayısını artırır.

Örneğin, SQL Server ilişkisel olmayan JSON biçiminde depolanan MongoDB örnek veri kümesi restoran koleksiyonunu değerlendirir. Her restoranın iç içe bir adres alanı ve farklı günlerde atandığı bir dizi not vardır. Aşağıdaki görüntü, alt alta adresler ve alt alta-tekrarlanan derecelendirmelere sahip tipik bir restoranı göstermektedir.

MongoDB düzleştirmesinin ekran görüntüsü.

Nesne adresleri aşağıdaki gibi düzleştirilmiştir:

  • İç içe alan restaurant.address.building, restaurant.address_building olarak değişir
  • İç içe alan restaurant.address.coord, restaurant.address_coord olarak değişir
  • İç içe alan restaurant.address.street, restaurant.address_street olarak değişir
  • İç içe alan restaurant.address.zipcode, restaurant.address_zipcode olarak değişir

Dizi notları aşağıdaki gibi düzleştirilmiştir:

notlar_tarihi not_ortalama oyun_skoru
1393804800000 A 2
1378857600000 A 6
135898560000 A 10
1322006400000 A 9
1299715200000 B 14

Cosmos DB bağlantısı

Cosmos DB örneği için dış tablo oluşturmak için Cosmos DB Mongo API'sini ve MongoDB PolyBase bağlayıcısını kullanabilirsiniz. Daha önce açıklanan adımları izleyin. Veritabanı kapsamlı kimlik bilgileri, sunucu adresi, bağlantı noktası ve konum dizesinin Cosmos DB sunucusuyla eşleştiğinden emin olun.

Örnekler

Aşağıdaki örnek, aşağıdaki parametrelerle bir dış veri kaynağı oluşturur:

Parametre Değer
İsim external_data_source_name
Service mongodb0.example.com
Örneği 27017
Replika kümesi myRepl
TLS true
İtme hesaplaması ON
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = 'mongodb://mongodb0.example.com:27017',
    PUSHDOWN = ON,
    CONNECTION_OPTIONS = 'replicaSet = myRepl; tls = true',
    CREDENTIAL = credential_name
);