

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kueri data di tempat dengan Amazon S3 Select
<a name="selecting-content-from-objects"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Dengan Amazon S3 Select, Anda dapat menggunakan pernyataan bahasa kueri terstruktur (SQL) untuk memfilter konten objek Amazon S3 dan mengambil hanya subset data yang Anda butuhkan. Dengan menggunakan Amazon S3 Select untuk memfilter data ini, Anda dapat mengurangi jumlah data yang ditransfer oleh Amazon S3, sehingga mengurangi biaya dan latensi untuk pengambilan data ini.

Amazon S3 Select hanya memungkinkan Anda untuk menanyakan satu objek pada satu waktu. Ia bekerja pada objek yang disimpan dalam CSV, JSON, atau Apache Parquet format. Ia juga bekerja dengan objek yang dikompresi dengan GZIP atau BZIP2 (hanya untuk objek CSV dan JSON), dan objek terenkripsi sisi server. Anda dapat menentukan format hasil sebagai CSV atau JSON, dan Anda dapat menentukan pembatasan untuk catatan di dalam hasilnya.

Anda dapat mengajukan pemindahan ekspresi SQL ke Amazon S3. Amazon S3 Select mendukung squbset SQL. Untuk informasi selengkapnya tentang elemen SQL yang didukung oleh Amazon S3 Select, lihat [Referensi SQL untuk Amazon S3 Select](s3-select-sql-reference.md).

Anda dapat melakukan kueri SQL dengan menggunakan konsol Amazon S3,AWS CLI(), AWS Command Line Interface operasi REST API, `SelectObjectContent` atau. AWS SDKs 

**catatan**  
Konsol Amazon S3 membatasi jumlah data yang ditampilkan hingga 40 MB. Untuk mengambil lebih banyak data, gunakan AWS CLI atau API.

## Persyaratan dan batasan
<a name="selecting-content-from-objects-requirements-and-limits"></a>

Berikut adalah persyaratan untuk menggunakan Amazon S3 Select:
+ Anda harus memiliki izin `s3:GetObject` untuk objek yang Anda minta.
+ Jika objek yang Anda tanyakan dienkripsi dengan enkripsi di sisi server dengan kunci yang disediakan pelanggan (SSE-C), Anda harus menggunakan `https`, dan Anda harus menyediakan kunci enkripsi saat pengajuan.

Batasan berikut berlaku saat menggunakan Amazon S3 Select:
+ S3 Select dapat query hanya satu objek per permintaan.
+ S3 Select mendukung kueri file hingga ukuran 5 TB.
+ Panjang maksimum ekspresi SQL adalah 256 KB.
+ Panjang maksimum catatan dalam input atau hasil adalah 1 MB.
+ Amazon S3 Select hanya dapat mengeluarkan data yang disimpan dengan format output JSON.
+ Anda tidak dapat menanyakan objek yang disimpan di kelas penyimpanan S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive, atau Reduced Redundancy Storage (RRS). Anda juga tidak dapat menanyakan objek yang disimpan di tingkat Akses Arsip Tingkat Cerdas S3 atau tingkat Akses Arsip Dalam Tingkat Cerdas S3. Untuk informasi selengkapnya tentang kelas penyimpanan, lihat [Memahami dan mengelola kelas penyimpanan Amazon S3](storage-class-intro.md).

Batasan tambahan berlaku saat menggunakan Amazon S3 Select dengan Parquet objek:
+ Amazon S3 Select hanya mendukung kompresi berbentuk kolom yang menggunakan GZIP atau Snappy. Amazon S3 Select tidak mendukung kompresi seluruh objek untuk objek. Parquet
+ Amazon S3 Select tidak mendukung output Parquet. Anda harus menentukan format output sebagai CSV atau JSON.
+ Ukuran maksimum untuk grup baris yang tidak dikompres adalah 512 MB.
+ Anda harus menggunakan jenis data yang ditentukan di dalam skema objek.
+ Pemilihan pada bidang berulang hanya akan menampilkan nilai terakhir.

## Membuat permintaan
<a name="selecting-content-from-objects-contructing-request"></a>

Saat Anda membuat sebuah permintaan, Anda harus menyediakan perincian objek yang sedang diminta dengan menggunakan objek `InputSerialization`. Anda dapat menyediakan perincian tentang cara menampilkan hasil dengan menggunakan objek `OutputSerialization`. Anda juga dapat menyertakan ekspresi SQL yang digunakan oleh Amazon S3 untuk memfilter permintaan.

Untuk informasi lebih lanjut tentang pembuatan permintaan Amazon S3 Select, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html) di *Referensi API Amazon Simple Storage Service*. Anda juga dapat melihat salah satu contoh kode SDK di bagian berikut.

### Permintaan yang menggunakan rentang pemindaian
<a name="selecting-content-from-objects-using-byte-range"></a>

Dengan Amazon S3 Select, Anda dapat memindai subset sebuah objek dengan menentukan rentang byte ke kueri. Kemampuan ini memungkinkan Anda melakukan pemindaian pada keseluruhan objek secara paralel dengan membagi pekerjaan menjadi beberapa permintaan Amazon S3 Select yang terpisah untuk serangkaian rentang pemindaian non-tumpang tindih.

 Rentang pemindaian tidak perlu diselaraskan dengan batasan catatan. Permintaan rentang pemindaian Amazon S3 Select dijalankan di seluruh rentang byte yang Anda tentukan. Catatan yang dimulai dengan rentang pemindaian yang ditentukan tetapi melampaui rentang pemindaian tersebut akan diproses oleh kueri. Contoh berikut menampilkan objek Amazon S3 yang berisi serangkaian catatan dengan format CSV yang dibatasi baris:

```
A,B
C,D
D,E
E,F
G,H
I,J
```

Misalkan Anda menggunakan parameter `ScanRange` Amazon S3 Select dan *Start* pada (Byte) 1 dan *End* pada (Byte) 4. Jadi, rentang pemindaian akan diawali di "`,`" dan pemindaian dilakukan hingga akhir catatan yang dimulai di `C`. Permintaan rentang pemindaian Anda akan menampilkan hasil `C, D` karena hasil tersebut adalah akhir catatannya. 

 Amazon S3 Pilih dukungan permintaan rentang pemindaianParquet, CSV (tanpa pembatas yang dikutip), atau objek JSON (hanya dalam mode). `LINES` Objek CSV dan JSON harus dalam kondisi tidak dikompres. Untuk objek CSV dan JSON berbasis baris, ketika rentang pemindaian ditentukan sebagai bagian dari permintaan Amazon S3 Select, semua catatan yang dimulai di dalam rentang pemindaian akan diproses. Untuk objek Parquet, semua grup baris yang dimulai di dalam rentang pemindaian yang diminta akan diproses. 

Permintaan rentang pemindaian Amazon S3 Select tersedia untuk digunakan dengan AWS CLI, Amazon S3 API, dan. AWS SDKs Anda dapat menggunakan parameter `ScanRange` di dalam permintaan Amazon S3 Select untuk fitur ini. Untuk informasi lebih lanjut, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html) di dalam *Referensi API Amazon Simple Storage Service*.

## Kesalahan
<a name="selecting-content-from-objects-errors"></a>

Amazon S3 Select akan menampilkan kode kesalahan dan pesan kesalahan terkait saat ditemukannya masalah ketika suatu kueri sedang dijalankan. Untuk daftar kode dan deskripsi kesalahan, lihat bagian [Daftar Kode Kesalahan SELECT Object Content](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList) dari halaman *Respons Kesalahan* di dalam *Referensi API Amazon Simple Storage Service*.

Untuk informasi lebih lanjut tentang Amazon S3 Select, lihat topik-topik berikut.

**Topics**
+ [

## Persyaratan dan batasan
](#selecting-content-from-objects-requirements-and-limits)
+ [

## Membuat permintaan
](#selecting-content-from-objects-contructing-request)
+ [

## Kesalahan
](#selecting-content-from-objects-errors)
+ [

# Contoh menggunakan Amazon S3 Select pada objek
](using-select.md)
+ [

# Referensi SQL untuk Amazon S3 Select
](s3-select-sql-reference.md)

# Contoh menggunakan Amazon S3 Select pada objek
<a name="using-select"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Anda dapat menggunakan S3 Select untuk memilih konten dari satu objek dengan menggunakan konsol Amazon S3, REST API, dan. AWS SDKs 

Untuk informasi lebih lanjut tentang fungsi SQL yang didukung untuk S3 Select, lihat [Fungsi SQL](s3-select-sql-reference-sql-functions.md).

## Menggunakan konsol S3
<a name="s3-select-objects-console"></a>

**Untuk memilih konten dari objek di konsol Amazon S3**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di panel navigasi kiri, pilih **Bucket**.

1. Pilih bucket yang berisi objek yang ingin Anda pilih kontennya, lalu pilih nama objeknya.

1. Pilih **Tindakan objek**, dan pilih **Kueri dengan S3 Select**.

1. Konfigurasikan **Pengaturan input**, berdasarkan format data input Anda.

1. Konfigurasikan **Pengaturan output**, berdasarkan format output yang ingin Anda terima.

1. Untuk mengekstrak catatan dari objek yang dipilih, di bawah **kueri SQL**, masukkan perintah SELECT SQL. Untuk informasi lebih lanjut tentang cara menulis perintah SQL, lihat [Referensi SQL untuk Amazon S3 Select](s3-select-sql-reference.md).

1. Setelah memasukkan kueri SQL, pilih **Jalankan kueri SQL**. Kemudian, di bawah **Hasil kueri**, Anda akan melihat hasil kueri SQL Anda.

## Menggunakan API REST
<a name="SelectObjectContentUsingRestApi"></a>

Anda dapat menggunakan AWS SDKs untuk memilih konten dari objek. Namun, jika aplikasi Anda memerlukannya, Anda dapat mengirimkan permintaan REST secara langsung. Untuk informasi lebih lanjut tentang permintaan dan format respons, kunjungi [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html).

## Menggunakan AWS SDKs
<a name="SelectObjectContentUsingSDK"></a>

Anda dapat menggunakan Amazon S3 Select untuk memilih beberapa konten objek dengan menggunakan metode ini`selectObjectContent`. Jika metode ini berhasil, Amazon S3 Select akan menampilkan ekspresi SQL.

------
#### [ Java ]

Untuk menggunakan Amazon S3 Select dengan AWS SDK for Java, Anda dapat mengembalikan nilai kolom pertama untuk setiap rekaman yang disimpan dalam objek yang berisi data yang disimpan dalam format CSV. Anda juga dapat meminta `Progress` dan `Stats` pesan yang akan dikembalikan. Anda harus menyediakan nama bucket yang valid dan objek yang mengandung data dengan format CSV.

Untuk menggunakan Amazon S3 Select dengan AWS SDK for Java, Anda dapat mengembalikan nilai kolom pertama untuk setiap rekaman yang disimpan dalam objek yang berisi data yang disimpan dalam format CSV. Anda juga dapat meminta `Progress` dan `Stats` pesan yang akan dikembalikan. Anda harus menyediakan nama bucket yang valid dan objek yang mengandung data dengan format CSV.

*Untuk contoh cara menggunakan Amazon S3 Select dengan AWS SDK for Java, lihat [Memilih konten dari objek](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_SelectObjectContent_section.html) di Referensi API Amazon S3.*

------
#### [ JavaScript ]

Untuk JavaScript contoh yang menggunakan operasi AWS SDK untuk JavaScript with S3 `SelectObjectContent` API untuk memilih catatan dari file JSON dan CSV yang disimpan di Amazon S3, lihat posting blog Memperkenalkan dukungan [untuk Amazon S3](https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/) Select di file. AWS SDK untuk JavaScript

------
#### [ Python ]

Untuk contoh Python tentang penggunaan kueri SQL untuk melakukan pencarian lewat data yang dimuat ke Amazon S3 sebagai file nilai terpisah-koma (CSV) dengan menggunakan S3 Select, lihat postingan blog [ Meminta data tanpa server atau basis data dengan menggunakan Amazon S3 Select](https://aws.amazon.com/blogs/storage/querying-data-without-servers-or-databases-using-amazon-s3-select/). 

------

# Referensi SQL untuk Amazon S3 Select
<a name="s3-select-sql-reference"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Referensi ini berisi deskripsi elemen bahasa kueri terstruktur (SQL) yang didukung oleh Amazon S3 Select.

**Topics**
+ [

# Perintah SELECT
](s3-select-sql-reference-select.md)
+ [

# Jenis data
](s3-select-sql-reference-data-types.md)
+ [

# Operator
](s3-select-sql-reference-operators.md)
+ [

# Kata kunci terpesan
](s3-select-sql-reference-keyword-list.md)
+ [

# Fungsi SQL
](s3-select-sql-reference-sql-functions.md)

# Perintah SELECT
<a name="s3-select-sql-reference-select"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select hanya mendukung perintah SQL `SELECT`. 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 penggabungan.

## Daftar SELECT
<a name="s3-select-sql-reference-select-list"></a>

Daftar `SELECT` mencantumkan kolom, fungsi, dan ekspresi yang ingin Anda tampilkan dari kueri. Daftar ini mewakili output kueri. 

```
SELECT *
SELECT projection1 AS column_alias_1, projection2 AS column_alias_2
```

Bentuk pertama `SELECT` dengan `*` (tanda bintang) mengembalikan setiap baris yang melewati klausul `WHERE`, apa adanya. Bentuk kedua `SELECT` membuat baris dengan ekspresi skalar output **`projection1`** dan **`projection2`** yang ditentukan pengguna untuk setiap kolom.

## Klausul FROM
<a name="s3-select-sql-reference-from"></a>

Amazon S3 Select mendukung bentuk klausul `FROM` berikut:

```
FROM table_name
FROM table_name alias
FROM table_name AS alias
```

Dalam setiap bentuk klausul `FROM`, `table_name` adalah `S3Object` yang sedang dikuerikan. Pengguna yang berasal dari basis data relasional tradisional dapat menganggap hal ini sebagai skema basis data yang berisi beberapa tampilan di atas tabel.

Mengikuti SQL standar, klausul `FROM` 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 AS alias
```

Menggunakan bentuk klausul `FROM`, Anda dapat memilih dari array atau objek di dalam objek JSON. Anda dapat menentukan `path` menggunakan salah satu bentuk berikut:
+ Berdasarkan nama (dalam objek): `.name` atau `['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 catatan. Apabila tidak ada catatan yang cocok, Amazon S3 Select mengeluarkan nilai `MISSING`. Selama serialisasi output (setelah kueri selesai berjalan), Amazon S3 Select menggantikan nilai `MISSING` dengan catatan kosong.
Fungsi agregat (`AVG`, `COUNT`, `MAX`, `MIN`, dan `SUM`) melewati nilai `MISSING`.
Apabila Anda tidak menyediakan alias saat menggunakan karakter wildcard, Anda dapat merujuk baris menggunakan elemen terakhir di jalur tersebut. Misalnya, Anda dapat memilih semua harga dari daftar pembukuan menggunakan kueri `SELECT price FROM S3Object[*].books[*].price`. Apabila jalur diakhiri karakter wildcard alih-alih nama, maka Anda dapat menggunakan nilai `_1` tersebut untuk merujuk ke baris. Misalnya, alih-alih `SELECT price FROM S3Object[*].books[*].price`, Anda dapat menggunakan kueri `SELECT _1.price FROM S3Object[*].books[*]`.
Amazon S3 Select selalu memperlakukan dokumen JSON sebagai array nilai tingkat root. Dengan demikian, sekalipun objek JSON yang Anda kueri hanya memiliki satu elemen root, klausul `FROM` harus dimulai dengan `S3Object[*]`. Namun, karena alasan kompatibilitas, Amazon S3 Select memungkinkan Anda menghilangkan karakter wildcard jika Anda tidak menyertakan jalur. Dengan demikian, klausul lengkap `FROM S3Object` setara dengan `FROM S3Object[*] as S3Object`. Apabila Anda menyertakan jalur, Anda juga harus menggunakan karakter wildcard. Jadi, `FROM S3Object` dan `FROM S3Object[*].path` keduanya adalah klausul yang valid, tetapi tidak dengan `FROM S3Object.path`.

**Example**  
**Contoh:**  
*Contoh 1*  
Contoh ini menampilkan hasil 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 kecocokan.
+ `{}`–`S3Object[0].Rules[1].id` tidak cocok dengan catatan, jadi Amazon S3 Select mengeluarkan `MISSING`, yang kemudian diubah menjadi catatan kosong selama serialisasi output dan dikembalikan.
+ `{"id":"id-2"}`–`S3Object[0].Rules[2].id` menghasilkan kecocokan.
+ `{}`–`S3Object[1]` tidak cocok dengan `Rules`, jadi Amazon S3 Select mengeluarkan `MISSING`, yang kemudian diubah menjadi catatan kosong selama serialisasi output dan dikembalikan.
Apabila 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 nilai yang kosong dihilangkan:  

```
SELECT id FROM S3Object[*].Rules[*].id WHERE id IS NOT MISSING
```

```
{"id":"1"}
{"id":"2"}
```
*Contoh 2*  
Contoh ini menampilkan hasil 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
<a name="s3-select-sql-reference-where"></a>

Klausul `WHERE` mengikuti sintaks ini: 

```
WHERE condition
```

Klausul `WHERE` memfilter baris berdasarkan `condition`. Ketentuan adalah ekspresi yang memiliki hasil Boolean. Hanya baris yang syaratnya dievaluasi sebagai `TRUE` yang dikembalikan di hasilnya.

## Klausul LIMIT
<a name="s3-select-sql-reference-limit"></a>

Klausul `LIMIT` mengikuti sintaks ini: 

```
LIMIT number
```

Klausul `LIMIT` membatasi jumlah catatan yang Anda ingin kuerinya dikembalikan berdasarkan `number`.

## Akses atribut
<a name="s3-select-sql-reference-attribute-access"></a>

Klausul `SELECT` dan `WHERE` dapat merujuk ke data catatan menggunakan salah satu metode dalam bagian berikut, tergantung pada jika file yang dicari dalam format CSV atau JSON.

### CSV
<a name="s3-select-sql-reference-attribute-access-csv"></a>
+ **Nomor Kolom**–Anda dapat merujuk ke kolom *Nth* pada baris dengan nama kolom `_N`, dengan *`N`* adalah posisi kolom. Hitungan posisi dimulai pada 1. Misalnya, kolom pertama diberi nama `_1` dan kolom kedua diberi nama `_2`.

  Anda dapat merujuk ke kolom sebagai `_N` atau `alias._N`. Misalnya, `_2` dan `myAlias._2` adalah cara yang valid untuk merujuk ke kolom dalam daftar `SELECT` dan klausul `WHERE`.
+ **Header Kolom**–Untuk objek dalam format CSV yang memiliki baris header, header tersedia untuk daftar `SELECT` dan klausul `WHERE`. Secara khusus, seperti dalam SQL tradisional, dalam ekspresi klausul `SELECT` dan `WHERE`, Anda dapat melihat kolom dengan `alias.column_name` atau `column_name`.

### JSON
<a name="s3-select-sql-reference-attribute-access-json"></a>
+ **Dokumen**–Anda dapat mengakses bidang dokumen JSON sebagai `alias.name`. Anda juga dapat mengakses bidang bersarang, misalnya, `alias.name1.name2.name3`.
+ **Daftar**–Anda dapat mengakses elemen dalam daftar JSON menggunakan indeks berbasis nol dengan operator `[]`. Misalnya, Anda dapat mengakses elemen kedua dari daftar sebagai `alias[1]`. Anda dapat menggabungkan elemen daftar yang diakses dengan bidang, misalnya, `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 huruf besar/kecil pada nama header dan atribut
<a name="s3-select-sql-reference-case-sensitivity"></a>

Dengan Amazon S3 Select, Anda dapat menggunakan tanda petik dua untuk menunjukkan header kolom (untuk objek CSV) dan atribut (untuk objek JSON) yang peka terhadap huruf besar/kecil. Tanpa tanda petik dua, header dan atribut objek tidak sensitif terhadap huruf besar/kecil. Kesalahan akan muncul dalam kasus ambiguitas.

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 dikuerikan memiliki header atau atribut `NAME`.
+ Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena tidak ada tanda petik, kueri tidak peka huruf besar/kecil.

  ```
  SELECT s.name from S3Object s
  ```
+ Ekspresi berikut menghasilkan kesalahan 400 `MissingHeaderName`. Karena terdapat tanda petik, kueri peka huruf besar/kecil. 

  ```
  SELECT s."name" from S3Object s
  ```

*Contoh 2:* Objek Amazon S3 yang dikuerikan memiliki satu header atau atribut dengan `NAME` header atau atribut lainnya dengan `name`.
+ Ekspresi berikut menghasilkan kesalahan 400 `AmbiguousFieldName`. Karena tidak ada tanda petik, kueri tidak sensitif terhadap huruf besar/kecil, tetapi terdapat dua kecocokan, jadi kesalahan dilemparkan.

  ```
  SELECT s.name from S3Object s
  ```
+ Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena terdapat tanda petik, kueri peka huruf besar/kecil, sehingga tidak ada ambiguitas.

  ```
  SELECT s."NAME" from S3Object s
  ```

## Menggunakan kata kunci terpesan sebagai istilah yang ditetapkan pengguna
<a name="s3-select-sql-reference-using-keywords"></a>

Amazon S3 Select memiliki serangkaian kata kunci terpesan yang diperlukan untuk menjalankan ekspresi SQL yang digunakan untuk mengkueri konten objek. Kata kunci terpesan meliputi nama fungsi, jenis data, operator, dan sebagainya. Dalam beberapa kasus, istilah yang ditentukan pengguna, seperti header kolom (untuk file CSV) atau atribut (untuk objek JSON), dapat bertentangan dengan kata kunci terpesan. Pada saat hal ini terjadi, Anda harus menggunakan tanda petik dua untuk menunjukkan bahwa Anda sengaja menggunakan istilah khusus pengguna yang bertentangan dengan kata kunci terpesan. Apabila tidak, kesalahan penguraian 400 akan terjadi.

Untuk mengetahui daftar lengkap kata kunci terpesan, lihat [Kata kunci terpesan](s3-select-sql-reference-keyword-list.md).

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 dikuerikan memiliki header atau atribut bernama `CAST`, yang merupakan kata kunci terpesan.
+ Ekspresi berikut berhasil mengembalikan nilai dari objek. Karena tanda petik digunakan dalam kueri, S3 Select menggunakan header atau atribut yang ditentukan pengguna.

  ```
  SELECT s."CAST" from S3Object s
  ```
+ Ekspresi berikut menghasilkan kesalahan penguraian 400. Karena tidak ada tanda petik yang digunakan dalam kueri, `CAST` bertentangan dengan kata kunci terpesan.

  ```
  SELECT s.CAST from S3Object s
  ```

## Ekspresi skalar
<a name="s3-select-sql-reference-scalar"></a>

Dalam klausul `WHERE` dan daftar `SELECT`, Anda dapat memiliki *ekspresi skalar* SQL, yaitu ekspresi yang mengembalikan nilai skalar. Bentuknya adalah sebagai berikut:
+ ***`literal`*** 

  SQL literal. 
+ ***`column_reference`*** 

  Referensi ke kolom berupa `column_name` atau `alias.column_name`. 
+ **`unary_op`** **`expression`** 

  Dalam hal ini, ****`unary_op`**** adalah operator numerik SQL.
+ **`expression`** **`binary_op`** ***`expression`*** 

   Dalam hal ini, ****`binary_op`**** adalah operator biner SQL. 
+ **`func_name`** 

   Dalam hal ini, **`func_name`** adalah nama fungsi skalar yang diminta. 
+ ***`expression`*** `[ NOT ] BETWEEN` ****`expression`**** `AND` ****`expression`****
+ ***`expression`*** `LIKE` ****`expression`**** [ `ESCAPE` ***`expression`*** ]

# Jenis data
<a name="s3-select-sql-reference-data-types"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung beberapa jenis data primitif.

## Konversi jenis data
<a name="s3-select-sql-reference-data-conversion"></a>

Aturan umumnya adalah mengikuti fungsi `CAST` jika ditentukan. Apabila `CAST` tidak ditentukan, semua data input diperlakukan sebagai string. Dalam hal ini, Anda harus memasukkan data input Anda ke dalam jenis data yang relevan jika perlu.

Untuk informasi selengkapnya tentang fungsi `CAST`, lihat [CAST](s3-select-sql-reference-conversion.md#s3-select-sql-reference-cast).

## Jenis data yang didukung
<a name="s3-select-sql-reference-supported-data-types"></a>

Amazon S3 Select mendukung rangkaian jenis data primitif berikut.


|  Nama  |  Deskripsi  |  Contoh  | 
| --- | --- | --- | 
| `bool` | Nilai Boolean, baik `TRUE` ataupun `FALSE`. | `FALSE` | 
| `int`, `integer` | Bilangan bulat bertanda 8-byte dalam rentang -9.223.372.036.854.775.808 hingga 9.223.372.036.854.775.807.  | `100000` | 
| `string` | String panjang UTF8 variabel yang dikodekan. Batas default adalah 1 karakter. Batas karakter maksimum adalah 2.147.483.647.  | `'xyz'` | 
| `float` | Angka floating point 8-byte.  | `CAST(0.456 AS FLOAT)` | 
| `decimal`, `numeric` |  Angka dasar-10, dengan presisi maksimum 38 (yaitu, jumlah maksimal digit signifikan), dan dengan skala dalam rentang -231 hingga 231-1 (yaitu, eksponen dasar-10).  Amazon S3 Select mengabaikan skala dan presisi saat Anda memberikan keduanya secara bersamaan.   | `123.456 ` | 
| `timestamp` |  Timestamp mewakili momen waktu tertentu, selalu menyertakan offset lokal, dan mampu memiliki presisi arbitrer. Dalam format teks, timestamp mengikuti [catatan W3C tentang format tanggal dan waktu](https://www.w3.org/TR/NOTE-datetime), tetapi harus mengakhirinya dengan timestamp `T` setidaknya presisi sehari penuh. Beberapa detik fraksional diperbolehkan, dengan setidaknya satu digit presisi, dan maksimum tidak terbatas. Offset waktu lokal dapat dinyatakan sebagai offset jam:menit dari UTC, atau sebagai `Z` literal untuk menunjukkan waktu lokal UTC. Offset waktu lokal diperlukan pada timestamp dengan waktu dan tidak diizinkan pada nilai tanggal.  | `CAST('2007-04-05T14:30Z' AS TIMESTAMP)` | 

### Jenis Parquet yang didukung
<a name="s3-select-sql-reference-supported-data-types-parquet"></a>

Amazon S3 Select mendukung jenis Parquet berikut.
+ `DATE`
+ `DECIMAL`
+ `ENUM`
+ `INT(8)`
+ `INT(16)`
+ `INT(32)`
+ `INT(64)`
+ `LIST`
**catatan**  
Untuk output jenis `LIST` Parquet, Amazon S3 Select hanya mendukung format JSON. Namun, jika kueri membatasi data ke nilai sederhana, jenis `LIST` Parquet juga dapat dikuerikan dalam format CSV.
+ `STRING`
+ Presisi `TIMESTAMP` yang didukung (`MILLIS`/`MICROS`/`NANOS`)
**catatan**  
Timestamp yang disimpan sebagai `INT(96)` tidak didukung.   
Karena rentang jenis `INT(64)`, timestamp yang menggunakan unit `NANOS` hanya dapat mewakili nilai antara `1677-09-21 00:12:43` dan `2262-04-11 23:47:16`. Nilai di luar rentang ini tidak dapat diwakili dengan unit `NANOS`.

### Pemetaan jenis Parquet ke jenis data yang didukung di Amazon S3 Select
<a name="s3-select-sql-reference-supported-data-types-parquet-mapping"></a>


| Jenis Parquet | Jenis data yang didukung | 
| --- | --- | 
| `DATE` |  `timestamp`  | 
|  `DECIMAL`  |  `decimal`, `numeric`  | 
|  `ENUM`  |  `string`  | 
|  `INT(8)`  |  `int`, `integer`  | 
|  `INT(16)`  | `int`, `integer` | 
| `INT(32)` | `int`, `integer` | 
|  `INT(64)`  |  `decimal`, `numeric`  | 
|  `LIST`  |  Setiap jenis Parquet dalam daftar dipetakan ke jenis data yang sesuai.  | 
|  `STRING`  |  `string`  | 
|  `TIMESTAMP`  |  `timestamp`  | 

# Operator
<a name="s3-select-sql-reference-operators"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung operator berikut.

## Operator logis
<a name="s3-select-sql-reference-loical-ops"></a>
+ `AND`
+ `NOT`
+ `OR`

## Operator perbandingan
<a name="s3-select-sql-reference-compare-ops"></a>
+ `<` 
+ `>` 
+ `<=`
+ `>=`
+ `=`
+ `<>`
+ `!=`
+ `BETWEEN`
+ `IN`–Sebagai contoh: `IN ('a', 'b', 'c')`

  

## Operator pencocokan pola
<a name="s3-select-sql-reference-pattern"></a>
+ `LIKE`
+ `_` (Cocok untuk setiap karakter)
+ `%` (Cocok untuk urutan karakter apa pun)

## Operator numerik
<a name="s3-select-sql-reference-unitary-ops"></a>
+ `IS NULL`
+ `IS NOT NULL`

## Operator matematika
<a name="s3-select-sql-referencemath-ops"></a>

Penambahan, pengurangan, perkalian, pembagian, dan modulo didukung, sebagai berikut:
+ \$1
+ -
+ \$1
+ /
+ %

## Prasyarat operator
<a name="s3-select-sql-reference-op-Precedence"></a>

Tabel berikut menunjukkan prasyarat operator dalam urutan menurun.


|  Operator atau elemen  |  Asosiatif |  Diperlukan  | 
| --- | --- | --- | 
| `-`  | kanan  | numerik minus  | 
| `*`, `/`, `%`  | kiri  | perkalian, pembagian, modulo  | 
| `+`, `-`  | kiri  | penambahan, pengurangan  | 
| `IN` |  | atur keanggotaan  | 
| `BETWEEN` |  | pengurungan rentang  | 
| `LIKE` |  | pencocokan pola string  | 
| `<``>` |  | kurang dari, lebih dari  | 
| `=` | kanan  | kesetaraan, penugasan | 
| `NOT` | kanan | negasi logis  | 
| `AND` | kiri | konjungsi logis  | 
| `OR` | kiri | disjungsi logis  | 

# Kata kunci terpesan
<a name="s3-select-sql-reference-keyword-list"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Berikut adalah daftar kata kunci terpesan untuk Amazon S3 Select. Kata kunci ini mencakup nama fungsi, jenis data, operator, dan sebagainya, yang diperlukan untuk menjalankan ekspresi SQL yang digunakan untuk melakukan kueri konten objek.

```
absolute
action
add
all
allocate
alter
and
any
are
as
asc
assertion
at
authorization
avg
bag
begin
between
bit
bit_length
blob
bool
boolean
both
by
cascade
cascaded
case
cast
catalog
char
char_length
character
character_length
check
clob
close
coalesce
collate
collation
column
commit
connect
connection
constraint
constraints
continue
convert
corresponding
count
create
cross
current
current_date
current_time
current_timestamp
current_user
cursor
date
day
deallocate
dec
decimal
declare
default
deferrable
deferred
delete
desc
describe
descriptor
diagnostics
disconnect
distinct
domain
double
drop
else
end
end-exec
escape
except
exception
exec
execute
exists
external
extract
false
fetch
first
float
for
foreign
found
from
full
get
global
go
goto
grant
group
having
hour
identity
immediate
in
indicator
initially
inner
input
insensitive
insert
int
integer
intersect
interval
into
is
isolation
join
key
language
last
leading
left
level
like
limit
list
local
lower
match
max
min
minute
missing
module
month
names
national
natural
nchar
next
no
not
null
nullif
numeric
octet_length
of
on
only
open
option
or
order
outer
output
overlaps
pad
partial
pivot
position
precision
prepare
preserve
primary
prior
privileges
procedure
public
read
real
references
relative
restrict
revoke
right
rollback
rows
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
string
struct
substring
sum
symbol
system_user
table
temporary
then
time
timestamp
timezone_hour
timezone_minute
to
trailing
transaction
translate
translation
trim
true
tuple
union
unique
unknown
unpivot
update
upper
usage
user
using
value
values
varchar
varying
view
when
whenever
where
with
work
write
year
zone
```

# Fungsi SQL
<a name="s3-select-sql-reference-sql-functions"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi SQL berikut.

**Topics**
+ [

# Fungsi agregat
](s3-select-sql-reference-aggregate.md)
+ [

# Fungsi kondisional
](s3-select-sql-reference-conditional.md)
+ [

# Fungsi konversi
](s3-select-sql-reference-conversion.md)
+ [

# Fungsi tanggal
](s3-select-sql-reference-date.md)
+ [

# Fungsi string
](s3-select-sql-reference-string.md)

# Fungsi agregat
<a name="s3-select-sql-reference-aggregate"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi agregat berikut.


| Fungsi | Jenis Argumen | Jenis pengembalian | 
| --- | --- | --- | 
| `AVG(expression)` | `INT`, `FLOAT`, `DECIMAL` | `DECIMAL` untuk argumen `INT`, `FLOAT` untuk argumen floating point; jika tidak, sama dengan jenis data argumen. | 
| `COUNT` |  `-`  | `INT` | 
| `MAX(expression)` | `INT`, `DECIMAL` | Sama seperti jenis argumen. | 
| `MIN(expression)` | `INT`, `DECIMAL` | Sama seperti jenis argumen. | 
| `SUM(expression)` | `INT`, `FLOAT`, `DOUBLE`, `DECIMAL` | `INT` untuk argumen `INT`, `FLOAT` untuk argumen floating point; jika tidak, sama dengan jenis data argumen. | 

## Contoh SUM
<a name="s3-select-sql-reference-aggregate-case-examples"></a>

Untuk menggabungkan ukuran objek total suatu folder dalam [laporan Inventaris S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html), gunakan ekspresi `SUM`.

Laporan Inventaris S3 berikut adalah file CSV yang dikompresi dengan GZIP. Terdapat tiga kolom.
+ Kolom pertama adalah nama bucket S3 (*`DOC-EXAMPLE-BUCKET`*) yang digunakan untuk laporan Inventaris S3.
+ Kolom kedua adalah nama kunci objek yang secara unik mengidentifikasi objek dalam bucket.

  Nilai `example-folder/` di baris pertama adalah untuk folder `example-folder`. Di Amazon S3, saat Anda membuat folder di bucket, S3 membuat objek 0-byte dengan kunci yang diatur ke nama folder yang Anda berikan.

  Nilai `example-folder/object1` di baris kedua adalah untuk objek `object1` di folder `example-folder`.

  Nilai `example-folder/object2` di baris ketiga adalah untuk objek `object2` di folder `example-folder`.

  Untuk informasi selengkapnya tentang folder S3, lihat [Mengatur objek di konsol Amazon S3 dengan menggunakan folder](using-folders.md).
+ Kolom ketiga adalah ukuran objek dalam byte.

```
"DOC-EXAMPLE-BUCKET","example-folder/","0"
"DOC-EXAMPLE-BUCKET","example-folder/object1","2011267"
"DOC-EXAMPLE-BUCKET","example-folder/object2","1570024"
```

Untuk menggunakan ekspresi `SUM` guna menghitung ukuran total folder `example-folder`, jalankan kueri SQL dengan Amazon S3 Select.

```
SELECT SUM(CAST(_3 as INT)) FROM s3object s WHERE _2 LIKE 'example-folder/%' AND _2 != 'example-folder/';
```

Hasil Kueri: 

```
3581291
```

# Fungsi kondisional
<a name="s3-select-sql-reference-conditional"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi kondisional berikut.

**Topics**
+ [

## CASE
](#s3-select-sql-reference-case)
+ [

## COALESCE
](#s3-select-sql-reference-coalesce)
+ [

## NULLIF
](#s3-select-sql-reference-nullif)

## CASE
<a name="s3-select-sql-reference-case"></a>

Ekspresi `CASE` adalah ekspresi kondisional yang serupa dengan pernyataan `if/then/else` yang ditemukan dalam bahasa lain. `CASE`digunakan untuk menentukan hasil jika terdapat beberapa kondisi. Terdapat dua jenis ekspresi `CASE`: sederhana dan dicari.

Dalam ekspresi `CASE` sederhana, ekspresi dibandingkan dengan nilai. Ketika kecocokan ditemukan, tindakan yang ditentukan dalam klausul `THEN` diterapkan. Apabila kecocokan tidak ditemukan, tindakan dalam klausul `ELSE` diterapkan.

Dalam ekspresi `CASE` yang dicari, masing-masing `CASE` dievaluasi berdasarkan ekspresi Boolean, dan pernyataan `CASE` mengembalikan kecocokan pertama `CASE`. Jika tidak ada kecocokan `CASE` yang ditemukan di antara klausul `WHEN`, tindakan dalam klausul `ELSE` dikembalikan.

### Sintaks
<a name="s3-select-sql-reference-case-syntax"></a>

**catatan**  
Saat ini, Amazon S3 Select tidak mendukung `ORDER BY` atau kueri yang berisi baris baru. Pastikan Anda menggunakan kueri tanpa jeda baris.

Berikut ini adalah pernyataan `CASE` sederhana yang digunakan untuk mencocokkan kondisi:

```
CASE expression WHEN value THEN result [WHEN...] [ELSE result] END					
```

Berikut ini adalah pernyataan `CASE` yang dicari yang digunakan untuk mengevaluasi setiap kondisi:

```
CASE WHEN boolean condition THEN result [WHEN ...] [ELSE result] END					
```

### Contoh
<a name="s3-select-sql-reference-case-examples"></a>

**catatan**  
Apabila Anda menggunakan konsol Amazon S3 untuk menjalankan contoh berikut dan file CSV berisi baris header, pilih **Kecualikan baris pertama data CSV**. 

**Contoh 1:** Gunakan ekspresi `CASE` sederhana untuk mengganti `New York City` dengan `Big Apple` dalam kueri. Ganti semua nama kota lainnya dengan `other`.

```
SELECT venuecity, CASE venuecity WHEN 'New York City' THEN 'Big Apple' ELSE 'other' END FROM S3Object;
```

Hasil kueri: 

```
venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

**Contoh 2:** Gunakan ekspresi `CASE` yang dicari untuk menetapkan nomor grup berdasarkan nilai `pricepaid` penjualan tiket individu:

```
SELECT pricepaid, CASE WHEN CAST(pricepaid as FLOAT) < 10000 THEN 'group 1' WHEN CAST(pricepaid as FLOAT) > 10000 THEN 'group 2' ELSE 'group 3' END FROM S3Object;					
```

Hasil kueri: 

```
pricepaid |  case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
```

## COALESCE
<a name="s3-select-sql-reference-coalesce"></a>

`COALESCE` mengevaluasi argumen secara berurutan dan mengembalikan nilai non-tidak diketahui pertama, yaitu, nilai non-null atau non-hilang yang pertama. Fungsi ini tidak memperbanyak nilai null dan hilang.

### Sintaks
<a name="s3-select-sql-reference-coalesce-syntax"></a>

```
COALESCE ( expression, expression, ... )
```

### Parameter
<a name="s3-select-sql-reference-coalesce-parameters"></a>

 *`expression`*   
Ekspresi target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-coalesce-examples"></a>

```
COALESCE(1)                -- 1
COALESCE(null)             -- null
COALESCE(null, null)       -- null
COALESCE(missing)          -- null
COALESCE(missing, missing) -- null
COALESCE(1, null)          -- 1
COALESCE(null, null, 1)    -- 1
COALESCE(null, 'string')   -- 'string'
COALESCE(missing, 1)       -- 1
```

## NULLIF
<a name="s3-select-sql-reference-nullif"></a>

Dengan dua ekspresi, `NULLIF` mengembalikan `NULL` jika kedua ekspresi tersebut mengevaluasi nilai yang sama; jika tidak, `NULLIF` mengembalikan hasil evaluasi ke ekspresi yang pertama.

### Sintaks
<a name="s3-select-sql-reference-nullif-syntax"></a>

```
NULLIF ( expression1, expression2 )
```

### Parameter
<a name="s3-select-sql-reference-nullif-parameters"></a>

 `expression1, expression2`   
Ekspresi target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-nullif-examples"></a>

```
NULLIF(1, 1)             -- null
NULLIF(1, 2)             -- 1
NULLIF(1.0, 1)           -- null
NULLIF(1, '1')           -- 1
NULLIF([1], [1])         -- null
NULLIF(1, NULL)          -- 1
NULLIF(NULL, 1)          -- null
NULLIF(null, null)       -- null
NULLIF(missing, null)    -- null
NULLIF(missing, missing) -- null
```

# Fungsi konversi
<a name="s3-select-sql-reference-conversion"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi konversi berikut.

**Topics**
+ [

## CAST
](#s3-select-sql-reference-cast)

## CAST
<a name="s3-select-sql-reference-cast"></a>

Fungsi `CAST` mengonversi suatu entitas, seperti ekspresi yang mengevaluasi ke nilai tunggal, dari satu jenis ke lainnya. 

### Sintaks
<a name="s3-select-sql-reference-cast-syntax"></a>

```
CAST ( expression AS data_type )
```

### Parameter
<a name="s3-select-sql-reference-cast-parameters"></a>

 *`expression`*   
Kombinasi satu atau beberapa nilai, operator, dan fungsi SQL yang mengevaluasi nilai.

 *`data_type`*   
Jenis data target, seperti `INT`, untuk menghadirkan ekspresi. Untuk daftar jenis data yang didukung, lihat [Jenis data](s3-select-sql-reference-data-types.md).

### Contoh
<a name="s3-select-sql-reference-cast-examples"></a>

```
CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)
```

# Fungsi tanggal
<a name="s3-select-sql-reference-date"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi tanggal berikut.

**Topics**
+ [

## DATE\$1ADD
](#s3-select-sql-reference-date-add)
+ [

## DATE\$1DIFF
](#s3-select-sql-reference-date-diff)
+ [

## EXTRACT
](#s3-select-sql-reference-extract)
+ [

## TO\$1STRING
](#s3-select-sql-reference-to-string)
+ [

## TO\$1TIMESTAMP
](#s3-select-sql-reference-to-timestamp)
+ [

## UTCNOW
](#s3-select-sql-reference-utcnow)

## DATE\$1ADD
<a name="s3-select-sql-reference-date-add"></a>

Dengan bagian tanggal, kuantitas, dan timestamp, `DATE_ADD` mengembalikan timestamp yang diperbarui dengan mengubah bagian tanggal berdasarkan kuantitas.

### Sintaks
<a name="s3-select-sql-reference-date-add-syntax"></a>

```
DATE_ADD( date_part, quantity, timestamp )
```

### Parameter
<a name="s3-select-sql-reference-date-add-parameters"></a>

*`date_part`*   
Menentukan bagian dari tanggal untuk diubah. Ini dapat berupa salah satu dari berikut ini:  
+ tahun
+ bulan
+ hari
+ jam
+ menit
+ detik

 *`quantity`*   
Nilai yang diterapkan pada timestamp yang diperbarui. Nilai positif untuk `quantity` ditambahkan ke date\$1part timestamp, dan pengurangan nilai negatif.

 *`timestamp`*   
Timestamp target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-date-add-examples"></a>

```
DATE_ADD(year, 5, `2010-01-01T`)                -- 2015-01-01 (equivalent to 2015-01-01T)
DATE_ADD(month, 1, `2010T`)                     -- 2010-02T (result will add precision as necessary)
DATE_ADD(month, 13, `2010T`)                    -- 2011-02T
DATE_ADD(day, -1, `2017-01-10T`)                -- 2017-01-09 (equivalent to 2017-01-09T)
DATE_ADD(hour, 1, `2017T`)                      -- 2017-01-01T01:00-00:00
DATE_ADD(hour, 1, `2017-01-02T03:04Z`)          -- 2017-01-02T04:04Z
DATE_ADD(minute, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:05:05.006Z
DATE_ADD(second, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:04:06.006Z
```

## DATE\$1DIFF
<a name="s3-select-sql-reference-date-diff"></a>

Dengan bagian tanggal dan dua timestamp yang valid, `DATE_DIFF` mengembalikan selisih bagian tanggal. Nilai yang dikembalikan adalah bilangan bulat negatif ketika nilai `date_part` dari `timestamp1` lebih dari nilai `date_part` dari `timestamp2`. Nilai yang dikembalikan adalah bilangan bulat positif ketika nilai `date_part` dari `timestamp1` kurang dari nilai `date_part` dari `timestamp2`.

### Sintaks
<a name="s3-select-sql-reference-date-diff-syntax"></a>

```
DATE_DIFF( date_part, timestamp1, timestamp2 )
```

### Parameter
<a name="s3-select-sql-reference-date-diff-parameters"></a>

 **`date_part`**   
Menentukan bagian mana dari timestamp untuk dibandingkan. Untuk definisi `date_part`, lihat [DATE\$1ADD](#s3-select-sql-reference-date-add).

 **`timestamp1`**   
Timestamp pertama untuk dibandingkan.

 **`timestamp2`**   
Timestamp kedua untuk dibandingkan.

### Contoh
<a name="s3-select-sql-reference-date-diff-examples"></a>

```
DATE_DIFF(year, `2010-01-01T`, `2011-01-01T`)            -- 1
DATE_DIFF(year, `2010T`, `2010-05T`)                     -- 4 (2010T is equivalent to 2010-01-01T00:00:00.000Z)
DATE_DIFF(month, `2010T`, `2011T`)                       -- 12
DATE_DIFF(month, `2011T`, `2010T`)                       -- -12
DATE_DIFF(day, `2010-01-01T23:00`, `2010-01-02T01:00`) -- 0 (need to be at least 24h apart to be 1 day apart)
```

## EXTRACT
<a name="s3-select-sql-reference-extract"></a>

Dengan bagian tanggal dan timestamp, `EXTRACT` mengembalikan nilai bagian tanggal timestamp.

### Sintaks
<a name="s3-select-sql-reference-extract-syntax"></a>

```
EXTRACT( date_part FROM timestamp )
```

### Parameter
<a name="s3-select-sql-reference-extract-parameters"></a>

 **`date_part`**   
Menentukan bagian dari timestamp untuk diekstrak. Ini dapat berupa salah satu dari berikut ini:  
+ `YEAR`
+ `MONTH`
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `TIMEZONE_HOUR`
+ `TIMEZONE_MINUTE`

 **`timestamp`**   
Timestamp target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-extract-examples"></a>

```
EXTRACT(YEAR FROM `2010-01-01T`)                           -- 2010
EXTRACT(MONTH FROM `2010T`)                                -- 1 (equivalent to 2010-01-01T00:00:00.000Z)
EXTRACT(MONTH FROM `2010-10T`)                             -- 10
EXTRACT(HOUR FROM `2017-01-02T03:04:05+07:08`)             -- 3
EXTRACT(MINUTE FROM `2017-01-02T03:04:05+07:08`)           -- 4
EXTRACT(TIMEZONE_HOUR FROM `2017-01-02T03:04:05+07:08`)    -- 7
EXTRACT(TIMEZONE_MINUTE FROM `2017-01-02T03:04:05+07:08`)  -- 8
```

## TO\$1STRING
<a name="s3-select-sql-reference-to-string"></a>

Dengan timestamp dan pola format, `TO_STRING` mengembalikan representasi string timestamp dalam format yang diberikan.

### Sintaks
<a name="s3-select-sql-reference-size-syntax"></a>

```
TO_STRING ( timestamp time_format_pattern )
```

### Parameter
<a name="s3-select-sql-reference-size-parameters"></a>

 *`timestamp`*   
Timestamp target tempat fungsi beroperasi.

 *`time_format_pattern`*   
String yang memiliki interpretasi karakter khusus berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/s3-select-sql-reference-date.html)

### Contoh
<a name="s3-select-sql-reference-size-examples"></a>

```
TO_STRING(`1969-07-20T20:18Z`,  'MMMM d, y')                    -- "July 20, 1969"
TO_STRING(`1969-07-20T20:18Z`, 'MMM d, yyyy')                   -- "Jul 20, 1969"
TO_STRING(`1969-07-20T20:18Z`, 'M-d-yy')                        -- "7-20-69"
TO_STRING(`1969-07-20T20:18Z`, 'MM-d-y')                        -- "07-20-1969"
TO_STRING(`1969-07-20T20:18Z`, 'MMMM d, y h:m a')               -- "July 20, 1969 8:18 PM"
TO_STRING(`1969-07-20T20:18Z`, 'y-MM-dd''T''H:m:ssX')           -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00Z`, 'y-MM-dd''T''H:m:ssX')     -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXX')   -- "1969-07-20T20:18:00+0800"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXXX')  -- "1969-07-20T20:18:00+08:00"
```

## TO\$1TIMESTAMP
<a name="s3-select-sql-reference-to-timestamp"></a>

Dengan string, `TO_TIMESTAMP` mengonversi menjadi timestamp. `TO_TIMESTAMP` adalah operasi terbalik `TO_STRING`.

### Sintaks
<a name="s3-select-sql-reference-to-timestamp-syntax"></a>

```
TO_TIMESTAMP ( string )
```

### Parameter
<a name="s3-select-sql-reference-to-timestamp-parameters"></a>

 *`string`*   
String target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-to-timestamp-examples"></a>

```
TO_TIMESTAMP('2007T')                         -- `2007T`
TO_TIMESTAMP('2007-02-23T12:14:33.079-08:00') -- `2007-02-23T12:14:33.079-08:00`
```

## UTCNOW
<a name="s3-select-sql-reference-utcnow"></a>

`UTCNOW` mengembalikan waktu saat ini dalam UTC sebagai timestamp.

### Sintaks
<a name="s3-select-sql-reference-utcnow-syntax"></a>

```
UTCNOW()
```

### Parameter
<a name="s3-select-sql-reference-utcnow-parameters"></a>

`UTCNOW` tidak menggunakan parameter.

### Contoh
<a name="s3-select-sql-reference-utcnow-examples"></a>

```
UTCNOW() -- 2017-10-13T16:02:11.123Z
```

# Fungsi string
<a name="s3-select-sql-reference-string"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select mendukung fungsi string berikut.

**Topics**
+ [

## CHAR\$1LENGTH, CHARACTER\$1LENGTH
](#s3-select-sql-reference-char-length)
+ [

## LOWER
](#s3-select-sql-reference-lower)
+ [

## SUBSTRING
](#s3-select-sql-reference-substring)
+ [

## TRIM
](#s3-select-sql-reference-trim)
+ [

## UPPER
](#s3-select-sql-reference-upper)

## CHAR\$1LENGTH, CHARACTER\$1LENGTH
<a name="s3-select-sql-reference-char-length"></a>

`CHAR_LENGTH` (atau`CHARACTER_LENGTH`) menghitung jumlah karakter dalam string yang ditentukan.

**catatan**  
`CHAR_LENGTH` dan `CHARACTER_LENGTH` adalah sinonim.

### Sintaks
<a name="s3-select-sql-reference-char-length-syntax"></a>

```
CHAR_LENGTH ( string )
```

### Parameter
<a name="s3-select-sql-reference-char-length-parameters"></a>

 *`string`*   
String target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-char-length-examples"></a>

```
CHAR_LENGTH('')          -- 0
CHAR_LENGTH('abcdefg')   -- 7
```

## LOWER
<a name="s3-select-sql-reference-lower"></a>

Dengan string, `LOWER` mengubah semua karakter huruf besar menjadi karakter huruf kecil. Setiap karakter yang tidak dalam huruf besar tidak berubah.

### Sintaks
<a name="s3-select-sql-reference-lower-syntax"></a>

```
LOWER ( string )
```

### Parameter
<a name="s3-select-sql-reference-lower-parameters"></a>

 **`string`**   
String target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-lower-examples"></a>

```
LOWER('AbCdEfG!@#$') -- 'abcdefg!@#$'
```

## SUBSTRING
<a name="s3-select-sql-reference-substring"></a>

Dengan string, indeks awal, dan secara opsional panjang, `SUBSTRING`mengembalikan substring dari indeks awal hingga ujung string, atau hingga panjang yang disediakan.

**catatan**  
Karakter pertama dari string input memiliki posisi indeks 1.  
 Jika `start` < 1, tanpa panjang yang ditentukan, posisi indeks diatur ke 1. 
 Jika `start` < 1, dengan panjang yang ditentukan, posisi indeks diatur ke `start + length -1`. 
 Jika `start + length -1` < 0, string kosong dikembalikan. 
 Jika `start + length -1` > = 0, substring dimulai pada posisi indeks 1 dengan panjang `start + length - 1` dikembalikan. 

### Sintaks
<a name="s3-select-sql-reference-substring-syntax"></a>

```
SUBSTRING( string FROM start [ FOR length ] )
```

### Parameter
<a name="s3-select-sql-reference-substring-parameters"></a>

 **`string`**   
String target tempat fungsi beroperasi.

 **`start`**   
Posisi awal string.

 **`length`**   
Panjang substring untuk dikembalikan. Apabila tidak ada, lanjutkan ke akhir string.

### Contoh
<a name="s3-select-sql-reference-substring-examples"></a>

```
SUBSTRING("123456789", 0)      -- "123456789"
SUBSTRING("123456789", 1)      -- "123456789"
SUBSTRING("123456789", 2)      -- "23456789"
SUBSTRING("123456789", -4)     -- "123456789"
SUBSTRING("123456789", 0, 999) -- "123456789" 
SUBSTRING("123456789", 1, 5)   -- "12345"
```

## TRIM
<a name="s3-select-sql-reference-trim"></a>

Memangkas karakter di depan atau di belakang string. Karakter default yang harus dihapus adalah spasi (`' '`).

### Sintaks
<a name="s3-select-sql-reference-trim-syntax"></a>

```
TRIM ( [[LEADING | TRAILING | BOTH remove_chars] FROM] string )
```

### Parameter
<a name="s3-select-sql-reference-trim-parameters"></a>

 **`string`**   
String target tempat fungsi beroperasi.

 `LEADING` \$1 `TRAILING` \$1 `BOTH`   
Parameter ini menunjukkan jika akan memangkas karakter di depan atau di belakang, atau karakter di depan dan di belakang.

 **`remove_chars`**   
Set karakter untuk dihapus. `remove_chars` dapat berupa string dengan panjang > 1. Fungsi ini mengembalikan string dengan karakter apa pun dari `remove_chars` yang ditemukan di awal atau akhir string yang dihapus.

### Contoh
<a name="s3-select-sql-reference-trim-examples"></a>

```
TRIM('       foobar         ')               -- 'foobar'
TRIM('      \tfoobar\t         ')            -- '\tfoobar\t'
TRIM(LEADING FROM '       foobar         ')  -- 'foobar         '
TRIM(TRAILING FROM '       foobar         ') -- '       foobar'
TRIM(BOTH FROM '       foobar         ')     -- 'foobar'
TRIM(BOTH '12' FROM '1112211foobar22211122') -- 'foobar'
```

## UPPER
<a name="s3-select-sql-reference-upper"></a>

Dengan string, `UPPER` mengubah semua karakter huruf kecil menjadi karakter huruf besar. Setiap karakter yang tidak dalam huruf kecil tidak berubah.

### Sintaks
<a name="s3-select-sql-reference-upper-syntax"></a>

```
UPPER ( string )
```

### Parameter
<a name="s3-select-sql-reference-upper-parameters"></a>

 **`string`**   
String target tempat fungsi beroperasi.

### Contoh
<a name="s3-select-sql-reference-upper-examples"></a>

```
UPPER('AbCdEfG!@#$') -- 'ABCDEFG!@#$'
```