Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Perintah SELECT
Amazon S3 Select hanya mendukung perintah SELECT
SQL. Klausul standar ANSI berikut didukung untuk SELECT
:
-
Daftar
SELECT
-
Klausul
FROM
-
Klausul
WHERE
-
Klausul
LIMIT
catatan
Kueri Amazon S3 Select saat ini tidak mendukung subkueri atau Joins.
Daftar SELECT
Daftar SELECT
mencantumkan kolom, fungsi, dan eskpresi yang ingin Anda tampilkan dari kueri. Daftar ini mewakili output kueri.
SELECT * SELECT
projection1
AScolumn_alias_1
,projection2
AScolumn_alias_2
Bentuk pertama dari SELECT
dengan *
(tanda bintang) mengembalikan setiap baris yang melewati WHERE
klausul, apa adanya. Bentuk kedua dari SELECT
membuat baris dengan ekspresi skalar hasil yang ditentukan pengguna
dan projection1
untuk setiap kolom.projection2
Klausul FROM
Amazon S3 Select mendukung bentuk FROM
klausul berikut:
FROM
table_name
FROMtable_name alias
FROMtable_name
ASalias
Dalam setiap bentuk FROM
klausa, table_name
adalah S3Object
yang sedang ditanyakan. Pengguna yang berasal dari basis data relasional tradisional dapat menganggap ini sebagai skema basis data yang berisi beberapa tampilan di atas tabel.
Mengikuti SQL standar, klausulFROM
membuat baris yang difilter dalam klausul WHERE
dan diproyeksikan dalam daftar SELECT
.
Untuk objek JSON yang disimpan di Amazon S3 Select, Anda juga dapat menggunakan bentuk klausul FROM
berikut:
FROM S3Object[*].
path
FROM S3Object[*].path alias
FROM S3Object[*].path
ASalias
Menggunakan bentuk klausul FROM
, Anda dapat memilih dari arrays atau objek di dalam objek JSON. Anda dapat menentukan path
dengan menggunakan salah satu bentuk berikut:
-
Berdasarkan nama (dalam objek):
.
atauname
['
name
'] -
Berdasarkan indeks (dalam array):
[
index
] -
Berdasarkan karakter wildcard (dalam objek):
.*
-
Berdasarkan karakter wildcard (dalam array):
[*]
catatan
-
Bentuk klausul
FROM
ini hanya berfungsi dengan objek JSON. -
Karakter wildcard selalu mengeluarkan setidaknya satu record. Jika tidak ada catatan yang cocok, Amazon S3 Select mengeluarkan nilai
MISSING
. Selama serialisasi output (setelah kueri selesai berjalan), Amazon S3 Select menggantikanMISSING
nilai dengan catatan kosong. -
Fungsi agregat (
AVG
,COUNT
,MAX
,MIN
, danSUM
) melompati nilaiMISSING
. -
Jika Anda tidak menyediakan alias saat menggunakan karakter wildcard, Anda dapat merujuk pada baris dengan menggunakan elemen terakhir di jalur tersebut. Misalnya, Anda dapat memilih semua harga dari daftar buku dengan menggunakan kueri
SELECT price FROM S3Object[*].books[*].price
. Jika jalan berakhir dengan karakter wildcard alih-alih nama, maka Anda dapat menggunakan nilai tersebut_1
untuk merujuk pada baris. Misalnya, alih-alihSELECT price FROM S3Object[*].books[*].price
, Anda dapat menggunakan kueriSELECT _1.price FROM S3Object[*].books[*]
. -
Amazon S3 Select selalu memperlakukan dokumen JSON sebagai serangkaian nilai tingkat akar. Jadi, bahkan jika objek JSON yang Anda kueri hanya memiliki satu elemen akar, klausa
FROM
harus dimulai denganS3Object[*]
. Namun, karena alasan kompatibilitas, Amazon S3 Select memungkinkan Anda menghilangkan karakter wildcard jika Anda tidak menyertakan jalur. Dengan demikian, klausa lengkapFROM S3Object
setara denganFROM S3Object[*] as S3Object
. Jika Anda menyertakan jalan, Anda juga harus menggunakan karakter wildcard. Jadi,FROM S3Object
danFROM S3Object[*].
keduanya klausa yang valid, tetapipath
FROM S3Object.
tidak.path
Contoh:
Contoh #1
Contoh ini menampilkan hasil saat menggunakan set data dan kueri berikut:
{ "Rules": [ {"id": "1"}, {"expr": "y > x"}, {"id": "2", "expr": "z = DEBUG"} ]} { "created": "June 27", "modified": "July 6" }
SELECT id FROM S3Object[*].Rules[*].id
{"id":"1"} {} {"id":"2"} {}
Amazon S3 Select menghasilkan setiap hasil karena alasan berikut:
-
{"id":"id-1"}
-S3Object[0].Rules[0].id
menghasilkan korek api. -
{}
—S3Object[0].Rules[1].id
tidak cocok dengan catatan, jadi Amazon S3 Select mengeluarkanMISSING
, yang kemudian diubah menjadi rekaman kosong selama serialisasi keluaran dan dikembalikan. -
{"id":"id-2"}
-S3Object[0].Rules[2].id
menghasilkan korek api. -
{}
—S3Object[1]
tidak cocokRules
, jadi Amazon S3 Select mengeluarkanMISSING
, yang kemudian diubah menjadi rekaman kosong selama serialisasi keluaran dan dikembalikan.
Jika Anda tidak ingin Amazon S3 Select mengembalikan catatan kosong saat tidak menemukan kecocokan, Anda dapat menguji nilai MISSING
. Kueri berikut mengembalikan hasil yang sama seperti kueri sebelumnya, tetapi dengan nilai-nilai kosong dihilangkan:
SELECT id FROM S3Object[*].Rules[*].id WHERE id IS NOT MISSING
{"id":"1"} {"id":"2"}
Contoh #2
Contoh ini menampilkan hasil saat menggunakan set data dan kueri berikut:
{ "created": "936864000", "dir_name": "important_docs", "files": [ { "name": "." }, { "name": ".." }, { "name": ".aws" }, { "name": "downloads" } ], "owner": "Amazon S3" } { "created": "936864000", "dir_name": "other_docs", "files": [ { "name": "." }, { "name": ".." }, { "name": "my stuff" }, { "name": "backup" } ], "owner": "User" }
SELECT d.dir_name, d.files FROM S3Object[*] d
{"dir_name":"important_docs","files":[{"name":"."},{"name":".."},{"name":".aws"},{"name":"downloads"}]} {"dir_name":"other_docs","files":[{"name":"."},{"name":".."},{"name":"my stuff"},{"name":"backup"}]}
SELECT _1.dir_name, _1.owner FROM S3Object[*]
{"dir_name":"important_docs","owner":"Amazon S3"} {"dir_name":"other_docs","owner":"User"}
Klausul WHERE
Klausul WHERE
mengikuti sintaks ini:
WHERE
condition
WHERE
Klausul memfilter baris berdasarkan.
Kondisi adalah ekspresi yang memiliki hasil Boolean. Hanya baris yang kondisinya dievaluasi sebagai condition
TRUE
yang dikembalikan di hasilnya.
Klausul LIMIT
Klausul LIMIT
mengikuti sintaks ini:
LIMIT
number
LIMIT
Klausul membatasi jumlah record yang Anda ingin kueri dikembalikan berdasarkan
.number
Akses atribut
WHERE
Klausul SELECT
dan dapat merujuk ke data catatan dengan menggunakan salah satu metode di bagian-bagian berikut, tergantung pada apakah file yang dicari dalam format CSV atau JSON.
CSV
-
Nomor Kolom — Anda dapat merujuk ke kolom Nth pada baris dengan nama kolom
_
, dengan posisi kolom.N
Hitungan posisi dimulai pada 1. Misalnya, kolom pertama diberi namaN
_1
dan kolom kedua diberi nama_2
.Anda dapat merujuk ke kolom sebagai
_
atauN
. Misalnya,alias
._N
_2
danmyAlias._2
adalah cara yang valid untuk merujuk ke kolom dalam daftarSELECT
dan klausaWHERE
. -
Header Kolom – Untuk objek dalam format CSV yang memiliki baris header, header tersedia untuk daftar
SELECT
dan klausulWHERE
. Secara khusus, seperti dalam SQL tradisional, di dalam ekspresi klausulSELECT
danWHERE
, Anda dapat melihat kolom dengan
ataualias
.column_name
.column_name
JSON
-
Dokumen— Anda dapat mengakses bidang dokumen JSON sebagai
. Anda juga dapat mengakses bidang bersarang, misalnya,alias
.name
.alias
.name1
.name2
.name3
-
Daftar — Anda dapat mengakses elemen dalam daftar JSON dengan menggunakan indeks berbasis nol dengan operator.
[]
Misalnya, Anda dapat mengakses elemen kedua dari daftar sebagai
. Anda dapat menggabungkan mengakses elemen daftar dengan bidang, misalnya,alias
[1]
.alias
.name1
.name2
[1].name3
-
Contoh: Pertimbangkan objek JSON ini sebagai sampel set data:
{"name": "Susan Smith", "org": "engineering", "projects": [ {"project_name":"project1", "completed":false}, {"project_name":"project2", "completed":true} ] }
Contoh #1
Kueri berikut mengembalikan hasil ini:
Select s.name from S3Object s
{"name":"Susan Smith"}
Contoh #2
Kueri berikut mengembalikan hasil ini:
Select s.projects[0].project_name from S3Object s
{"project_name":"project1"}
Sensitivitas kasus nama header dan atribut
Dengan Amazon S3 Select, Anda dapat menggunakan tanda petik ganda untuk menunjukkan header kolom (untuk objek CSV) dan atribut (untuk objek CSV) yang peka terhadap huruf besar atau kecil. Tanpa tanda petik ganda, header dan atribut objek tidak sensitif terhadap huruf besar atau kecil. Kesalahan akan muncul dalam kasus ambiguitas.
Contoh-contoh berikut adalah 1) objek Amazon S3 dalam format CSV dengan header bidang yang ditentukan, dan dengan FileHeaderInfo
diatur ke "Use"
untuk permintaan kueri; atau 2) objek Amazon S3 dalam format JSON dengan atribut yang ditentukan.
Contoh #1: Objek yang dikueri memiliki header atau atribut. NAME
-
Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena tidak ada tanda kutip, kueri tidak peka huruf.
SELECT s.name from S3Object s
-
Ekspresi berikut menghasilkan 400 kesalahan
MissingHeaderName
. Karena ada tanda kutip, query adalah case sensitive.SELECT s."name" from S3Object s
Contoh #2: Objek Amazon S3 yang dikueri memiliki satu header atau atribut dengan NAME
header atau atribut lain dengan. name
-
Ekspresi berikut menghasilkan 400 kesalahan
AmbiguousFieldName
. Karena tidak ada tanda petik, kueri tidak sensitif terhadap huruf besar atau kecil, jadi kesalahan tersebut dilemparkan.SELECT s.name from S3Object s
-
Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena ada tanda kutip, kueri peka huruf besar, jadi tidak ada ambiguitas.
SELECT s."NAME" from S3Object s
Menggunakan kata kunci yang dipesan sebagai istilah yang ditentukan pengguna
Amazon S3 Select memiliki serangkaian kata kunci cadangan yang diperlukan untuk menjalankan ekspresi SQL yang digunakan untuk melakukan kueri konten objek. Kata kunci yang disimpan meliputi nama fungsi, tipe data, operator, dan sebagainya. Dalam beberapa kasus, istilah yang ditentukan pengguna, seperti header kolom (untuk file CSV) atau atribut (untuk objek JSON), dapat berbenturan dengan kata kunci cadangan. Saat ini terjadi, Anda harus menggunakan tanda petik ganda untuk menunjukkan bahwa Anda sengaja menggunakan istilah khusus pengguna yang berbenturan dengan kata kunci yang dicadangkan. Jika tidak, kesalahan 400 parse akan terjadi.
Untuk daftar lengkap kata kunci yang dicadangkan, lihatKata kunci yang dicadangkan.
Contoh berikut adalah 1) objek Amazon S3 dalam format CSV dengan header bidang yang ditentukan, dengan FileHeaderInfo
diatur ke "Use"
untuk permintaan kueri, atau 2) objek Amazon S3 dalam format JSON dengan atribut yang ditentukan.
Contoh: Objek yang dikueri memiliki header atau atribut bernamaCAST
, yang merupakan kata kunci cadangan.
-
Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena tanda kutip digunakan dalam kueri, S3 Select menggunakan header atau atribut yang ditentukan pengguna.
SELECT s."CAST" from S3Object s
-
Ekspresi berikut menghasilkan 400 parse. Karena tidak ada tanda kutip yang digunakan dalam kueri,
CAST
bentrokan dengan kata kunci yang dipesan.SELECT s.CAST from S3Object s
Ekspresi skalar
Di dalam klausul WHERE
dan daftar SELECT
, Anda dapat memiliki ekspresi skalar SQL, yaitu ekspresi yang mengembalikan nilai skalar. Memiliki bentuk sebagai berikut:
-
literal
SQL literal.
-
column_reference
Sebuah referensi ke kolom dalam bentuk
ataucolumn_name
.alias
.column_name
-
unary_op
expression
Dalam hal ini,
adalah operator SQL unary.unary_op
-
expression
binary_op
expression
Dalam hal ini,
adalah operator biner SQL.binary_op
-
func_name
Dalam hal ini,
adalah nama fungsi skalar yang diminta.func_name
-
expression
[ NOT ] BETWEEN
expression
AND
expression
-
expression
LIKE
[expression
ESCAPE
]expression