Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit einem serverlosen SQL-Pool können Sie Daten in Ihren Azure Cosmos DB-Containern, die für Azure Synapse Link aktiviert sind, nahezu in Echtzeit analysieren, ohne dass sich dies auf die Leistung Ihrer Transaktionsarbeitsauslastungen auswirkt. Dieses Verfahren bietet eine vertraute T-SQL-Syntax (Transact-SQL) zum Abfragen von Daten aus dem Analysespeicher sowie integrierte Konnektivität mit einer Vielzahl von BI-Tools (Business Intelligence) und Ad-hoc-Abfragetools über die T-SQL-Schnittstelle.
Zum Abfragen von Azure Cosmos DB wird die gesamte SELECT-Oberfläche durch die OPENROWSET-Funktion unterstützt, einschließlich der meisten SQL-Funktionen und -Operatoren. Mit CREATE EXTERNAL TABLE AS SELECT (CETAS) können Sie die Ergebnisse der Abfrage, die Daten aus Azure Cosmos DB liest, auch zusammen mit Daten in Azure Blob Storage oder Azure Data Lake Storage speichern. Das Speichern der Abfrageergebnisse aus einem serverlosen SQL-Pool in Azure Cosmos DB mithilfe von CETAS ist derzeit nicht möglich.
In diesem Artikel wird erläutert, wie Sie eine Abfrage für einen serverlosen SQL-Pool erstellen, die Daten aus Azure Cosmos DB-Containern mit aktiviertem Azure Synapse Link abfragt. Danach können Sie sich in diesem Tutorial darüber informieren, wie Sie Sichten serverloser SQL-Pools über Azure Cosmos DB-Container erstellen und diese Sichten mit Power BI-Modellen verbinden. In diesem Tutorial wird ein Container mit einem genau definierten Azure Cosmos DB-Schema verwendet. Sie können sich auch das Learn-Modul zum Abfragen von Azure Cosmos DB mit serverlosem SQL für Azure Synapse Analytics ansehen.
Voraussetzungen
- Stellen Sie sicher, dass Sie den Analysespeicher vorbereitet haben:
- Aktivieren Sie den Analysespeicher für Ihre Azure Cosmos DB-Container.
- Rufen Sie die Verbindungszeichenfolge mit einem schreibgeschützten Schlüssel ab, den Sie zum Abfragen des Analysespeichers verwenden können.
- Rufen Sie den schreibgeschützten Schlüssel ab, der für den Zugriff auf den Azure Cosmos DB-Container verwendet wird.
- Stellen Sie sicher, dass Sie alle bewährten Methoden angewendet haben, z. B.:
- Stellen Sie sicher, dass sich Ihr Azure Cosmos DB-Analysespeicher in derselben Region wie der serverlose SQL-Pool befindet.
- Stellen Sie sicher, dass sich die Clientanwendung (Power BI, Analysedienst) in derselben Region wie der serverlose SQL-Pool befindet.
- Wenn Sie eine große Datenmenge (mehr als 80 GB) zurückgeben, sollten Sie die Verwendung einer Zwischenspeicherungsebene wie Analysis Services erwägen und die Partitionen, die kleiner als 80 GB sind, in das Analysis Services-Modell laden.
- Wenn Sie Daten mithilfe von Zeichenfolgenspalten filtern, stellen Sie sicher, dass Sie die
OPENROWSET-Funktion mit der explizitenWITH-Klausel mit den kleinsten möglichen Typen verwenden. Verwenden Sie beispielsweise nichtVARCHAR(1000), wenn Sie wissen, dass die Eigenschaft bis zu fünf Zeichen enthält.
Übersicht
Ein serverloser SQL-Pool ermöglicht es Ihnen, den Azure Cosmos DB-Analysespeicher mithilfe der OPENROWSET-Funktion abzufragen.
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<other parameters>
) [ < with clause > ] AS alias
Die SQL-Verbindungszeichenfolge für Azure Cosmos DB enthält die folgenden Komponenten:
- account – Der Name des Azure Cosmos DB-Kontos, auf das Sie abzielen.
- database - Der Containername, angegeben ohne Anführungszeichen in der OPENROWSET-Syntax. Wenn der Containername Sonderzeichen enthält (z. B. ein Gedankenstrich -), sollte er in eckige Klammern ([]) eingeschlossen werden.
- Region (optional) - Die Region Ihres Cosmos DB Analytischen Speichers. Wenn sie nicht angegeben wird, wird die primäre Region des Containers verwendet.
-
endpoint (optional): Der Cosmos DB-Endpunkt-URI (z. B
https://<account name>.documents.azure.us. ), der erforderlich ist, wenn Ihr Cosmos DB-Konto nicht dem Standardformat*.documents.azure.comentspricht.
Wichtig
Der endpoint Parameter wird für Konten benötigt, die nicht mit dem Standardformat *.documents.azure.com übereinstimmen. Stellen Sie sicher, dass Sie .documents.azure.us in die Verbindungszeichenfolge hinzufügen, wenn Ihr Azure Cosmos DB-Konto beispielsweise auf endpoint=https://<account name>.documents.azure.us endet. Stellen Sie sicher, dass Sie Präfix einschließen https:// .
Diese Eigenschaften können aus der Standardmäßigen Cosmos DB-Verbindungszeichenfolge identifiziert werden, z. B.:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
Die SQL-Verbindungszeichenfolge kann wie folgt formatiert werden:
account=<database account name>;database=<database name>;region=<region name>
Diese Verbindungszeichenfolge enthält nicht die Authentifizierungsinformationen, die zum Herstellen einer Verbindung mit Cosmos DB-Analysespeicher erforderlich sind. Je nach Art der verwendeten Authentifizierung sind zusätzliche Informationen erforderlich:
- Wenn
OPENROWSETeine verwaltete Arbeitsbereichsidentität für den Zugriff auf den Analysespeicher verwendet, sollten Sie die EigenschaftAuthTypehinzufügen. - Wenn
OPENROWSETeinen Inline-Kontoschlüssel verwendet, sollten Sie die Eigenschaftkeyhinzufügen. Auf diese Weise können Sie Azure Cosmos DB-Sammlungen abfragen, ohne Anmeldeinformationen vorbereiten zu müssen. - Anstatt Authentifizierungsinformationen in die Verbindungszeichenfolge aufzunehmen, kann
OPENROWSETauf eine Anmeldeinformation verweisen, die den Azure Cosmos DB-Kontoschlüssel enthält. Dieser Ansatz kann verwendet werden, um Ansichten für Azure Cosmos DB-Sammlungen zu erstellen.
Diese Optionen werden unten beschrieben.
Mit dem serverlosen SQL-Pool können Sie cosmos DB Analytical Storage abfragen und sich mit dem ursprünglichen Cosmos DB-Kontoschlüssel authentifizieren oder Synapse verwaltete Identität für den Zugriff auf den Cosmos DB Analytical-Speicher ermöglichen. Sie können die folgende Syntax in diesem Szenario verwenden:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
Zusätzlich zu den allgemeinen Eigenschaften in der oben beschriebenen SQL-Verbindungszeichenfolge (Konto, Datenbank, Region und Endpunkt) müssen Sie eine der folgenden Optionen hinzufügen:
-
AuthType – Setzen Sie
ManagedIdentityauf diese Option, wenn Sie mit der verwalteten Identität des Synapse-Arbeitsbereichs auf Cosmos DB zugreifen. - key – Der Hauptschlüssel für den Zugriff auf Cosmos DB-Daten, wird verwendet, wenn die verwaltete Identität des Synapse-Arbeitsbereichs nicht verwendet wird.
Die Beispiele für Verbindungszeichenfolgen sind in der folgenden Tabelle dargestellt:
| Authentifizierungsart | Verbindungszeichenfolge |
|---|---|
| Synapse-Arbeitsbereich: verwaltete Identität | account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity |
| Cosmos DB-Kontomasterschlüssel | account=<account name>;database=<db name>;region=<region name>;key=<account master key> |
Wichtig
Achten Sie darauf, dass Sie eine UTF-8-Datenbanksortierung (z. B. Latin1_General_100_CI_AS_SC_UTF8) verwenden, weil Zeichenfolgenwerte im Azure Cosmos DB-Analysespeicher als UTF-8-Text codiert werden.
Ein Konflikt zwischen der Textcodierung in der Datei und der Sortierung kann zu unerwarteten Fehlern bei der Textkonvertierung führen.
Die Standardsortierung der aktuellen Datenbank kann mit der T-SQL-Anweisung alter database current collate Latin1_General_100_CI_AI_SC_UTF8 problemlos geändert werden.
Hinweis
Abfragen eines Azure Cosmos DB-Transaktionsspeichers werden im serverlosen SQL-Pool nicht unterstützt.
Beispieldatensatz
Die Beispiele in diesem Artikel basieren auf Daten aus dem European Center for Disease Prevention and Control (ECDC) COVID-19 Cases and COVID-19 Open Research Dataset (CORD-19).
Auf diesen Seiten finden Sie die Lizenz und die Datenstruktur. Sie können auch Beispieldaten für die Datasets ECDC und CORD-19 herunterladen.
Um die in diesem Artikel beschriebenen Schritte zum Abfragen von Azure Cosmos DB-Daten mit einem serverlosen SQL-Pool ausführen zu können, müssen Sie die folgenden Ressourcen erstellen:
- Ein Azure Cosmos DB-Datenbankkonto mit aktiviertem Azure Synapse Link
- Eine Azure Cosmos DB-Datenbank namens
covid - Zwei Azure Cosmos DB-Container namens
EcdcundCord19, in die die obigen Beispieldatasets geladen wurden
Beachten Sie, dass diese Verbindung keine Leistung garantiert, da sich dieses Konto möglicherweise in einer von Ihrem Synapse SQL-Endpunkt entfernten Region befindet.
Erkunden von Azure Cosmos DB-Daten mit automatischer Schemaerkennung
Die einfachste Möglichkeit, Daten in Azure Cosmos DB zu erforschen, ist die automatische Schemainferenz. Wenn Sie die WITH-Anweisung ohne die OPENROWSET-Klausel verwenden, können Sie den serverlosen SQL-Pool anweisen, das Schema des Analysespeichers des Azure Cosmos DB-Containers automatisch zu erkennen (Rückschlüsse zu ziehen).
Wichtig
Ersetzen Sie im Skript diese Werte durch Ihre eigenen Werte:
- your-cosmosdb - der Name Ihres Cosmos DB-Kontos
- yourcosmosdbkey - Ihr Cosmos DB-Kontoschlüssel
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Ecdc) as documents
Im obigen Beispiel haben Sie den serverlosen SQL-Pool angewiesen, eine Verbindung mit der covid-Datenbank im Azure Cosmos DB-Konto MyCosmosDbAccount herzustellen. Die Authentifizierung erfolgte über den Azure Cosmos DB-Schlüssel (Platzhalterwert im obigen Beispiel). Danach haben wir auf den Analysespeicher des Containers Ecdc in der Region West US 2 zugegriffen. Da keine Projektion bestimmter Eigenschaften vorgenommen wurde, gibt die OPENROWSET-Funktion alle Eigenschaften aus den Azure Cosmos DB-Elementen zurück.
Unter der Annahme, dass die Elemente im Azure Cosmos DB-Container die Eigenschaften date_rep, cases und geo_id besitzen, werden die Ergebnisse dieser Abfrage in der folgenden Tabelle aufgeführt:
| date_rep | Etuis | geo_id |
|---|---|---|
| 2020-08-13 | 254 | RS |
| 2020-08-12 | 235 | RS |
| 2020-08-11 | 163 | RS |
Wenn Sie Daten aus dem anderen Container in derselben Azure Cosmos DB-Datenbank untersuchen müssen, können Sie dieselbe Verbindungszeichenfolge verwenden und mit dem dritten Parameter auf den erforderlichen Container verweisen:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Cord19) as cord19
Explizites Angeben des Schemas
Der automatische Schemarückschluss in OPENROWSET bietet zwar eine einfache und leicht zu bedienende Umgebung, aber für Ihre Geschäftsszenarien müssen Sie möglicherweise explizit das Schema für schreibgeschützte relevante Eigenschaften aus den Azure Cosmos DB-Daten angeben.
In der OPENROWSET-Funktion können Sie die Eigenschaften, die aus den Daten im Container gelesen werden sollen, sowie deren Datentypen explizit angeben.
Angenommen, Sie haben einige Daten aus dem ECDC-COVID-Dataset mit der folgenden Struktur in Azure Cosmos DB importiert:
{"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"}
Diese flachen JSON-Dokumente in Azure Cosmos DB können in Synapse SQL als Gruppe von Zeilen und Spalten dargestellt werden. In der OPENROWSET-Klausel der WITH-Funktion können Sie eine Teilmenge von Eigenschaften, die gelesen werden sollen, sowie die genauen Spaltentypen angeben:
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
Das Ergebnis dieser Abfrage könnte wie in der folgenden Tabelle aussehen:
| date_rep | Etuis | geo_id |
|---|---|---|
| 2020-08-13 | 254 | RS |
| 2020-08-12 | 235 | RS |
| 2020-08-11 | 163 | RS |
Weitere Informationen zu den SQL-Typen, die für Azure Cosmos DB-Werte verwendet werden sollten, finden Sie unter Typzuordnungen zwischen Azure Cosmos DB und SQL am Ende dieses Artikels.
Ansicht erstellen
Das Erstellen von Sichten in master- oder Standarddatenbanken wird weder empfohlen noch unterstützt. Deshalb müssen Sie eine Benutzerdatenbank für Ihre Sichten erstellen.
Nachdem Sie das Schema identifiziert haben, können Sie auf Basis Ihrer Azure Cosmos DB-Daten eine Sicht vorbereiten. Sie sollten Ihren Azure Cosmos DB-Kontoschlüssel in gesonderten Anmeldeinformationen ablegen und über die OPENROWSET-Funktion auf diese Anmeldeinformationen verweisen. Bewahren Sie Ihren Kontoschlüssel nicht in der Ansichtsdefinition auf.
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
Verwenden Sie OPENROWSET nicht ohne explizit definiertes Schema, da dies die Leistung beeinträchtigen könnte. Stellen Sie sicher, dass Sie die kleinsten möglichen Größen für Ihre Spalten (z. B. VARCHAR(100) anstelle des Standards VARCHAR(8000)) verwenden. Sie sollten eine UTF-8-Sortierung als standardmäßige Datenbanksortierung verwenden oder sie als explizite Spaltensortierung festlegen, um UTF-8-Konvertierungsprobleme zu vermeiden. Die Sortierung Latin1_General_100_BIN2_UTF8 bietet die beste Leistung, wenn Sie Daten anhand von Zeichenfolgenspalten filtern.
Wenn Sie die Ansicht abfragen, könnten Fehler oder unerwartete Ergebnisse auftreten. Die Ansicht verweist auf Spalten oder Objekte, die wahrscheinlich geändert wurden oder nicht mehr vorhanden sind. Sie müssen die Ansichtsdefinition manuell anpassen, um sie an die zugrunde liegenden Schemaänderungen anzupassen. Beachten Sie, dass dies sowohl bei Nutzung der automatischen Schemaableitung in der Ansicht als auch bei expliziter Angabe des Schemas auftreten kann.
Abfragen von geschachtelten Objekten
Mit Azure Cosmos DB können Sie komplexere Datenmodelle in Form von geschachtelten Objekten oder Arrays darstellen. Die automatische Synchronisierungsfunktion von Azure Synapse Link für Azure Cosmos DB verwaltet standardmäßig die Schemadarstellung im Analysespeicher. Dies umfasst auch die Verarbeitung von geschachtelten Datentypen, was umfangreiche Abfragen aus dem serverlosen SQL-Pool ermöglicht.
Beispielsweise enthält das CORD-19-Dataset JSON-Dokumente mit folgender Struktur:
{
"paper_id": <str>, # 40-character sha1 of the PDF
"metadata": {
"title": <str>,
"authors": <array of objects> # list of author dicts, in order
...
}
...
}
Die geschachtelten Objekte und Arrays in Azure Cosmos DB werden im Abfrageergebnis als JSON-Zeichenfolgen dargestellt, wenn sie von der OPENROWSET-Funktion gelesen werden. Sie können diese Pfade zu geschachtelten Werten in den Objekten angeben, wenn Sie die WITH-Klausel verwenden:
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;
Das Ergebnis dieser Abfrage könnte wie in der folgenden Tabelle aussehen:
| paper_id | Titel | Metadaten | Autoren |
|---|---|---|---|
| bb11206963e831f... | Zusätzliche Informationen Eine ökologische Epidemi… | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
| bb1206963e831f1... | Die Verwendung von Rekonvaleszenzseren bei Immune-E... | {"title":"The Use of Convalescent… |
[{"first":"Antonio","last":"Lavazza","suffix":"", … |
| bb378eca9aac649... | Tylosema esculentum (Marama) Knolle und B... | {"title":"Tylosema esculentum (Ma… |
[{"first":"Walter","last":"Chingwaru","suffix":"",… |
Weitere Informationen finden Sie unter Analysieren komplexer Datentypen in Azure Synapse Analytics oder Abfragen geschachtelten Typen in Parquet- und JSON-Dateien mithilfe von serverlosen SQL-Pools.
Wichtig
Wenn in Ihrem Text unerwartete Zeichen angezeigt werden, z. B. Mélade statt Mélade, ist die Datenbanksortierung nicht auf UTF-8-Sortierung festgelegt. Sie können die Sortierung der Datenbank mithilfe einer SQL-Anweisung wie ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 in eine UTF-8-Sortierung ändern.
Vereinfachen geschachtelter Arrays
Daten in Azure Cosmos DB können verschachtelte Subarrays enthalten, wie das Array „authors“ im CORD-19-Datensatz:
{
"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>
},
...
],
...
}
In einigen Fällen müssen Sie möglicherweise die Eigenschaften aus dem obersten Element (metadata) mit allen Elementen des Arrays (authors) verknüpfen. Ein serverloser SQL-Pool ermöglicht Ihnen das Vereinfachen von geschachtelten Strukturen durch Anwenden der OPENJSON-Funktion auf das geschachtelte Array:
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
Das Ergebnis dieser Abfrage könnte wie in der folgenden Tabelle aussehen:
| Titel | Autoren | erste | Letzte | Zugehörigkeit |
|---|---|---|---|---|
| Zusätzliche Informationen Eine ökologische Epidemi… | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
| Zusätzliche Informationen Eine ökologische Epidemi… | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | 4# | {"laboratory":"","institution":"U… |
| Zusätzliche Informationen Eine ökologische Epidemi… | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana | {"laboratory":"Centre de Recher… |
| Zusätzliche Informationen Eine ökologische Epidemi… | [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … |
Olivier | Flores | {"laboratory":"UMR C53 CIRAD, … |
Wichtig
Wenn in Ihrem Text unerwartete Zeichen angezeigt werden, z. B. Mélade statt Mélade, ist die Datenbanksortierung nicht auf UTF-8-Sortierung festgelegt. Sie können die Sortierung der Datenbank mithilfe einer SQL-Anweisung wie ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 in eine UTF-8-Sortierung ändern.
Zuordnung von Azure Cosmos DB zu SQL-Typen
Der Azure Cosmos DB-Transaktionsspeicher ist zwar schemaagnostisch, aber der Analysespeicher ist zur Optimierung der Leistung von Analyseabfragen schematisiert. Mit der automatischen Synchronisierungsfunktion von Azure Synapse Link verwaltet Azure Cosmos DB standardmäßig die Schemadarstellung im Analysespeicher. Dies umfasst auch die Verarbeitung von geschachtelten Datentypen. Da ein serverloser SQL-Pool den Analysespeicher abfragt, müssen Sie wissen, wie Azure Cosmos DB-Eingabedatentypen SQL-Datentypen zugeordnet werden.
Azure Cosmos DB-Konten für die SQL-API (Core-API) unterstützen als JSON-Eigenschaftstypen Zahlen, Zeichenfolgen, boolesche Werte, NULL, geschachtelte Objekte und Arrays. Wenn Sie die WITH-Klausel in OPENROWSET verwenden, müssen Sie SQL-Typen auswählen, die diesen JSON-Typen entsprechen. Die folgende Tabelle zeigt die SQL-Spaltentypen, die für verschiedene Eigenschaftstypen in Azure Cosmos DB verwendet werden sollten.
| Azure Cosmos DB-Eigenschaftstyp | SQL-Spaltentyp |
|---|---|
| Boolescher Wert | Bit |
| Ganze Zahl | bigint |
| Dezimal | schweben |
| Zeichenfolge | varchar (UTF-8-Datenbanksortierung) |
| DateTime (ISO-formatierte Zeichenfolge) | varchar(30) |
| DateTime (UNIX-Zeitstempel) | bigint |
| Null | any SQL type |
| Geschachteltes Objekt oder Array | varchar(max) (UTF-8-Datenbanksortierung), als JSON-Text serialisiert |
Schema mit vollständiger Genauigkeit
Das Azure Cosmos DB-Schema mit vollständiger Genauigkeit zeichnet sowohl Werte als auch deren beste Übereinstimmungstypen für jede Eigenschaft in einem Container auf. Die OPENROWSET-Funktion in einem Container mit einem Schema mit vollständiger Genauigkeit gibt sowohl den Typ als auch den tatsächlichen Wert in jeder Zelle an. Nehmen wir an, dass die folgende Abfrage die Elemente aus einem Container mit vollständigem Genauigkeitsschema liest:
SELECT *
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) as rows
Im Ergebnis dieser Abfrage werden Typen und Werte zurück zurückgegeben, die als JSON-Text formatiert sind:
| date_rep | Etuis | geo_id |
|---|---|---|
| {"Datum":"13.08.2020"} | {"int32":"254"} | {"Zeichenfolge":"RS"} |
| {"Datum":"12.08.2020"} | {"int32":"235"} | {"Zeichenfolge":"RS"} |
| {"date":"2020-08-11"} | {"int32":"316"} | {"Zeichenfolge":"RS"} |
| {"Datum":"10.08.2020"} | {"int32":"281"} | {"Zeichenfolge":"RS"} |
| {"date":"2020-08-09"} | {"int32":"295"} | {"Zeichenfolge":"RS"} |
| {"string":"08.08.2020"} | {"int32":"312"} | {"Zeichenfolge":"RS"} |
| {"Datum":"07.08.2020"} | {"float64":"339.0"} | {"Zeichenfolge":"RS"} |
Für jeden Wert können Sie den in einem Azure Cosmos DB-Containerelement identifizierten Typ sehen. Die meisten Werte für die date_rep-Eigenschaft enthalten date-Werte, einige werden jedoch in Azure Cosmos DB fälschlicherweise als Zeichenfolgen gespeichert. Das Schema mit vollständiger Genauigkeit gibt sowohl ordnungsgemäß typisierte date-Werte als auch falsch formatierte string-Werte zurück.
Die Anzahl der Fälle wird als int32-Wert gespeichert, allerdings gibt es einen Wert, der als Dezimalzahl eingegeben wird. Dieser Wert weist den Typ float64 auf. Werte, die die größte int32-Zahl überschreiten, werden als int64-Typ gespeichert. Alle geo_id-Werte in diesem Beispiel werden als string-Typen gespeichert.
Wichtig
Die OPENROWSET-Funktion ohne WITH-Klausel macht sowohl die Werte mit erwarteten Typen als auch die Werte mit falsch eingegebenen Typen verfügbar. Diese Funktion ist für das Durchsuchen von Daten konzipiert, nicht für die Berichterstellung. Analysieren Sie keine JSON-Werte, die von dieser Funktion zurückgegeben werden, um daraus Berichte zu erstellen. Verwenden Sie zum Erstellen Ihrer Berichte eine explizite WITH-Klausel. Sie müssen die Werte, die falsche Typen aufweisen, im Azure Cosmos DB-Container bereinigen, um Korrekturen im Analysespeicher mit vollständiger Genauigkeit anzuwenden.
Wenn Sie Azure Cosmos DB for MongoDB-Konten abfragen möchten, erfahren Sie unter Was ist der Azure Cosmos DB-Analysespeicher? mehr über die Schemadarstellung mit vollständiger Genauigkeit im Analysespeicher und die dabei zu verwendenden Namen für erweiterte Eigenschaften.
Abfragen von Elementen mit einem Schema mit vollständiger Genauigkeit
Beim Abfragen eines Schemas mit vollständiger Genauigkeit müssen Sie den SQL-Typ und den erwarteten Azure Cosmos DB-Eigenschaftstyp explizit in der WITH-Klausel angeben.
Im folgenden Beispiel wird davon ausgegangen, dass string der richtige Typ für die geo_id-Eigenschaft und int32 der richtige Typ für die cases-Eigenschaft ist:
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
Werte für geo_id und cases, die andere Typen aufweisen, werden als NULL-Werte zurückgegeben. Diese Abfrage verweist nur auf die cases mit dem Typ, der im Ausdruck angegeben ist (cases.int32).
Wenn Sie Werte mit anderen Typen haben(cases.int64, cases.float64), die in einem Azure Cosmos DB-Container nicht bereinigt werden können, müssten Sie in einer WITH-Klausel explizit auf diese verweisen und die Ergebnisse kombinieren. Die folgende Abfrage aggregiert sowohl int32, int64 als auch float64, die in der Spalte cases gespeichert sind:
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
In diesem Fall wird die Anzahl der Fälle als int32-, int64- oder float64-Wert gespeichert. Alle Werte müssen extrahiert werden, damit die Anzahl der Fälle pro Land bzw. Region berechnet werden kann.
Problembehandlung
Lesen Sie die Seite der Selbsthilfe, um bekannte Probleme oder Schritte zur Problembehandlung zu finden, die Ihnen helfen können, potenzielle Probleme mit Azure Cosmos DB-Abfragen zu beheben.
Zugehöriger Inhalt
- Verwenden von Power BI und serverlosen Synapse SQL-Pools zum Analysieren von Azure Cosmos DB-Daten
- Erstellen und Verwenden von Sichten in einem serverlosen SQL-Pool
- Tutorial: Untersuchen und Analysieren von Data Lakes mit einem serverlosen SQL-Pool
- Wenn Fehler oder Leistungsprobleme auftreten, lesen Sie die Problembehandlung bei serverlosen SQL-Pools.
- Modul: Implementieren von Azure Synapse Link mit Azure Cosmos DB