SELECTAmazon 的命令 QLDB - Amazon Quantum Ledger 資料庫 (Amazon QLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SELECTAmazon 的命令 QLDB

重要

支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL

在 Amazon 中QLDB,使用命SELECT令從一個或多個表中檢索數據。中QLDB的每個SELECT查詢都會在交易中處理,且受到交易逾時限制的限制

結果的順序不是特定的,並且每個SELECT查詢可能會有所不同。您不應該依賴於QLDB.

若要瞭解如何控制在特定資料表上執行此 PartiQL 命令的存取權,請參閱Amazon 中的標準許可模式入門 QLDB

警告

當您在中執行查詢時QLDB沒有索引查閱,它會叫用完整資料表掃描。PartiQL 支持這樣的查詢,因為它是SQL兼容的。但是,請勿針對中的生產使用案例執行表格掃描QLDB。資料表掃描可能會造成大型資料表的效能問題,包括並行衝突和交易逾時。

若要避免資料表掃描,您必須在索引欄位或文件 ID 上使用相等運算子來執行具有述WHERE詞子句的陳述式;例如,WHERE indexedField = 123WHERE indexedField IN (456, 789)。如需詳細資訊,請參閱 最佳化查詢效能

語法

SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ] FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ] [ WHERE condition ]

參數

VALUE

運算式的限定詞,可讓查詢傳回原始資料類型值,而不是封裝在元組結構中的值。

expression

*萬用字元或結果集中一或多個文件欄位的投影清單所形成的投影。一個表達式可以包含對 PartiQL 數 的呼叫或由 PartiQL 運算子 修改的欄位。

AS field_alias

(選擇性) 在最終結果集中使用之欄位的暫時性、使用者定義別名。AS關鍵字是可選的。

如果您沒有為非簡單欄位名稱的運算式指定別名,則結果集會將預設名稱套用至該欄位。

FROM source

要查詢的來源。目前支援的唯一來源是資料表名稱、資料表之間的內部聯結、巢狀SELECT查詢 (受限於巢狀查詢限制),以及資料表的歷程函數呼叫。

您必須指定至少一個來源。多個來源必須以逗號分隔。

AS source_alias

(選擇性) 使用者定義的別名,其範圍超過要查詢的來源。SELECTOR WHERE 子句中使用的所有來源別名都必須在FROM子句中宣告。AS關鍵字是可選的。

AT idx_alias

(選擇性) 使用者定義別名,繫結至來源清單中每個元素的索引 (序數) 編號。別名必須使用AT關鍵字在FROM子句中聲明。

BY id_alias

(選擇性) 使用者定義別名,繫結至結果集中每個文件的中id繼資料欄位。別名必須使用BY關鍵字在FROM子句中聲明。當您想要在查詢預設使用者檢視時對文件 ID 進行投影或篩選時,此功能非常有用。如需詳細資訊,請參閱 使用 BY 子句來查詢文件 ID

WHERE condition

查詢的選取條件和聯結準則 (如果適用)。

注意

如果您省略WHERE子句,則會擷取表格中的所有文件。

聯結

目前僅支援內部聯結。您可以使用 explicit INNER JOIN 子句編寫內部聯接查詢,如下所示。在此語法中,JOIN必須與配對ON,並且INNER關鍵字是可選的。

SELECT expression FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element = t2.element

或者,您可以使用隱含語法編寫內部聯結,如下所示。

SELECT expression FROM table1 AS t1, table2 AS t2 WHERE t1.element = t2.element

巢狀查詢限制

您可以在SELECT運算式內和FROM來源中撰寫巢狀查詢 (子查詢)。主要限制是只有最外層的查詢才能訪問全局數據庫環境。例如,假設您有一個包含表格VehicleRegistration和的分類帳Person。下列巢狀查詢無效,因為內部SELECT會嘗試存取Person

SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r

而下面的嵌套查詢是有效的。

SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r

範例

下列查詢會顯示具SELECT有使用IN運算子之標準WHERE述詞子句的全部萬用字元。

SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

以下顯示具有字串篩選的SELECT投影。

SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'

下面顯示了一個扁平化嵌套數據的相關子查詢。請注意,字@符在技術上是可選的。但它明確表明您想要嵌套在其中的Owners結構VehicleRegistration,而不是名為的不同集合Owners(如果存在的話)。如需更多前後關聯,請參閱〈使用資料和記錄〉一章嵌套數據中的。

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

以下顯示了SELECT列表中投影嵌套數據的子查詢以及隱含的內部關連。

SELECT v.Make, v.Model, (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

下面顯示了一個明確的內部聯接。

SELECT v.Make, v.Model, r.Owners FROM VehicleRegistration AS r JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

下面顯示了使用BY子句的文檔id元數據字段的投影。

SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = 'documentId'

以下使用子BY句分別聯結其欄位DriversLicense和文件id欄位上的PersonIdPerson表格。

SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = 'documentId'

下列使用分別聯結其欄位DriversLicense和文件id欄位上的PersonIdPerson表格。已提交檢視

SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = 'documentId'

以下內容會傳回表VehicleRegistration格中文件Owners.SecondaryOwners清單中每個人員的PersonId與索引 (序數) 編號。

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'

以編程方式使用驅動程序

若要了解如何以程式設計方式使用QLDB驅動程式執行此陳述式,請參閱開始使用驅動程式中的下列教學課程: