Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SELECT
Mengambil baris data dari nol atau lebih tabel.
catatan
Topik ini menyediakan informasi ringkasan untuk referensi. Informasi komprehensif tentang penggunaan SELECT
dan SQL bahasa berada di luar cakupan dokumentasi ini. Untuk informasi tentang penggunaan SQL yang khusus untuk Athena, lihat Pertimbangan dan batasan untuk SQL pertanyaan di Amazon Athena dan. Jalankan SQL kueri di Amazon Athena Untuk contoh membuat database, membuat tabel, dan menjalankan SELECT
kueri pada tabel di Athena, lihat. Memulai
Sinopsis
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression
[, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
catatan
Kata-kata yang dicadangkan dalam SQL SELECT pernyataan harus dilampirkan dalam tanda kutip ganda. Untuk informasi selengkapnya, lihat Kata kunci yang dicadangkan untuk melarikan diri dalam SQL SELECT pernyataan.
Parameter
- [WITHdengan_query [,...]]
-
Anda dapat menggunakan
WITH
untuk meratakan kueri Nest, atau untuk menyederhanakan subqueries.Menggunakan
WITH
klausa untuk membuat kueri rekursif didukung mulai dari mesin Athena versi 3. Kedalaman rekursi maksimum adalah 10.Parameter
WITH
mendahuluiSELECT
dalam kueri dan mendefinisikan satu atau lebih subqueries untuk digunakan dalamSELECT
kueri.Setiap subquery mendefinisikan tabel sementara, mirip dengan definisi tampilan, yang dapat Anda referensi dalam
FROM
Klausul WHER Tabel yang digunakan hanya saat kueri berjalan.with_query
Sintaks adalah:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
Di mana:
-
subquery_table_name
adalah nama unik untuk tabel sementara yang mendefinisikan hasilWITH
Klausul subkueri. Setiapsubquery
harus memiliki nama tabel yang dapat direferensikan dalamFROM
Klausul WHER -
column_name [, ...]
adalah daftar opsional nama kolom output. Jumlah nama kolom harus sama dengan atau kurang dari jumlah kolom yang ditentukan olehsubquery
. -
subquery
adalah pernyataan kueri.
-
- [ALL|DISTINCT] select_expression
-
select_expression
menentukan baris yang akan dipilih. Aselect_expression
dapat menggunakan salah satu format berikut:expression [ [ AS ] column_alias ] [, ...]
row_expression.* [ AS ( column_alias [, ...] ) ]
relation.*
*
-
expression [ [ AS ] column_alias ]
Sintaks menentukan kolom output.[AS] column_alias
Sintaks opsional menentukan nama heading kustom yang akan digunakan untuk kolom dalam output. -
Untuk
row_expression.* [ AS ( column_alias [, ...] ) ]
,row_expression
adalah ekspresi arbitrer dari tipeROW
data. Bidang baris menentukan kolom keluaran yang akan dimasukkan dalam hasil. -
Untuk
relation.*
, kolom termasuk dalam hasil.relation
Sintaks ini tidak mengizinkan penggunaan alias kolom. -
Tanda bintang
*
menentukan bahwa semua kolom dimasukkan dalam set hasil. -
Dalam kumpulan hasil, urutan kolom sama dengan urutan spesifikasinya dengan ekspresi pilih. Jika ekspresi pilih mengembalikan beberapa kolom, urutan kolom mengikuti urutan yang digunakan dalam relasi sumber atau ekspresi tipe baris.
-
Ketika alias kolom ditentukan, alias akan mengganti nama kolom atau kolom baris yang sudah ada sebelumnya. Jika ekspresi pilih tidak memiliki nama kolom, nama kolom anonim yang diindeks nol (
_col0
,_col1
,_col2, ...
) ditampilkan dalam output. -
ALL
sebagai default. MenggunakanALL
diperlakukan sama seperti jika dihilangkan; semua baris untuk semua kolom yang dipilih dan duplikat disimpan. -
Gunakan
DISTINCT
untuk kembali nilai-nilai hanya berbeda saat kolom berisi nilai-nilai duplikat.
-
- FROMdari_item [,...]
-
Menunjukkan masukan untuk kueri, dimana
from_item
bisa menjadi tampilan, bergabung membangun, atau subquery seperti yang dijelaskan di bawah ini.Parameter
from_item
dapat berupa:-
table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]
Di mana
table_name
adalah nama dari tabel target untuk memilih baris,alias
adalah nama untuk memberikan output dariSELECT
pernyataan, dancolumn_alias
mendefinisikan kolom untukalias
ditentukan.
-ATAU-
-
join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
Di mana
join_type
adalah salah satu dari:-
[ INNER ] JOIN
-
LEFT [ OUTER ] JOIN
-
RIGHT [ OUTER ] JOIN
-
FULL [ OUTER ] JOIN
-
CROSS JOIN
-
ON join_condition | USING (join_column [, ...])
Di mana menggunakanjoin_condition
memungkinkan Anda untuk menentukan nama kolom untuk bergabung kunci dalam beberapa tabel, dan menggunakanjoin_column
membutuhkanjoin_column
ada di kedua tabel.
-
-
- [WHEREkondisi]
-
Menyaring hasil sesuai dengan
condition
Anda tentukan, tempatcondition
umumnya memiliki sintaks berikut.column_name
operator
value
[[[AND | OR]column_name
operator
value
] ...]Bagian
operator
dapat menjadi salah satu pembanding=
,,>
,<
,>=
,<=
<>
,!=
.Ekspresi subquery berikut juga dapat digunakan dalam
WHERE
Klausul WHER-
[NOT] BETWEEN
- Menentukan rentang antara dua bilangan bulat, seperti dalam contoh berikut. Jika tipe data kolom adalahinteger_A
ANDinteger_B
varchar
, kolom harus dilemparkan ke integer terlebih dahulu.SELECT DISTINCT processid FROM "webdata"."impressions" WHERE cast(processid as int) BETWEEN 1500 and 1800 ORDER BY processid
-
[NOT] LIKE
— Pencarian untuk pola yang ditentukan. Gunakan tanda persen (value
%
) sebagai karakter wildcard, seperti dalam contoh berikut.SELECT * FROM "webdata"."impressions" WHERE referrer LIKE '%.org'
-
[NOT] IN (
— Menentukan daftar nilai yang mungkin untuk kolom, seperti dalam contoh berikut.value
[,value
[, ...])SELECT * FROM "webdata"."impressions" WHERE referrer IN ('example.com','example.net','example.org')
-
- [GROUPOLEH [ALL|DISTINCT] grouping_expression [,...]]
-
Membagi output dari
SELECT
pernyataan ke dalam baris dengan nilai-nilai yang cocok.ALL
danDISTINCT
menentukan apakah duplikat pengelompokan set masing-masing menghasilkan baris output yang berbeda. Jika dihilangkan,ALL
diasumsikan.grouping_expressions
memungkinkan Anda untuk melakukan operasi pengelompokan kompleks. Anda dapat menggunakan operasi pengelompokan kompleks untuk melakukan analisis yang memerlukan agregasi pada beberapa set kolom dalam satu kueri.Parameter
grouping_expressions
elemen dapat fungsi apapun, sepertiSUM
,AVG
, atauCOUNT
, dilakukan pada kolom input.GROUP BY
ekspresi dapat grup output dengan masukan nama kolom yang tidak muncul dalam output dariSELECT
.Semua ekspresi output harus baik fungsi agregat atau kolom hadir dalam
GROUP BY
Klausul WHERAnda dapat menggunakan kueri tunggal untuk melakukan analisis yang membutuhkan menggabungkan beberapa set kolom.
Athena mendukung agregasi kompleks menggunakan
GROUPING SETS
,CUBE
danROLLUP
.GROUP BY GROUPING SETS
menentukan beberapa daftar kolom untuk grup pada.GROUP BY CUBE
menghasilkan semua set pengelompokan mungkin untuk satu set tertentu kolom.GROUP BY ROLLUP
menghasilkan semua subtotal mungkin untuk satu set tertentu kolom. Operasi pengelompokan kompleks tidak mendukung pengelompokan ekspresi terdiri dari kolom input. Hanya nama kolom yang diperbolehkan.Anda sering dapat menggunakan
UNION ALL
untuk mencapai hasil yang sama seperti iniGROUP BY
, tetapi kueri yang menggunakanGROUP BY
memiliki keuntungan membaca data satu kali, sedangkanUNION ALL
membaca data yang mendasari tiga kali dan dapat menghasilkan hasil yang tidak konsisten saat sumber data dapat berubah. - [HAVINGkondisi]
-
Digunakan dengan fungsi agregat dan
GROUP BY
Klausul WHER Mengontrol grup mana yang dipilih, menghilangkan grup yang tidak memuaskancondition
. Penyaringan ini terjadi setelah grup dan agregat dihitung. - [{UNION| INTERSECT |EXCEPT} [ALL|DISTINCT] serikat_query]]
-
UNION
,INTERSECT
, danEXCEPT
menggabungkan hasil lebih dari satuSELECT
pernyataan ke dalam kueri tunggal.ALL
atauDISTINCT
mengontrol keunikan baris termasuk dalam set hasil akhir.UNION
menggabungkan baris yang dihasilkan dari kueri pertama dengan baris yang dihasilkan dari kueri kedua. Untuk menghilangkan duplikat,UNION
membangun sebuah tabel hash, yang mengkonsumsi memori. Untuk performa yang lebih baik, pertimbangkan menggunakanUNION ALL
jika permintaan Anda tidak memerlukan penghapusan duplikat. BanyakUNION
diproses kiri ke kanan kecuali Anda menggunakan tanda kurung untuk secara eksplisit menentukan urutan pemrosesan.INTERSECT
kembali hanya baris yang hadir dalam hasil kedua pertama dan kedua kueri.EXCEPT
mengembalikan baris dari hasil kueri pertama, tidak termasuk baris ditemukan oleh kueri kedua.ALL
menyebabkan semua baris untuk dimasukkan, bahkan jika baris identik.DISTINCT
menyebabkan baris hanya unik untuk dimasukkan dalam set hasil gabungan. - [ORDERDENGAN ekspresi [ASC|DESC] [NULLSFIRST| NULLSLAST] [,...]]
-
Mengurutkan hasil yang ditetapkan oleh satu atau lebih output
expression
.Saat klausa berisi beberapa ekspresi, hasil set diurutkan sesuai dengan yang pertama
expression
. Lalu yang keduaexpression
diterapkan ke baris yang memiliki nilai yang cocok dari ekspresi pertama, dan seterusnya.Setiap
expression
dapat menentukan kolom keluaran dariSELECT
atau nomor urut untuk kolom output dengan posisi, mulai dari satu.ORDER BY
dievaluasi sebagai langkah terakhir setelahGROUP BY
atauHAVING
Klausul WHERASC
danDESC
Menentukan apakah hasil diurutkan dalam urutan naik atau turun. Urutan penyortiran default adalah ascending (ASC
). Default null pemesanan adalahNULLS LAST
, terlepas dari urutan menaik atau menurun. - [OFFSETmenghitung [ROW|ROWS]]
-
Gunakan
OFFSET
klausa untuk membuang sejumlah baris terdepan dari kumpulan hasil. JikaORDER BY
klausa ada,OFFSET
klausa dievaluasi melalui kumpulan hasil yang diurutkan, dan himpunan tetap diurutkan setelah baris yang dilewati dibuang. Jika kueri tidak memilikiORDER BY
klausa, itu adalah arbitrer baris mana yang dibuang. Jika hitungan ditentukanOFFSET
sama dengan atau melebihi ukuran set hasil, hasil akhirnya kosong. - LIMIT[menghitung |ALL]
-
Membatasi jumlah baris dalam hasil diatur ke
count
.LIMIT ALL
adalah sama dengan menghilangkanLIMIT
Klausul WHER Jika kueri tidak memilikiORDER BY
klausul, hasilnya sewenang-wenang. - TABLESAMPLE[BERNOULLI|SYSTEM] (persentase)
-
Operator opsional untuk memilih baris dari tabel berdasarkan metode sampling.
BERNOULLI
memilih setiap baris untuk berada dalam sampel tabel dengan probabilitaspercentage
. Semua blok fisik tabel dipindai, dan baris tertentu dilewati berdasarkan perbandingan antara sampelpercentage
dan nilai acak dihitung pada saat runtime.Dengan
SYSTEM
, tabel dibagi menjadi segmen logis data, dan tabel sampel di granularity ini.Entah semua baris dari segmen tertentu yang dipilih, atau segmen dilewati berdasarkan perbandingan antara sampel
percentage
dan nilai acak dihitung pada saat runtime.SYSTEM
sampling tergantung pada konektor. Metode ini tidak menjamin probabilitas sampling independen. - [UNNEST(array_or_map) []] WITH ORDINALITY
-
Memperluas larik atau peta ke dalam relasi. Larik diperluas menjadi satu kolom. Peta diperluas menjadi dua kolom (kunci,nilai).
Anda dapat menggunakan
UNNEST
dengan beberapa argumen, yang diperluas menjadi beberapa kolom dengan banyak baris sebagai argumen kardinalitas tertinggi.kolom lainnya empuk dengan nulls.
Parameter
WITH ORDINALITY
klausa menambahkan kolom ordinalitas sampai akhir.UNNEST
biasanya digunakan denganJOIN
dan dapat referensi kolom dari relasi di sisi kiriJOIN
.
Mendapatkan lokasi file untuk data sumber di Amazon S3
Untuk melihat lokasi file Amazon S3 untuk data dalam baris tabel, Anda dapat menggunakan"$path"
dalamSELECT
query, seperti dalam contoh berikut:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
Perintah ini akan menampilkan hasil berikut.
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
Untuk kembali diurutkan, daftar unik dari jalur nama file S3 untuk data dalam tabel, Anda dapat menggunakanSELECT DISTINCT
danORDER BY
, seperti dalam contoh berikut.
SELECT DISTINCT "$path" AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Untuk mengembalikan hanya nama file tanpa path, Anda dapat melewati"$path"
sebagai parameter untukregexp_extract
, seperti dalam contoh berikut.
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Untuk mengembalikan data dari file tertentu, tentukan file diWHERE
, seperti dalam contoh berikut.
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
Untuk informasi selengkapnya dan untuk contoh, lihat artikel Pusat PengetahuanBagaimana saya bisa melihat file sumber Amazon S3 untuk baris dalam tabel Athena?
catatan
Di Athena, kolom metadata tersembunyi Hive atau Iceberg$bucket
, $file_modified_time
$file_size
, dan tidak didukung untuk tampilan. $partition
Melarikan diri dari kutipan tunggal
Untuk melarikan diri kutipan tunggal, mendahului dengan kutipan tunggal lain, seperti dalam contoh berikut. Jangan mengelirukan ini dengan sebut harga berganda.
Select 'O''Reilly'
Hasil
O'Reilly
Sumber daya tambahan
Untuk informasi selengkapnya tentang penggunaanSELECT
pernyataan di Athena, lihat sumber daya berikut.
Untuk informasi tentang ini | Lihat ini |
---|---|
Menjalankan kueri di Athena | Jalankan SQL kueri di Amazon Athena |
Untuk membuat tabel menggunakan SELECT API |
Membuat tabel dari hasil query (CTAS) |
Memasukkan data dariSELECT query ke dalam tabel lain |
INSERT INTO |
Menggunakan fungsi bawaan diSELECT pernyataan |
Fungsi di Amazon Athena |
Menggunakan fungsi yang ditetapkan pengguna diSELECT pernyataan |
Kueri dengan fungsi yang ditentukan pengguna |
Memkueri metadata Katalog Data | Kueri AWS Glue Data Catalog |