perintah SELECT di Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

perintah SELECT di Amazon QLDB

Di Amazon QLDB, gunakanSELECT perintah untuk mengambil data dari satu atau beberapa tabel. SetiapSELECT kueri di QLDB diproses dalam transaksi dan tunduk pada batas batas waktu transaksi.

Urutan hasilnya tidak spesifik dan dapat bervariasi untuk setiapSELECT kueri. Anda tidak boleh bergantung pada urutan hasil untuk kueri apa pun di QLDB.

Untuk mempelajari cara mengontrol akses untuk menjalankan perintah PartiQL ini pada tabel tertentu, lihatMemulai dengan mode izin standar di Amazon QLDB.

Awas

Ketika Anda menjalankan query di QLDB tanpa pencarian diindeks, memanggil scan tabel penuh. PartiQL mendukung query tersebut karena SQL kompatibel. Namun, jangan jalankan pemindaian tabel untuk kasus penggunaan produksi di QLDB. Pemindaian tabel dapat menyebabkan masalah kinerja pada tabel besar, termasuk konflik konkurensi dan batas waktu transaksi.

Untuk menghindari pemindaian tabel, Anda harus menjalankan pernyataan dengan klausaWHERE predikat menggunakan operator kesetaraan pada bidang yang diindeks atau ID dokumen; misalnya,WHERE indexedField = 123 atauWHERE indexedField IN (456, 789). Untuk informasi selengkapnya, lihat Mengoptimalkan kinerja kueri.

Sintaks

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

Parameter

NILAI

Kualifikasi untuk ekspresi Anda yang membuat kueri mengembalikan nilai tipe data mentah, daripada nilai yang dibungkus dalam struktur tupel.

ekspresi

Proyeksi yang terbentuk dari* wildcard atau daftar proyeksi dari satu atau beberapa dokumen atau lebih dari satu dokumen atau lebih dari satu dokumen atau lebih dari satu dokumen atau lebih. Ekspresi dapat terdiri dari panggilan ke fungsi PartiQL atau bidang yang diubah oleh operator PartiQL.

SEBAGAI field_alias

(Opsional) Alias sementara yang ditentukan pengguna untuk bidang yang digunakan dalam kumpulan hasil akhir. ASKata kunci adalah opsional.

Jika Anda tidak menentukan alias untuk ekspresi yang bukan nama bidang sederhana, kumpulan hasil akan menerapkan nama default ke bidang tersebut.

DARI sumber

Sumber yang akan ditanyakan. Satu-satunya sumber yang saat ini didukung adalah nama tabel, inner bergabung antara tabel,SELECT query bersarang (tundukKeterbatasan kueri Nest), dan fungsi sejarah panggilan untuk tabel.

Anda harus menentukan setidaknya satu sumber. Beberapa sumber harus dipisahkan dengan koma.

SEBAGAI source_alias

(Opsional) Alias yang ditentukan pengguna yang berkisar di atas sumber yang akan ditanyakan. Semua sumber alias yang digunakan dalamWHERE klausaSELECT OR harus dinyatakan dalamFROM klausa. ASKata kunci adalah opsional.

DI idx_alias

(Opsional) Sebuah alias yang ditetapkan pengguna yang mengikat ke indeks (ordinal) jumlah setiap elemen dalam daftar dari sumber. Alias harus dinyatakan dalamFROM klausa menggunakanAT kata kunci.

OLEH id_alias

(Opsional) Alias yang ditentukan pengguna yang mengikat ke bidangid metadata setiap dokumen dalam kumpulan hasil. Alias harus dinyatakan dalamFROM klausa menggunakanBY kata kunci. Hal ini berguna ketika Anda ingin proyek atau filter pada ID dokumen sementara query tampilan pengguna default. Untuk informasi selengkapnya, lihat Menggunakan klausa BY untuk query ID dokumen.

Kondisi WHERE

Kriteria seleksi dan bergabung kriteria (jika berlaku) untuk query.

catatan

Jika Anda menghapusWHERE klausul, semua dokumen dalam tabel akan diambil.

Bergabung

Hanya inner join yang saat ini didukung. Anda dapat menulis kueri gabungan batin menggunakanINNER JOIN klausa eksplisit, sebagai berikut. Dalam sintaks ini,JOIN harus dipasangkan denganON, danINNER kata kunci adalah opsional.

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

Atau, Anda dapat menulis inner bergabung menggunakan sintaks implisit, sebagai berikut.

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

Keterbatasan kueri Nest

Anda dapat menulis query bersarang (subqueries) dalamSELECT ekspresi dan dalamFROM sumber. Pembatasan utama adalah bahwa hanya kueri terluar yang dapat mengakses lingkungan database global. Misalnya, anggaplah bahwa Anda memiliki buku besar dengan tabelVehicleRegistration danPerson. Berikut query bersarang tidak valid karena batinSELECT mencoba untuk mengaksesPerson.

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

Sedangkan query bersarang berikut ini valid.

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

Contoh

Query berikut menunjukkan dasarSELECT semua wildcard dengan klausaWHERE predikat standar yang menggunakanIN operator.

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

Berikut ini menunjukkanSELECT proyeksi dengan filter string.

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

Berikut ini menunjukkan subquery berkorelasi yang meratakan data bersarang. Perhatikan bahwa@ karakter secara teknis opsional di sini. Tetapi secara eksplisit menunjukkan bahwa Anda inginOwners struktur yang bersarang di dalamVehicleRegistration, bukan koleksi yang berbeda bernamaOwners (jika ada). Untuk konteks lebih lanjut, lihatData yang tertumpuk di bagian Bekerja dengan data dan riwayat.

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

Berikut ini menunjukkan subquery dalamSELECT daftar yang memproyeksikan data bersarang, dan gabungan batin implisit.

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')

Berikut ini menunjukkan gabungan batin eksplisit.

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')

Berikut ini menunjukkan proyeksi bidangid metadata dokumen, menggunakanBY klausa.

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

Berikut ini menggunakanBY klausa untuk bergabungDriversLicense danPerson tabel padaid bidangPersonId dan dokumen mereka masing-masing.

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

Berikut ini menggunakanTampilan berkomitmen untuk bergabungDriversLicense danPerson tabel padaid bidangPersonId dan dokumen mereka masing-masing.

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

Berikut ini mengembalikanPersonId dan indeks (ordinal) jumlah setiap orang dalamOwners.SecondaryOwners daftar untuk dokumen dalam tabelVehicleRegistration.

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

Menjalankan pemrograman menggunakan driver

Untuk mempelajari cara menjalankan pernyataan ini secara terprogram menggunakan driver QLDB, lihat tutorial berikut dalam Memulai driver: