Azure Synapse Link'te sunucusuz sql havuzuyla Azure Cosmos DB verilerini sorgulama

Sunucusuz SQL havuzu, Azure Synapse Link ile etkinleştirilen Azure Cosmos DB kapsayıcılarınızdaki verileri işlem iş yüklerinizin performansını etkilemeden neredeyse gerçek zamanlı olarak analiz etmenizi sağlar. Analiz deposundan verileri sorgulamak için tanıdık bir T-SQL söz dizimi ve T-SQL arabirimi aracılığıyla çok çeşitli iş zekası (BI) ve geçici sorgulama araçlarıyla tümleşik bağlantı sunar.

Azure Cosmos DB'yi sorgulamak için TAM SELECT yüzey alanı, SQL işlevlerinin ve işleçlerinin çoğunu içeren OPENROWSET işlevi aracılığıyla desteklenir. Ayrıca, azure cosmos DB'den verileri okuyan sorgunun sonuçlarını ve verileri Azure Blob Depolama veya Azure Data Lake Depolama'de, seçme olarak dış tablo oluştur (CETAS) kullanarak depolayabilirsiniz. Şu anda CETAS kullanarak sunucusuz SQL havuzu sorgu sonuçlarını Azure Cosmos DB'de depolayamazsınız.

Bu makalede, Azure Synapse Link ile etkinleştirilen Azure Cosmos DB kapsayıcılarındaki verileri sorgulayacak sunucusuz SQL havuzuyla bir sorgu yazmayı öğreneceksiniz. Daha sonra bu öğreticide Azure Cosmos DB kapsayıcıları üzerinden sunucusuz SQL havuzu görünümleri oluşturma ve bunları Power BI modellerine bağlama hakkında daha fazla bilgi edinebilirsiniz. Bu öğreticide Azure Cosmos DB iyi tanımlanmış şeması olan bir kapsayıcı kullanılır. Azure Synapse Analytics için SQL Sunucusuz ile Azure Cosmos DB'yi sorgulama hakkındaki Learn modülüne de göz atabilirsiniz

Önkoşullar

  • Analiz deposunu hazırladığınızdan emin olun:
    • Azure Cosmos DB kapsayıcılarınızda analiz deposunu etkinleştirin.
    • Analiz deposunu sorgulamak için kullanacağınız salt okunur bir anahtarla bağlantı dizesi alın.
    • Azure Cosmos DB kapsayıcısına erişmek için kullanılacak salt okunur anahtarı alma
  • Aşağıdakiler gibi tüm en iyi yöntemleri uyguladığınıza emin olun:
    • Azure Cosmos DB analiz depolama alanınızın sunucusuz SQL havuzuyla aynı bölgede olduğundan emin olun.
    • İstemci uygulamasının (Power BI, Analysis service) sunucusuz SQL havuzuyla aynı bölgede olduğundan emin olun.
    • Büyük miktarda veri döndürdüyseniz (80 GB'tan büyük), Analysis services gibi önbelleğe alma katmanını kullanmayı ve Analysis services modelinde 80 GB'tan küçük bölümleri yüklemeyi göz önünde bulundurun.
    • Dize sütunlarını kullanarak verileri filtrelediyseniz, işlevi mümkün olan en küçük türlere sahip açık WITH yan tümcesiyle kullandığınızdan OPENROWSET emin olun (örneğin, özelliğin en fazla 5 karakteri olduğunu biliyorsanız VARCHAR(1000) kullanmayın).

Genel bakış

Sunucusuz SQL havuzu, işlevi kullanarak OPENROWSET Azure Cosmos DB analiz depolamasını sorgulamanızı sağlar.

  • OPENROWSET satır içi anahtarla. Bu söz dizimi, kimlik bilgilerini hazırlamaya gerek kalmadan Azure Cosmos DB koleksiyonlarını sorgulamak için kullanılabilir.
  • OPENROWSET Azure Cosmos DB hesap anahtarını içeren kimlik bilgilerine başvuruda bulundu. Bu söz dizimi, Azure Cosmos DB koleksiyonlarında görünümler oluşturmak için kullanılabilir.

Azure Cosmos DB analiz deposundaki verileri sorgulamayı ve çözümlemeyi desteklemek için sunucusuz bir SQL havuzu kullanılır. Sunucusuz SQL havuzu SQL söz dizimini kullandığından OPENROWSET önce Azure Cosmos DB bağlantı dizesi şu biçime dönüştürmeniz gerekir:

OPENROWSET( 
       'CosmosDB',
       '<SQL connection string for Azure Cosmos DB>',
       <Container name>
    )  [ < with clause > ] AS alias

Azure Cosmos DB için SQL bağlantı dizesi, Azure Cosmos DB hesap adını, veritabanı adını, veritabanı hesabı ana anahtarını ve işlev için OPENROWSET isteğe bağlı bir bölge adını belirtir. Bu bilgilerin bazıları standart Azure Cosmos DB bağlantı dizesi alınabilir.

Standart Azure Cosmos DB bağlantı dizesi biçiminden dönüştürme:

AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;

SQL bağlantı dizesi aşağıdaki biçime sahiptir:

'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'

Bölge isteğe bağlıdır. Atlanırsa kapsayıcının birincil bölgesi kullanılır.

Önemli

bağlantı dizesi adlı endpointbaşka bir isteğe bağlı parametre vardır. endpoint Param, standart *.documents.azure.com biçimle eşleşmeyen hesaplar için gereklidir. Örneğin, Azure CosmosDB hesabınız ile .documents.azure.usbitiyorsa, bağlantı dizesi eklediğinizden endpoint=<account name>.documents.azure.us emin olun.

Azure Cosmos DB kapsayıcı adı söz diziminde OPENROWSET tırnak işaretleri olmadan belirtilir. Kapsayıcı adında tire (-) gibi özel karakterler varsa, ad söz diziminde OPENROWSET köşeli ayraçlar ([]) içinde sarmalanmalıdır.

Önemli

Azure Cosmos DB analiz deposundaki dize değerleri UTF-8 metni olarak kodlandığından, örneğin utf-8 Latin1_General_100_CI_AS_SC_UTF8veritabanı harmanlaması kullandığınızdan emin olun. Dosyadaki metin kodlaması ile harmanlama arasındaki uyuşmazlık beklenmeyen metin dönüştürme hatalarına neden olabilir. T-SQL deyimini alter database current collate Latin1_General_100_CI_AI_SC_UTF8kullanarak geçerli veritabanının varsayılan harmanlamasını kolayca değiştirebilirsiniz.

Not

Sunucusuz SQL havuzu, Azure Cosmos DB işlem deposunu sorgulamayı desteklemez.

Örnek veri kümesi

Bu makaledeki örnekler, Avrupa Hastalık Önleme ve Kontrol Merkezi (ECDC) COVID-19 Vakaları ve COVID-19 Açık Araştırma Veri Kümesi (CORD-19), doi:10.5281/zenodo.3715505 verilerini temel almaktadır.

Bu sayfalarda verilerin lisansını ve yapısını görebilirsiniz. AYRıCA ECDC ve CORD-19 veri kümeleri için örnek verileri de indirebilirsiniz.

Azure Cosmos DB verilerini sunucusuz sql havuzuyla sorgulamayı gösteren bu makaleyle birlikte izlemek için aşağıdaki kaynakları oluşturduğunuzdan emin olun:

  • Azure Synapse Link'in etkinleştirildiği bir Azure Cosmos DB veritabanı hesabı.
  • adlı covidbir Azure Cosmos DB veritabanı.
  • adlı Ecdc ve Cord19 önceki örnek veri kümeleriyle yüklenen iki Azure Cosmos DB kapsayıcısı.

Test amacıyla aşağıdaki bağlantı dizesi kullanabilirsiniz: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==. Bu hesabın Synapse SQL uç noktanızla karşılaştırıldığında uzak bölgede bulunabileceği için bu bağlantının performansı garanti etmeyeceğini unutmayın.

Otomatik şema çıkarımı ile Azure Cosmos DB verilerini keşfetme

Azure Cosmos DB'deki verileri keşfetmenin en kolay yolu otomatik şema çıkarımı özelliğini kullanmaktır. deyimindeki yan tümcesini WITHOPENROWSET atlayarak sunucusuz SQL havuzuna Azure Cosmos DB kapsayıcısının analiz deposu şemasını otomatik olarak algılamasını (çıkarmasını) belirtebilirsiniz.

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc) as documents

Yukarıdaki örnekte sunucusuz SQL havuzuna Azure Cosmos DB anahtarı (önceki örnekteki kukla) kullanılarak kimliği doğrulanmış Azure Cosmos DB hesabındaki MyCosmosDbAccount veritabanına bağlanma covid talimatını verdik. Ardından kapsayıcının Ecdc bölgedeki analiz deposuna erişildi West US 2 . Belirli özelliklerin projeksiyonu olmadığından işlev, OPENROWSET Azure Cosmos DB öğelerindeki tüm özellikleri döndürür.

Azure Cosmos DB kapsayıcısı date_repiçindeki öğelerin , casesve geo_id özellikleri olduğunu varsayarsak, bu sorgunun sonuçları aşağıdaki tabloda gösterilir:

date_rep vakalar geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

Aynı Azure Cosmos DB veritabanındaki diğer kapsayıcıdaki verileri incelemeniz gerekiyorsa, aynı bağlantı dizesi kullanabilir ve üçüncü parametreyle gerekli kapsayıcıya başvurabilirsiniz:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19) as cord19

Şemayı açıkça belirtin

içindeki OPENROWSET otomatik şema çıkarımı özelliği basit, kullanımı kolay bir sorgu sağlarken, iş senaryolarınız Azure Cosmos DB verilerinden salt okunur özellikler için şemayı açıkça belirtmenizi gerektirebilir.

işlevi, OPENROWSET kapsayıcıdaki verilerden hangi özellikleri okumak istediğinizi açıkça belirtmenizi ve bunların veri türlerini belirtmenizi sağlar.

EcDC COVID veri kümesinden aşağıdaki yapıya sahip bazı verileri Azure Cosmos DB'ye aktardığımızı düşünelim:

{"date_rep":"2020-08-13","cases":254,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-12","cases":235,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-11","cases":163,"countries_and_territories":"Serbia","geo_id":"RS"}

Azure Cosmos DB'deki bu düz JSON belgeleri Synapse SQL'de bir dizi satır ve sütun olarak temsil edilebilir. işlevi, OPENROWSET okumak istediğiniz özelliklerin bir alt kümesini ve yan tümcesinde tam sütun türlerini belirtmenizi WITH sağlar:

SELECT TOP 10 *
FROM OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

Bu sorgunun sonucu aşağıdaki tablo gibi görünebilir:

date_rep vakalar geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

Azure Cosmos DB değerleri için kullanılması gereken SQL türleri hakkında daha fazla bilgi için makalenin sonundaki SQL türü eşlemeleri kurallarına bakın.

Görünüm oluşturma

veya varsayılan veritabanlarında master görünüm oluşturma önerilmez veya desteklenmez. Bu nedenle görünümleriniz için bir kullanıcı veritabanı oluşturmanız gerekir.

Şemayı tanımladıktan sonra Azure Cosmos DB verilerinizin üzerinde bir görünüm hazırlayabilirsiniz. Azure Cosmos DB hesap anahtarınızı ayrı bir kimlik bilgilerine yerleştirmeniz ve işlevden bu kimlik bilgilerine OPENROWSET başvurmanız gerekir. Hesap anahtarınızı görünüm tanımında tutmayın.

CREATE CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;Database=covid',
      OBJECT = 'Ecdc',
      SERVER_CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

Performansınızı etkileyebileceğinden açıkça tanımlanmış şema olmadan kullanmayın OPENROWSET . Sütunlarınız için mümkün olan en küçük boyutları kullandığınızdan emin olun (örneğin, varsayılan VARCHAR(8000) yerine VARCHAR(100)). UtF-8 dönüştürme sorununu önlemek için varsayılan veritabanı harmanlaması olarak bazı UTF-8 harmanlaması kullanmanız veya bunu açık sütun harmanlaması olarak ayarlamanız gerekir. Harmanlama Latin1_General_100_BIN2_UTF8 , bazı dize sütunlarını kullanarak verileri filtrelediğinizde en iyi performansı sağlar.

Görünümü sorguladığınızda hatalarla veya beklenmeyen sonuçlarla karşılaşabilirsiniz. Bu, görünümün değiştirilmiş veya artık mevcut olmayan sütunlara veya nesnelere başvurduğunu gösterir. Görünüm tanımını, temel alınan şema değişiklikleriyle uyumlu olacak şekilde el ile ayarlamanız gerekir. Bunun hem görünümde otomatik şema çıkarımı kullanılırken hem de şema açıkça belirtilirken gerçekleşebileceğini unutmayın.

İç içe nesneleri sorgulama

Azure Cosmos DB ile, iç içe nesneler veya diziler olarak oluşturarak daha karmaşık veri modellerini temsil edebilirsiniz. Azure Cosmos DB için Azure Synapse Link'in otomatik eşitleme özelliği, analiz deposundaki şema gösterimini kullanıma hazır olarak yönetir. Bu, sunucusuz SQL havuzundan zengin sorgulamaya olanak tanıyan iç içe veri türlerini işlemeyi içerir.

Örneğin, CORD-19 veri kümesinde şu yapıyı izleyen JSON belgeleri vardır:

{
    "paper_id": <str>,                   # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": <array of objects>    # list of author dicts, in order
        ...
     }
     ...
}

Azure Cosmos DB'deki iç içe nesneler ve diziler, işlev bunları okuduğunda sorgu sonucunda OPENROWSET JSON dizeleri olarak temsil edilir. Yan tümcesini kullanırken nesnelerdeki iç içe değerlerin WITH yollarını belirtebilirsiniz:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19)
WITH (  paper_id    varchar(8000),
        title        varchar(1000) '$.metadata.title',
        metadata     varchar(max),
        authors      varchar(max) '$.metadata.authors'
) AS docs;

Bu sorgunun sonucu aşağıdaki tablo gibi görünebilir:

paper_id Başlık meta veriler Yazar
bb11206963e831f... Ek Bilgi Bir eko-epidemi... {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1... Bağışıklık-E'de Yakınsanan Sera Kullanımı... {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
bb378eca9aac649... Tylosema esculentum (Marama) Tuber ve B... {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

Azure Cosmos DB için Azure Synapse Link'te Parquet dosyaları ve kapsayıcıları gibi karmaşık veri türlerini veya sunucusuz sql havuzunda iç içe yerleştirilmiş yapıları analiz etme hakkında daha fazla bilgi edinin.

Önemli

Metninizde yerine gibi MÃÂ&copy;ladeMéladebeklenmeyen karakterler görürseniz veritabanı harmanlamanız UTF-8 harmanlaması olarak ayarlanmaz. gibi bir SQL deyimi kullanarak veritabanının harmanlamasını UTF-8 harmanlaması olarak ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8değiştirin.

İç içe dizileri düzleştirme

Azure Cosmos DB verileri, cord-19 veri kümesinden yazarın dizisi gibi iç içe alt dizilere sahip olabilir:

{
    "paper_id": <str>,                      # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": [                        # list of author dicts, in order
            {
                "first": <str>,
                "middle": <list of str>,
                "last": <str>,
                "suffix": <str>,
                "affiliation": <dict>,
                "email": <str>
            },
            ...
        ],
        ...
}

Bazı durumlarda, dizinin tüm öğeleriyle (yazarlar) üst öğedeki (meta veriler) özellikleri "birleştirmeniz" gerekebilir. Sunucusuz SQL havuzu, işlevini iç içe diziye uygulayarak OPENJSON iç içe yapıları düzleştirmenizi sağlar:

SELECT
    *
FROM
    OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19
    ) WITH ( title varchar(1000) '$.metadata.title',
             authors varchar(max) '$.metadata.authors' ) AS docs
      CROSS APPLY OPENJSON ( authors )
                  WITH (
                       first varchar(50),
                       last varchar(50),
                       affiliation nvarchar(max) as json
                  ) AS a

Bu sorgunun sonucu aşağıdaki tablo gibi görünebilir:

Başlık Yazar Birinci Sonuncu Ilişkisi
Ek Bilgi Bir eko-epidemi... [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… Julien Mélade {"laboratory":"Centre de Recher…
Ek Bilgi Bir eko-epidemi... [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… Nicolas 4 {"laboratory":"","institution":"U…
Ek Bilgi Bir eko-epidemi... [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… Beza Ramazindrazana {"laboratory":"Centre de Recher…
Ek Bilgi Bir eko-epidemi... [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … Özdemir Flores {"laboratory":"UMR C53 CIRAD, …

Önemli

Metninizde yerine gibi MÃÂ&copy;ladeMéladebeklenmeyen karakterler görürseniz veritabanı harmanlamanız UTF-8 harmanlaması olarak ayarlanmaz. gibi bir SQL deyimi kullanarak veritabanının harmanlamasını UTF-8 harmanlaması olarak ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8değiştirin.

Azure Cosmos DB-SQL tür eşlemeleri

Azure Cosmos DB işlem deposu şemadan bağımsız olsa da analiz deposu analitik sorgu performansını iyileştirmek üzere şemaya alınır. Azure Synapse Link'in otomatik eşitleme özelliğiyle Azure Cosmos DB, iç içe veri türlerini işlemeyi içeren analiz deposundaki şema gösterimini kullanıma sunar. Sunucusuz bir SQL havuzu analiz deposunu sorguladığı için Azure Cosmos DB giriş veri türlerini SQL veri türleriyle eşlemeyi anlamak önemlidir.

SQL (Core) API'sinin Azure Cosmos DB hesapları sayı, dize, Boole, null, iç içe nesne veya dizi JSON özellik türlerini destekler. içinde yan tümcesini OPENROWSETkullanıyorsanız bu JSON türleriyle WITH eşleşen SQL türlerini seçmeniz gerekir. Aşağıdaki tabloda, Azure Cosmos DB'deki farklı özellik türleri için kullanılması gereken SQL sütun türleri gösterilmektedir.

Azure Cosmos DB özellik türü SQL sütun türü
Boolean bit
Tam sayı bigint
Ondalık kayan noktalı sayı
String varchar (UTF-8 veritabanı harmanlaması)
Tarih saati (ISO biçimli dize) varchar(30)
Tarih saati (UNIX zaman damgası) bigint
Boş any SQL type
İç içe nesne veya dizi varchar(max) (UTF-8 veritabanı harmanlaması), JSON metni olarak serileştirilmiş

Tam uygunluk şeması

Azure Cosmos DB tam uygunluk şeması, kapsayıcıdaki her özellik için hem değerleri hem de bunların en iyi eşleşme türlerini kaydeder. Tam OPENROWSET uygunluk şemasına sahip bir kapsayıcıdaki işlev, her hücredeki hem türü hem de gerçek değeri sağlar. Aşağıdaki sorgunun kapsayıcıdaki öğeleri tam uygunluk şemasıyla okuduğunu varsayalım:

SELECT *
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) as rows

Bu sorgunun sonucu, JSON metni olarak biçimlendirilmiş türleri ve değerleri döndürür:

date_rep vakalar geo_id
{"date":"2020-08-13"} {"int32":"254"} {"string":"RS"}
{"date":"2020-08-12"} {"int32":"235"} {"string":"RS"}
{"date":"2020-08-11"} {"int32":"316"} {"string":"RS"}
{"date":"2020-08-10"} {"int32":"281"} {"string":"RS"}
{"date":"2020-08-09"} {"int32":"295"} {"string":"RS"}
{"string":"2020/08/08"} {"int32":"312"} {"string":"RS"}
{"date":"2020-08-07"} {"float64":"339.0"} {"string":"RS"}

Her değer için, Azure Cosmos DB kapsayıcı öğesinde tanımlanan türü görebilirsiniz. özelliğinin değerlerinin date_rep çoğu değerler içerir date , ancak bazıları yanlış şekilde Azure Cosmos DB'de dize olarak depolanır. Tam uygunluk şeması hem doğru yazılan date değerleri hem de yanlış biçimlendirilmiş string değerleri döndürür. Servis talebi sayısı, değer int32 olarak depolanan bilgilerdir, ancak ondalık sayı olarak girilen bir değer vardır. Bu değer türüne float64 sahiptir. En büyük int32 sayıyı aşan bazı değerler varsa, bunlar tür olarak int64 depolanır. Bu örnekteki tüm geo_id değerler tür olarak string depolanır.

Önemli

Yan OPENROWSET tümcesi WITH olmayan işlev hem beklenen türlerdeki değerleri hem de yanlış girilen türlerdeki değerleri kullanıma sunar. Bu işlev raporlama için değil veri keşfi için tasarlanmıştır. Rapor oluşturmak için bu işlevden döndürülen JSON değerlerini ayrıştırmayın. Raporlarınızı oluşturmak için açık bir WITH yan tümcesi kullanın. Tam uygunluk analiz deposunda düzeltmeler uygulamak için Azure Cosmos DB kapsayıcısında yanlış türlere sahip değerleri temizlemeniz gerekir.

MongoDB için Azure Cosmos DB hesaplarını sorgulamak için analiz deposundaki tam uygunluk şeması gösterimi ve Azure Cosmos DB Analiz Deposu nedir? bölümünde kullanılacak genişletilmiş özellik adları hakkında daha fazla bilgi edinebilirsiniz.

Tam uygunluk şemasına sahip sorgu öğeleri

Tam uygunluk şemasını sorgularken yan tümcesinde SQL türünü ve beklenen Azure Cosmos DB özellik türünü WITH açıkça belirtmeniz gerekir.

Aşağıdaki örnekte, özelliğin doğru türü ve stringint32 özelliği için geo_idcases doğru tür olduğunu varsayacağız:

SELECT geo_id, cases = SUM(cases)
FROM OPENROWSET(
      'CosmosDB'
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string',
             cases INT '$.cases.int32'
    ) as rows
GROUP BY geo_id

ve için geo_idcases başka türleri olan değerler değer olarak NULL döndürülür. Bu sorgu yalnızca cases ifadede belirtilen türe (cases.int32 ) başvurur.

Azure Cosmos DB kapsayıcısında temizlenmeyecek başka türlere (cases.int64, cases.float64) sahip değerleriniz varsa, bunlara bir WITH yan tümcesinde açıkça başvurmanız ve sonuçları birleştirmeniz gerekir. Aşağıdaki sorgu hem , int64hem float64 de int32sütunda cases depolananları toplar:

SELECT geo_id, cases = SUM(cases_int) + SUM(cases_bigint) + SUM(cases_float)
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string', 
             cases_int INT '$.cases.int32',
             cases_bigint BIGINT '$.cases.int64',
             cases_float FLOAT '$.cases.float64'
    ) as rows
GROUP BY geo_id

Bu örnekte, servis talebi sayısı , int64veya float64 değerleri olarak int32depolanır. Ülke/bölge başına servis talebi sayısını hesaplamak için tüm değerlerin ayıklanması gerekir.

Sorun giderme

Azure Cosmos DB sorgularıyla ilgili olası sorunları çözmenize yardımcı olabilecek bilinen sorunları veya sorun giderme adımlarını bulmak için kendi kendine yardım sayfasını gözden geçirin.

Sonraki adımlar

Daha fazla bilgi için aşağıdaki makaleleri inceleyin: