Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Meminta Ion dengan PartiQL di Amazon QLDB
penting
Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre
Saat Anda menanyakan data di AmazonQLDB, Anda menulis pernyataan dalam format PartiQL, QLDB tetapi mengembalikan hasil dalam format Amazon Ion. PartiQL dimaksudkan untuk SQL menjadi -kompatibel, sedangkan Ion adalah perpanjangan dari. JSON Hal ini menyebabkan perbedaan sintaksis antara cara Anda mencatat data dalam pernyataan kueri Anda dibandingkan dengan bagaimana hasil kueri Anda ditampilkan.
Tip
Saat Anda menjalankan kueri PartiQL secara terprogram, praktik terbaik adalah menggunakan pernyataan berparameter. Anda dapat menggunakan tanda tanya (?
) sebagai placeholder variabel bind dalam pernyataan Anda untuk menghindari aturan sintaks ini. Ini juga lebih aman dan efisien.
Untuk mempelajari lebih lanjut, lihat tutorial berikut di Memulai dengan driver:
-
Pergi: Tutorial mulai cepat | Referensi buku masak
-
Node.js: Tutorial mulai cepat | Referensi buku masak
-
Python: | Tutorial mulai cepat Referensi buku masak
Sintaks dan semantik
Saat menggunakan QLDB konsol atau QLDB shell untuk menanyakan data Ion, berikut ini adalah sintaks dasar dan semantik PartiQL:
- Sensitivitas kasus
-
Semua nama objek QLDB sistem—termasuk nama bidang, nama tabel, dan nama buku besar—peka huruf besar—peka huruf besar/kecil.
- Nilai string
-
Dalam Ion, tanda kutip ganda (
"..."
) menunjukkan string.Dalam PartiQL, tanda kutip tunggal
'...'
() menunjukkan string. - Simbol dan pengidentifikasi
-
Dalam Ion, tanda kutip tunggal (
'...'
) menunjukkan simbol.Subset simbol dalam Ion yang disebut pengidentifikasi diwakili oleh teks yang tidak dikutip. Dalam PartiQL, tanda kutip ganda "..." () menunjukkan pengidentifikasi PartiQL yang dikutip, seperti kata cadangan yang digunakan sebagai nama tabel. Teks yang tidak dikutip mewakili pengidentifikasi PartiQL biasa, seperti nama tabel yang bukan kata cadangan.
- Literal ion
-
Setiap literal Ion dapat dilambangkan dengan backticks ()
`...`
dalam pernyataan PartiQL. - Nama bidang
-
Nama bidang ion adalah simbol peka huruf besar/kecil. PartiQL memungkinkan Anda menunjukkan nama bidang dengan tanda kutip tunggal dalam sebuah pernyataan. DML Ini adalah alternatif singkatan untuk menggunakan
cast
fungsi PartiQL untuk mendefinisikan simbol. Ini juga lebih intuitif daripada menggunakan backticks untuk menunjukkan simbol Ion literal.
Literal
Literal bahasa kueri PartiQL sesuai dengan tipe data Ion, sebagai berikut:
- Skalar
-
Ikuti SQL sintaks bila berlaku, seperti yang dijelaskan di Pemetaan tipe partiQL-ion bagian. Sebagai contoh:
-
5
-
'foo'
-
null
-
- Struct
-
Juga dikenal sebagai tupel atau objek dalam banyak format dan model data lainnya.
Dilambangkan dengan kurawal kurawal (
{...}
) denganstruct
elemen yang dipisahkan dengan koma.-
{ 'id' : 3, 'arr': [1, 2] }
-
- Daftar
-
Juga dikenal sebagai array.
Dilambangkan dengan tanda kurung siku (
[...]
) dengan elemen daftar dipisahkan dengan koma.-
[ 1, 'foo' ]
-
- Tas
-
Koleksi tidak berurutan di PartiQL.
Dilambangkan dengan tanda kurung sudut ganda (
<<...>>
) dengan elemen tas dipisahkan dengan koma. DiQLDB, meja bisa dianggap sebagai tas. Namun, tas tidak dapat bersarang di dalam dokumen dalam tabel.-
<< 1, 'foo' >>
-
Contoh
Berikut ini adalah contoh sintaks untuk INSERT
pernyataan dengan berbagai jenis Ion.
INSERT INTO VehicleRegistration VALUE { 'VIN' : 'KM8SRDHF6EU074761', --string 'RegNum' : 1722, --integer 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, --decimal 'Owners' : { --nested struct 'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ --list of structs { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' }, { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' } ] }, 'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision 'ValidToDate' : `2020-06-25T` }
Notasi backtick
PartiQL sepenuhnya mencakup semua tipe data Ion, sehingga Anda dapat menulis pernyataan apa pun tanpa menggunakan backticks. Tetapi ada kasus di mana sintaks literal Ion ini dapat membuat pernyataan Anda lebih jelas dan lebih ringkas.
Misalnya, untuk menyisipkan dokumen dengan cap waktu Ion dan nilai simbol, Anda dapat menulis pernyataan berikut menggunakan sintaks PartiQL murni saja.
INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }
Ini cukup bertele-tele, jadi sebagai gantinya, Anda dapat menggunakan backticks untuk menyederhanakan pernyataan Anda.
INSERT INTO myTable VALUE { 'myTimestamp': `2019-09-04T`, 'mySymbol': `foo` }
Anda juga dapat melampirkan seluruh struktur dalam backticks untuk menyimpan beberapa penekanan tombol lagi.
INSERT INTO myTable VALUE `{ myTimestamp: 2019-09-04T, mySymbol: foo }`
penting
String dan simbol adalah kelas yang berbeda di PartiQL. Ini berarti bahwa meskipun mereka memiliki teks yang sama, mereka tidak sama. Misalnya, ekspresi PartiQL berikut mengevaluasi nilai Ion yang berbeda.
'foo'
`foo`
Navigasi jalur
Saat menulis bahasa manipulasi data (DML) atau pernyataan kueri, Anda dapat mengakses bidang dalam struktur bersarang menggunakan langkah jalur. PartiQL mendukung notasi titik untuk mengakses nama bidang struktur induk. Contoh berikut mengakses Model
bidang indukVehicle
.
Vehicle.Model
Untuk mengakses elemen tertentu dari daftar, Anda dapat menggunakan operator kurung siku untuk menunjukkan nomor urut berbasis nol. Contoh berikut mengakses elemen SecondaryOwners
dengan nomor urut. 2
Dengan kata lain, ini adalah elemen ketiga dari daftar.
SecondaryOwners[2]
Aliasing
QLDBmendukung konten terbuka dan skema. Jadi, ketika Anda mengakses bidang tertentu dalam sebuah pernyataan, cara terbaik untuk memastikan bahwa Anda mendapatkan hasil yang Anda harapkan adalah dengan menggunakan alias. Misalnya, jika Anda tidak menentukan alias eksplisit, sistem akan menghasilkan alias implisit untuk sumber Anda. FROM
SELECT VIN FROM Vehicle
--is rewritten to
SELECT Vehicle.VIN FROM Vehicle AS Vehicle
Tetapi hasilnya tidak dapat diprediksi untuk konflik nama bidang. Jika bidang lain bernama VIN
ada dalam struktur bersarang di dalam dokumen, VIN
nilai yang dikembalikan oleh kueri ini mungkin akan mengejutkan Anda. Sebagai praktik terbaik, tulis pernyataan berikut sebagai gantinya. Query ini mendeklarasikan v
sebagai alias yang berkisar di atas tabel. Vehicle
AS
Kata kunci adalah opsional.
SELECT v.VIN FROM Vehicle [ AS ] v
Aliasing sangat berguna saat memasukkan koleksi bersarang di dalam dokumen. Misalnya, pernyataan berikut menyatakan o
sebagai alias yang berkisar di atas koleksi. VehicleRegistration.Owners
SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o
@
Karakter secara teknis opsional di sini. Tetapi secara eksplisit menunjukkan bahwa Anda menginginkan Owners
struktur di dalamnyaVehicleRegistration
, bukan koleksi berbeda bernama Owners
(jika ada).
Spesifikasi PartiQL
Untuk informasi selengkapnya tentang bahasa kueri PartiQL, lihat Spesifikasi PartiQL.