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

Wymagania wstępne

  • Upewnij się, że przygotowano magazyn analityczny:
  • 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 z WITH 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_UTF8ponieważ 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_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 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 i Cord19 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_repwłaściwości , casesi 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ÃÂ&copy;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ÃÂ&copy;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 , 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
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 (znacznik czasu system 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, , 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 int32wartości , int64lub 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: