Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 Transact-SQL (T-SQL) umożliwiającą wykonywanie zapytań o dane z magazynu analitycznego i zintegrowaną łączność z szeroką gamą narzędzi do analizy biznesowej (BI) i narzędzi do wykonywania zapytań ad hoc za pośrednictwem interfejsu 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 wyjaśniono, jak napisać zapytanie z bezserwerową pulą SQL, która 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.
Wymagania wstępne
- Upewnij się, że przygotujesz zaplecze analityczne.
- Włącz magazyn analityczny w kontenerach usługi Azure Cosmos DB.
- Pobierz parametry połączenia za pomocą klucza tylko do odczytu, którego można użyć do wykonywania zapytań względem magazynu analitycznego.
- Pobierz klucz tylko do odczytu, który będzie używany do 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 (ponad 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 tekstowych, upewnij się, że używasz funkcji
OPENROWSET
z jawną klauzuląWITH
, która zawiera najmniejsze możliwe typy. Nie używajVARCHAR(1000)
na przykład, jeśli wiesz, że właściwość ma maksymalnie pięć 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(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<other parameters>
) [ < with clause > ] AS alias
Parametry połączenia SQL dla usługi Azure Cosmos DB obejmują następujące składniki:
- account — nazwa konta usługi Azure Cosmos DB, którego dotyczy problem.
- database — nazwa kontenera określona bez cudzysłowów w składni OPENROWSET. Jeśli nazwa kontenera zawiera znaki specjalne (na przykład myślnik -), powinna być ujęta w nawiasy kwadratowe ([]).
- region (opcjonalnie) — region magazynu analitycznego usługi Cosmos DB. W przypadku pominięcia używany jest region podstawowy kontenera.
-
endpoint (opcjonalnie) — identyfikator URI punktu końcowego usługi Cosmos DB (na przykład
https://<account name>.documents.azure.us
), który jest wymagany, jeśli konto usługi Cosmos DB nie jest zgodne ze standardowym*.documents.azure.com
formatem.
Ważne
Ten endpoint
parametr jest wymagany w przypadku kont, które nie są zgodne z formatem standardowym *.documents.azure.com
. Jeśli na przykład konto usługi Azure Cosmos DB kończy się ciągiem .documents.azure.us
, upewnij się, że dodasz endpoint=https://<account name>.documents.azure.us
w ciągu połączenia. Upewnij się, że dołączyłeś https://
prefiks.
Te właściwości można zidentyfikować na podstawie standardowych parametrów połączenia usługi Cosmos DB, na przykład:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
Parametry połączenia SQL można sformatować w następujący sposób:
account=<database account name>;database=<database name>;region=<region name>
Te parametry połączenia nie zawierają informacji uwierzytelniających wymaganych do nawiązania połączenia z magazynem analitycznym usługi Cosmos DB. W zależności od typu użytego uwierzytelniania potrzebne są dodatkowe informacje:
- Jeśli
OPENROWSET
używa tożsamości zarządzanej obszaru roboczego w celu uzyskania dostępu do magazynu analitycznegoAuthType
, należy dodać właściwość. - Jeśli
OPENROWSET
używasz wbudowanego klucza konta, dodajkey
właściwość. Dzięki temu można wykonywać zapytania dotyczące kolekcji usługi Azure Cosmos DB bez konieczności przygotowywania poświadczeń. - Zamiast dołączać informacje uwierzytelniające w parametrach połączenia,
OPENROWSET
może odwoływać się do poświadczeń zawierających klucz konta usługi Azure Cosmos DB. Takie podejście może służyć do tworzenia widoków w kolekcjach usługi Azure Cosmos DB.
Poniżej opisano te opcje.
Bezserwerowa pula SQL umożliwia wykonywanie zapytań dotyczących magazynu analitycznego usługi Cosmos DB i uwierzytelnianie przy użyciu oryginalnego klucza konta usługi Cosmos DB lub zezwalanie tożsamości zarządzanej usługi Synapse na dostęp do magazynu analitycznego usługi Cosmos DB. W tym scenariuszu można użyć następującej składni:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
Oprócz typowych właściwości parametrów połączenia SQL, które zostały opisane powyżej (konto, baza danych, region i punkt końcowy), należy dodać jedną z następujących opcji:
-
AuthType — ustaw tę opcję na w przypadku uzyskiwania dostępu do
ManagedIdentity
Cosmos DB przy użyciu tożsamości zarządzanej obszaru roboczego usługi Synapse. - key — klucz główny służący do uzyskiwania dostępu do danych usługi Cosmos DB, używany, jeśli nie korzysta z tożsamości zarządzanej obszaru roboczego usługi Synapse.
Przykłady parametrów połączenia przedstawiono w poniższej tabeli:
Typ uwierzytelniania | Łańcuch połączenia |
---|---|
Tożsamość zarządzana obszaru roboczego usługi Synapse | account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity |
Klucz główny konta usługi Cosmos DB | account=<account name>;database=<db name>;region=<region name>;key=<account master key> |
Ważne
Upewnij się, że używasz sortowania bazy danych UTF-8, na przykład Latin1_General_100_CI_AS_SC_UTF8
, ponieważ w magazynie analitycznym usługi Azure Cosmos DB wartości ciągów 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 ds. Zapobiegania i Kontroli Chorób (ECDC) COVID-19 Cases and COVID-19 Open Research Dataset (CORD-19) Europejskiego Centrum ds. Zapobiegania i Kontroli Chorób (ECDC).
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
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. Pominięcie klauzuli WITH
z instrukcji OPENROWSET
umożliwia poinstruowanie bezserwerowej puli SQL do automatycznego rozpoznania (wywnioskowania) schematu magazynu analitycznego w kontenerze usługi Azure Cosmos DB.
Ważne
W skrypcie zastąp te wartości własnymi wartościami:
- your-cosmosdb — nazwa konta usługi Cosmos DB
- yourcosmosdbkey — klucz konta usługi Cosmos DB
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
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 mieliśmy dostęp do analitycznego magazynu kontenera Ecdc
w regionie West US 2
. Ponieważ nie ma projekcji określonych właściwości, OPENROWSET
funkcja zwraca 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ą właściwości date_rep
, cases
i geo_id
, wyniki tego zapytania są wyświetlane w poniższej tabeli.
date_rep | Przypadki | geo_id |
---|---|---|
2020-08-13 | 254 | Język RS |
2020-08-12 | 235 | Język RS |
2020-08-11 | 163 | Język RS |
Jeśli musisz eksplorować dane z innego kontenera w tej samej bazie danych usługi Azure Cosmos DB, możesz użyć tego samego łańcucha połączenia i odwołać się do wymaganego kontenera jako trzeciego parametru.
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Cord19) as cord19
Jawne określanie schematu
Chociaż funkcja automatycznego wnioskowania schematu w systemie OPENROWSET
zapewnia proste i łatwe w użyciu środowisko, Twoje scenariusze biznesowe mogą wymagać jawnego określenia schematu, aby wczytywać tylko te właściwości, które są istotne, z danych przechowywanych w Azure Cosmos DB.
Funkcja OPENROWSET
umożliwia jawne określenie właściwości, które mają być odczytywane z danych w kontenerze, oraz 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
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 | Język RS |
2020-08-12 | 235 | Język RS |
2020-08-11 | 163 | Język RS |
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 Mapowania typów Azure Cosmos DB na typy SQL na końcu tego artykułu.
Tworzenie widoku
Tworzenie widoków w bazach danych master
lub domyślnych bazach danych nie jest zalecane ani obsługiwane. Musisz utworzyć bazę danych użytkowników dla swoich 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świadczeniu i odwołać się do tego poświadczenia z funkcji OPENROWSET
. Nie należy przechowywać klucza konta w definicji widoku.
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
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żywać sortowania UTF-8 jako domyślnego sortowania bazy danych lub ustawić je jako jawne sortowanie kolumny, aby uniknąć problemu z konwersją UTF-8. Sortowanie Latin1_General_100_BIN2_UTF8
zapewnia najlepszą wydajność przy filtrowaniu danych z użyciem niektórych kolumn tekstowych.
Podczas wykonywania zapytań dotyczących widoku mogą wystąpić błędy lub nieoczekiwane wyniki. Widok, odwołania, kolumny lub obiekty prawdopodobnie 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.
Zapytaj 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 w usłudze Azure Synapse Link dla usługi Azure Cosmos DB zarządza reprezentacją schematu w magazynie analitycznym automatycznie, w tym obsługą zagnieżdżonych typów danych, co umożliwia zaawansowane zapytania 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ą przedstawiane jako ciągi JSON w wynikach zapytania, gdy funkcja OPENROWSET
je odczytuje. Możesz określić ścieżki do wartości zagnieżdżonych w obiektach, używając klauzuli WITH
.
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;
Wynik tego zapytania może wyglądać podobnie do poniższej tabeli:
identyfikator_papieru | tytuł | Metadane | Autorzy |
---|---|---|---|
bb11206963e831f... | Dodatkowe informacje na temat ekoepidemiologii... | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
bb1206963e831f1... | Stosowanie Osocza Ozdrowieńców w Immunoterapii | {"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":"",… |
Aby dowiedzieć się więcej, zobacz Analizowanie złożonych typów danych w usłudze Azure Synapse Analytics lub Zapytania dotyczące zagnieżdżonych typów w plikach Parquet i JSON przy użyciu 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 . Sortowanie bazy danych można zmienić na sortowanie UTF-8 przy użyciu instrukcji SQL, takiej jak ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Spłaszcz tablice zagnieżdżone
Dane usługi Azure Cosmos DB mogą mieć zagnieżdżone podtablice, takie jak tablica autorów 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 dołączenie 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=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
Wynik tego zapytania może wyglądać podobnie do poniższej tabeli:
tytuł | Autorzy | pierwszy | ostatni | przynależność |
---|---|---|---|---|
Dodatkowe informacje na temat ekoepidemiologii... | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
Dodatkowe informacje na temat ekoepidemiologii... | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | 4# | {"laboratory":"","institution":"U… |
Dodatkowe informacje na temat ekoepidemiologii... | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana powiedział: | {"laboratory":"Centre de Recher… |
Dodatkowe informacje na temat ekoepidemiologii... | [{"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 . Sortowanie bazy danych można zmienić 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 funkcji automatycznej synchronizacji w Azure Synapse Link, Azure Cosmos DB zarządza reprezentacją schematu w magazynie analitycznym „out-of-the-box,” co 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 usługi Azure Cosmos DB API SQL (Core) obsługują typy właściwości JSON, takie jak liczba, ciąg, wartość logiczna, null, zagnieżdżony obiekt lub tablica. 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 |
---|---|
Boolowski | odrobina |
Liczba całkowita | Bigint powiedział: |
Liczba dziesiętna | unoszenie się |
Sznurek | varchar (sortowanie bazy danych UTF-8) |
Data/godzina (ciąg sformatowany w formacie ISO) | varchar(30) |
Data/godzina (sygnatura czasowa systemu UNIX) | Bigint powiedział: |
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 najlepiej dopasowane typy 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 zgodności.
SELECT *
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) as rows
Wynik tego zapytania zwraca typy i wartości sformatowane jako tekst JSON:
date_rep | Przypadki | geo_id |
---|---|---|
{"data":"2020-08-13"} | {"int32":"254"} | {"string":"RS"} |
{"data":"2020-08-12"} | {"int32":"235"} | {"string":"RS"} |
{"data":"2020-08-11"} | {"int32":"316"} | {"string":"RS"} |
{"data":"2020-08-10"} | {"int32":"281"} | {"string":"RS"} |
{"data":"2020-08-09"} | {"int32":"295"} | {"string":"RS"} |
{"string":"2020/08/08"} | {"int32":"312"} | {"string":"RS"} |
{"data":"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 dla właściwości date_rep
zawiera wartości date
, ale niektóre z nich są niepoprawnie przechowywane jako ciągi znaków w usłudze Azure Cosmos DB. Schemat pełnej wierności zwraca zarówno poprawnie wpisane date
wartości, jak i niepoprawnie sformatowane string
wartości.
Liczba przypadków jest przechowywana jako int32
wartość, ale istnieje jedna wartość wprowadzona jako liczba dziesiętna. Wartość ta ma typ float64
. 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 pełnowartościowym magazynie analitycznym.
Aby wykonać zapytanie dotyczące kont usługi Azure Cosmos DB dla bazy danych MongoDB, możesz dowiedzieć się więcej o wiernym odwzorowaniu schematu w magazynie analitycznym oraz rozszerzonych nazwach właściwości, które mają być używane w Czym jest magazyn analityczny usługi Azure Cosmos DB?.
Zapytywanie elementów ze schematem pełnej dokładnoś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 geo_id
jest poprawnym typem int32
cases
właściwości:
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, są zwracane jako NULL
wartości. To zapytanie odwołuje się tylko do cases
o określonym typie 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 wartości int32
, int64
lub float64
. Aby obliczyć liczbę przypadków na kraj lub 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.
Powiązana zawartość
- Analizowanie danych usługi Azure Cosmos DB przy użyciu usługi Power BI i bezserwerowej puli SQL usługi Synapse
- Tworzenie i używanie widoków przy użyciu bezserwerowej puli SQL
- Samouczek: eksplorowanie i analizowanie magazynów danych za pomocą bezserwerowej puli SQL
- Jeśli występują błędy lub występują problemy z wydajnością, zobacz Rozwiązywanie problemów z bezserwerową pulą SQL
- Moduł: implementowanie usługi Azure Synapse Link za pomocą usługi Azure Cosmos DB