查詢資料 - Amazon Quantum Ledger Database (Amazon QLDB)

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

查詢資料

戶視圖僅返回用戶數据的最新未刪除版本。這是亞馬遜 QLDB 中的默認視圖。這表示當您只想查詢資料時,不需要特殊限定元。

如需下列查詢範例語法和參數的詳細資訊,請參閱 Amazon QLDB PartiQL 參考資料SELECT中的。

基本查詢

基本SELECT查詢會傳回您插入到表格中的文件。

警告

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

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

下列查詢會顯示您先前插入的車輛登記文件的結果使用索引建立表格並插入文件。結果的順序不是特定的,並且每個SELECT查詢可能會有所不同。您不應該依賴 QLDB 中任何查詢的結果順序。

SELECT * FROM VehicleRegistration WHERE LicensePlateNumber IN ('LEWISR261LL', 'CA762X')
{ VIN: "1N4AL11D75C109151", LicensePlateNumber: "LEWISR261LL", State: "WA", City: "Seattle", PendingPenaltyTicketAmount: 90.25, ValidFromDate: 2017-08-21T, ValidToDate: 2020-05-11T, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] } }
SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }
重要

在 PartiQL 中,您可以使用單引號來表示資料處理語言 (DML) 或查詢陳述式中的字串。但是 QLDB 主控台和 QLDB 殼層會以 Amazon Ion 文字格式傳回查詢結果,因此您會看到以雙引號括住的字串。

此語法可讓 PartiQL 查詢語言維護 SQL 相容性,而 Amazon Ion 文字格式則可維持 JSON 相容性。

投影和濾波器

您可以進行預測(目標SELECT)和其他標準過濾器(WHERE子句)。下面的查詢返回從VehicleRegistration表中的文檔字段的子集。它會針對具有下列條件的車輛進行篩選:

  • 字符串過濾器-它在西雅圖註冊。

  • 十進制過濾器 — 它的待處罰單金額小於100.0

  • 日期篩選器 — 註冊日期在 2019 年 9 月 4 日或之後有效。

SELECT r.VIN, r.PendingPenaltyTicketAmount, r.Owners FROM VehicleRegistration AS r WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761') AND r.City = 'Seattle' --string AND r.PendingPenaltyTicketAmount < 100.0 --decimal AND r.ValidToDate >= `2019-09-04T` --timestamp with day precision
{ VIN: "1N4AL11D75C109151", PendingPenaltyTicketAmount: 90.25, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }

聯結

您也可以編寫內部聯接查詢。以下示例顯示了一個隱含的內部聯接查詢,該查詢返回所有註冊文件以及已註冊車輛的屬性。

SELECT * FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", LicensePlateNumber: "LEWISR261LL", State: "WA", City: "Seattle", PendingPenaltyTicketAmount: 90.25, ValidFromDate: 2017-08-21T, ValidToDate: 2020-05-11T, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] }, Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] }, Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }

或者,您可以在顯式語法中編寫相同的內部連接查詢,如下所示。

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

巢狀資料

您可以在 QLDB 中使用 PartiQL 來查詢文件中的巢狀資料。下列範例顯示扁平化巢狀資料的相關子查詢。在這裡,@字符在技術上是可選的。但它明確表明你想要結OwnersVehicleRegistration,而不是名為的不同集合Owners(如果存在的話)。

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] }, { VIN: "KM8SRDHF6EU074761", SecondaryOwners: [] }

以下顯示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')
{ Make: "Audi", Model: "A5", PrimaryOwner: ["294jJ3YUoH1IEEm8GSabOs"] }, { Make: "Tesla", Model: "Model S", PrimaryOwner: ["IN7MvYtUjkp1GMZu0F6CG9"] }

Owners.SecondaryOwners列查詢會傳回VehicleRegistration文件清單中每個人員的PersonId與索引 (序數) 編號。

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = '1N4AL11D75C109151'
{
    PersonId: "5Ufgdlnj06gF5CWcOIu64s",
    owner_idx: 0
}

若要瞭解如何查詢文件中繼資料,請繼續執行查詢文件元資料