共用方式為


查詢 Blob 內容

Query Blob Contents作業會在 Blob 的內容上套用簡單的 結構化查詢語言 (SQL) (SQL) 語句,並只傳回查詢的數據子集。 您也可以呼叫 Query Blob Contents 來查詢版本或快照集的內容。

要求

您可以建構 Query Blob Contents 要求,如下所示。 我們建議使用 HTTPS。 以記憶體帳戶的名稱取代 myaccount

POST 方法要求 URI HTTP 版本
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 參數

您可以在要求 URI 上指定下列其他參數:

參數 描述
snapshot 選擇性。 快照集參數是不透明的 DateTime 值。 當它存在時,它會指定要查詢的 Blob 快照集。 如需使用 Blob 快照集的詳細資訊,請參閱 Create Blob 的快照集。
versionid 選擇性版本 2019-12-12 和更新版本。 參數 versionid 是不透明的 DateTime 值。 當 Blob 存在時,它會指定要擷取的 Blob 版本。
timeout 選擇性。 timeout 參數以秒為單位。 如需詳細資訊,請參閱 設定 Blob 記憶體作業的逾時

要求標頭

下表描述必要和選擇性的要求標頭:

要求標頭 描述
Authorization 必要。 指定驗證配置、帳戶名稱及簽章。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
Datex-ms-date 必要。 指定要求的「國際標準時間」(UTC)。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
x-ms-version 所有已驗證要求為必要項,匿名要求則為選擇性。 指定用於這個要求的作業版本。 如需詳細資訊,請參閱 Azure 儲存體服務的版本
Content-Type 必要。 這個標頭的值應該是 application/xml; charset=UTF-8
x-ms-lease-id:<ID> 選擇性。 如果指定此標頭,只有同時符合下列兩個條件時,才會執行作業:

- Blob 的租用目前為作用中。
- 要求中指定的租用標識碼符合 Blob 的租用標識碼。

如果指定此標頭但不符合任何一項條件,則要求和 Query Blob Contents 作業會失敗,並顯示狀態碼 412 (先決條件失敗)。
Origin 選擇性。 指定發出要求的來源。 此標頭的存在會導致回應上的跨原始來源資源分享 (CORS) 標頭。
x-ms-client-request-id 選擇性。 提供客戶端產生的不透明值,其中包含設定記錄時記錄的 1 kibibyte (KiB) 字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器接收的要求相互關聯。

只有在符合指定的條件時,此作業也支援使用條件標頭來查詢 Blob 內容。 如需詳細資訊,請參閱 指定 Blob 記憶體作業的條件式標頭

要求本文

此版本 Query Blob Contents 的要求本文會使用下列 XML 格式:

<?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>

下表說明要求主體的項目:

元素名稱 描述
QueryRequest 必要。 群組 一組查詢要求設定。
QueryType 必要。 表示所提供查詢表達式的類型。 目前版本 SQL的唯一有效值為 。
Expression 必要。 指出 SQL 中的查詢表達式。 查詢表達式的大小上限為 256 KiB。 如需表達式語法的詳細資訊,請參閱 查詢加速:SQL 語言參考
InputSerialization 選擇性。 群組 Blob 內容的輸入串行化相關設定。 如果未指定,則會使用分隔文字組態。
Format 如果指定 InputSerialization 的話,這就是必要的。 群組 Blob 資料格式的相關設定。
Type 如果指定 InputSerialization 的話,這就是必要的。 表示格式類型。 有效值是 delimitedcsvjson
DelimitedTextConfiguration 選擇性。 如果 Blob 是以分隔文字格式化,群組 用來解譯 Blob 資料的設定。
ColumnSeparator 選擇性。 表示用來分隔數據行的字串。
FieldQuote 選擇性。 表示用來加上特定欄位引號的字串。
RecordSeparator 選擇性。 表示用來分隔記錄的字串。
EscapeChar 選擇性。 表示做為逸出字元的字串。
HasHeaders 選擇性。 指定布爾值,表示數據是否有標頭。
JsonTextConfiguration 選擇性。 群組 當 Blob 格式為 JSON 時,用來解譯 Blob 數據的設定。
RecordSeparator 選擇性。 表示用來分隔記錄的字串。
OutputSerialization 選擇性。 指出回應中傳回之 Blob 篩選內容的串行化格式。 如果未指定,則會使用分隔文字組態。
Format 如果指定 OutputSerialization 的話,這就是必要的。 群組傳回回應格式的相關設定。
Type 如果指定 OutputSerialization 的話,這就是必要的。 表示格式類型。 有效值為 delimitedcsvjsonarrow
DelimitedTextConfiguration 選擇性。 群組 當回應應使用分隔符文字格式化時,用於格式化響應的設定。
ColumnSeparator 選擇性。 指出用來分隔數據行的字串。
FieldQuote 選擇性。 指出用來為特定欄位加上引號的字串。
RecordSeparator 選擇性。 指出用來分隔記錄的字串。
EscapeChar 選擇性。 表示用來做為逸出字元的字串。
HasHeaders 選擇性。 指定布爾值,表示數據是否有標頭。
JsonTextConfiguration 選擇性。 如果回應應格式化為 JSON,群組 用於格式化響應的設定。
RecordSeparator 選擇性。 指出用來分隔記錄的字串。
ArrowConfiguration 選擇性。 如果回應應格式化,群組 用於格式化響應的設定。
Schema 如果指定 ArrowConfiguration 的話,這就是必要的。 群組 傳回之箭頭回應架構的相關設定。
Field 選擇性。 群組 特定欄位的相關設定。
Type 如果指定 Field 的話,這就是必要的。 表示欄位類型。 有效值為 IntFloatDecimalBool
Precision 選擇性。 表示欄位的有效位數。
Scale 選擇性。 指出欄位的刻度。

回應

回應包括 HTTP 狀態碼、一組回應標頭和回應主體。 回應本文是 Avro 二進位格式。 因為響應內容長度未知,所以回應會以區塊編碼進行串流處理。

狀態碼

如果查詢要求格式良好且已獲得授權,則作業會傳回狀態代碼 202 (已接受) 。 回應串流期間發生的任何錯誤或進度訊息都會傳回作為回應本文的一部分。

如需狀態代碼的相關信息,請參閱 狀態和錯誤碼

回應標頭

這項作業的回應包括下列標頭。 回應也可能包含其他標準 HTTP 標頭。 所有標準標頭都符合 HTTP/1.1 通訊協議規格

語法 描述
Last-Modified 指出上次修改 Blob 的日期/時間。 日期格式會依照 RFC 1123。

修改 Blob 的任何作業 (包括 Blob 更新的中繼資料或屬性),都會變更 Blob 上次修改的時間。
Content-Type 指定傳回結果的格式。 目前,此值為 avro/binary
ETag 包含值,您可以用來有條件地執行作業。 如需詳細資訊,請參閱 指定 Blob 記憶體作業的條件式標頭。 如果要求版本是 2011-08-18 或更新版本,此值 ETag 會以引號括住。
Content-Encoding 傳回為 Content-Encoding 要求標頭指定的值。
Content-Language 傳回為 Content-Language 要求標頭指定的值。
Cache-Control 如果先前已為 Blob 指定此標頭, 則傳回 。
Content-Disposition 對 2013-08-15 及更新版本提出要求會傳回此標頭。 此標頭傳回 x-ms-blob-content-disposition 標頭中所指定的值。

回應 Content-Disposition 標頭欄位會傳達如何處理響應承載的其他資訊。 您也可以使用回應標頭欄位附加其他元數據。 例如,如果響應標頭字段設定 attachment為 ,則使用者代理程式不應該顯示回應。 相反地,它應該會顯示具有指定 Blob 名稱以外的檔名的 [ 另存新 檔] 對話方塊。
x-ms-blob-type: <BlockBlob> 傳回 Blob 的類型。
x-ms-request-id 可唯一識別所提出的要求。 您可以使用它對要求進行疑難解答。 如需詳細資訊,請參閱 針對 API 作業進行疑難解答
x-ms-version 指出用來執行要求的 Azure Blob 儲存體 版本。 包含於使用 2009-09-19 版和更新版本提出的要求。

如果容器已使用 2009-09-19 版的 Blob 儲存器標示為公用存取,則會針對未指定版本的匿名要求傳回此標頭。
Date UTC 日期/時間值,指出服務傳送響應的時間。
Access-Control-Allow-Origin 如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。 此標頭會在相符時傳回原始要求標頭的值。
Access-Control-Expose-Headers 如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。 此標頭會傳回將公開給要求之用戶端或簽發者的回應標頭清單。
Vary 指定 CORS 規則時,會傳回此標頭及 Origin 標頭值。 如需詳細資訊,請參閱 Azure 記憶體的 CORS 支援
Access-Control-Allow-Credentials 如果要求包含 Origin 標頭且 CORS 已啟用,且符合不允許所有來源的規則,則會傳回 。 這個標頭設定為 true
x-ms-blob-committed-block-count 指出 Blob 中存在的認可區塊數目。 此標頭只會針對附加 Blob 傳回。
x-ms-server-encrypted: true/false 版本 2015-12-11 或更新版本。 如果 Blob 資料與應用程式中繼資料透過指定的演算法完全加密,這個標頭的值會設定 true 為 。 當 Blob 未加密時,或只加密 Blob/應用程式元資料的部分時,此值會設定為 false

回應本文

回應本文包含以 Avro 二進位格式傳送為一系列訊息的 Blob 篩選內容。 它會使用下列架構:

{
    "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"
      }
    ]
  }
]

範例回應

      "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":{...}
  

授權

在 Azure 記憶體中呼叫任何數據存取作業時,需要授權。 您可以授權 Query Blob Contents 作業,如下所示。

重要

Microsoft 建議搭配使用 Microsoft Entra ID 來授權對 Azure 記憶體的要求。 相較於共用密鑰授權,Microsoft Entra ID 提供更高的安全性和使用便利性。

Azure 記憶體支援使用 Microsoft Entra ID 來授權 Blob 數據的要求。 使用 Microsoft Entra ID,您可以使用 Azure 角色型存取控制 (Azure RBAC) 來授與安全性主體的許可權。 安全性主體可能是使用者、群組、應用程式服務主體或 Azure 受控識別。 安全性主體是由 Microsoft Entra ID 驗證,以傳回 OAuth 2.0 令牌。 權杖接著可以用來授權對 Blob 服務的要求。

若要深入瞭解使用 Microsoft Entra ID 授權,請參閱使用 Microsoft Entra ID 授權 Blob 的存取權。

權限

以下是 Microsoft Entra 使用者、群組、受控識別或服務主體呼叫Query Blob Contents作業所需的 RBAC 動作,以及包含此動作的最低特殊許可權 Azure RBAC 角色:

若要深入瞭解如何使用 Azure RBAC 指派角色,請參閱 指派 Azure 角色以存取 Blob 數據

備註

  • 只有在 Query Blob Contents 類型上 BlockBlob 才支援此作業。
  • 此版本的 API 不支援查詢使用客戶提供的金鑰加密的 Blob 內容。
  • 已啟用 基礎結構加密 的帳戶中的 Blob 不支援此作業。
  • 擷取屬於私人容器的 Blob 時,需要 x-ms-version 標頭。 如果 Blob 屬於可供完整或部分公開存取的容器,則任何用戶端都可以讀取它,而不需要指定版本。 擷取屬於公用容器的 Blob 不需要服務版本。 如需詳細資訊,請參閱限制對容器和 Blob 的存取
  • 您可以使用 Query Blob Contents 作業來查詢具有分隔符/CSV 或 JSON 格式的物件。

計費

定價要求可能源自使用 Blob 記憶體 API 的用戶端,無論是直接透過 Blob 記憶體 REST API,還是來自 Azure 記憶體用戶端連結庫。 這些要求會累算每個交易的費用。 交易類型會影響帳戶的收費方式。 例如,讀取交易會累算到與寫入交易不同的計費類別。 下表顯示根據記憶體帳戶類型的要求計費類別 Query Blob Contents

作業 儲存體帳戶類型 計費類別
查詢 Blob 內容 進階區塊 Blob
標準一般用途 v2
讀取作業1

1除了讀取費用之外,帳戶還會產生 查詢加速 - 數據掃描查詢加速 - 數據傳回 交易類別的費用。 這些類別的定價會出現在 [Azure Data Lake Storage 定價] 頁面上。

另請參閱

授權對 Azure 記憶體狀態的要求和錯誤碼Blob 記憶體錯誤碼設定 Blob 記憶體作業查詢加速的逾時:SQL 語言參考