Abfragen von Blobinhalten
Der Query Blob Contents
Vorgang wendet eine einfache strukturierte Abfragesprache (SQL)-Anweisung auf den Inhalt eines Blobs an und gibt nur die abgefragte Teilmenge der Daten zurück. Sie können auch aufrufenQuery Blob Contents
, um den Inhalt einer Version oder Momentaufnahme abzufragen.
Anforderung
Sie können die Query Blob Contents
Anforderung wie folgt erstellen. Wir empfehlen HTTPS. Ersetzen Sie myaccount durch den Namen Ihres Speicherkontos.
POST-Methodenanforderungs-URI | HTTP-Version |
---|---|
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=query https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=query&snapshot=<DateTime> https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=query&versionid=<DateTime> |
HTTP/1.0 HTTP/1.1 |
URI-Parameter
Sie können im Anforderungs-URI die folgenden zusätzlichen Parameter angeben:
Parameter | BESCHREIBUNG |
---|---|
snapshot |
Optional. Der parameter Momentaufnahme ist ein undurchsichtiger DateTime Wert. Wenn es vorhanden ist, gibt es die zu abfragende Blob-Momentaufnahme an. Weitere Informationen zum Arbeiten mit Blobmomentaufnahmen finden Sie unter Create einer Momentaufnahme eines Blobs. |
versionid |
Optional, Version 2019-12-12 und höher. Der versionid Parameter ist ein undurchsichtiger DateTime Wert. Wenn es vorhanden ist, gibt es die Version des abzurufenden Blobs an. |
timeout |
Optional. Der timeout -Parameter wird in Sekunden angegeben. Weitere Informationen finden Sie unter Festlegen von Timeouts für Blob Storage-Vorgänge. |
Anforderungsheader
In der folgenden Tabelle werden erforderliche und optionale Anforderungsheader beschrieben:
Anforderungsheader | BESCHREIBUNG |
---|---|
Authorization |
Erforderlich. Gibt das Authentifizierungsschema, den Kontonamen und die Signatur an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage. |
Date oder x-ms-date |
Erforderlich. Gibt die koordinierte Weltzeit (Coordinated Universal Time, UTC) für die Anforderung an. Weitere Informationen finden Sie unter Autorisieren von Anforderungen an Azure Storage. |
x-ms-version |
Für alle authentifizierten Anforderungen erforderlich, für anonyme Anforderungen optional. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Weitere Informationen finden Sie unter Versionsverwaltung für die Azure-Speicherdienste. |
Content-Type |
Erforderlich. Der Wert dieses Headers sollte sein application/xml; charset=UTF-8 . |
x-ms-lease-id:<ID> |
Optional. Bei Angabe dieses Headers wird der Vorgang nur ausgeführt, wenn die beiden folgenden Bedingungen erfüllt sind: – Die Lease des Blobs ist derzeit aktiv. – Die in der Anforderung angegebene Lease-ID entspricht der des Blobs. Wenn der Header angegeben ist und beide Bedingungen nicht erfüllt sind, schlägt die Anforderung fehl, und der Query Blob Contents -Vorgang schlägt mit dem Statuscode 412 (Vorbedingung nicht erfüllt) fehl. |
Origin |
Optional. Gibt die Ursprungsdomäne an, von der die Anforderung ausgegeben wird. Das Vorhandensein dieses Headers führt zu CORS-Headern (Cross-Origin Resource Sharing) für die Antwort. |
x-ms-client-request-id |
Optional. Stellt einen vom Client generierten, undurchsichtigen Wert mit einem Zeichenlimit von 1 Kibibyte (KiB) bereit, der beim Konfigurieren der Protokollierung in den Protokollen aufgezeichnet wird. Es wird dringend empfohlen, diesen Header zu verwenden, um clientseitige Aktivitäten mit Anforderungen zu korrelieren, die der Server empfängt. |
Dieser Vorgang unterstützt auch die Verwendung bedingter Header zum Abfragen des Blobinhalts nur, wenn eine angegebene Bedingung erfüllt ist. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Blob Storage-Vorgänge.
Anforderungstext
Der Anforderungstext für diese Version von Query Blob Contents
verwendet das folgende XML-Format:
<?xml version="1.0" encoding="utf-8"?>
<QueryRequest>
<QueryType>String</QueryType>
<Expression>String</Expression>
<InputSerialization>
<Format>
<Type>String</Type>
<DelimitedTextConfiguration>
<ColumnSeparator>String</ColumnSeparator>
<FieldQuote>String</FieldQuote>
<RecordSeparator>String</RecordSeparator>
<EscapeChar>String</EscapeChar>
<HasHeaders>Boolean</HasHeaders>
</DelimitedTextConfiguration>
<JsonTextConfiguration>
<RecordSeparator>String</RecordSeparator>
</JsonTextConfiguration>
</Format>
</InputSerialization>
<OutputSerialization>
<Format>
<Type>String</Type>
<DelimitedTextConfiguration>
<ColumnSeparator>String</ColumnSeparator >
<FieldQuote>String</FieldQuote >
<RecordSeparator>String</RecordSeparator>
<EscapeChar>String</EscapeChar>
<HasHeaders>Boolean</HasHeaders>
</DelimitedTextConfiguration>
<JsonTextConfiguration>
<RecordSeparator>String</RecordSeparator>
</JsonTextConfiguration>
<ArrowConfiguration>
<Schema>
<Field>
<Type>String</Type>
<Name>String</Name>
</Field>
<Field>
<Type>String</Type>
</Field>
.
.
.
<Field>
<Type>String</Type>
<Precision>Integer</Precision>
<Scale>Integer</Scale>
</Field>
</Schema>
</ArrowConfiguration>
</Format>
</OutputSerialization>
</QueryRequest>
In der folgenden Tabelle werden die Elemente des Anforderungstexts beschrieben:
Elementname | BESCHREIBUNG |
---|---|
QueryRequest |
Erforderlich. Gruppen den Satz der Abfrageanforderungseinstellungen. |
QueryType |
Erforderlich. Gibt den Typ des bereitgestellten Abfrageausdrucks an. Der einzige gültige Wert für die aktuelle Version ist SQL . |
Expression |
Erforderlich. Gibt den Abfrageausdruck in SQL an. Die maximale Größe des Abfrageausdrucks beträgt 256 KiB. Weitere Informationen zur Ausdruckssyntax finden Sie unter Abfragebeschleunigung: SQL-Sprachreferenz. |
InputSerialization |
Optional. Gruppen die Einstellungen für die Eingabeserialisierung des Blobinhalts. Wenn sie nicht angegeben ist, wird die Textkonfiguration mit Trennzeichen verwendet. |
Format |
Erforderlich, wenn InputSerialization angegeben wird. Gruppen die Einstellungen für das Format der Blobdaten. |
Type |
Erforderlich, wenn InputSerialization angegeben wird. Gibt den Formattyp an. Gültige Werte sind delimited , csv und json . |
DelimitedTextConfiguration |
Optional. Gruppen die Einstellungen, die zum Interpretieren der Blobdaten verwendet werden, wenn das Blob mit durch Trennzeichen formatiert ist. |
ColumnSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Spalten verwendet wird. |
FieldQuote |
Optional. Gibt die Zeichenfolge an, die zum Anführungszeichen eines bestimmten Felds verwendet wird. |
RecordSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Datensätzen verwendet wird. |
EscapeChar |
Optional. Gibt die Zeichenfolge an, die als Escapezeichen verwendet wird. |
HasHeaders |
Optional. Gibt einen booleschen Wert an, der angibt, ob die Daten über Header verfügen. |
JsonTextConfiguration |
Optional. Gruppen die Einstellungen, die zum Interpretieren der Blobdaten verwendet werden, wenn das Blob JSON-formatiert ist. |
RecordSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Datensätzen verwendet wird. |
OutputSerialization |
Optional. Gibt das Serialisierungsformat des gefilterten Inhalts des Blobs an, der in der Antwort zurückgegeben wird. Wenn sie nicht angegeben ist, wird die Textkonfiguration mit Trennzeichen verwendet. |
Format |
Erforderlich, wenn OutputSerialization angegeben wird. Gruppen die Einstellungen für das Format der zurückgegebenen Antwort. |
Type |
Erforderlich, wenn OutputSerialization angegeben wird. Gibt den Formattyp an. Gültige Werte sind delimited , csv , json und arrow . |
DelimitedTextConfiguration |
Optional. Gruppen die Einstellungen, die zum Formatieren der Antwort verwendet werden, wenn die Antwort mit durch Trennzeichen getrennten Text formatiert werden soll. |
ColumnSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Spalten verwendet wird. |
FieldQuote |
Optional. Gibt die Zeichenfolge an, die zum Anführungszeichen eines bestimmten Felds verwendet wird. |
RecordSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Datensätzen verwendet wird. |
EscapeChar |
Optional. Gibt die Zeichenfolge an, die als Escapezeichen verwendet wird. |
HasHeaders |
Optional. Gibt einen Booleschen Wert an, der angibt, ob die Daten Header aufweisen. |
JsonTextConfiguration |
Optional. Gruppen die Einstellungen, die zum Formatieren der Antwort verwendet werden, wenn die Antwort im JSON-Format formatiert werden soll. |
RecordSeparator |
Optional. Gibt die Zeichenfolge an, die zum Trennen von Datensätzen verwendet wird. |
ArrowConfiguration |
Optional. Gruppen die Einstellungen, die zum Formatieren der Antwort verwendet werden, wenn die Antwort pfeilformatiert sein soll. |
Schema |
Erforderlich, wenn ArrowConfiguration angegeben wird. Gruppen die Einstellungen für das Schema der zurückgegebenen Pfeilantwort. |
Field |
Optional. Gruppen Einstellungen für ein bestimmtes Feld. |
Type |
Erforderlich, wenn Field angegeben wird. Gibt den Feldtyp an. Gültige Werte sind Int , Float , Decimal und Bool . |
Precision |
Optional. Gibt die Genauigkeit des Felds an. |
Scale |
Optional. Gibt die Skalierung des Felds an. |
Antwort
Die Antwort enthält den HTTP-Statuscode, einen Satz von Antwortheadern und den Antworttext. Der Antworttext ist im Avro-Binärformat. Da die Länge des Antwortinhalts unbekannt ist, wird die Antwort mit blockierter Codierung gestreamt.
Statuscode
Wenn die Abfrageanforderung wohlgeformt und autorisiert ist, gibt der Vorgang status Code 202 (Akzeptiert) zurück. Alle Während des Antwortstreamings aufgetretenen Fehler oder Statusmeldungen werden als Teil des Antworttexts zurückgegeben.
Informationen zu status Codes finden Sie unter Status- und Fehlercodes.
Antwortheader
Die Antwort für diesen Vorgang umfasst die folgenden Header. Die Antwort kann auch zusätzliche HTTP-Standardheader enthalten. Alle Standardheader entsprechen der HTTP/1.1-Protokollspezifikation.
Syntax | BESCHREIBUNG |
---|---|
Last-Modified |
Gibt das Datum/die Uhrzeit der letzten Änderung des Blobs an. Das Datumsformat entspricht RFC 1123. Durch jeden Vorgang, der das BLOB ändert, einschließlich eines Updates der Metadaten oder Eigenschaften des BLOB, wird die Uhrzeit der letzten Änderung aktualisiert. |
Content-Type |
Gibt das Format an, in dem die Ergebnisse zurückgegeben werden. Derzeit ist avro/binary dieser Wert . |
ETag |
Enthält einen Wert, den Sie zum bedingten Ausführen von Vorgängen verwenden können. Weitere Informationen finden Sie unter Angeben von bedingten Headern für Blob Storage-Vorgänge. Wenn die Anforderungsversion 2011-08-18 oder höher ist, befindet sich der Wert in Anführungszeichen ETag . |
Content-Encoding |
Gibt den Wert zurück, der für den Anforderungsheader Content-Encoding angegeben wurde. |
Content-Language |
Gibt den Wert zurück, der für den Anforderungsheader Content-Language angegeben wurde. |
Cache-Control |
Wird zurückgegeben, wenn dieser Header zuvor für das Blob angegeben wurde. |
Content-Disposition |
Wird für Anforderungen an die Version 2013-08-15 und höher zurückgegeben. Dieser Header gibt den Wert zurück, der für den x-ms-blob-content-disposition -Header angegeben wurde.Das Content-Disposition Antwortheaderfeld enthält zusätzliche Informationen zur Verarbeitung der Antwortnutzlast. Sie können auch das Antwortheaderfeld verwenden, um zusätzliche Metadaten anzufügen. Wenn das Antwortheaderfeld beispielsweise auf attachment festgelegt ist, sollte der Benutzer-Agent die Antwort nicht anzeigen. Stattdessen sollte ein Dialogfeld Speichern unter mit einem anderen Dateinamen als dem angegebenen Blobnamen angezeigt werden. |
x-ms-blob-type: <BlockBlob> |
Gibt den Typ des BLOB zurück. |
x-ms-request-id |
Identifiziert die durchgeführte Anforderung eindeutig. Sie können ihn verwenden, um probleme mit der Anforderung zu beheben. Weitere Informationen finden Sie unter Problembehandlung für API-Vorgänge. |
x-ms-version |
Gibt die Version von Azure Blob Storage an, die zum Ausführen der Anforderung verwendet wird. Enthalten für Anforderungen mit Version 2009-09-19 und höher. Dieser Header wird auch für anonyme Anforderungen ohne angegebene Version zurückgegeben, wenn der Container mit der Blob Storage-Version 2009-09-19 für öffentlichen Zugriff markiert wurde. |
Date |
Ein UTC-Datums-/Uhrzeitwert, der den Zeitpunkt angibt, zu dem der Dienst die Antwort gesendet hat. |
Access-Control-Allow-Origin |
Wird zurückgegeben, wenn die Anforderung einen Origin -Header enthält und CORS mit einer Abgleichsregel aktiviert ist. Dieser Header gibt den Wert des Origin-Anforderungsheaders im Falle einer Übereinstimmung zurück. |
Access-Control-Expose-Headers |
Wird zurückgegeben, wenn die Anforderung einen Origin -Header enthält und CORS mit einer Abgleichsregel aktiviert ist. Dieser Header gibt die Liste der Antwortheader zurück, die für den Client oder Aussteller der Anforderung verfügbar gemacht werden. |
Vary |
Wird mit dem Wert des Origin -Headers zurückgegeben, wenn CORS-Regeln angegeben werden. Weitere Informationen finden Sie unter CORS-Unterstützung für Azure Storage. |
Access-Control-Allow-Credentials |
Wird zurückgegeben, wenn die Anforderung einen Origin Header enthält und CORS mit einer Abgleichsregel aktiviert ist, die nicht alle Ursprünge zulässt. Dieser Header ist auf true festgelegt. |
x-ms-blob-committed-block-count |
Gibt die Anzahl der committeten Blöcke an, die im Blob vorhanden sind. Dieser Header wird nur für Anfügeblobs zurückgegeben. |
x-ms-server-encrypted: true/false |
Version 2015-12-11 oder höher. Der Wert dieses Headers wird auf true festgelegt, wenn die Blobdaten und Anwendungsmetadaten vollständig durch den angegebenen Algorithmus verschlüsselt werden. Wenn das Blob unverschlüsselt ist oder nur Teile der Blob-/Anwendungsmetadaten verschlüsselt sind, wird der Wert auf false festgelegt. |
Antworttext
Der Antworttext enthält den gefilterten Inhalt des Blobs, das als Eine Reihe von Nachrichten im Avro-Binärformat gesendet wird. Es verwendet das folgende Schema:
{
"type": "record",
"name": "com.microsoft.azure.storage.queryBlobContents.resultData",
"doc": "Holds result data in the format specified for this query (CSV, JSON, etc.).",
"fields": [
{
"name": "data",
"type": "bytes"
}
]
},
{
"type": "record",
"name": "com.microsoft.azure.storage.queryBlobContents.error",
"doc": "An error that occurred while processing the query.",
"fields": [
{
"name": "fatal",
"type": "boolean",
"doc": "If true, this error prevents further query processing. More result data may be returned, but there is no guarantee that all of the original data will be processed. If false, this error does not prevent further query processing."
},
{
"name": "name",
"type": "string",
"doc": "The name of the error"
},
{
"name": "description",
"type": "string",
"doc": "A description of the error"
},
{
"name": "position",
"type": "long",
"doc": "The blob offset at which the error occurred"
}
]
},
{
"type": "record",
"name": "com.microsoft.azure.storage.queryBlobContents.progress",
"doc": "Information about the progress of the query",
"fields": [
{
"name": "bytesScanned",
"type": "long",
"doc": "The number of bytes that have been scanned"
},
{
"name": "totalBytes",
"type": "long",
"doc": "The total number of bytes to be scanned in this query"
}
]
},
{
"type": "record",
"name": "com.microsoft.azure.storage.queryBlobContents.end",
"doc": "Sent as the final message of the response, indicating that all results have been sent.",
"fields": [
{
"name": "totalBytes",
"type": "long",
"doc": "The total number of bytes to be scanned in this query"
}
]
}
]
Beispiel für eine Antwort
"StatusCode": 200,
"ResponseHeaders": {
"Content-Type": "avro/binary",
"Date": "Fri, 24 Apr 2020 20:25:42 GMT",
"ETag": "\u00220x8D7E88DA9C0A75B\u0022",
"Last-Modified": "Fri, 24 Apr 2020 20:25:43 GMT",
"Transfer-Encoding": "chunked",
"x-ms-blob-type": "BlockBlob",
"x-ms-client-request-id": "f6d1983c-55e5-9f95-6d3d-80d74862d99e",
"x-ms-creation-time": "Fri, 24 Apr 2020 20:25:43 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-request-id": "46c09ab1-b01e-0001-1076-1acef2000000",
"x-ms-version": "2019-12-12"
},
"ResponseBody":{...}
Authorization
Beim Aufrufen eines Datenzugriffsvorgangs in Azure Storage ist eine Autorisierung erforderlich. Sie können den Query Blob Contents
Vorgang wie unten beschrieben autorisieren.
Wichtig
Microsoft empfiehlt die Verwendung von Microsoft Entra ID mit verwalteten Identitäten, um Anforderungen an Azure Storage zu autorisieren. Microsoft Entra ID bietet im Vergleich zur Autorisierung mit gemeinsam genutzten Schlüsseln eine höhere Sicherheit und Benutzerfreundlichkeit.
Azure Storage unterstützt die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen für Blobdaten. Mit Microsoft Entra ID können Sie die rollenbasierte Zugriffssteuerung von Azure (Azure RBAC) verwenden, um einem Sicherheitsprinzipal Berechtigungen zu erteilen. Der Sicherheitsprinzipal kann ein Benutzer, eine Gruppe, ein Anwendungsdienstprinzipal oder eine verwaltete Azure-Identität sein. Der Sicherheitsprinzipal wird von Microsoft Entra ID authentifiziert, um ein OAuth 2.0-Token zurückzugeben. Das Token kann anschließend zum Autorisieren einer Anforderung an den Blob-Dienst verwendet werden.
Weitere Informationen zur Autorisierung mit Microsoft Entra ID finden Sie unter Autorisieren des Zugriffs auf Blobs mithilfe von Microsoft Entra ID.
Berechtigungen
Nachfolgend sind die RBAC-Aktion aufgeführt, die für einen Microsoft Entra Benutzer, eine Gruppe, eine verwaltete Identität oder einen Dienstprinzipal erforderlich ist, um den Query Blob Contents
Vorgang aufzurufen, und die integrierte Azure RBAC-Rolle mit den geringsten Berechtigungen, die diese Aktion enthält:
- Azure RBAC-Aktion:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
- Integrierte Rolle mit den geringsten Rechten:Storage-Blobdatenleser
Weitere Informationen zum Zuweisen von Rollen mithilfe von Azure RBAC finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.
Hinweise
- Der
Query Blob Contents
Vorgang wird nur für einenBlockBlob
Typ unterstützt. - Das Abfragen des Inhalts eines Blobs, das mit vom Kunden bereitgestellten Schlüsseln verschlüsselt ist, wird in dieser Version der API nicht unterstützt.
- Dieser Vorgang wird für Blobs in Konten, für die die Infrastrukturverschlüsselung aktiviert ist, nicht unterstützt.
- Der
x-ms-version
-Header ist erforderlich, um ein BLOB abzurufen, das zu einem privaten Container gehört. Wenn das Blob zu einem Container gehört, der für den vollständigen oder teilweisen öffentlichen Zugriff verfügbar ist, kann jeder Client es lesen, ohne eine Version anzugeben. Die Dienstversion ist nicht erforderlich, um ein Blob abzurufen, das zu einem öffentlichen Container gehört. Weitere Informationen finden Sie unter Beschränken des Zugriffs auf Container und Blobs. - Sie können den
Query Blob Contents
Vorgang verwenden, um nur Objekte abzufragen, die durch Trennzeichen/CSV- oder JSON-Format getrennt sind.
Abrechnung
Preisanforderungen können von Clients stammen, die Blob Storage-APIs verwenden, entweder direkt über die Blob Storage-REST-API oder aus einer Azure Storage-Clientbibliothek. Für diese Anforderungen fallen Gebühren pro Transaktion an. Die Art der Transaktion wirkt sich auf die Abrechnung des Kontos aus. Beispielsweise werden Lesetransaktionen einer anderen Abrechnungskategorie zugeordnet als Schreibtransaktionen. Die folgende Tabelle zeigt die Abrechnungskategorie für Query Blob Contents
Anforderungen basierend auf dem Speicherkontotyp:
Vorgang | Speicherkontotyp | Abrechnungskategorie |
---|---|---|
Abfragen von Blobinhalten | Premium, Blockblob Standard „Allgemein v2“ |
Lesevorgänge1 |
1Zusätzlich zu einer Lesegebühr fallen für das Konto Gebühren für die Transaktionskategorien Abfragebeschleunigung – Gescannte Daten und Abfragebeschleunigung – Zurückgegebene Daten an. Die Preise für diese Kategorien werden auf der Seite Azure Data Lake Storage Preise angezeigt.
Weitere Informationen
Autorisieren von Anforderungen an Azure StorageStatus und FehlercodesBlob Storage-FehlercodesFestlegen von Timeouts für Blob Storage-VorgängeAbfragebeschleunigung: SQL-Sprachreferenz