Menanyakan Ion dengan PartiQL 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.

Menanyakan Ion dengan PartiQL di Amazon QLDB

Saat Anda melakukan kueri data di Amazon QLDB, Anda menulis pernyataan dalam format PartiQL, tetapi QLDB mengembalikan hasil dalam format Amazon Ion. PartiQL dimaksudkan untuk menjadi SQL-kompatibel, sedangkan Ion adalah perpanjangan dari JSON. Hal ini menyebabkan perbedaan sintaksis antara bagaimana Anda mencatat data dalam pernyataan kueri Anda dibandingkan dengan bagaimana hasil kueri Anda ditampilkan.

Bagian ini menjelaskan sintaks dasar dan semantik untuk menjalankan pernyataan PartiQL secara manual dengan menggunakan konsol QLDB atau shell QLDB.

Tip

Ketika Anda menjalankan query PartiQL pemrograman, praktek terbaik adalah dengan menggunakan pernyataan parameter. Anda dapat menggunakan tanda tanya (?) sebagai placeholder variabel mengikat dalam pernyataan Anda untuk menghindari aturan sintaks ini. Ini juga lebih aman dan efisien.

Untuk mempelajari selengkapnya, lihat tutorial berikut di Memulai dengan driver:

Sintaksis dan semantik

Bila menggunakan konsol QLDB atau shell QLDB untuk query data Ion, berikut ini adalah sintaks dasar dan semantik PartiQL:

Sensitivitas kasus

Semua nama objek sistem QLDB — termasuk nama field, nama tabel, dan nama ledger — adalah case sensitive.

Nilai string

Di Ion, tanda kutip ganda ("...") menunjukkan string.

Dalam PartiQL, tanda kutip tunggal ('...') menunjukkan string.

Simbol dan pengidentifikasi

Di Ion, tanda kutip tunggal ('...') menunjukkan simbol. Sebuah subset dari simbol di Ion disebut pengidentifikasi diwakili oleh teks dikutip.

Dalam PartiQL, tanda kutip ganda ("...") menunjukkan identifier PartiQL dikutip, seperti kata reserved yang digunakan sebagai nama tabel. Teks yang tidak dikutip mewakili pengenal PartiQL biasa, seperti nama tabel yang bukan kata yang dipesan.

Literal ion

Setiap literal Ion dapat dilambangkan dengan backticks (`...`) dalam pernyataan PartiQL.

Nama Bidang

Nama bidang ion adalah simbol peka huruf besar dan kecil. PartiQL memungkinkan Anda menunjukkan nama field dengan tanda kutip tunggal dalam sebuah pernyataan DML. Ini adalah alternatif singkatan untuk menggunakancast fungsi PartiQL untuk menentukan simbol. Ini juga lebih intuitif daripada menggunakan backtick untuk menunjukkan simbol Ion literal.

Literal

Literal dari bahasa query PartiQL sesuai dengan tipe data Ion, sebagai berikut:

Skalar

Ikuti sintaks SQL bila berlaku, seperti yang dijelaskan diPemetaan tipe partiQL-ion bagian. Misalnya:

  • 5

  • 'foo'

  • null

Struct

Juga dikenal sebagai tupel atau objek dalam banyak format dan model data lainnya.

Dilambangkan dengan kurung kurawal ({...}) denganstruct elemen dipisahkan dengan koma.

  • { 'id' : 3, 'arr': [1, 2] }

Daftar

Juga dikenal sebagai array.

Dilambangkan dengan tanda kurung persegi ([...]) dengan elemen daftar dipisahkan dengan koma.

  • [ 1, 'foo' ]

Tas

Koleksi unordered di PartiQL.

Dilambangkan dengan kurung sudut ganda (<<...>>) dengan elemen tas dipisahkan dengan koma. Di QLDB, meja dapat dianggap sebagai tas. Namun, tas tidak dapat bersarang di dalam dokumen di meja.

  • << 1, 'foo' >>

Contoh

Berikut ini adalah contoh dari sintaks untukINSERT 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 backtick. Tapi ada kasus di mana sintaks literal Ion ini dapat membuat pernyataan Anda lebih jelas dan lebih ringkas.

Misalnya, untuk menyisipkan dokumen dengan Ion timestamp dan simbol nilai-nilai, Anda dapat menulis pernyataan berikut menggunakan murni sintaks PartiQL saja.

INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }

Ini cukup verbose, 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 di 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 bahkan jika mereka memiliki teks yang sama, mereka tidak sama. Misalnya, ekspresi PartiQL berikut mengevaluasi nilai Ion yang berbeda.

'foo'
`foo`

Navigasi jalur

Ketika menulis bahasa manipulasi data (DML/DL) atau pernyataan query, Anda dapat mengakses bidang dalam struktur bersarang menggunakan langkah-langkah jalan. PartiQL mendukung notasi dot untuk mengakses nama field dari struktur induk. Contoh berikut mengaksesModel bidang indukVehicle.

Vehicle.Model

Untuk mengakses elemen tertentu dari daftar, Anda dapat menggunakan operator kurung persegi untuk menunjukkan nomor urut berbasis nol. Contoh berikut mengakses elemenSecondaryOwners dengan nomor urut2. Dengan kata lain, ini adalah elemen ketiga dari daftar.

SecondaryOwners[2]

Aliasing

QLDB mendukung 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 untukFROM sumber Anda.

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 bernamaVIN ada dalam struktur bersarang di dalam dokumen,VIN nilai yang dikembalikan oleh kueri ini mungkin akan mengejutkan Anda. Sebagai praktik terbaik, tulis pernyataan berikut. Query ini menyatakanv sebagai alias yang berkisar di atasVehicle meja. ASKata kunci adalah opsional.

SELECT v.VIN FROM Vehicle [ AS ] v

Aliasing sangat berguna ketika pathing ke koleksi bersarang dalam dokumen. Misalnya, pernyataan berikut menyatakano sebagai alias yang berkisar atas koleksiVehicleRegistration.Owners.

SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o

@Karakter secara teknis opsional di sini. Tetapi secara eksplisit menunjukkan bahwa Anda inginOwners struktur dalamVehicleRegistration, bukan koleksi yang berbeda bernamaOwners (jika ada).

Spesifikasi PartiQL

Untuk informasi lebih lanjut tentang bahasa query PartiQL, lihat Spesifikasi PartiQL.