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 veri okuyan sorgunun sonuçlarını ve verileri Azure Blob Depolama veya Azure Data Lake Storage'da, select (CETAS) olarak dış tablo oluştur seçeneğini 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ünü de gözden geçirin.
Not
Sunucusuz SQL havuzundan Azure Cosmos DB kapsayıcısına erişmek için yönetilen kimlik kullanamazsınız.
Ö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ızdanOPENROWSET
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ı endpoint
baş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.us
bitiyorsa, 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_UTF8
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_UTF8
kullanarak 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ı
covid
bir Azure Cosmos DB veritabanı. - adlı
Ecdc
veCord19
ö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 WITH
OPENROWSET
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_rep
içindeki öğelerin , cases
ve 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élade
Mélade
beklenmeyen 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_UTF8
değ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élade
Mélade
beklenmeyen 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_UTF8
değ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 OPENROWSET
kullanı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 |
Tamsayı | 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 string
int32
özelliği için geo_id
cases
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_id
cases
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 , int64
hem float64
de int32
sü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ı , int64
veya float64
değerleri olarak int32
depolanır. Ülke/bölge başına servis talebi sayısını hesaplamak için tüm değerlerin ayıklanması gerekir.
Sorun giderme
Sonraki adımlar
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- Azure Synapse Link ile Power BI ve sunucusuz SQL havuzunu kullanma
- Sunucusuz SQL havuzunda görünüm oluşturma ve kullanma
- Azure Cosmos DB üzerinden sunucusuz SQL havuzu görünümleri oluşturma ve DirectQuery aracılığıyla bunları Power BI modellerine bağlama öğreticisi
- Bazı hatalar alıyorsanız veya performans sorunlarıyla karşılaşıyorsanız Azure Cosmos DB için Azure Synapse bağlantısını ziyaret edin.
- Azure Synapse Analytics için SQL Sunucusuz ile Azure Cosmos DB'yi sorgulama hakkındaki Learn modülünü inceleyin.