SELECT - Amazon Athena

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. Untuk informasi lengkap tentang penggunaanSELECTdan bahasa SQL berada di luar cakupan dokumentasi ini. Untuk informasi tentang menggunakan SQL yang khusus untuk Athena, lihatPertimbangan dan batasan untuk kueri SQL di Amazon AthenadanMenjalankan kueri SQL menggunakan 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 Reserved dalam pernyataan SQL SELECT harus tertutup dalam tanda kutip ganda. Untuk informasi selengkapnya, lihat Daftar kata kunci yang dicadangkan dalam pernyataan SQL SELECT.

Parameter

[DENGAN with_query [,...]]

Anda dapat menggunakanWITHuntuk 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.

ParameterWITHmendahuluiSELECTdalam kueri dan mendefinisikan satu atau lebih subqueries untuk digunakan dalamSELECTkueri.

Setiap subquery mendefinisikan tabel sementara, mirip dengan definisi tampilan, yang dapat Anda referensi dalamFROMKlausul WHER Tabel yang digunakan hanya saat kueri berjalan.

with_querySintaks adalah:

subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)

Di mana:

  • subquery_table_nameadalah nama unik untuk tabel sementara yang mendefinisikan hasilWITHKlausul subkueri. Setiapsubqueryharus memiliki nama tabel yang dapat direferensikan dalamFROMKlausul WHER

  • column_name [, ...]adalah daftar opsional nama kolom output. Jumlah nama kolom harus sama dengan atau kurang dari jumlah kolom yang ditentukan olehsubquery.

  • subqueryadalah pernyataan kueri.

[SEMUA | BERBEDA] select_expression

select_expressionmenentukan baris yang akan dipilih. A select_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_aliasSintaks opsional menentukan nama heading kustom yang akan digunakan untuk kolom dalam output.

  • Untukrow_expression.* [ AS ( column_alias [, ...] ) ], row_expression adalah ekspresi arbitrer dari tipe ROW data. Bidang baris menentukan kolom keluaran yang akan dimasukkan dalam hasil.

  • Untukrelation.*, 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. MenggunakanALLdiperlakukan sama seperti jika dihilangkan; semua baris untuk semua kolom yang dipilih dan duplikat disimpan.

  • GunakanDISTINCTuntuk kembali nilai-nilai hanya berbeda saat kolom berisi nilai-nilai duplikat.

DARI from_item [,...]

Menunjukkan masukan untuk kueri, dimanafrom_itembisa menjadi tampilan, bergabung membangun, atau subquery seperti yang dijelaskan di bawah ini.

Parameterfrom_itemdapat berupa:

  • table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]

    Di manatable_nameadalah nama dari tabel target untuk memilih baris,aliasadalah nama untuk memberikan output dariSELECTpernyataan, dancolumn_aliasmendefinisikan kolom untukaliasditentukan.

-ATAU-

  • join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]

    Di manajoin_typeadalah 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_conditionmemungkinkan Anda untuk menentukan nama kolom untuk bergabung kunci dalam beberapa tabel, dan menggunakanjoin_columnmembutuhkanjoin_columnada di kedua tabel.

[syarat WHERE]

Menyaring hasil sesuai denganconditionAnda tentukan, tempatconditionumumnya memiliki sintaks berikut.

column_name operator value [[[AND | OR] column_name operator value] ...]

ParameterOperatordapat menjadi salah satu pembanding=,>,<,>=,<=,<>,!=.

Ekspresi subquery berikut juga dapat digunakan dalamWHEREKlausul WHER

  • [NOT] BETWEEN integer_A AND integer_B- Menentukan rentang antara dua bilangan bulat, seperti dalam contoh berikut. Jika tipe data kolom adalahvarchar, 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 value— Pencarian untuk pola yang ditentukan. Gunakan tanda persen (%) sebagai karakter wildcard, seperti dalam contoh berikut.

    SELECT * FROM "webdata"."impressions" WHERE referrer LIKE '%.org'
  • [NOT] IN (value[, value[, ...])— Menentukan daftar nilai yang mungkin untuk kolom, seperti dalam contoh berikut.

    SELECT * FROM "webdata"."impressions" WHERE referrer IN ('example.com','example.net','example.org')
[GROUP BY [SEMUA | berbeda] grouping_expressions [,...]]

Membagi output dariSELECTpernyataan ke dalam baris dengan nilai-nilai yang cocok.

ALLdanDISTINCTmenentukan apakah duplikat pengelompokan set masing-masing menghasilkan baris output yang berbeda. Jika dihilangkan,ALLdiasumsikan.

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

Parametergrouping_expressionselemen dapat fungsi apapun, sepertiSUM,AVG, atauCOUNT, dilakukan pada kolom input.

GROUP BYekspresi dapat grup output dengan masukan nama kolom yang tidak muncul dalam output dariSELECT.

Semua ekspresi output harus baik fungsi agregat atau kolom hadir dalamGROUP BYKlausul WHER

Anda dapat menggunakan kueri tunggal untuk melakukan analisis yang membutuhkan menggabungkan beberapa set kolom.

Athena mendukung agregasi kompleks menggunakanGROUPING SETS,CUBEdanROLLUP.GROUP BY GROUPING SETSmenentukan beberapa daftar kolom untuk grup pada.GROUP BY CUBEmenghasilkan semua set pengelompokan mungkin untuk satu set tertentu kolom.GROUP BY ROLLUPmenghasilkan 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 menggunakanUNION ALLuntuk mencapai hasil yang sama seperti iniGROUP BY, tetapi kueri yang menggunakanGROUP BYmemiliki keuntungan membaca data satu kali, sedangkanUNION ALLmembaca data yang mendasari tiga kali dan dapat menghasilkan hasil yang tidak konsisten saat sumber data dapat berubah.

[Memiliki syarat]

Digunakan dengan fungsi agregat danGROUP BYKlausul WHER Mengontrol grup mana yang dipilih, menghilangkan grup yang tidak memuaskancondition. Penyaringan ini terjadi setelah grup dan agregat dihitung.

[{UNION | INTERSECT | KECUL} [SEMUA | berbeda] union_query]]

UNION,INTERSECT, danEXCEPTmenggabungkan hasil lebih dari satuSELECTpernyataan ke dalam kueri tunggal.ALLatauDISTINCTmengontrol keunikan baris termasuk dalam set hasil akhir.

UNIONmenggabungkan baris yang dihasilkan dari kueri pertama dengan baris yang dihasilkan dari kueri kedua. Untuk menghilangkan duplikat,UNIONmembangun sebuah tabel hash, yang mengkonsumsi memori. Untuk performa yang lebih baik, pertimbangkan menggunakanUNION ALLjika permintaan Anda tidak memerlukan penghapusan duplikat. BanyakUNIONdiproses kiri ke kanan kecuali Anda menggunakan tanda kurung untuk secara eksplisit menentukan urutan pemrosesan.

INTERSECTkembali hanya baris yang hadir dalam hasil kedua pertama dan kedua kueri.

EXCEPTmengembalikan baris dari hasil kueri pertama, tidak termasuk baris ditemukan oleh kueri kedua.

ALLmenyebabkan semua baris untuk dimasukkan, bahkan jika baris identik.

DISTINCTmenyebabkan baris hanya unik untuk dimasukkan dalam set hasil gabungan.

[ORDER BY ekspresi [ASC | DESC] [NULLS PERTAMA | NULLS TERAKHIR] [,...]]

Mengurutkan hasil yang ditetapkan oleh satu atau lebih outputexpression.

Saat klausa berisi beberapa ekspresi, hasil set diurutkan sesuai dengan yang pertamaexpression. Lalu yang keduaexpressionditerapkan ke baris yang memiliki nilai yang cocok dari ekspresi pertama, dan seterusnya.

Setiapexpressiondapat menentukan kolom keluaran dariSELECTatau nomor urut untuk kolom output dengan posisi, mulai dari satu.

ORDER BYdievaluasi sebagai langkah terakhir setelahGROUP BYatauHAVINGKlausul WHERASCdanDESCMenentukan apakah hasil diurutkan dalam urutan naik atau turun.

Default null pemesanan adalahNULLS LAST, terlepas dari urutan menaik atau menurun.

[Hitungan OFFSET [BARIS | BARIS]]

Gunakan OFFSET klausa untuk membuang sejumlah baris terdepan dari kumpulan hasil. Jika ORDER BY klausa ada, OFFSET klausa dievaluasi melalui kumpulan hasil yang diurutkan, dan himpunan tetap diurutkan setelah baris yang dilewati dibuang. Jika kueri tidak memiliki ORDER BY klausa, itu adalah arbitrer baris mana yang dibuang. Jika hitungan ditentukan OFFSET sama dengan atau melebihi ukuran set hasil, hasil akhirnya kosong.

LIMIT [menghitung | SEMUA]

Membatasi jumlah baris dalam hasil diatur kecount.LIMIT ALLadalah sama dengan menghilangkanLIMITKlausul WHER Jika kueri tidak memilikiORDER BYklausul, hasilnya sewenang-wenang.

Tablesample [BERNOULLI | SISTEM] (persentase

Operator opsional untuk memilih baris dari tabel berdasarkan metode sampling.

BERNOULLImemilih setiap baris untuk berada dalam sampel tabel dengan probabilitaspercentage. Semua blok fisik tabel dipindai, dan baris tertentu dilewati berdasarkan perbandingan antara sampelpercentagedan nilai acak dihitung pada saat runtime.

DenganSYSTEM, 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 sampelpercentagedan nilai acak dihitung pada saat runtime.SYSTEMsampling tergantung pada konektor. Metode ini tidak menjamin probabilitas sampling independen.

[UNNEST (array_or_map) [DENGAN ORDIALITAS]]

Memperluas larik atau peta ke dalam relasi. Larik diperluas menjadi satu kolom. Peta diperluas menjadi dua kolom (kunci,nilai).

Anda dapat menggunakanUNNESTdengan beberapa argumen, yang diperluas menjadi beberapa kolom dengan banyak baris sebagai argumen kardinalitas tertinggi.

kolom lainnya empuk dengan nulls.

ParameterWITH ORDINALITYklausa menambahkan kolom ordinalitas sampai akhir.

UNNESTbiasanya digunakan denganJOINdan 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"dalamSELECTquery, seperti dalam contoh berikut:

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

Perintah ini akan menampilkan hasil berikut.

s3://DOC-EXAMPLE-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 DISTINCTdanORDER 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://DOC-EXAMPLE-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 penggunaanSELECTpernyataan di Athena, lihat sumber daya berikut.

Untuk informasi tentang ini Lihat ini
Menjalankan kueri di Athena Menjalankan kueri SQL menggunakan Amazon Athena
Untuk membuat tabel menggunakan SELECT API Membuat tabel dari hasil query (CTAS)
Memasukkan data dariSELECTquery ke dalam tabel lain INSERT INTO
Menggunakan fungsi bawaan diSELECTpernyataan Fungsi di Amazon Athena
Menggunakan fungsi yang ditetapkan pengguna diSELECTpernyataan Query dengan fungsi yang ditentukan pengguna
Memkueri metadata Katalog Data Mengkueri AWS Glue Data Catalog