Sunucusuz SQL havuzu kullanarak Azure Cosmos DB verileri sorgulama

Tip

Microsoft Fabric Data Warehouse geleceğe hazır mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip data lake foundation üzerinde kurumsal ölçekli ilişkisel bir ambardır. Veri ambarı konusunda yeniyseniz Fabric Data Warehouse ile başlayın. Mevcut özel SQL havuzu iş yükleri, veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltilebilir.

Önemli

Cosmos DB için Synapse Link artık yeni projeler için desteklenmemektedir. Bu özelliği kullanmayın.

Şimdi GA olan Microsoft Fabric için Azure Cosmos DB Yansıtmayı kullanın. Yansıtma aynı sıfır ETL avantajlarını sağlar ve Microsoft Fabric ile tamamen tümleştirilir. Cosmos DB Yansıtmaya Genel Bakış sayfasında daha fazla bilgi edinin.

Sunucusuz SQL havuzu, işlem iş yüklerinizin performansını etkilemeden Azure Synapse Link ile etkinleştirilen Azure Cosmos DB kapsayıcılarınızdaki verileri neredeyse gerçek zamanlı olarak analiz etmenizi sağlar. analytical store verilerini sorgulamak için tanıdık bir Transact-SQL (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 sorgulamak için SELECT yüzey alanının tamamı, SQL işlevlerinin ve işleçlerinin çoğunu içeren OPENROWSET işlevi aracılığıyla desteklenir. Azure Cosmos DB'den veri okuyan sorgunun sonuçlarını Azure Blob Depolama veya Azure Data Lake Storage'a depolamak için CREATE EXTERNAL TABLE AS SELECT (CETAS) kullanabilirsiniz. Şu anda CETAS kullanarak sunucusuz SQL havuzu sorgu sonuçlarını Azure Cosmos DB depolayamazsınız.

Bu makalede, Azure Synapse Link ile etkinleştirilmiş Azure Cosmos DB kapsayıcılarından verileri sorgulayan sunucusuz SQL havuzuyla sorgu yazma işlemi açıklanır. Daha sonra Azure Cosmos DB kapsayıcılar üzerinde sunucusuz SQL havuzu görünümleri oluşturma ve bunları bu öğretici Power BI modellerine bağlama hakkında daha fazla bilgi edinebilirsiniz. Bu öğreticide Azure Cosmos DB iyi tanımlanmış şema içeren bir kapsayıcı kullanılır. Azure Synapse Analytics için SQL Serverless ile Azure Cosmos DB'yi Sorgulama modülünü "[Learn]" bölümünde inceleyebilirsiniz.

Önkoşullar

  • Analiz deposunu hazırladığınızdan emin olun:
    • analiz deposunu Azure Cosmos DB kapsayıcılarında etkinleştirin.
    • Analiz deposunu sorgulamak için kullanabileceğiniz salt okunur bir anahtarla bağlantı dizesi (bağlantı dizesi) alın.
    • Azure Cosmos DB kapsayıcısına erişmek için kullanılacak salt okunur key alın.
  • Aşağıdakiler gibi tüm en iyi yöntemleri uyguladığınıza emin olun:
    • Azure Cosmos DB analitik depolamanızın sunucusuz SQL havuzuyla aynı bölgede olduğundan emin olun.
    • İstemci uygulamasının (Power BI, Çözümleme hizmeti) sunucusuz SQL havuzuyla aynı bölgede olduğundan emin olun.
    • Büyük miktarda veri (80 GB'tan fazla) döndür ediyorsanız 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.
    • Veri süzgeçlemeyi dize sütunları kullanarak yapıyorsanız, en küçük olası türlere sahip açık OPENROWSET cümlesiyle WITH işlevini kullandığınızdan emin olun. Örneğin, özelliğin en fazla beş karaktere sahip olduğunu biliyorsanız kullanmayın VARCHAR(1000) .

Genel bakış

Sunucusuz SQL havuzu, OPENROWSET işlevini kullanarak Azure Cosmos DB analitik depolamayı sorgulamanızı sağlar.

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

Azure Cosmos DB için SQL bağlantı dizesi aşağıdaki bileşenleri içerir:

  • account - Hedeflediğiniz Azure Cosmos DB hesabının adı.
  • database - OPENROWSET söz diziminde tırnak işaretleri olmadan belirtilen kapsayıcı adı. Kapsayıcı adı özel karakterler içeriyorsa (örneğin, tire -), köşeli parantez içine alınmalıdır ([]).
  • region (isteğe bağlı) - Cosmos DB analiz depolama alanınızın bölgesi. Eğer atlanırsa, konteynerin birincil bölgesi kullanılır.
  • endpoint (isteğe bağlı) - Cosmos DB hesabınız standart https://<account name>.documents.azure.us biçimi izlemiyorsa gerekli olan Cosmos DB uç nokta URI'si (örneğin*.documents.azure.com).

Önemli

endpoint Parametresi, standart *.documents.azure.com biçimle eşleşmeyen hesaplar için gereklidir. Örneğin, Azure Cosmos DB hesabınız .documents.azure.us ile bitiyorsa, bağlantı dizesi endpoint=https://<account name>.documents.azure.us eklediğinizden emin olun. Önek eklediğinizden https:// emin olun.

Bu özellikler standart Cosmos DB bağlantı dizesi tanımlanabilir, örneğin:

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

SQL bağlantı dizesi aşağıdaki gibi biçimlendirilebilir:

account=<database account name>;database=<database name>;region=<region name>

Bu bağlantı dizesi Cosmos DB analiz depolama alanına bağlanmak için gereken kimlik doğrulama bilgilerini içermez. Kullanılan kimlik doğrulamasının türüne bağlı olarak ek bilgiler gereklidir:

  • Analiz deposuna erişmek için çalışma alanı tarafından yönetilen kimlik kullanılıyorsa OPENROWSET özelliğini eklemeniz AuthType gerekir.
  • Satır içi hesap anahtarı kullanıyorsanız OPENROWSET özelliğini eklemeniz key gerekir. Bu, kimlik bilgilerini hazırlamaya gerek kalmadan Azure Cosmos DB koleksiyonları sorgulamanıza olanak tanır.
  • Kimlik doğrulama bilgilerini bağlantı dizesi içinde dahil etmek yerine, OPENROWSET, Azure Cosmos DB hesap anahtarını içeren bir kimlik bilgisine başvurabilir. Bu yaklaşım, Azure Cosmos DB koleksiyonlarda görünüm oluşturmak için kullanılabilir.

Bu seçenekler aşağıda açıklanmıştır.

Sunucusuz SQL havuzu, Cosmos DB Analitik depolama alanını sorgulamanıza ve özgün Cosmos DB hesap anahtarıyla kimlik doğrulaması yapmanıza veya Synapse yönetilen kimliğinin Cosmos DB Analitik depolama alanına erişmesine izin vermenizi sağlar. Bu senaryoda aşağıdaki söz dizimini kullanabilirsiniz:

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

SQL bağlantı dizesi yukarıda açıklanan ortak özelliklere ek olarak (account, database, region ve endpoint), aşağıdaki seçeneklerden one eklemeniz gerekir:

  • AuthType - Synapse çalışma alanının Yönetilen Kimliği kullanılarak Cosmos DB'ye erişiliyorsa bu seçeneği ManagedIdentity olarak ayarlayın.
  • key - Synapse çalışma alanı yönetilen kimliği kullanılmıyorsa kullanılan Cosmos DB verilerine erişmek için kullanılan ana anahtar.

Bağlantı dizesi örnekleri aşağıdaki tabloda gösterilmiştir:

Doğrulama türü Bağlantı dizesi
Synapse çalışma alanı kimlik yönetimi account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity
Cosmos DB hesabı ana anahtarı account=<account name>;database=<db name>;region=<region name>;key=<account master key>

Önemli

Azure Cosmos DB analiz deposundaki dize değerleri UTF-8 metni olarak kodlandığından, örneğin Latin1_General_100_CI_AS_SC_UTF8 gibi bir UTF-8 veritabanı 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.

Uyarı

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-19Açık Araştırma Veri Kümesi(CORD-19) verilerini temel alır.

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

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 etmediğini unutmayın.

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

Azure Cosmos DB verileri keşfetmenin en kolay yolu otomatik şema çıkarımı özelliğini kullanmaktır. WITH ifadesinden OPENROWSET maddesini çıkararak sunucusuz SQL havuzunun Azure Cosmos DB kapsayıcısının analiz deposunun şemasını otomatik olarak algılamasını sağlayabilirsiniz.

Önemli

Betikte bu değerleri kendi değerlerinizle değiştirin:

  • your-cosmosdb - Cosmos DB hesabınızın adı
  • yourcosmosdbkey - Cosmos DB hesap anahtarınız
SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       Ecdc) as documents

Önceki örnekte sunucusuz SQL havuzuna, Azure Cosmos DB anahtarı (önceki örnekteki kukla) kullanılarak kimliği doğrulanmış covid Azure Cosmos DB hesabındaki MyCosmosDbAccount veritabanına bağlanmasını söyledik. Ardından Ecdc bölgesinde yer alan kapsayıcının West US 2 analitik deposuna eriştik. Belirli özelliklerin projeksiyonu olmadığından, OPENROWSET işlevi Azure Cosmos DB öğelerindeki tüm özellikleri döndürür.

Azure Cosmos DB kapsayıcısı içindeki öğelerin date_rep, cases ve geo_id özelliklerine sahip olduğunu varsayarsak, bu sorgunun sonuçları aşağıdaki tabloda gösterilmiştir:

tarih_temsil vakalar coğrafi_kimlik
2020-08-13 254 RS (Türkçe)
2020-08-12 235 RS (Türkçe)
2020-08-11 163 RS (Türkçe)

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

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

Şemayı açıkça belirtin

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

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

Aşağıdaki yapıya sahip ECDC COVID veri kümesinden bazı verileri Azure Cosmos DB içeri 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. Bu işlev, OPENROWSET okumak istediğiniz özelliklerin bir alt kümesini ve cümledeki tam sütun türlerini WITH belirtmenize olanak tanır.

SELECT TOP 10 *
FROM OPENROWSET(
      'CosmosDB',
      'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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:

tarih_temsil vakalar coğrafi_kimlik
2020-08-13 254 RS (Türkçe)
2020-08-12 235 RS (Türkçe)
2020-08-11 163 RS (Türkçe)

Azure Cosmos DB değerler için kullanılması gereken SQL türleri hakkında daha fazla bilgi için bu makalenin sonundaki Azure Cosmos DB to SQL type mappings konusuna bakın.

Görünüm oluşturma

master veya varsayılan veritabanlarında görünüm oluşturmak önerilmez ve 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 bilgisine yerleştirmeniz ve OPENROWSET işlevinden bu kimlik bilgisine referans vermeniz gerekir. Hesap anahtarınızı görünüm tanımında tutmayın.

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

Performansınızı etkileyebileceği için 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 VARCHAR(100) , varsayılan VARCHAR(8000)yerine). UtF-8 dönüştürme sorununu önlemek için varsayılan veritabanı harmanlaması olarak 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. Başvurulan sütunlar veya nesneler büyük olasılıkla değiştirilmiş veya artık mevcut değil. 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'nin otomatik eşitleme özelliği, sunucusuz SQL havuzundan zengin sorgulamaya olanak sağlayan iç içe veri türlerini işlemeyi içeren analiz deposundaki şema gösterimini kullanıma hazır olarak yönetir.

Ö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 iç içe nesneler ve diziler, OPENROWSET işlevi bunları okuduğunda sorgu sonucunda JSON dizeleri olarak gösterilir. Nesnelerdeki iç içe geçmiş değerlerin yollarını WITH ifadesini kullanırken belirtebilirsiniz.

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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:

makale_kimliği 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 Tedavisinde Rekonvalesan Serumun 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":"",…

Daha fazla bilgi için bkz. Azure Synapse Analytics'te karmaşık veri türlerini analiz etme veya Sunucusuz SQL havuzu kullanarak Parquet ve JSON dosyalarında iç içe geçmiş türleri sorgulama.

Önemli

Metninizde MÃÂ&copy;lade yerine Mélade gibi beklenmeyen karakterler görürseniz, veritabanı sıralamanızın UTF-8 sıralaması olarak ayarlanmadığını gösterir. gibi bir SQL deyimi kullanarak veritabanı harmanlamasını.

Dizileri iç içe düzleştirme

Azure Cosmos DB verileri, bir CORD-19 veri kümesindeki yazarlar dizisi gibi iç içe geçmiş 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, üst öğedeki (meta veriler) özellikleri dizinin tüm öğeleriyle (yazarlar) 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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, … Olivier Flores {"laboratory":"UMR C53 CIRAD, …

Önemli

Metninizde MÃÂ&copy;lade yerine Mélade gibi beklenmeyen karakterler görürseniz, veritabanı sıralamanızın UTF-8 sıralaması olarak ayarlanmadığını gösterir. gibi bir SQL deyimi kullanarak veritabanı harmanlamasını.

Azure Cosmos DB ile SQL tür eşlemeleri

Azure Cosmos DB işlem deposu şemadan bağımsız olsa da, analiz deposu analitik sorgu performansını optimize etmek için şemalıdır. Azure Synapse Link'nin otomatik eşitleme özelliğiyle Azure Cosmos DB iç içe veri türlerini işlemeyi içeren analiz deposundaki şema gösterimini kutudan çıkararak yönetir. 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ı number, string, JSON özellik türlerini destekler Boolean, null, nested object veya array. WITH yan tümcesini OPENROWSET içinde kullanıyorsanız, bu JSON türleriyle 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 (Boole Mantığı) biraz (if context allows for a small amount)
Tam sayı bigint
Ondalık yüzmek
Dize 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 sadakat OPENROWSET şemasına sahip bir kapsayıcıdaki fonksiyon, 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:

tarih_temsil vakalar coğrafi_kimlik
{"tarih":"2020-08-13"} {"int32":"254"} {"dize":"RS"}
{"tarih":"2020-08-12"} {"int32":"235"} {"dize":"RS"}
{"tarih":"2020-08-11"} {"int32":"316"} {"dize":"RS"}
{"tarih":"2020-08-10"} {"int32":"281"} {"dize":"RS"}
{"tarih":"2020-08-09"} {"int32":"295"} {"dize":"RS"}
{"dize":"08.08.2020"} {"int32":"312"} {"dize":"RS"}
{"tarih":"2020-08-07"} {"float64":"339.0"} {"dize":"RS"}

Her değer için, Azure Cosmos DB kapsayıcı öğesinde tanımlanan türü görebilirsiniz. date_rep özelliğinin değerlerinin çoğu date değerleri içerir, ancak bazıları Azure Cosmos DB'de yanlışlıkla dize olarak depolanmıştır. Tam uygunluk şeması hem doğru yazılan date değerleri hem de yanlış biçimlendirilmiş string değerleri döndürür.

Vaka sayısı bir int32 değer olarak depolanır, 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

OPENROWSET tümcesi olmadan, WITH fonksiyon, beklenen türlerdeki değerleri ve yanlış girilen türlerdeki değerleri ortaya çıkarır. 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 hesapları için Azure Cosmos DB'yi sorgulamak amacıyla, analiz deposundaki tam şema gösterimi ve kullanılacak genişletilmiş özellik adları hakkında daha fazla bilgiyi Azure Cosmos DB Analiz Deposu Nedir? başlığında öğrenebilirsiniz.

Tam uygunluk şemasına sahip sorgu öğeleri

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

Aşağıdaki örnekte, string özelliği için doğru türün geo_id ve int32 özelliği için doğru türün cases olduğunu varsayıyoruz.

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

geo_id ve cases değerlerinin diğer türlerde olanları, NULL değerleri olarak 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 temizlenemeyen diğer türlerde (cases.int64, cases.float64) değerleriniz varsa, bunlara WITH yan tümcesinde açıkça başvurmanız ve sonuçları birleştirmeniz gerekir. Aşağıdaki sorgu hem , int32hem int64 de float64sü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, vaka sayısı ya int32, int64 veya float64 değerleri olarak saklanır. Tüm değerler, ülke veya bölge başına vaka sayısını hesaplamak için çıkarılmalıdır.

Sorun giderme

Azure Cosmos DB sorgularla ilgili olası sorunları çözmenize yardımcı olabilecek bilinen sorunları veya sorun giderme adımlarını bulmak için self-help sayfasını gözden geçirin.