Wykonywanie zapytań dotyczących danych usługi Azure Cosmos DB przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Link
Bezserwerowa pula SQL umożliwia analizowanie danych w kontenerach usługi Azure Cosmos DB, które są włączone w usłudze Azure Synapse Link niemal w czasie rzeczywistym bez wpływu na wydajność obciążeń transakcyjnych. Oferuje znaną składnię języka T-SQL do wykonywania zapytań dotyczących danych z magazynu analitycznego i zintegrowanej łączności z szeroką gamą narzędzi do analizy biznesowej (BI) i narzędzi do wykonywania zapytań ad hoc za pośrednictwem interfejsu języka T-SQL.
W przypadku wykonywania zapytań dotyczących usługi Azure Cosmos DB pełny obszar powierzchni SELECT jest obsługiwany za pomocą funkcji OPENROWSET , która obejmuje większość funkcji i operatorów SQL. Możesz również przechowywać wyniki zapytania, które odczytuje dane z usługi Azure Cosmos DB wraz z danymi w usłudze Azure Blob Storage lub Azure Data Lake Storage, używając polecenia create external table as select (CETAS). Obecnie nie można przechowywać wyników zapytań bezserwerowej puli SQL w usłudze Azure Cosmos DB przy użyciu instrukcji CETAS.
W tym artykule dowiesz się, jak napisać zapytanie z bezserwerową pulą SQL, która będzie wysyłać zapytania o dane z kontenerów usługi Azure Cosmos DB, które są włączone za pomocą usługi Azure Synapse Link. Następnie możesz dowiedzieć się więcej na temat tworzenia widoków bezserwerowej puli SQL za pośrednictwem kontenerów usługi Azure Cosmos DB i łączenia ich z modelami usługi Power BI w tym samouczku. W tym samouczku jest używany kontener z dobrze zdefiniowanym schematem usługi Azure Cosmos DB. Możesz również zapoznać się z modułem Learn dotyczącym wykonywania zapytań w usłudze Azure Cosmos DB przy użyciu usługi SQL Serverless dla usługi Azure Synapse Analytics.
Uwaga
Nie można użyć tożsamości zarządzanej, aby uzyskać dostęp do kontenera usługi Azure Cosmos DB z bezserwerowej puli SQL.
Wymagania wstępne
- Upewnij się, że przygotowano magazyn analityczny:
- Włącz magazyn analityczny w kontenerach usługi Azure Cosmos DB.
- Pobierz parametry połączenia przy użyciu klucza tylko do odczytu, który będzie używany do wykonywania zapytań względem magazynu analitycznego.
- Pobierz klucz tylko do odczytu, który będzie używany do uzyskiwania dostępu do kontenera usługi Azure Cosmos DB
- Upewnij się, że zastosowano wszystkie najlepsze rozwiązania, takie jak:
- Upewnij się, że magazyn analityczny usługi Azure Cosmos DB znajduje się w tym samym regionie co bezserwerowa pula SQL.
- Upewnij się, że aplikacja kliencka (Power BI, Analysis Service) znajduje się w tym samym regionie co bezserwerowa pula SQL.
- Jeśli zwracasz dużą ilość danych (większą niż 80 GB), rozważ użycie warstwy buforowania, takiej jak usługi Analysis Services, i załadowanie partycji mniejszych niż 80 GB w modelu usług Analysis Services.
- Jeśli filtrujesz dane przy użyciu kolumn ciągu, upewnij się, że używasz
OPENROWSET
funkcji zWITH
jawną klauzulą zawierającą najmniejsze możliwe typy (na przykład nie używaj funkcji VARCHAR(1000), jeśli wiesz, że właściwość ma maksymalnie 5 znaków.
Omówienie
Bezserwerowa pula SQL umożliwia wykonywanie zapytań względem magazynu analitycznego usługi Azure Cosmos DB przy użyciu OPENROWSET
funkcji.
OPENROWSET
z kluczem wbudowanym. Ta składnia może służyć do wykonywania zapytań dotyczących kolekcji usługi Azure Cosmos DB bez konieczności przygotowywania poświadczeń.OPENROWSET
to, do którego odwołuje się poświadczenie zawierające klucz konta usługi Azure Cosmos DB. Ta składnia może służyć do tworzenia widoków w kolekcjach usługi Azure Cosmos DB.
Aby obsługiwać wykonywanie zapytań i analizowanie danych w magazynie analitycznym usługi Azure Cosmos DB, używana jest bezserwerowa pula SQL. Bezserwerowa pula SQL używa OPENROWSET
składni SQL, więc musisz najpierw przekonwertować parametry połączenia usługi Azure Cosmos DB na następujący format:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
Parametry połączenia SQL dla usługi Azure Cosmos DB określa nazwę konta usługi Azure Cosmos DB, nazwę bazy danych, klucz główny konta bazy danych i opcjonalną nazwę OPENROWSET
regionu funkcji. Niektóre z tych informacji można pobrać ze standardowego parametry połączenia usługi Azure Cosmos DB.
Konwertowanie ze standardowego formatu usługi Azure Cosmos DB parametry połączenia:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
Parametry połączenia SQL ma następujący format:
'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'
Region jest opcjonalny. W przypadku pominięcia używany jest region podstawowy kontenera.
Ważne
W parametry połączenia jest inny opcjonalny parametr o nazwie endpoint
. Parametr endpoint
jest wymagany w przypadku kont, które nie są zgodne ze standardowym *.documents.azure.com
formatem. Jeśli na przykład konto usługi Azure CosmosDB kończy się ciągiem .documents.azure.us
, upewnij się, że dodano endpoint=<account name>.documents.azure.us
parametry połączenia.
Nazwa kontenera usługi Azure Cosmos DB jest określana bez znaków cudzysłowu OPENROWSET
w składni. Jeśli nazwa kontenera ma jakiekolwiek znaki specjalne, na przykład kreska (-), nazwa powinna być opakowana w nawiasy kwadratowe ([]
) w OPENROWSET
składni.
Ważne
Upewnij się, że używasz sortowania bazy danych UTF-8, na przykład , Latin1_General_100_CI_AS_SC_UTF8
ponieważ wartości ciągów w magazynie analitycznym usługi Azure Cosmos DB są kodowane jako tekst UTF-8.
Niezgodność między kodowaniem tekstu w pliku i sortowaniu może spowodować nieoczekiwane błędy konwersji tekstu.
Domyślne sortowanie bieżącej bazy danych można łatwo zmienić przy użyciu instrukcji alter database current collate Latin1_General_100_CI_AI_SC_UTF8
T-SQL .
Uwaga
Bezserwerowa pula SQL nie obsługuje wykonywania zapytań dotyczących magazynu transakcyjnego usługi Azure Cosmos DB.
Przykładowy zestaw danych
Przykłady w tym artykule są oparte na danych z Europejskiego Centrum Zapobiegania Chorobom i Kontroli (ECDC) przypadków COVID-19 i zestawu danych open research dataset (CORD-19), doi:10.5281/zenodo.3715505.
Na tych stronach można zobaczyć licencję i strukturę danych. Możesz również pobrać przykładowe dane dla zestawów danych ECDC i CORD-19.
Aby wykonać czynności opisane w tym artykule pokazującym sposób wykonywania zapytań dotyczących danych usługi Azure Cosmos DB przy użyciu bezserwerowej puli SQL, upewnij się, że utworzono następujące zasoby:
- Konto bazy danych usługi Azure Cosmos DB z włączoną usługą Azure Synapse Link.
- Baza danych usługi Azure Cosmos DB o nazwie
covid
. - Dwa kontenery usługi Azure Cosmos DB o nazwie
Ecdc
iCord19
załadowane z poprzednimi przykładowymi zestawami danych.
Do celów testowania można użyć następujących parametry połączenia: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==
. Należy pamiętać, że to połączenie nie gwarantuje wydajności, ponieważ to konto może znajdować się w regionie zdalnym w porównaniu z punktem końcowym usługi Synapse SQL.
Eksplorowanie danych usługi Azure Cosmos DB za pomocą automatycznego wnioskowania schematu
Najprostszym sposobem eksplorowania danych w usłudze Azure Cosmos DB jest użycie funkcji automatycznego wnioskowania schematu. Pomiń klauzulę WITH
z OPENROWSET
instrukcji , możesz poinstruować bezserwerową pulę SQL, aby automatycznie (wywnioskować) schemat magazynu analitycznego kontenera usługi Azure Cosmos DB.
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Ecdc) as documents
W poprzednim przykładzie poinstruowaliśmy bezserwerową pulę SQL, aby nawiązała połączenie z covid
bazą danych na koncie MyCosmosDbAccount
usługi Azure Cosmos DB uwierzytelnionym przy użyciu klucza usługi Azure Cosmos DB (fikcyjnego w poprzednim przykładzie). Następnie uzyskiwaliśmy dostęp do magazynu analitycznego Ecdc
kontenera w West US 2
regionie. Ponieważ nie ma projekcji określonych właściwości, OPENROWSET
funkcja zwróci wszystkie właściwości z elementów usługi Azure Cosmos DB.
Zakładając, że elementy w kontenerze usługi Azure Cosmos DB mają date_rep
właściwości , cases
i geo_id
, wyniki tego zapytania są wyświetlane w poniższej tabeli:
date_rep | przypadki | geo_id |
---|---|---|
2020-08-13 | 254 | OS |
2020-08-12 | 235 | OS |
2020-08-11 | 163 | OS |
Jeśli musisz eksplorować dane z innego kontenera w tej samej bazie danych usługi Azure Cosmos DB, możesz użyć tego samego parametry połączenia i odwołać się do wymaganego kontenera co trzeci parametr:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Cord19) as cord19
Jawne określanie schematu
Chociaż funkcja automatycznego wnioskowania schematu w systemie OPENROWSET
zapewnia prostą, łatwą w użyciu kwerendę, scenariusze biznesowe mogą wymagać jawnego określenia schematu do odpowiednich właściwości tylko do odczytu z danych usługi Azure Cosmos DB.
Funkcja OPENROWSET
umożliwia jawne określenie właściwości, które mają być odczytywane z danych w kontenerze, i określanie ich typów danych.
Wyobraźmy sobie, że zaimportowaliśmy dane z zestawu danych ECDC COVID z następującą strukturą do usługi Azure Cosmos DB:
{"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"}
Te płaskie dokumenty JSON w usłudze Azure Cosmos DB mogą być reprezentowane jako zestaw wierszy i kolumn w usłudze Synapse SQL. Funkcja OPENROWSET
umożliwia określenie podzestawu właściwości, które chcesz odczytać, oraz dokładne typy kolumn w klauzuli WITH
:
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
Wynik tego zapytania może wyglądać podobnie do poniższej tabeli:
date_rep | przypadki | geo_id |
---|---|---|
2020-08-13 | 254 | OS |
2020-08-12 | 235 | OS |
2020-08-11 | 163 | OS |
Aby uzyskać więcej informacji na temat typów SQL, które powinny być używane dla wartości usługi Azure Cosmos DB, zobacz reguły mapowania typów SQL na końcu artykułu.
Tworzenie widoku
Tworzenie widoków w domyślnych bazach master
danych lub nie jest zalecane ani obsługiwane. Dlatego musisz utworzyć bazę danych użytkownika dla widoków.
Po zidentyfikowaniu schematu możesz przygotować widok na podstawie danych usługi Azure Cosmos DB. Należy umieścić klucz konta usługi Azure Cosmos DB w osobnym poświadczenie i odwołać się do tego poświadczenia z OPENROWSET
funkcji. Nie należy przechowywać klucza konta w definicji widoku.
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
Nie używaj OPENROWSET
bez jawnie zdefiniowanego schematu, ponieważ może to mieć wpływ na wydajność. Upewnij się, że używasz najmniejszych możliwych rozmiarów kolumn (na przykład VARCHAR(100) zamiast domyślnego VARCHAR(8000)). Należy użyć sortowania UTF-8 jako domyślnego sortowania bazy danych lub ustawić je jako sortowanie jawne kolumny, aby uniknąć problemu z konwersją UTF-8. Sortowanie zapewnia najlepszą wydajność podczas filtrowania Latin1_General_100_BIN2_UTF8
danych przy użyciu niektórych kolumn ciągów.
Podczas wykonywania zapytań dotyczących widoku mogą wystąpić błędy lub nieoczekiwane wyniki. Prawdopodobnie oznacza to, że widok odwołuje się do kolumn lub obiektów, które zostały zmodyfikowane lub już nie istnieją. Musisz ręcznie dostosować definicję widoku, aby dopasować je do podstawowych zmian schematu. Należy pamiętać, że może się to zdarzyć zarówno podczas korzystania z automatycznego wnioskowania schematu w widoku, jak i podczas jawnego określania schematu.
Zapytania zagnieżdżone obiekty
Za pomocą usługi Azure Cosmos DB można reprezentować bardziej złożone modele danych, tworząc je jako zagnieżdżone obiekty lub tablice. Funkcja automatycznego synchronizowania usługi Azure Synapse Link dla usługi Azure Cosmos DB zarządza reprezentacją schematu w magazynie analitycznym, który obejmuje obsługę zagnieżdżonych typów danych, które umożliwiają zaawansowane wykonywanie zapytań z bezserwerowej puli SQL.
Na przykład zestaw danych CORD-19 zawiera dokumenty JSON, które są zgodne z tą strukturą:
{
"paper_id": <str>, # 40-character sha1 of the PDF
"metadata": {
"title": <str>,
"authors": <array of objects> # list of author dicts, in order
...
}
...
}
Zagnieżdżone obiekty i tablice w usłudze Azure Cosmos DB są reprezentowane jako ciągi JSON w wyniku zapytania, gdy OPENROWSET
funkcja je odczytuje. Ścieżki do wartości zagnieżdżonych w obiektach można określić podczas używania klauzuli WITH
:
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;
Wynik tego zapytania może wyglądać podobnie do poniższej tabeli:
paper_id | title | metadane | Autorów |
---|---|---|---|
bb11206963e831f... | Dodatkowe informacje o eko-epidemii... | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
bb1206963e831f1... | Stosowanie Konwalescent Sera w Immuno-E... | {"title":"The Use of Convalescent… |
[{"first":"Antonio","last":"Lavazza","suffix":"", … |
bb378eca9aac649... | Tylosema esculentum (Marama) Tuber i B... | {"title":"Tylosema esculentum (Ma… |
[{"first":"Walter","last":"Chingwaru","suffix":"",… |
Dowiedz się więcej na temat analizowania złożonych typów danych, takich jak pliki Parquet i kontenery w usłudze Azure Synapse Link dla usługi Azure Cosmos DB lub struktury zagnieżdżone w bezserwerowej puli SQL.
Ważne
Jeśli w tekście są wyświetlane nieoczekiwane znaki, takie jak Mélade
zamiast Mélade
, sortowanie bazy danych nie jest ustawione na sortowanie UTF-8 .
Zmień sortowanie bazy danych na sortowanie UTF-8 przy użyciu instrukcji SQL, takiej jak ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Spłaszczane tablice zagnieżdżone
Dane usługi Azure Cosmos DB mogły mieć zagnieżdżone podarray, takie jak tablica autora z zestawu danych CORD-19 :
{
"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>
},
...
],
...
}
W niektórych przypadkach może być konieczne "sprzężenie" właściwości z górnego elementu (metadanych) ze wszystkimi elementami tablicy (autorami). Bezserwerowa pula SQL umożliwia spłaszczanie OPENJSON
zagnieżdżonych struktur przez zastosowanie funkcji w zagnieżdżonej tablicy:
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
Wynik tego zapytania może wyglądać podobnie do poniższej tabeli:
title | Autorów | pierwszy | ostatni | przynależność |
---|---|---|---|---|
Dodatkowe informacje o eko-epidemii... | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
Dodatkowe informacje o eko-epidemii... | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | 4. | {"laboratory":"","institution":"U… |
Dodatkowe informacje o eko-epidemii... | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana | {"laboratory":"Centre de Recher… |
Dodatkowe informacje o eko-epidemii... | [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … |
Olivier | Flores | {"laboratory":"UMR C53 CIRAD, … |
Ważne
Jeśli w tekście są wyświetlane nieoczekiwane znaki, takie jak Mélade
zamiast Mélade
, sortowanie bazy danych nie jest ustawione na sortowanie UTF-8 . Zmień sortowanie bazy danych na sortowanie UTF-8 przy użyciu instrukcji SQL, takiej jak ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Mapowania typu SQL w usłudze Azure Cosmos DB
Chociaż magazyn transakcyjny usługi Azure Cosmos DB jest niezależny od schematu, magazyn analityczny jest schematyzowany w celu optymalizacji pod kątem wydajności zapytań analitycznych. Dzięki możliwości autosynchronicznego usługi Azure Synapse Link usługa Azure Cosmos DB zarządza reprezentacją schematu w magazynie analitycznym, który obejmuje obsługę zagnieżdżonych typów danych. Ponieważ bezserwerowa pula SQL wysyła zapytanie do magazynu analitycznego, ważne jest, aby zrozumieć, jak mapować typy danych wejściowych usługi Azure Cosmos DB na typy danych SQL.
Konta interfejsu API SQL (Core) usługi Azure Cosmos DB obsługują typy właściwości JSON liczb, ciągów, wartości logicznych, null, zagnieżdżonego obiektu lub tablicy. Jeśli używasz klauzuli WITH
w pliku , OPENROWSET
musisz wybrać typy SQL, które pasują do tych typów JSON. W poniższej tabeli przedstawiono typy kolumn SQL, które powinny być używane dla różnych typów właściwości w usłudze Azure Cosmos DB.
Typ właściwości usługi Azure Cosmos DB | Typ kolumny SQL |
---|---|
Wartość logiczna | bitowe |
Integer | bigint |
Dziesiętne | liczba zmiennoprzecinkowa |
String | varchar (sortowanie bazy danych UTF-8) |
Data/godzina (ciąg sformatowany w formacie ISO) | varchar(30) |
Data/godzina (sygnatura czasowa systemu UNIX) | bigint |
Null (zero) | any SQL type |
Zagnieżdżony obiekt lub tablica | varchar(max) (sortowanie bazy danych UTF-8), serializowane jako tekst JSON |
Schemat pełnej wierności
Schemat pełnej wierności usługi Azure Cosmos DB rejestruje zarówno wartości, jak i ich najlepsze typy dopasowania dla każdej właściwości w kontenerze. Funkcja OPENROWSET
w kontenerze ze schematem pełnej wierności zapewnia zarówno typ, jak i rzeczywistą wartość w każdej komórce. Załóżmy, że następujące zapytanie odczytuje elementy z kontenera ze schematem pełnej wierności:
SELECT *
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) as rows
Wynik tego zapytania zwróci typy i wartości sformatowane jako tekst JSON:
date_rep | przypadki | 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"} |
Dla każdej wartości można zobaczyć typ zidentyfikowany w elemencie kontenera usługi Azure Cosmos DB. Większość wartości właściwości date_rep
zawiera date
wartości, ale niektóre z nich są niepoprawnie przechowywane jako ciągi w usłudze Azure Cosmos DB. Schemat pełnej wierności zwróci zarówno poprawnie wpisane date
wartości, jak i niepoprawnie sformatowane string
wartości.
Liczba przypadków to informacje przechowywane jako int32
wartość, ale istnieje jedna wartość wprowadzona jako liczba dziesiętna. Ta wartość ma float64
typ. Jeśli istnieją pewne wartości, które przekraczają największą int32
liczbę, będą one przechowywane jako int64
typ. Wszystkie geo_id
wartości w tym przykładzie są przechowywane jako string
typy.
Ważne
OPENROWSET
Funkcja bez WITH
klauzuli uwidacznia obie wartości z oczekiwanymi typami i wartościami z niepoprawnie wprowadzonymi typami. Ta funkcja jest przeznaczona do eksploracji danych, a nie do raportowania. Nie analizuj wartości JSON zwracanych z tej funkcji w celu tworzenia raportów. Użyj jawnej klauzuli WITH, aby utworzyć raporty. Należy wyczyścić wartości, które mają niepoprawne typy w kontenerze usługi Azure Cosmos DB, aby zastosować poprawki w magazynie analitycznym o pełnej wierności.
Aby wykonać zapytanie dotyczące kont usługi Azure Cosmos DB dla bazy danych MongoDB, możesz dowiedzieć się więcej o pełnej wierności reprezentacji schematu w magazynie analitycznym i rozszerzonych nazwach właściwości, które mają być używane w artykule Co to jest magazyn analityczny usługi Azure Cosmos DB?.
Wykonywanie zapytań względem elementów ze schematem pełnej wierności
Podczas wykonywania zapytań względem schematu pełnej wierności należy jawnie określić typ SQL i oczekiwany typ właściwości usługi Azure Cosmos DB w klauzuli WITH
.
W poniższym przykładzie przyjęto założenie, że string
jest to poprawny typ właściwości i int32
jest poprawnym typem geo_id
właściwościcases
:
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
Wartości dla geo_id
i cases
, które mają inne typy, zostaną zwrócone jako NULL
wartości. To zapytanie będzie odwoływać się tylko cases
do określonego typu w wyrażeniu (cases.int32
).
Jeśli masz wartości z innymi typami (cases.int64
, cases.float64
), których nie można wyczyścić w kontenerze usługi Azure Cosmos DB, musisz jawnie odwołać się do nich w WITH
klauzuli i połączyć wyniki. Następujące zapytanie agreguje zarówno int32
, , int64
jak i float64
przechowywane w kolumnie cases
:
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
W tym przykładzie liczba przypadków jest przechowywana jako int32
wartości , int64
lub float64
. Aby obliczyć liczbę przypadków na kraj/region, należy wyodrębnić wszystkie wartości.
Rozwiązywanie problemów
Przejrzyj stronę samodzielnej pomocy, aby znaleźć znane problemy lub kroki rozwiązywania problemów, które mogą pomóc w rozwiązaniu potencjalnych problemów z zapytaniami usługi Azure Cosmos DB.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Używanie usługi Power BI i bezserwerowej puli SQL z usługą Azure Synapse Link
- Tworzenie i używanie widoków w bezserwerowej puli SQL
- Samouczek dotyczący tworzenia widoków bezserwerowej puli SQL za pośrednictwem usługi Azure Cosmos DB i łączenia ich z modelami usługi Power BI za pośrednictwem trybu DirectQuery
- Jeśli występują błędy lub problemy z wydajnością, odwiedź stronę samodzielnej pomocy usługi Azure Synapse dla usługi Azure Cosmos DB.
- Zapoznaj się z modułem Learn dotyczącym wykonywania zapytań dotyczących usługi Azure Cosmos DB przy użyciu usługi SQL Serverless dla usługi Azure Synapse Analytics.