Meminta Ion dengan PartiQL di Amazon QLDB - Database Buku Besar Amazon Quantum (AmazonQLDB)

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. SQL

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.

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

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:

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 ({...}) dengan struct 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 ASKata 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.