Udostępnij za pośrednictwem


Wykonywanie zapytań dotyczących danych usługi Azure Cosmos DB przy użyciu bezserwerowej puli SQL

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.
  • 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żywaj VARCHAR(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 analitycznego AuthType , należy dodać właściwość.
  • Jeśli OPENROWSET używasz wbudowanego klucza konta, dodaj key 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_UTF8T-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 i Cord19 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ÃÂ&copy;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ÃÂ&copy;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 , OPENROWSETmusisz 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 int32cases 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, , int64jak 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.