

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Referensi SQL
<a name="cm_chap_SQLCommandRef"></a>

Dengan Amazon Redshift, Anda dapat memanfaatkan SQL untuk secara efisien melakukan kueri dan menganalisis sejumlah besar data yang disimpan di gudang data Anda. Referensi SQL mencakup sintaks dan penggunaan perintah SQL, tipe data, fungsi, operator, dan lainnya, memberdayakan Anda untuk mengekstrak wawasan dan membuat keputusan berbasis data. Anda dapat berkonsultasi dengan referensi ini untuk menulis kueri yang dioptimalkan, membuat dan mengelola objek database, dan melakukan transformasi data yang kompleks. Referensi berikut memberikan rincian lengkap tentang penggunaan SQL dalam lingkungan Amazon Redshift untuk memenuhi persyaratan analisis data Anda.

**Topics**
+ [Amazon Redshift SQL](c_redshift-sql.md)
+ [Menggunakan SQL](c_SQL_reference.md)
+ [Perintah SQL](c_SQL_commands.md)
+ [Referensi fungsi SQL](c_SQL_functions.md)
+ [Kata yang dicadangkan](r_pg_keywords.md)

# Amazon Redshift SQL
<a name="c_redshift-sql"></a>

**Topics**
+ [Fungsi SQL didukung pada node pemimpin](c_sql-functions-leader-node.md)
+ [Amazon Redshift dan PostgreSQL](c_redshift-and-postgres-sql.md)

Amazon Redshift dibangun di sekitar SQL standar industri, dengan fungsionalitas tambahan untuk mengelola kumpulan data yang sangat besar dan mendukung analisis kinerja tinggi dan pelaporan data tersebut.

**catatan**  
Ukuran maksimum untuk satu pernyataan Amazon Redshift SQL adalah 16 MB.

# Fungsi SQL didukung pada node pemimpin
<a name="c_sql-functions-leader-node"></a>

Beberapa kueri Amazon Redshift didistribusikan dan dijalankan di node komputasi, dan kueri lainnya dijalankan secara eksklusif di node pemimpin.

Node pemimpin mendistribusikan SQL ke node komputasi setiap kali kueri mereferensikan tabel atau tabel sistem yang dibuat pengguna (tabel dengan awalan STL atau STV dan tampilan sistem dengan awalan SVL atau SVV). Kueri yang hanya mereferensikan tabel katalog (tabel dengan awalan PG, seperti PG\$1TABLE\$1DEF, yang berada di node pemimpin) atau yang tidak mereferensikan tabel apa pun, berjalan secara eksklusif pada node pemimpin.

Beberapa fungsi Amazon Redshift SQL hanya didukung pada node pemimpin dan tidak didukung pada node komputasi. Kueri yang menggunakan fungsi leader-node harus dijalankan secara eksklusif pada node pemimpin, bukan pada node komputasi, atau akan mengembalikan kesalahan.

Dokumentasi untuk setiap fungsi yang harus dijalankan secara eksklusif pada node pemimpin menyertakan catatan yang menyatakan bahwa fungsi tersebut akan mengembalikan kesalahan jika mereferensikan tabel yang ditentukan pengguna atau tabel sistem Amazon Redshift. Lihat [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md) daftar fungsi yang berjalan secara eksklusif pada node pemimpin.

## Contoh
<a name="c_sql-functions-leader-node-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi lebih lanjut tentang database sampel, buka[Database sampel](c_sampledb.md).

**SKEMA SAAT INI**

Fungsi CURRENT\$1SCHEMA adalah fungsi leader-node saja. Dalam contoh ini, kueri tidak mereferensikan tabel, sehingga berjalan secara eksklusif pada node pemimpin.

```
select current_schema();
            
current_schema
---------------
public
```

Dalam contoh berikutnya, query referensi tabel katalog sistem, sehingga berjalan secara eksklusif pada node pemimpin.

```
select * from pg_table_def
where schemaname = current_schema() limit 1;

 schemaname | tablename | column |   type   | encoding | distkey | sortkey | notnull
------------+-----------+--------+----------+----------+---------+---------+---------
 public     | category  | catid  | smallint | none     | t       |       1 | t
```

Dalam contoh berikutnya, kueri mereferensikan tabel sistem Amazon Redshift yang berada di node komputasi, sehingga mengembalikan kesalahan.

```
select current_schema(), userid from users;

INFO:  Function "current_schema()" not supported.
ERROR:  Specified types or functions (one per INFO message) not supported on Amazon Redshift tables.
```

**SUBSTR**

SUBSTR juga merupakan fungsi leader-node saja. Dalam contoh berikut, kueri berjalan eksklusif pada node pemimpin karena tidak mereferensikan tabel.

```
SELECT SUBSTR('amazon', 5);
            
+--------+
| substr |
+--------+
| on     |
+--------+
```

Dalam contoh berikut, query referensi tabel yang berada pada node komputasi. Ini menghasilkan kesalahan.

```
SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1;
            
ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)
```

Untuk berhasil menjalankan kueri sebelumnya, gunakan [SUBSTRING.](https://docs.aws.amazon.com/redshift/latest/dg/r_SUBSTRING.html)

```
SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1;
            
+---------------------------------+
|            substring            |
+---------------------------------+
| National Basketball Association |
+---------------------------------+
```

**FAKTORIAL ()**

FACTORIAL () adalah fungsi leader-node saja. Dalam contoh berikut, kueri berjalan eksklusif pada node pemimpin karena tidak mereferensikan tabel.

```
SELECT FACTORIAL(5);           

 factorial 
-------------
 120
```

Dalam contoh berikut, query referensi tabel yang berada pada node komputasi. Ini menghasilkan kesalahan saat dijalankan menggunakan editor kueri v2.

```
create table t(a int);
insert into t values (5);
select factorial(a) from t;           

ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables.
Info: Function "factorial(bigint)" not supported.
```

# Amazon Redshift dan PostgreSQL
<a name="c_redshift-and-postgres-sql"></a>

**Topics**
+ [Amazon Redshift dan PostgreSQL JDBC dan ODBC](c_redshift-postgres-jdbc.md)
+ [Fitur yang diimplementasikan secara berbeda](c_redshift-sql-implementated-differently.md)
+ [Fitur PostgreSQL yang tidak didukung](c_unsupported-postgresql-features.md)
+ [Tipe data PostgreSQL yang tidak didukung](c_unsupported-postgresql-datatypes.md)
+ [Fungsi PostgreSQL yang tidak didukung](c_unsupported-postgresql-functions.md)

Amazon Redshift didasarkan pada PostgreSQL. Amazon Redshift dan PostgreSQL memiliki sejumlah perbedaan yang sangat penting yang harus Anda waspadai saat merancang dan mengembangkan aplikasi gudang data Anda.

Amazon Redshift dirancang khusus untuk aplikasi pemrosesan analitik online (OLAP) dan intelijen bisnis (BI), yang memerlukan kueri kompleks terhadap kumpulan data besar. Karena memenuhi persyaratan yang sangat berbeda, skema penyimpanan data khusus dan mesin eksekusi kueri yang digunakan Amazon Redshift benar-benar berbeda dari implementasi PostgreSQL. Misalnya, di mana aplikasi pemrosesan transaksi online (OLTP) biasanya menyimpan data dalam baris, Amazon Redshift menyimpan data dalam kolom, menggunakan pengkodean kompresi data khusus untuk penggunaan memori optimal dan I/O disk. Beberapa fitur PostgreSQL yang cocok untuk pemrosesan OLTP skala lebih kecil, seperti indeks sekunder dan operasi manipulasi data baris tunggal yang efisien, telah dihilangkan untuk meningkatkan kinerja.

Lihat [Arsitektur Amazon Redshift](c_redshift_system_overview.md) penjelasan rinci tentang arsitektur sistem gudang data Amazon Redshift.

PostgreSQL 9.x menyertakan beberapa fitur yang tidak didukung di Amazon Redshift. Selain itu, ada perbedaan penting antara Amazon Redshift SQL dan PostgreSQL yang harus Anda ketahui. Bagian ini menyoroti perbedaan antara Amazon Redshift dan PostgreSQL dan memberikan panduan untuk mengembangkan gudang data yang memanfaatkan sepenuhnya implementasi Amazon Redshift SQL.

# Amazon Redshift dan PostgreSQL JDBC dan ODBC
<a name="c_redshift-postgres-jdbc"></a>

 Karena Amazon Redshift didasarkan pada PostgreSQL, kami sebelumnya merekomendasikan menggunakan driver Postgresql versi 8.4.703 dan driver psqlodBC versi JDBC4 9.x. Jika saat ini Anda menggunakan driver tersebut, kami sarankan untuk beralih ke driver khusus Amazon Redshift yang baru ke depan. *Untuk informasi selengkapnya tentang driver dan mengonfigurasi koneksi, lihat Driver [JDBC dan ODBC untuk Amazon Redshift di Panduan Manajemen Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/configuring-connections.html#connecting-drivers) Redshift.*

Untuk menghindari out-of-memory kesalahan sisi klien saat mengambil kumpulan data besar menggunakan JDBC, Anda dapat mengaktifkan klien Anda untuk mengambil data dalam batch dengan mengatur parameter ukuran pengambilan JDBC. Untuk informasi selengkapnya, lihat [Mengatur parameter ukuran pengambilan JDBC](set-the-JDBC-fetch-size-parameter.md).

Amazon Redshift tidak mengenali parameter JDBC MaxRows. Sebagai gantinya, tentukan [LIMIT](r_ORDER_BY_clause.md#order-by-clause-limit) klausa untuk membatasi kumpulan hasil. Anda juga dapat menggunakan [OFFSET](r_ORDER_BY_clause.md#order-by-clause-offset) klausa untuk melompat ke titik awal tertentu dalam kumpulan hasil.

# Fitur yang diimplementasikan secara berbeda
<a name="c_redshift-sql-implementated-differently"></a>

Banyak elemen bahasa Amazon Redshift SQL memiliki karakteristik kinerja yang berbeda dan menggunakan sintaks dan semantik dan yang sangat berbeda dari implementasi PostgreSQL yang setara.

**penting**  
Jangan berasumsi bahwa semantik elemen yang dimiliki Amazon Redshift dan PostgreSQL adalah identik. Pastikan untuk berkonsultasi dengan *Panduan Pengembang Amazon Redshift* [Perintah SQL](c_SQL_commands.md) untuk memahami perbedaan yang seringkali tidak kentara.

Salah satu contoh khususnya adalah [VAKUM](r_VACUUM_command.md) perintah, yang digunakan untuk membersihkan dan mengatur ulang tabel. VACUUM berfungsi secara berbeda dan menggunakan serangkaian parameter yang berbeda dari versi PostgreSQL. Lihat [Tabel penyedot debu](t_Reclaiming_storage_space202.md) untuk informasi selengkapnya tentang penggunaan VACUUM di Amazon Redshift.

Seringkali, manajemen database dan fitur administrasi dan alat-alat yang berbeda juga. Misalnya, Amazon Redshift mempertahankan satu set tabel sistem dan tampilan yang memberikan informasi tentang bagaimana sistem berfungsi. Untuk informasi selengkapnya, lihat [Tampilan pemantauan SYS](serverless_views-monitoring.md).

Daftar berikut mencakup beberapa contoh fitur SQL yang diimplementasikan secara berbeda di Amazon Redshift.
+  [CREATE TABLE](r_CREATE_TABLE_NEW.md) 

  Amazon Redshift tidak mendukung ruang tabel, partisi tabel, pewarisan, dan batasan tertentu. Implementasi Amazon Redshift CREATE TABLE memungkinkan Anda menentukan algoritme pengurutan dan distribusi tabel guna mengoptimalkan pemrosesan paralel.

  Amazon Redshift Spectrum mendukung partisi tabel menggunakan perintah. [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)
+  [ALTER TABLE](r_ALTER_TABLE.md) 

  Hanya sebagian dari tindakan ALTER COLUMN yang didukung.

  ADD COLUMN mendukung penambahan hanya satu kolom di setiap pernyataan ALTER TABLE.
+  [MENYONTEK](r_COPY.md) 

  Perintah Amazon Redshift COPY sangat khusus untuk memungkinkan pemuatan data dari bucket Amazon S3 dan tabel Amazon DynamoDB dan untuk memfasilitasi kompresi otomatis. Lihat [Memuat data di Amazon Redshift](t_Loading_data.md) bagian dan referensi perintah COPY untuk detailnya.
+  [VAKUM](r_VACUUM_command.md) 

  Parameter untuk VACUUM sama sekali berbeda. Misalnya, operasi VACUUM default di PostgreSQL hanya merebut kembali ruang dan membuatnya tersedia untuk digunakan kembali; Namun, operasi VACUUM default di Amazon Redshift adalah VACUUM FULL, yang merebut kembali ruang disk dan menggunakan semua baris.
+ Spasi tambahan dalam nilai VARCHAR diabaikan saat nilai string dibandingkan. Untuk informasi selengkapnya, lihat [Signifikansi trailing blanko](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

# Fitur PostgreSQL yang tidak didukung
<a name="c_unsupported-postgresql-features"></a>

Fitur PostgreSQL ini tidak didukung di Amazon Redshift.

**penting**  
Jangan berasumsi bahwa semantik elemen yang dimiliki Amazon Redshift dan PostgreSQL adalah identik. Pastikan untuk berkonsultasi dengan *Panduan Pengembang Amazon Redshift* [Perintah SQL](c_SQL_commands.md) untuk memahami perbedaan yang seringkali tidak kentara.
+ Alat kueri *psql* tidak didukung. [Klien Amazon Redshift RSQL didukung](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html).
+ Partisi tabel (rentang dan daftar partisi)
+ Ruang Meja
+ Batasan
  + Unik
  + Kunci asing
  + Kunci primer
  + Batasan pemeriksaan
  + Kendala pengecualian

  Kendala unik, kunci utama, dan kunci asing diizinkan, tetapi hanya bersifat informasi. Mereka tidak ditegakkan oleh sistem, tetapi mereka digunakan oleh perencana kueri.
+ Warisan
+ Kolom sistem PostgreSQL

  Amazon Redshift SQL tidak secara implisit mendefinisikan kolom sistem. Namun, nama kolom sistem PostgreSQL berikut tidak dapat digunakan sebagai nama kolom yang ditentukan pengguna`oid`:`tableoid`,,,,,, dan. `xmin` `cmin` `xmax` `cmax` `ctid` Untuk informasi selengkapnya, lihat [https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html).
+ Indeks
+ Klausa NULLS dalam fungsi Jendela
+ Kolasi

  Amazon Redshift tidak mendukung urutan pemeriksaan khusus lokal atau yang ditentukan pengguna. Lihat [Urutan pemeriksaan](c_collation_sequences.md).
+ Ekspresi nilai
  + Ekspresi berlangganan
  + Konstruktor array
  + Konstruktor baris
+ Pemicu
+ Pengelolaan Data Eksternal (SQL/MED)
+ Fungsi tabel
+ Daftar VALUES digunakan sebagai tabel konstan
+ Urutan
+ Pencarian teks lengkap
+ Izin ATURAN dan TRIGGER.

  Amazon Redshift memberikan atau mencabut izin ini saat Anda menjalankan GRANT ALL atau REVOKE ALL, tetapi ada atau tidaknya izin RULE dan TRIGGER tidak memengaruhi izin akses penerima hibah dengan cara apa pun.

# Tipe data PostgreSQL yang tidak didukung
<a name="c_unsupported-postgresql-datatypes"></a>

Umumnya, jika kueri mencoba menggunakan tipe data yang tidak didukung, termasuk cast eksplisit atau implisit, itu akan mengembalikan kesalahan. Namun, beberapa kueri yang menggunakan tipe data yang tidak didukung akan berjalan pada node pemimpin tetapi tidak pada node komputasi. Lihat [Fungsi SQL didukung pada node pemimpin](c_sql-functions-leader-node.md).

 Untuk daftar tipe data yang didukung, lihat[Jenis Data](c_Supported_data_types.md).

Tipe data PostgreSQL ini tidak didukung di Amazon Redshift.
+ Array
+ SEDIKIT, SEDIKIT BERVARIASI
+ BYTEA
+ Jenis Komposit
+ Jenis yang disebutkan
+ Jenis Geometris (Implementasi Amazon Redshift dari tipe geometris berbeda dari PostgreSQL)
+ HSTORE
+ JSON
+ Jenis Alamat Jaringan
+ Jenis Numerik
  + SERIAL, SERIAL BESAR, SERIAL KECIL
  + MONEY
+ Jenis Pengenal Objek
+ Jenis Pseudo
+ Jenis Rentang
+ Jenis Karakter Khusus
  + “char” — Tipe internal single-byte (di mana tipe data bernama char terlampir dalam tanda kutip).
  + name — Tipe internal untuk nama objek.

  Untuk informasi selengkapnya tentang jenis ini, lihat [Jenis Karakter Khusus](https://www.postgresql.org/docs/8.0/datatype-character.html) dalam dokumentasi PostgreSQL. 
+ Jenis Pencarian Teks
+ TXID\$1SNAPSHOT
+ UUID
+ XML

# Fungsi PostgreSQL yang tidak didukung
<a name="c_unsupported-postgresql-functions"></a>

Banyak fungsi yang tidak dikecualikan memiliki semantik atau penggunaan yang berbeda. Misalnya, beberapa fungsi yang didukung hanya akan berjalan pada node pemimpin. Juga, beberapa fungsi yang tidak didukung tidak akan mengembalikan kesalahan saat dijalankan pada node pemimpin. Fakta bahwa fungsi-fungsi ini tidak mengembalikan kesalahan dalam beberapa kasus tidak boleh diambil untuk menunjukkan bahwa fungsi tersebut didukung oleh Amazon Redshift. 

**penting**  
Jangan berasumsi bahwa semantik elemen yang dimiliki Amazon Redshift dan PostgreSQL adalah identik. Pastikan untuk berkonsultasi dengan *Panduan Pengembang Database Amazon Redshift* [Perintah SQL](c_SQL_commands.md) untuk memahami perbedaan yang seringkali tidak kentara.

 Untuk informasi selengkapnya, lihat [Fungsi SQL didukung pada node pemimpin](c_sql-functions-leader-node.md).

Fungsi PostgreSQL ini tidak didukung di Amazon Redshift.
+ Akses fungsi penyelidikan hak istimewa
+ Fungsi kunci penasehat
+ Fungsi agregat
  + STRING\$1AGG ()
  + ARRAY\$1AGG ()
  + SETIAP
  + XML\$1AGG ()
  + CORR ()
  + COVAR\$1POP ()
  + COVAR\$1SAMP ()
  + REGR\$1AVGX (), REGR\$1AVGY ()
  + REGR\$1COUNT ()
  + REGR\$1INTERSEP ()
  + REGR\$1R2 ()
  + REGR\$1SLOPE ()
  + REGR\$1SXX (), REGR\$1SXY (), REGR\$1SYY ()
+ Fungsi dan operator array
+ Fungsi kontrol Backup
+ Fungsi informasi komentar
+ Fungsi lokasi objek database
+ Fungsi ukuran objek database
+ Fungsi dan operator Tanggal/Waktu
  + CLOCK\$1TIMESTAMP ()
  + JUSTIFY\$1DAYS (), JUSTIFY\$1HOURS (), JUSTIFY\$1INTERVAL ()
  + PG\$1SLEEP ()
  + TRANSACTION\$1TIMESTAMP ()
+ Fungsi dukungan ENUM
+ Fungsi geometris dan operator
+ Fungsi akses file generik
+ IS DISTINCT FROM
+ Fungsi dan operator alamat jaringan
+ Fungsi matematika
  + DIV ()
  + BIJI SETSEED ()
  + WIDTH\$1BUCKET ()
+ Atur fungsi yang kembali
  + GENERATE\$1SERIES ()
  + GENERATE\$1SUBSCRIPTS ()
+ Jangkauan fungsi dan operator
+ Fungsi kontrol pemulihan
+ Fungsi informasi pemulihan
+ Fungsi ROLLBACK KE SAVEPOINT
+ Fungsi penyelidikan visibilitas skema
+ Fungsi pensinyalan server
+ Fungsi sinkronisasi snapshot
+ Fungsi manipulasi urutan
+ Fungsi string
  + BIT\$1LENGTH ()
  + HAMPARAN ()
  + CONVERT (), CONVERT\$1FROM (), CONVERT\$1TO ()
  + MENGKODEKAN ()
  + FORMAT ()
  + QUOTE\$1NULLABLE ()
  + REGEXP\$1MATCHES ()
  + REGEXP\$1SPLIT\$1TO\$1ARRAY ()
  + REGEXP\$1SPLIT\$1TO\$1TABLE ()
+ Fungsi informasi katalog sistem
+ Fungsi informasi sistem
  + CURRENT\$1CATALOG CURRENT\$1QUERY ()
  + INET\$1CLIENT\$1ADDR ()
  + INET\$1CLIENT\$1PORT ()
  + INET\$1SERVER\$1ADDR () INET\$1SERVER\$1PORT ()
  + PG\$1CONF\$1LOAD\$1TIME ()
  + PG\$1IS\$1OTHER\$1TEMP\$1SCHEMA ()
  + PG\$1LISTENING\$1CHANNELS ()
  + PG\$1MY\$1TEMP\$1SKEMA ()
  + PG\$1POSTMASTER\$1START\$1TIME ()
  + PG\$1TRIGGER\$1DEPTH ()
  + TAMPILKAN VERSI ()
+ Fungsi pencarian teks dan operator
+ Fungsi transaksi IDs dan snapshot
+ Fungsi pemicu
+ fungsi XML/XML

# Menggunakan SQL
<a name="c_SQL_reference"></a>

**Topics**
+ [Konvensi referensi SQL](c_SQL_reference_conventions.md)
+ [Elemen dasar](c_Basic_elements.md)
+ [Ekspresi](r_expressions.md)
+ [Ketentuan](r_conditions.md)

Bahasa SQL terdiri dari perintah dan fungsi yang Anda gunakan untuk bekerja dengan database dan objek database. Bahasa ini juga memberlakukan aturan mengenai penggunaan tipe data, ekspresi, dan literal.

# Konvensi referensi SQL
<a name="c_SQL_reference_conventions"></a>

Bagian ini menjelaskan konvensi yang digunakan untuk menulis sintaks untuk ekspresi SQL, perintah, dan fungsi yang dijelaskan di bagian referensi SQL. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_SQL_reference_conventions.html)

# Elemen dasar
<a name="c_Basic_elements"></a>

**Topics**
+ [Nama dan pengidentifikasi](r_names.md)
+ [Literal](r_Literals.md)
+ [Nulls](r_Nulls.md)
+ [Jenis Data](c_Supported_data_types.md)
+ [Urutan pemeriksaan](c_collation_sequences.md)

Bagian ini mencakup aturan untuk bekerja dengan nama objek database, literal, nol, dan tipe data. 

# Nama dan pengidentifikasi
<a name="r_names"></a>

Nama mengidentifikasi objek database, termasuk tabel dan kolom, serta pengguna dan kata sandi. Istilah *nama* dan *pengenal* dapat digunakan secara bergantian. Ada dua jenis pengidentifikasi, pengidentifikasi standar dan pengidentifikasi yang dikutip atau dibatasi. Pengidentifikasi harus terdiri dari hanya karakter UTF-8 yang dapat dicetak. Huruf ASCII dalam pengidentifikasi standar dan terbatas tidak peka huruf besar/kecil dan dilipat menjadi huruf kecil dalam database. Dalam hasil kueri, nama kolom dikembalikan sebagai huruf kecil secara default. Untuk mengembalikan nama kolom dalam huruf besar, atur parameter [describe\$1field\$1name\$1in\$1uppercase](r_describe_field_name_in_uppercase.md) konfigurasi ke. **true**

## Pengidentifikasi standar
<a name="r_names-standard-identifiers"></a>

Pengidentifikasi SQL standar mematuhi seperangkat aturan dan harus: 
+ Mulailah dengan karakter alfabet satu byte ASCII atau karakter garis bawah, atau karakter multibyte UTF-8 dengan panjang dua hingga empat byte.
+ Karakter berikutnya dapat berupa karakter alfanumerik byte tunggal ASCII, garis bawah, atau tanda dolar, atau karakter multibyte UTF-8 dengan panjang dua hingga empat byte.
+ Panjangnya antara 1 dan 127 byte, tidak termasuk tanda kutip untuk pengidentifikasi yang dibatasi. 
+ Tidak mengandung tanda kutip dan tidak ada spasi. 
+ Tidak menjadi kata kunci SQL yang dicadangkan.

## Pengidentifikasi yang dibatasi
<a name="r_names-delimited-identifiers"></a>

Pengidentifikasi yang dibatasi (juga dikenal sebagai pengidentifikasi yang dikutip) dimulai dan diakhiri dengan tanda kutip ganda (“). Jika Anda menggunakan pengidentifikasi terbatas, Anda harus menggunakan tanda kutip ganda untuk setiap referensi ke objek itu. Pengidentifikasi dapat berisi karakter standar UTF-8 yang dapat dicetak selain tanda kutip ganda itu sendiri. Oleh karena itu, Anda dapat membuat nama kolom atau tabel yang menyertakan karakter ilegal, seperti spasi atau simbol persen.

Huruf ASCII dalam pengidentifikasi yang dibatasi tidak peka huruf besar/kecil dan dilipat menjadi huruf kecil. Untuk menggunakan tanda kutip ganda dalam string, Anda harus mendahuluinya dengan karakter tanda kutip ganda lainnya. 

## Pengidentifikasi peka huruf besar/kecil
<a name="r_names-case-sensitive-identifiers"></a>

Pengidentifikasi case-sensitive (juga dikenal sebagai pengidentifikasi huruf campuran) dapat berisi huruf besar dan kecil. Untuk menggunakan pengidentifikasi peka huruf besar/kecil, Anda dapat mengatur konfigurasi ke. `enable_case_sensitive_identifier` `true` Anda dapat mengatur konfigurasi ini untuk cluster atau untuk sesi. Untuk informasi selengkapnya, lihat [Nilai parameter default](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#default-param-group-values) di *Panduan Manajemen Amazon Redshift* dan. [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md) 

## Nama kolom sistem
<a name="r_names-system-column-names"></a>

Nama kolom sistem PostgreSQL berikut tidak dapat digunakan sebagai nama kolom di kolom yang ditentukan pengguna. Untuk informasi selengkapnya, lihat [https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html).
+ `oid`
+ `tableoid`
+ `xmin`
+ `cmin`
+ `xmax`
+ `cmax`
+ `ctid`

## Contoh
<a name="r_names-examples"></a>

Tabel ini menunjukkan contoh pengidentifikasi yang dibatasi, output yang dihasilkan, dan diskusi: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_names.html)

Untuk membuat tabel bernama grup dengan kolom bernama ini “is it”: 

```
create table "group" (
"This ""IS IT""" char(10));
```

Kueri berikut mengembalikan hasil yang sama: 

```
select "This ""IS IT"""
from "group";

this "is it"
--------------
(0 rows)
```

```
select "this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

`table.column`Sintaks yang sepenuhnya memenuhi syarat berikut juga mengembalikan hasil yang sama: 

```
select "group"."this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

Perintah CREATE TABLE berikut membuat tabel dengan garis miring dalam nama kolom: 

```
create table if not exists city_slash_id(
                  "city/id" integer not null,
                  state char(2) not null);
```

# Literal
<a name="r_Literals"></a>

Literal atau konstanta adalah nilai data tetap, terdiri dari urutan karakter atau konstanta numerik. Amazon Redshift mendukung beberapa jenis literal, termasuk:
+ Literal numerik untuk bilangan bulat, desimal, dan floating-point. Untuk informasi selengkapnya, lihat [Literal integer dan floating-point](r_numeric_literals201.md).
+ Karakter literal, juga disebut sebagai string, string karakter, atau konstanta karakter
+ Datetime dan interval literal, digunakan dengan tipe data datetime. Untuk informasi selengkapnya, lihat [Tanggal, waktu, dan literal stempel waktu](r_Date_and_time_literals.md) dan [Tipe data interval dan literal](r_interval_data_types.md).

# Nulls
<a name="r_Nulls"></a>

Jika kolom dalam baris hilang, tidak diketahui, atau tidak berlaku, itu adalah nilai nol atau dikatakan berisi null. Null dapat muncul di bidang tipe data apa pun yang tidak dibatasi oleh kunci primer atau NOT NULL kendala. Null tidak setara dengan nilai nol atau string kosong.

Setiap ekspresi aritmatika yang mengandung nol selalu mengevaluasi ke nol. Semua operator mengembalikan null ketika diberi argumen null atau operan.

Untuk menguji nol, gunakan kondisi perbandingan IS NULL dan IS NOT NULL. Karena null mewakili kurangnya data, null tidak sama atau tidak sama dengan nilai apa pun atau nol lainnya.

# Jenis Data
<a name="c_Supported_data_types"></a>

**Topics**
+ [Karakter multibyte](#c_Supported_data_types-multi-byte-characters)
+ [Jenis numerik](r_Numeric_types201.md)
+ [Jenis karakter](r_Character_types.md)
+ [Jenis Datetime](r_Datetime_types.md)
+ [Jenis Boolean](r_Boolean_type.md)
+ [Jenis HLLSKETCH](r_HLLSKTECH_type.md)
+ [Tipe SUPER](r_SUPER_type.md)
+ [Jenis VARBYTE](r_VARBYTE_type.md)
+ [Ketik kompatibilitas dan konversi](#r_Type_conversion)

Setiap nilai yang disimpan atau diambil Amazon Redshift memiliki tipe data dengan sekumpulan properti terkait tetap. Tipe data dideklarasikan saat tabel dibuat. Tipe data membatasi kumpulan nilai yang dapat berisi kolom atau argumen. 

Tabel berikut mencantumkan tipe data yang dapat Anda gunakan di tabel Amazon Redshift. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_Supported_data_types.html)

**catatan**  
Untuk informasi tentang tipe data yang tidak didukung, seperti “char” (perhatikan bahwa char terlampir dalam tanda kutip), lihat. [Tipe data PostgreSQL yang tidak didukung](c_unsupported-postgresql-datatypes.md)

## Karakter multibyte
<a name="c_Supported_data_types-multi-byte-characters"></a>

Tipe data VARCHAR mendukung karakter multibyte UTF-8 hingga maksimal empat byte. Karakter lima byte atau lebih lama tidak didukung. Untuk menghitung ukuran kolom VARCHAR yang berisi karakter multibyte, kalikan jumlah karakter dengan jumlah byte per karakter. Misalnya, jika string memiliki empat karakter Mandarin, dan setiap karakter panjangnya tiga byte, maka Anda memerlukan kolom VARCHAR (12) untuk menyimpan string.

Tipe data VARCHAR tidak mendukung titik kode UTF-8 yang tidak valid berikut ini: 

`0xD800 – 0xDFFF`(Urutan byte: `ED A0 80` —) `ED BF BF`

Tipe data CHAR tidak mendukung karakter multibyte.

# Jenis numerik
<a name="r_Numeric_types201"></a>

**Topics**
+ [Jenis bilangan bulat](#r_Numeric_types201-integer-types)
+ [Jenis DESIMAL atau NUMERIK](#r_Numeric_types201-decimal-or-numeric-type)
+ [Catatan tentang menggunakan kolom DESIMAL atau NUMERIK 128-bit](#r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns)
+ [Jenis Floating-Point](#r_Numeric_types201-floating-point-types)
+ [Perhitungan dengan nilai numerik](r_numeric_computations201.md)
+ [Literal integer dan floating-point](r_numeric_literals201.md)
+ [Contoh dengan tipe numerik](r_Examples_with_numeric_types201.md)

Tipe data numerik termasuk bilangan bulat, desimal, dan angka floating-point. 

## Jenis bilangan bulat
<a name="r_Numeric_types201-integer-types"></a>

Gunakan tipe data SMALLINT, INTEGER, dan BIGINT untuk menyimpan seluruh nomor dari berbagai rentang. Anda tidak dapat menyimpan nilai di luar rentang yang diizinkan untuk setiap jenis. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Numeric_types201.html)

## Jenis DESIMAL atau NUMERIK
<a name="r_Numeric_types201-decimal-or-numeric-type"></a>

*Gunakan tipe data DECIMAL atau NUMERIK untuk menyimpan nilai dengan presisi yang ditentukan pengguna.* Kata kunci DECIMAL dan NUMERIK dapat dipertukarkan. Dalam dokumen ini, *desimal* adalah istilah yang disukai untuk tipe data ini. Istilah *numerik* digunakan secara umum untuk merujuk pada tipe data integer, desimal, dan floating-point. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Numeric_types201.html)

*Tentukan kolom DECIMAL dalam tabel dengan menentukan *presisi* dan skala:* 

```
decimal(precision, scale)
```

 *presisi*   
Jumlah total digit signifikan dalam seluruh nilai: jumlah digit di kedua sisi titik desimal. Misalnya, angka tersebut `48.2891` memiliki presisi 6 dan skala 4. Presisi default, jika tidak ditentukan, adalah 18. Presisi maksimum adalah 38.  
 Jika jumlah digit di sebelah kiri titik desimal dalam nilai input melebihi presisi kolom dikurangi skalanya, nilai tidak dapat disalin ke kolom (atau dimasukkan atau diperbarui). Aturan ini berlaku untuk setiap nilai yang berada di luar rentang definisi kolom. Misalnya, rentang nilai yang diizinkan untuk `numeric(5,2)` kolom adalah `-999.99` untuk`999.99`. 

 *skala*   
Jumlah digit desimal di bagian pecahan nilai, di sebelah kanan titik desimal. Bilangan bulat memiliki skala nol. Dalam spesifikasi kolom, nilai skala harus kurang dari atau sama dengan nilai presisi. Skala default, jika tidak ditentukan, adalah 0. Skala maksimum adalah 37.  
Jika skala nilai input yang dimuat ke dalam tabel lebih besar dari skala kolom, nilainya dibulatkan ke skala yang ditentukan. Misalnya, kolom PRICEPAID dalam tabel PENJUALAN adalah kolom DECIMAL (8,2). Jika nilai DECIMAL (8,4) dimasukkan ke dalam kolom PRICEPAID, nilainya dibulatkan ke skala 2.   

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 Namun, hasil pemeran eksplisit nilai yang dipilih dari tabel tidak dibulatkan.

**catatan**  
Nilai positif maksimum yang dapat Anda masukkan ke dalam kolom DECIMAL (19,0) adalah `9223372036854775807` (2 63 -1). Nilai negatif maksimum adalah`-9223372036854775808`. Misalnya, upaya untuk memasukkan nilai `9999999999999999999` (19 nines) akan menyebabkan kesalahan overflow. Terlepas dari penempatan titik desimal, string terbesar yang dapat diwakili oleh Amazon Redshift sebagai angka DESIMAL adalah. `9223372036854775807` Misalnya, nilai terbesar yang dapat Anda muat ke kolom DECIMAL (19,18) adalah. `9.223372036854775807`  
Aturan-aturan ini karena nilai DECIMAL dengan 19 atau kurang digit presisi signifikan disimpan secara internal sebagai bilangan bulat 8-byte, sedangkan nilai DECIMAL dengan 20 hingga 38 digit presisi signifikan disimpan sebagai bilangan bulat 16-byte. 

## Catatan tentang menggunakan kolom DESIMAL atau NUMERIK 128-bit
<a name="r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

Jangan sewenang-wenang menetapkan presisi maksimum ke kolom DECIMAL kecuali Anda yakin bahwa aplikasi Anda memerlukan presisi itu. Nilai 128-bit menggunakan ruang disk dua kali lebih banyak daripada nilai 64-bit dan dapat memperlambat waktu eksekusi kueri. 

## Jenis Floating-Point
<a name="r_Numeric_types201-floating-point-types"></a>

Gunakan tipe data REAL dan DOUBLE PRECISION untuk menyimpan nilai numerik dengan *presisi variabel*. Jenis ini adalah tipe *yang tidak tepat*, yang berarti bahwa beberapa nilai disimpan sebagai perkiraan, sehingga menyimpan dan mengembalikan nilai tertentu dapat mengakibatkan sedikit perbedaan. Jika Anda memerlukan penyimpanan dan perhitungan yang tepat (seperti untuk jumlah uang), gunakan tipe data DECIMAL.

REAL mewakili format floating point presisi tunggal, menurut IEEE Standard 754 untuk Binary Floating-Point Arithmetic. Ini memiliki presisi sekitar 6 digit, dan kisaran sekitar 1E-37 hingga 1E\$137. Anda juga dapat menentukan tipe data ini sebagai FLOAT4.

DOUBLE PRECISION mewakili format floating point presisi ganda, menurut IEEE Standard 754 untuk Binary Floating-Point Arithmetic. Ini memiliki presisi sekitar 15 digit, dan kisaran sekitar 1E-307 hingga 1E\$1308. Anda juga dapat menentukan tipe data ini sebagai FLOAT atau FLOAT8.

Selain nilai numerik biasa, tipe floating-point memiliki beberapa nilai khusus. Gunakan tanda kutip tunggal di sekitar nilai-nilai ini saat menggunakannya di SQL:
+ `NaN` – not-a-number
+ `Infinity`— tak terhingga
+ `-Infinity`— ketidakterbatasan negatif

Misalnya, untuk not-a-number `day_charge` menyisipkan kolom tabel `customer_activity` menjalankan SQL berikut:

```
insert into customer_activity(day_charge) values('NaN');
```

# Perhitungan dengan nilai numerik
<a name="r_numeric_computations201"></a>

Dalam konteks ini, *komputasi* mengacu pada operasi matematika biner: penjumlahan, pengurangan, perkalian, dan pembagian. Bagian ini menjelaskan jenis pengembalian yang diharapkan untuk operasi ini, serta rumus spesifik yang diterapkan untuk menentukan presisi dan skala saat tipe data DECIMAL terlibat. 

Ketika nilai numerik dihitung selama pemrosesan kueri, Anda mungkin mengalami kasus di mana perhitungan tidak mungkin dan kueri mengembalikan kesalahan luapan numerik. Anda mungkin juga mengalami kasus di mana skala nilai yang dihitung bervariasi atau tidak terduga. Untuk beberapa operasi, Anda dapat menggunakan casting eksplisit (jenis promosi) atau parameter konfigurasi Amazon Redshift untuk mengatasi masalah ini. 

Untuk informasi tentang hasil perhitungan serupa dengan fungsi SQL, lihat. [Fungsi agregat](c_Aggregate_Functions.md) 

## Jenis pengembalian untuk perhitungan
<a name="r_numeric_computations201-return-types-for-computations"></a>

Mengingat kumpulan tipe data numerik yang didukung di Amazon Redshift, tabel berikut menunjukkan tipe pengembalian yang diharapkan untuk operasi penambahan, pengurangan, perkalian, dan pembagian. Kolom pertama di sisi kiri tabel mewakili operan pertama dalam perhitungan, dan baris atas mewakili operan kedua. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_numeric_computations201.html)

## Presisi dan skala hasil DECIMAL yang dihitung
<a name="r_numeric_computations201-precision-and-scale-of-computed-decimal-results"></a>

Tabel berikut merangkum aturan untuk menghitung presisi dan skala yang dihasilkan ketika operasi matematika mengembalikan hasil DECIMAL. Dalam tabel ini, `p1` dan `s1` mewakili presisi dan skala operan pertama dalam perhitungan dan `p2` dan `s2` mewakili presisi dan skala operan kedua. (Terlepas dari perhitungan ini, presisi hasil maksimum adalah 38, dan skala hasil maksimum adalah 38.) 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_numeric_computations201.html)

Misalnya, kolom PRICEPAID dan KOMISI dalam tabel PENJUALAN keduanya adalah kolom DECIMAL (8,2). Jika Anda membagi PRICEPAID dengan KOMISI (atau sebaliknya), rumusnya diterapkan sebagai berikut: 

```
Precision = 8-2 + 2 + max(4,2+8-2+1)
= 6 + 2 + 9 = 17

Scale = max(4,2+8-2+1) = 9

Result = DECIMAL(17,9)
```

Perhitungan berikut adalah aturan umum untuk menghitung presisi dan skala yang dihasilkan untuk operasi yang dilakukan pada nilai DECIMAL dengan operator yang ditetapkan seperti UNION, INTERSECT, dan EXCEPT atau fungsi seperti COALESCE dan DECODE: 

```
Scale = max(s1,s2)
Precision = min(max(p1-s1,p2-s2)+scale,19)
```

Misalnya, DEC1 tabel dengan satu kolom DECIMAL (7,2) digabungkan dengan DEC2 tabel dengan satu kolom DECIMAL (15,3) untuk membuat tabel. DEC3 Skema DEC3 menunjukkan bahwa kolom menjadi kolom NUMERIK (15,3). 

```
create table dec3 as select * from dec1 union select * from dec2;
```

Hasil 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'dec3';

column |     type      | encoding | distkey | sortkey 
-------+---------------+----------+---------+---------
c1     | numeric(15,3) | none     | f       | 0
```

Pada contoh di atas, rumus diterapkan sebagai berikut: 

```
Precision = min(max(7-2,15-3) + max(2,3), 19)
= 12 + 3 = 15

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## Catatan tentang operasi divisi
<a name="r_numeric_computations201-notes-on-division-operations"></a>

Untuk operasi divisi, divide-by-zero kondisi mengembalikan kesalahan. 

Batas skala 100 diterapkan setelah presisi dan skala dihitung. Jika skala hasil yang dihitung lebih besar dari 100, hasil pembagian diskalakan sebagai berikut:
+ presisi = ` precision - (scale - max_scale)` 
+ Skala = ` max_scale ` 

Jika presisi yang dihitung lebih besar dari presisi maksimum (38), presisi dikurangi menjadi 38, dan skala menjadi hasil dari: `max((38 + scale - precision), min(4, 100))` 

## Kondisi luapan
<a name="r_numeric_computations201-overflow-conditions"></a>

Overflow diperiksa untuk semua perhitungan numerik. Data DESIMAL dengan presisi 19 atau kurang disimpan sebagai bilangan bulat 64-bit. Data DESIMAL dengan presisi yang lebih besar dari 19 disimpan sebagai bilangan bulat 128-bit. Ketepatan maksimum untuk semua nilai DECIMAL adalah 38, dan skala maksimum adalah 37. Kesalahan overflow terjadi ketika nilai melebihi batas ini, yang berlaku untuk set hasil menengah dan akhir: 
+ Casting eksplisit menghasilkan kesalahan runtime overflow ketika nilai data tertentu tidak sesuai dengan presisi atau skala yang diminta yang ditentukan oleh fungsi cast. Misalnya, Anda tidak dapat mentransmisikan semua nilai dari kolom PRICEPAID di tabel PENJUALAN (kolom DECIMAL (8,2)) dan mengembalikan hasil DECIMAL (7,3): 

  ```
  select pricepaid::decimal(7,3) from sales;
  ERROR:  Numeric data overflow (result precision)
  ```

  Kesalahan ini terjadi karena *beberapa* nilai yang lebih besar di kolom PRICEPAID tidak dapat dilemparkan.
+ Operasi perkalian menghasilkan hasil di mana skala hasil adalah jumlah dari skala masing-masing operan. Jika kedua operan memiliki skala 4, misalnya, skala hasilnya adalah 8, hanya menyisakan 10 digit untuk sisi kiri titik desimal. Oleh karena itu, relatif mudah untuk mengalami kondisi luapan ketika mengalikan dua angka besar yang keduanya memiliki skala signifikan.

  Contoh berikut menghasilkan kesalahan overflow.

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) * CAST(10 AS DECIMAL(38, 20));
  ERROR: 128 bit numeric data overflow (multiplication)
  ```

  Anda dapat mengatasi kesalahan overflow dengan menggunakan pembagian alih-alih perkalian. Gunakan contoh berikut untuk membagi dengan 1 dibagi dengan pembagi asli.

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) / (1 / CAST(10 AS DECIMAL(38, 20)));
  +----------+
  | ?column? |
  +----------+
  | 10       |
  +----------+
  ```

## Perhitungan numerik dengan tipe INTEGER dan DECIMAL
<a name="r_numeric_computations201-numeric-calculations-with-integer-and-decimal-types"></a>

Ketika salah satu operan dalam perhitungan memiliki tipe data INTEGER dan operan lainnya adalah DECIMAL, operan INTEGER secara implisit dilemparkan sebagai DECIMAL: 
+ INT2 (SMALLINT) dilemparkan sebagai DECIMAL (5,0) 
+ INT4 (INTEGER) dilemparkan sebagai DECIMAL (10,0) 
+ INT8 (BIGINT) berperan sebagai DECIMAL (19,0) 

Misalnya, jika Anda mengalikan SALES.COMMISSION, kolom DECIMAL (8,2), dan SALES.QTYSOLD, kolom SMALLINT, perhitungan ini dilemparkan sebagai: 

```
DECIMAL(8,2) * DECIMAL(5,0)
```

# Literal integer dan floating-point
<a name="r_numeric_literals201"></a>

Literal atau konstanta yang mewakili angka dapat berupa integer atau floating-point.

## Literal bilangan bulat
<a name="r_numeric_literals201-integer-literals"></a>

Konstanta bilangan bulat adalah urutan digit 0-9, dengan tanda opsional positif (\$1) atau negatif (-) sebelum digit.

## Sintaksis
<a name="r_numeric_literals201-synopsis"></a>

```
[ + | - ] digit ...
```

## Contoh
<a name="r_numeric_literals201-examples"></a>

Bilangan bulat yang valid meliputi yang berikut:

```
23
-555
+17
```

## Literal titik mengambang
<a name="r_numeric_literals201-floating-point-literals"></a>

Literal floating-point (juga disebut sebagai literal desimal, numerik, atau fraksional) adalah urutan digit yang dapat mencakup titik desimal, dan opsional penanda eksponen (e).

## Sintaksis
<a name="r_numeric_literals201-synopsis2"></a>

```
[ + | - ] digit ... [ . ] [ digit ...]
[ e | E [ + | - ] digit ... ]
```

## Argumen
<a name="r_numeric_literals201-arguments"></a>

e \$1 E  
e atau E menunjukkan bahwa angka tersebut ditentukan dalam notasi ilmiah.

## Contoh
<a name="r_numeric_literals201-examples2"></a>

Literal floating-point yang valid meliputi:

```
3.14159
-37.
2.0e19
-2E-19
```

# Contoh dengan tipe numerik
<a name="r_Examples_with_numeric_types201"></a>



## CREATE TABLE pernyataan
<a name="r_Examples_with_numeric_types201-create-table-statement"></a>

Pernyataan CREATE TABLE berikut menunjukkan deklarasi tipe data numerik yang berbeda:

```
create table film (
film_id integer,
language_id smallint,
original_language_id smallint,
rental_duration smallint default 3,
rental_rate numeric(4,2) default 4.99,
length smallint,
replacement_cost real default 25.00);
```

## Mencoba menyisipkan bilangan bulat yang berada di luar jangkauan
<a name="r_Examples_with_numeric_types201-attempt-to-insert-an-integer-that-is-out-of-range"></a>

Contoh berikut mencoba untuk memasukkan nilai 33000 ke dalam kolom SMALLINT.

```
insert into film(language_id) values(33000);
```

Rentang untuk SMALLINT adalah -32768 hingga \$132767, jadi Amazon Redshift mengembalikan kesalahan.

```
An error occurred when executing the SQL command:
insert into film(language_id) values(33000)

ERROR: smallint out of range [SQL State=22003]
```

## Masukkan nilai desimal ke dalam kolom integer
<a name="r_Examples_with_numeric_types201-insert-a-decimal-value-into-an-integer-column"></a>

Contoh berikut menyisipkan nilai desimal ke dalam kolom INT.

```
insert into film(language_id) values(1.5);
```

Nilai ini dimasukkan tetapi dibulatkan ke nilai integer 2.

## Masukkan desimal yang berhasil karena skalanya dibulatkan
<a name="r_Examples_with_numeric_types201-insert-a-decimal-that-succeeds-because-its-scale-is-rounded"></a>

Contoh berikut menyisipkan nilai desimal yang memiliki presisi lebih tinggi dari kolom.

```
insert into film(rental_rate) values(35.512);
```

Dalam hal ini, nilai `35.51` dimasukkan ke dalam kolom.

## Mencoba menyisipkan nilai desimal yang berada di luar jangkauan
<a name="r_Examples_with_numeric_types201-attempt-to-insert-a-decimal-value-that-is-out-of-range"></a>

Dalam hal ini, `350.10` nilainya di luar jangkauan. Jumlah digit untuk nilai dalam kolom DECIMAL sama dengan presisi kolom dikurangi skalanya (4 minus 2 untuk kolom RENTAL\$1RATE). Dengan kata lain, rentang yang diizinkan untuk `DECIMAL(4,2)` kolom adalah `-99.99` melalui`99.99`.

```
insert into film(rental_rate) values (350.10);
ERROR:  numeric field overflow
DETAIL:  The absolute value is greater than or equal to 10^2 for field with precision 4, scale 2.
```

## Masukkan nilai presisi variabel ke dalam kolom NYATA
<a name="r_Examples_with_numeric_types201-insert-variable-precision-values-into-a-real-column"></a>

Contoh berikut menyisipkan nilai presisi variabel ke dalam kolom REAL.

```
insert into film(replacement_cost) values(1999999.99);

insert into film(replacement_cost) values(1999.99);

select replacement_cost from film;

+------------------+
| replacement_cost |
+------------------+
| 2000000          |
| 1999.99          |
+------------------+
```

Nilai `1999999.99` dikonversi `2000000` untuk memenuhi persyaratan presisi untuk `REAL` kolom. Nilai `1999.99` dimuat apa adanya.

# Jenis karakter
<a name="r_Character_types"></a>

**Topics**
+ [Penyimpanan dan rentang](#r_Character_types-storage-and-ranges)
+ [CHAR atau KARAKTER](#r_Character_types-char-or-character)
+ [VARCHAR atau KARAKTER BERVARIASI](#r_Character_types-varchar-or-character-varying)
+ [Jenis NCHAR dan NVARCHAR](#r_Character_types-nchar-and-nvarchar-types)
+ [Jenis TEXT dan BPCHAR](#r_Character_types-text-and-bpchar-types)
+ [Signifikansi trailing blanko](#r_Character_types-significance-of-trailing-blanks)
+ [Contoh dengan tipe karakter](r_Examples_with_character_types.md)

Tipe data karakter termasuk CHAR (karakter) dan VARCHAR (karakter bervariasi). 

## Penyimpanan dan rentang
<a name="r_Character_types-storage-and-ranges"></a>

Tipe data CHAR dan VARCHAR didefinisikan dalam hal byte, bukan karakter. Kolom CHAR hanya dapat berisi karakter single-byte, sehingga kolom CHAR (10) dapat berisi string dengan panjang maksimum 10 byte. VARCHAR dapat berisi karakter multibyte, hingga maksimal empat byte per karakter. Misalnya, kolom VARCHAR (12) dapat berisi 12 karakter single-byte, 6 karakter dua-byte, 4 karakter tiga byte, atau 3 karakter empat byte. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Character_types.html)

**catatan**  
Sintaks CREATE TABLE mendukung kata kunci MAX untuk tipe data karakter. Contoh:  

```
create table test(col1 varchar(max));
```
Untuk CHAR, MAX mendefinisikan lebar kolom sebagai 4096 byte.  
Untuk VARCHAR, MAX mendefinisikan lebar kolom sebagai 65.535 byte dalam pernyataan CREATE TABLE. Untuk operasi dalam memori, VARCHAR (MAX) mendukung hingga 16.000.000 byte.

## CHAR atau KARAKTER
<a name="r_Character_types-char-or-character"></a>

Gunakan kolom CHAR atau CHARACTER untuk menyimpan string dengan panjang tetap. String ini dilapisi dengan blanko, sehingga kolom CHAR (10) selalu menempati 10 byte penyimpanan. 

```
char(10)
```

 Kolom CHAR tanpa spesifikasi panjang menghasilkan kolom CHAR (1). 

## VARCHAR atau KARAKTER BERVARIASI
<a name="r_Character_types-varchar-or-character-varying"></a>

Gunakan kolom VARCHAR atau CHARACTER VARY untuk menyimpan string panjang variabel dengan batas tetap. String ini tidak dilapisi dengan blanko, sehingga kolom VARCHAR (120) terdiri dari maksimum 120 karakter single-byte, 60 karakter dua-byte, 40 karakter tiga byte, atau 30 karakter empat byte.

```
varchar(120)
```

Jika Anda menggunakan tipe data VARCHAR tanpa penentu panjang dalam pernyataan CREATE TABLE, panjang default adalah 256.

[Fungsi string](String_functions_header.md)sekarang mendukung hingga 16.000.000 byte. Misalnya, output fungsi CONCAT sebelumnya terbatas pada 65535 byte, tetapi sekarang mendukung hingga 16.000.000 byte.

```
SELECT LEN(CONCAT(REPEAT('A', 5000000), REPEAT('B', 5000000))) AS total_length;

 total_length
--------------
     10000000
```

## Jenis NCHAR dan NVARCHAR
<a name="r_Character_types-nchar-and-nvarchar-types"></a>

Anda dapat membuat kolom dengan tipe NCHAR dan NVARCHAR (juga dikenal sebagai karakter nasional dan karakter nasional yang bervariasi jenis). Jenis ini dikonversi ke tipe CHAR dan VARCHAR, masing-masing, dan disimpan dalam jumlah byte yang ditentukan. 

Kolom NCHAR tanpa spesifikasi panjang dikonversi ke kolom CHAR (1). 

Kolom NVARCHAR tanpa spesifikasi panjang dikonversi ke kolom VARCHAR (256). 

## Jenis TEXT dan BPCHAR
<a name="r_Character_types-text-and-bpchar-types"></a>

Anda dapat membuat tabel Amazon Redshift dengan kolom TEXT, tetapi dikonversi ke kolom VARCHAR (256) yang menerima nilai panjang variabel dengan maksimum 256 karakter. 

Anda dapat membuat kolom Amazon Redshift dengan tipe BPCHAR (blank-padded character), yang diubah Amazon Redshift menjadi kolom CHAR (256) dengan panjang tetap. 

## Signifikansi trailing blanko
<a name="r_Character_types-significance-of-trailing-blanks"></a>

Baik tipe data CHAR dan VARCHAR menyimpan string hingga *n* byte panjangnya. Upaya untuk menyimpan string yang lebih panjang ke dalam kolom jenis ini menghasilkan kesalahan, kecuali karakter tambahan adalah semua spasi (kosong), dalam hal ini string terpotong hingga panjang maksimum. Jika string lebih pendek dari panjang maksimum, nilai CHAR dilapisi dengan kosong, tetapi nilai VARCHAR menyimpan string tanpa kosong.

Trailing blank dalam nilai CHAR selalu tidak signifikan secara semantik. Mereka diabaikan ketika Anda membandingkan dua nilai CHAR, tidak termasuk dalam perhitungan PANJANG, dan dihapus saat Anda mengonversi nilai CHAR ke tipe string lain. 

Spasi trailing dalam nilai VARCHAR dan CHAR diperlakukan sebagai tidak signifikan secara semantik ketika nilai dibandingkan.

Perhitungan panjang mengembalikan panjang string karakter VARCHAR dengan spasi tambahan yang termasuk dalam panjangnya. Trailing blank tidak dihitung panjangnya untuk string karakter dengan panjang tetap.

# Contoh dengan tipe karakter
<a name="r_Examples_with_character_types"></a>

## CREATE TABLE pernyataan
<a name="r_Examples_with_character_types-create-table-statement"></a>

Pernyataan CREATE TABLE berikut menunjukkan penggunaan tipe data VARCHAR dan CHAR: 

```
create table address(
address_id integer,
address1 varchar(100),
address2 varchar(50),
district varchar(20),
city_name char(20),
state char(2),
postal_code char(5)
);
```

Contoh berikut menggunakan tabel ini. 

## Bagian belakang kosong dalam string karakter panjang variabel
<a name="r_Examples_with_character_types-trailing-blanks-in-variable-length-character-strings"></a>

Karena ADDRESS1 adalah kolom VARCHAR, bagian belakang kosong di alamat yang disisipkan kedua secara semantik tidak signifikan. Dengan kata lain, kedua alamat yang disisipkan ini *cocok*. 

```
insert into address(address1) values('9516 Magnolia Boulevard');

insert into address(address1) values('9516 Magnolia Boulevard  ');
```

```
select count(*) from address
where address1='9516 Magnolia Boulevard';

count
-------
2
(1 row)
```

Jika ADDRESS1 kolom adalah kolom CHAR dan nilai yang sama dimasukkan, kueri COUNT (\$1) akan mengenali string karakter sebagai sama dan kembali. `2`

## Hasil dari fungsi LENGTH
<a name="r_Examples_with_character_types-results-of-the-length-function"></a>

Fungsi LENGTH mengenali trailing blank di kolom VARCHAR: 

```
select length(address1) from address;

length
--------
23
25
(2 rows)
```

Nilai `Augusta` dalam kolom CITY\$1NAME, yang merupakan kolom CHAR, akan selalu mengembalikan panjang 7 karakter, terlepas dari setiap trailing blank dalam string input. 

## Nilai yang melebihi panjang kolom
<a name="r_Examples_with_character_types-values-that-exceed-the-length-of-the-column"></a>

String karakter tidak terpotong agar sesuai dengan lebar kolom yang dideklarasikan: 

```
insert into address(city_name) values('City of South San Francisco');
ERROR: value too long for type character(20)
```

Solusi untuk masalah ini adalah dengan mentransmisikan nilai ke ukuran kolom: 

```
insert into address(city_name)
values('City of South San Francisco'::char(20));
```

Dalam hal ini, 20 karakter pertama dari string (`City of South San Fr`) akan dimuat ke dalam kolom. 

# Jenis Datetime
<a name="r_Datetime_types"></a>

**Topics**
+ [Penyimpanan dan rentang](#r_Datetime_types-storage-and-ranges)
+ [DATE](#r_Datetime_types-date)
+ [TIME](#r_Datetime_types-time)
+ [JADWAL](#r_Datetime_types-timetz)
+ [TIMESTAMP](#r_Datetime_types-timestamp)
+ [TIMESTAMPTZ](#r_Datetime_types-timestamptz)
+ [Contoh dengan tipe datetime](r_Examples_with_datetime_types.md)
+ [Tanggal, waktu, dan literal stempel waktu](r_Date_and_time_literals.md)
+ [Tipe data interval dan literal](r_interval_data_types.md)

Tipe data datetime termasuk DATE, TIME, TIMETZ, TIMESTAMP, dan TIMESTAMPTZ.

## Penyimpanan dan rentang
<a name="r_Datetime_types-storage-and-ranges"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Datetime_types.html)

## DATE
<a name="r_Datetime_types-date"></a>

Gunakan tipe data DATE untuk menyimpan tanggal kalender sederhana tanpa cap waktu.

## TIME
<a name="r_Datetime_types-time"></a>

Waktu adalah alias dari TIME WITHOUT TIME ZONE.

Gunakan tipe data TIME untuk menyimpan waktu dalam sehari. 

Kolom TIME menyimpan nilai hingga maksimum enam digit presisi untuk detik pecahan.

Secara default, nilai TIME adalah Coordinated Universal Time (UTC) di tabel pengguna dan tabel sistem Amazon Redshift. 

## JADWAL
<a name="r_Datetime_types-timetz"></a>

TIMETZ adalah alias dari TIME WITH TIME ZONE.

Gunakan tipe data TIMETZ untuk menyimpan waktu hari dengan zona waktu. 

Kolom TIMETZ menyimpan nilai hingga maksimum enam digit presisi untuk detik pecahan.

Secara default, nilai TIMETZ adalah UTC di tabel pengguna dan tabel sistem Amazon Redshift. 

## TIMESTAMP
<a name="r_Datetime_types-timestamp"></a>

TIMESTAMP adalah alias TIMESTAMP TANPA ZONA WAKTU.

Gunakan tipe data TIMESTAMP untuk menyimpan nilai stempel waktu lengkap yang menyertakan tanggal dan waktu hari. 

Kolom TIMESTAMP menyimpan nilai dengan presisi maksimal enam digit selama pecahan detik.

Jika Anda menyisipkan tanggal ke kolom TIMESTAMP, atau tanggal dengan nilai stempel waktu sebagian, nilai tersebut secara implisit diubah menjadi nilai stempel waktu penuh. Nilai stempel waktu penuh ini memiliki nilai default (00) untuk jam, menit, dan detik yang hilang. Nilai zona waktu dalam string masukan diabaikan.

Secara default, nilai TIMESTAMP adalah UTC di tabel pengguna dan tabel sistem Amazon Redshift. 

## TIMESTAMPTZ
<a name="r_Datetime_types-timestamptz"></a>

TIMESTAMPTZ adalah alias dari TIMESTAMP WITH TIME ZONE.

Gunakan tipe data TIMESTAMPTZ untuk memasukkan nilai stempel waktu lengkap yang mencakup tanggal, waktu hari, dan zona waktu. Ketika nilai input menyertakan zona waktu, Amazon Redshift menggunakan zona waktu untuk mengonversi nilai ke UTC dan menyimpan nilai UTC.

Untuk melihat daftar nama zona waktu yang didukung, jalankan perintah berikut. 

```
select pg_timezone_names();
```

 Untuk melihat daftar singkatan zona waktu yang didukung, jalankan perintah berikut. 

```
select pg_timezone_abbrevs();
```

Anda juga dapat menemukan informasi terkini tentang zona waktu di [Database Zona Waktu IANA](https://www.iana.org/time-zones).

Tabel berikut memiliki contoh format zona waktu. 


| format | Contoh | 
| --- | --- | 
|  dd mon hh:mi:ss yyyy tz  |  17 Des 07:37:16 1997 PST   | 
|  mm/dd/yyyyhh:mi: ss.ss tz  |  12/17/1997 07:37:16.00 PST  | 
|  mm/dd/yyyyhh:mi: ss.ss tz  |  12/17/1997 07:37:16.00 US/Pasifik  | 
|  yyyy-mm-dd hh:mi: ss\$1/- tz  |  1997-12-17 07:37:16-08   | 
| dd.mm.yyyy hh:mi:ss tz |  17.12.1997 07:37:16.00 PST  | 

Kolom TIMESTAMPTZ menyimpan nilai hingga maksimum enam digit presisi untuk detik pecahan.

Jika Anda menyisipkan tanggal ke kolom TIMESTAMPTZ, atau tanggal dengan stempel waktu sebagian, nilainya secara implisit diubah menjadi nilai stempel waktu penuh. Nilai stempel waktu penuh ini memiliki nilai default (00) untuk jam, menit, dan detik yang hilang.

Nilai TIMESTAMPTZ adalah UTC dalam tabel pengguna.

# Contoh dengan tipe datetime
<a name="r_Examples_with_datetime_types"></a>

Berikut ini, Anda dapat menemukan contoh untuk bekerja dengan tipe datetime yang didukung oleh Amazon Redshift.

## Contoh tanggal
<a name="r_Examples_with_datetime_types-date-examples"></a>

Contoh berikut menyisipkan tanggal yang memiliki format berbeda dan menampilkan output. 

```
create table datetable (start_date date, end_date date);
```

```
insert into datetable values ('2008-06-01','2008-12-31');

insert into datetable values ('Jun 1,2008','20081231');
```

```
select * from datetable order by 1;

start_date |  end_date
-----------------------
2008-06-01 | 2008-12-31
2008-06-01 | 2008-12-31
```

Jika Anda memasukkan nilai stempel waktu ke kolom DATE, bagian waktu diabaikan dan hanya tanggal yang dimuat.

## Contoh waktu
<a name="r_Examples_with_datetime_types-time-examples"></a>

Contoh berikut menyisipkan TIME dan TIMETZ nilai yang memiliki format yang berbeda dan menampilkan output.

```
create table timetable (start_time time, end_time timetz);
```

```
insert into timetable values ('19:11:19','20:41:19 UTC');
insert into timetable values ('191119', '204119 UTC');
```

```
select * from timetable order by 1;
start_time |  end_time
------------------------
 19:11:19  | 20:41:19+00
 19:11:19  | 20:41:19+00
```

## Contoh cap waktu
<a name="r_Examples_with_datetime_types-timestamp-examples"></a>

Jika Anda memasukkan tanggal ke kolom TIMESTAMP atau TIMESTAMPTZ, waktu defaultnya adalah tengah malam. Misalnya, jika Anda memasukkan literal`20081231`, nilai yang disimpan adalah`2008-12-31 00:00:00`. 

Untuk mengubah zona waktu untuk sesi saat ini, gunakan [SET](r_SET.md) perintah untuk mengatur parameter [timezone](r_timezone_config.md) konfigurasi.

Contoh berikut menyisipkan stempel waktu yang memiliki format berbeda dan menampilkan tabel yang dihasilkan. 

```
create table tstamp(timeofday timestamp, timeofdaytz timestamptz);

insert into tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

SELECT * FROM tstamp;

+---------------------+------------------------+
|      timeofday      |      timeofdaytz       |
+---------------------+------------------------+
| 2008-06-01 09:59:59 | 2008-06-01 14:59:59+00 |
| 2008-12-31 18:20:00 | 2008-12-31 18:20:00+00 |
| 2008-06-01 09:59:59 | 2008-06-01 09:59:59+00 |
+---------------------+------------------------+
```

# Tanggal, waktu, dan literal stempel waktu
<a name="r_Date_and_time_literals"></a>

Berikut ini adalah aturan untuk bekerja dengan literal tanggal, waktu, dan stempel waktu yang didukung oleh Amazon Redshift. 

## Tanggal
<a name="r_Date_and_time_literals-dates"></a>

Tanggal input berikut adalah semua contoh valid dari nilai tanggal literal untuk tipe data DATE yang dapat Anda muat ke dalam tabel Amazon Redshift. `MDY DateStyle`Mode default diasumsikan berlaku. Mode ini berarti bahwa nilai bulan mendahului nilai hari dalam string seperti `1999-01-08` dan. `01/02/00` 

**catatan**  
Tanggal atau stempel waktu literal harus dilampirkan dalam tanda kutip saat Anda memuatnya ke dalam tabel.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Date_and_time_literals.html)

## Kali
<a name="r_Date_and_time_literals-times"></a>

Waktu input berikut adalah semua contoh valid dari nilai waktu literal untuk tipe data TIME dan TIMETZ yang dapat Anda muat ke dalam tabel Amazon Redshift. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Date_and_time_literals.html)

## Stempel waktu
<a name="r_Date_and_time_literals-timestamps"></a>

Stempel waktu masukan berikut adalah semua contoh valid dari nilai waktu literal untuk tipe data TIMESTAMP dan TIMESTAMPTZ yang dapat Anda muat ke dalam tabel Amazon Redshift. Semua literal tanggal yang valid dapat digabungkan dengan literal waktu berikut. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Date_and_time_literals.html)

## Nilai datetime khusus
<a name="r_Date_and_time_literals-special-datetime-values"></a>

Nilai khusus berikut dapat digunakan sebagai literal datetime dan sebagai argumen untuk fungsi tanggal. Mereka membutuhkan tanda kutip tunggal dan dikonversi ke nilai stempel waktu biasa selama pemrosesan kueri. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Date_and_time_literals.html)

Contoh berikut menunjukkan bagaimana `now` dan `today` bekerja dengan fungsi DATEADD.

```
select dateadd(day,1,'today');

date_add
---------------------
2009-11-17 00:00:00
(1 row)

select dateadd(day,1,'now');

date_add
----------------------------
2009-11-17 10:45:32.021394
(1 row)
```

# Tipe data interval dan literal
<a name="r_interval_data_types"></a>

Anda dapat menggunakan tipe data interval untuk menyimpan durasi waktu dalam unit seperti,,,`seconds`, `minutes``hours`, `days``months`, dan`years`. Tipe data interval dan literal dapat digunakan dalam perhitungan datetime, seperti, menambahkan interval ke tanggal dan stempel waktu, menjumlahkan interval, dan mengurangi interval dari tanggal atau stempel waktu. Literal interval dapat digunakan sebagai nilai masukan untuk kolom tipe data interval dalam tabel. 

## Sintaks tipe data interval
<a name="r_interval_data_types-syntax"></a>

Untuk menentukan tipe data interval untuk menyimpan durasi waktu dalam tahun dan bulan:

```
INTERVAL year_to_month_qualifier
```

Untuk menentukan tipe data interval untuk menyimpan durasi dalam hari, jam, menit, dan detik:

```
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
```

## Sintaks interval literal
<a name="r_interval_data_types-syntax-literal"></a>

Untuk menentukan interval literal untuk menentukan durasi waktu dalam tahun dan bulan:

```
INTERVAL quoted-string year_to_month_qualifier
```

Untuk menentukan interval literal untuk menentukan durasi dalam hari, jam, menit, dan detik:

```
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
```

## Pendapat
<a name="r_interval_data_types-arguments"></a>

 *string yang dikutip*   
Menentukan nilai numerik positif atau negatif menentukan kuantitas dan unit datetime sebagai string input. **Jika *string yang dikutip* hanya berisi numerik, maka Amazon Redshift menentukan unit dari year\$1to\$1month\$1qualifier atau day\$1to\$1second\$1qualifier.** Misalnya, `'23' MONTH` mewakili`1 year 11 months`, `'-2' DAY` mewakili`-2 days 0 hours 0 minutes 0.0 seconds`, `'1-2' MONTH` mewakili`1 year 2 months`, dan `'13 day 1 hour 1 minute 1.123 seconds' SECOND` mewakili`13 days 1 hour 1 minute 1.123 seconds`. Untuk informasi selengkapnya tentang format keluaran suatu interval, lihat[Gaya interval](#r_interval_data_types-interval-styles).

 *year\$1to\$1month\$1qualifier*   
Menentukan rentang interval. Jika Anda menggunakan qualifier dan membuat interval dengan satuan waktu yang lebih kecil dari qualifier, Amazon Redshift memotong dan membuang bagian interval yang lebih kecil. Nilai yang valid untuk *year\$1to\$1month\$1qualifier* adalah:  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
Menentukan rentang interval. Jika Anda menggunakan qualifier dan membuat interval dengan satuan waktu yang lebih kecil dari qualifier, Amazon Redshift memotong dan membuang bagian interval yang lebih kecil. Nilai yang valid untuk *day\$1to\$1second\$1qualifier* adalah:  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
Output dari literal INTERVAL terpotong ke komponen INTERVAL terkecil yang ditentukan. Misalnya, saat menggunakan kualifikasi MINUTE, Amazon Redshift membuang satuan waktu yang lebih kecil dari MINUTE.  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
Nilai yang dihasilkan terpotong menjadi. `'1 day 01:01:00'`

 *fractional\$1precision*   
Parameter opsional yang menentukan jumlah digit fraksional yang diizinkan dalam interval. Argumen *fractional\$1precision* seharusnya hanya ditentukan jika interval Anda berisi SECOND. Misalnya, `SECOND(3)` buat interval yang memungkinkan hanya tiga digit pecahan, seperti 1,234 detik. Jumlah maksimum digit fraksional adalah enam.

Konfigurasi sesi `interval_forbid_composite_literals` menentukan apakah kesalahan dikembalikan ketika interval ditentukan dengan bagian YEAR TO MONTH dan DAY TO SECOND. Untuk informasi selengkapnya, lihat [interval\$1forbid\$1composite\$1literal](r_interval_forbid_composite_literals.md).

## Aritmatika interval
<a name="r_interval_data_types-arithmetic"></a>

Anda dapat menggunakan nilai interval dengan nilai datetime lainnya untuk melakukan operasi aritmatika. Tabel berikut menjelaskan operasi yang tersedia dan jenis data apa yang dihasilkan dari setiap operasi. 

**catatan**  
 Operasi yang dapat menghasilkan keduanya `date` dan `timestamp` hasil melakukannya berdasarkan satuan waktu terkecil yang terlibat dalam persamaan. Misalnya, ketika Anda menambahkan `interval` ke hasilnya adalah `date` jika itu adalah interval TAHUN KE BULAN, dan stempel waktu jika itu adalah interval HARI KE KEDUA. `date` 

Operasi di mana operan pertama adalah `interval` menghasilkan hasil sebagai berikut untuk operan kedua yang diberikan:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_interval_data_types.html)

Operasi di mana operan pertama adalah `date` menghasilkan hasil sebagai berikut untuk operan kedua yang diberikan:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_interval_data_types.html)

Operasi di mana operan pertama adalah `timestamp` menghasilkan hasil sebagai berikut untuk operan kedua yang diberikan:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_interval_data_types.html)

## Gaya interval
<a name="r_interval_data_types-interval-styles"></a>

Anda dapat menggunakan [SET](r_SET.md) perintah SQL untuk mengubah format tampilan output dari nilai interval Anda. Saat Anda menggunakan tipe data interval di SQL, lemparkan ke teks untuk melihat gaya interval yang diharapkan, misalnya,`YEAR TO MONTH::text`. Nilai yang tersedia untuk SET `IntervalStyle` nilainya adalah:
+ `postgres`— mengikuti gaya PostgreSQL. Ini adalah opsi default.
+ `postgres_verbose`— mengikuti gaya verbose PostgreSQL.
+ `sql_standard`— mengikuti gaya literal interval standar SQL.

Perintah berikut menetapkan gaya interval ke`sql_standard`.

```
SET IntervalStyle to 'sql_standard';
```

**format keluaran postgres**

Berikut ini adalah format output untuk gaya `postgres` interval. Setiap nilai numerik bisa negatif.

```
'<numeric> <unit> [, <numeric> <unit> ...]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
---------------
1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
------------------
1 day 02:03:04.5678
```

**format keluaran postgres\$1verbose**

sintaks postgres\$1verbose mirip dengan postgres, tetapi output postgres\$1verbose juga berisi satuan waktu.

```
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
-----------------
@ 1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
---------------------------
@ 1 day 2 hours 3 mins 4.56 secs
```

**format keluaran sql\$1standard**

Nilai interval tahun ke bulan diformat sebagai berikut. Menentukan tanda negatif sebelum interval menunjukkan interval adalah nilai negatif dan berlaku untuk seluruh interval.

```
'[-]yy-mm'
```

Interval hari ke nilai kedua diformat sebagai berikut.

```
'[-]dd hh:mm:ss.ffffff'
```

```
SELECT INTERVAL '1-2' YEAR TO MONTH::text 
  
varchar   
-------
1-2
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text 

varchar
---------------
1 2:03:04.5678
```

## Contoh tipe data interval
<a name="r_interval_data_types-examples"></a>

Contoh berikut menunjukkan bagaimana menggunakan tipe data INTERVAL dengan tabel.

```
create table sample_intervals (y2m interval month, h2m interval hour to minute);
insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second);
select y2m::text, h2m::text from sample_intervals;


      y2m      |       h2m      
---------------+-----------------
 1 year 8 mons | 2 days 01:01:00
```

```
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month;
select * from sample_intervals;

   y2m   |       h2m       
---------+-----------------
 2 years | 2 days 01:01:00
```

```
delete from sample_intervals where h2m = interval '2 1:1:0' day to second;
select * from sample_intervals;

 y2m | h2m 
-----+-----
```

## Contoh literal interval
<a name="r_interval_data_types_literals-examples"></a>

Contoh berikut dijalankan dengan gaya interval diatur ke`postgres`.

Contoh berikut menunjukkan cara membuat INTERVAL literal 1 tahun.

```
select INTERVAL '1' YEAR 

intervaly2m
---------------
1 years 0 mons
```

Jika Anda menentukan *string yang dikutip* yang melebihi kualifikasi, satuan waktu yang tersisa dipotong dari interval. Dalam contoh berikut, interval 13 bulan menjadi 1 tahun dan 1 bulan, tetapi sisanya 1 bulan ditinggalkan karena kualifikasi YEAR.

```
select INTERVAL '13 months' YEAR

intervaly2m
---------------
1 years 0 mons
```

Jika Anda menggunakan qualifier yang lebih rendah dari string interval Anda, unit sisa disertakan.

```
select INTERVAL '13 months' MONTH

intervaly2m
---------------
1 years 1 mons
```

Menentukan presisi dalam interval Anda memotong jumlah digit pecahan ke presisi yang ditentukan.

```
select INTERVAL '1.234567' SECOND (3)

intervald2s
--------------------------------
0 days 0 hours 0 mins 1.235 secs
```

Jika Anda tidak menentukan presisi, Amazon Redshift menggunakan presisi maksimum 6.

```
select INTERVAL '1.23456789' SECOND

intervald2s
-----------------------------------
0 days 0 hours 0 mins 1.234567 secs
```

Contoh berikut menunjukkan cara membuat interval berkisar.

```
select INTERVAL '2:2' MINUTE TO SECOND

intervald2s
------------------------------
0 days 0 hours 2 mins 2.0 secs
```

Kualifikasi mendikte unit yang Anda tentukan. Misalnya, meskipun contoh berikut menggunakan *string kutipan* yang sama dari '2:2' seperti contoh sebelumnya, Amazon Redshift mengakui bahwa ia menggunakan satuan waktu yang berbeda karena qualifier.

```
select INTERVAL '2:2' HOUR TO MINUTE

intervald2s
------------------------------
0 days 2 hours 2 mins 0.0 secs
```

Singkatan dan bentuk jamak dari masing-masing unit juga didukung. Misalnya,, `5s``5 second`, dan `5 seconds` merupakan interval yang setara. Unit yang didukung adalah tahun, bulan, jam, menit, dan detik.

```
select INTERVAL '5s' SECOND

intervald2s
------------------------------
0 days 0 hours 0 mins 5.0 secs
```

```
select INTERVAL '5 HOURS' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

```
select INTERVAL '5 h' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

# Contoh literal interval tanpa sintaks qualifier
<a name="r_interval_literals"></a>

**catatan**  
Contoh berikut menunjukkan menggunakan interval literal tanpa `YEAR TO MONTH` atau `DAY TO SECOND` kualifikasi. Untuk informasi tentang penggunaan literal interval yang direkomendasikan dengan kualifikasi, lihat[Tipe data interval dan literal](r_interval_data_types.md).

Gunakan interval literal untuk mengidentifikasi periode waktu tertentu, seperti `12 hours` atau`6 months`. Anda dapat menggunakan literal interval ini dalam kondisi dan perhitungan yang melibatkan ekspresi datetime. 

 Interval literal dinyatakan sebagai kombinasi kata kunci INTERVAL dengan kuantitas numerik dan bagian tanggal yang didukung, misalnya `INTERVAL '7 days'` atau`INTERVAL '59 minutes'`. Anda dapat menghubungkan beberapa kuantitas dan unit untuk membentuk interval yang lebih tepat, misalnya:`INTERVAL '7 days, 3 hours, 59 minutes'`. Singkatan dan bentuk jamak dari setiap unit juga didukung; misalnya:`5 s`,`5 second`, dan `5 seconds` merupakan interval yang setara.

Jika Anda tidak menentukan bagian tanggal, nilai interval mewakili detik. Anda dapat menentukan nilai kuantitas sebagai pecahan (misalnya:`0.5 days`).

Contoh berikut menunjukkan serangkaian perhitungan dengan nilai interval yang berbeda.

Berikut ini menambahkan 1 detik ke tanggal yang ditentukan.

```
select caldate + interval '1 second' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:00:01
(1 row)
```

Berikut ini menambahkan 1 menit ke tanggal yang ditentukan.

```
select caldate + interval '1 minute' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:01:00
(1 row)
```

Berikut ini menambahkan 3 jam dan 35 menit ke tanggal yang ditentukan.

```
select caldate + interval '3 hours, 35 minutes' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 03:35:00
(1 row)
```

Berikut ini menambahkan 52 minggu ke tanggal yang ditentukan.

```
select caldate + interval '52 weeks' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-12-30 00:00:00
(1 row)
```

Berikut ini menambahkan 1 minggu, 1 jam, 1 menit, dan 1 detik ke tanggal yang ditentukan.

```
select caldate + interval '1w, 1h, 1m, 1s' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-01-07 01:01:01
(1 row)
```

Berikut ini menambahkan 12 jam (setengah hari) ke tanggal yang ditentukan.

```
select caldate + interval '0.5 days' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 12:00:00
(1 row)
```

Berikut ini mengurangi 4 bulan dari 15 Februari 2023 dan hasilnya adalah 15 Oktober 2022.

```
select date '2023-02-15' - interval '4 months';

?column?
---------------------
2022-10-15 00:00:00
```

Berikut ini mengurangi 4 bulan dari 31 Maret 2023 dan hasilnya adalah 30 November 2022. Perhitungan mempertimbangkan jumlah hari dalam sebulan.

```
select date '2023-03-31' - interval '4 months';

?column?
---------------------
2022-11-30 00:00:00
```

# Jenis Boolean
<a name="r_Boolean_type"></a>

Gunakan tipe data BOOLEAN untuk menyimpan nilai true dan false dalam kolom single-byte. Tabel berikut menjelaskan tiga kemungkinan status untuk nilai Boolean dan nilai literal yang menghasilkan keadaan itu. Terlepas dari string input, kolom Boolean menyimpan dan mengeluarkan “t” untuk true dan “f” untuk false. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Boolean_type.html)

Anda dapat menggunakan perbandingan IS untuk memeriksa nilai Boolean hanya sebagai predikat dalam klausa WHERE. Anda tidak dapat menggunakan perbandingan IS dengan nilai Boolean dalam daftar SELECT.

## Contoh
<a name="r_Boolean_type-examples"></a>

Anda dapat menggunakan kolom BOOLEAN untuk menyimpan status “Aktif/Tidak Aktif” untuk setiap pelanggan dalam tabel PELANGGAN.

```
create table customer(
custid int,
active_flag boolean default true);
```

```
insert into customer values(100, default);
```

```
select * from customer;
custid | active_flag
-------+--------------
   100 | t
```

Jika tidak ada nilai default (`true`atau`false`) ditentukan dalam pernyataan CREATE TABLE, memasukkan nilai default berarti memasukkan null. 

Dalam contoh ini, kueri memilih pengguna dari tabel USERS yang menyukai olahraga tetapi tidak menyukai teater: 

```
select firstname, lastname, likesports, liketheatre
from users
where likesports is true and liketheatre is false
order by userid limit 10;

firstname |  lastname  | likesports | liketheatre
----------+------------+------------+-------------
Lars      | Ratliff    | t          | f
Mufutau   | Watkins    | t          | f
Scarlett  | Mayer      | t          | f
Shafira   | Glenn      | t          | f
Winifred  | Cherry     | t          | f
Chase     | Lamb       | t          | f
Liberty   | Ellison    | t          | f
Aladdin   | Haney      | t          | f
Tashya    | Michael    | t          | f
Lucian    | Montgomery | t          | f
(10 rows)
```

Contoh berikut memilih pengguna dari tabel USERS yang tidak diketahui apakah mereka menyukai musik rock.

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows)
```

Contoh berikut mengembalikan kesalahan karena menggunakan perbandingan IS dalam daftar SELECT.

```
select firstname, lastname, likerock is true as "check"
from users
order by userid limit 10;

[Amazon](500310) Invalid operation: Not implemented
```

Contoh berikut berhasil karena menggunakan perbandingan yang sama (=) dalam daftar SELECT alih-alih perbandingan IS.

```
select firstname, lastname, likerock = true as "check"
from users
order by userid limit 10;

firstname | lastname  | check
----------+-----------+------
Rafael    | Taylor    |      
Vladimir  | Humphrey  |      
Lars      | Ratliff   | true 
Barry     | Roy       |      
Reagan    | Hodge     | true 
Victor    | Hernandez | true 
Tamekah   | Juarez    |      
Colton    | Roy       | false
Mufutau   | Watkins   |      
Naida     | Calderon  |
```

# Jenis HLLSKETCH
<a name="r_HLLSKTECH_type"></a>

Gunakan tipe data HLLSKETCH untuk sketsa. HyperLogLog Amazon Redshift mendukung representasi HyperLogLog sketsa yang jarang atau padat. Sketsa dimulai sebagai jarang dan beralih ke padat ketika format padat lebih efisien untuk meminimalkan jejak memori yang digunakan.

 Amazon Redshift secara otomatis mentransisikan HyperLogLog sketsa jarang saat mengimpor, mengekspor, atau mencetak sketsa dalam format JSON berikut.

```
{"logm":15,"sparse":{"indices":[4878,9559,14523],"values":[1,2,1]}}
```

Amazon Redshift menggunakan representasi string dalam format Base64 untuk mewakili sketsa padat. HyperLogLog 

Amazon Redshift menggunakan representasi string berikut dalam format Base64 untuk mewakili sketsa padat. HyperLogLog 

```
"ABAABA..."
```

Ukuran maksimum objek HLLSKETCH adalah 24.580 byte bila digunakan dalam kompresi mentah.

# Tipe SUPER
<a name="r_SUPER_type"></a>

Gunakan tipe data SUPER untuk menyimpan data atau dokumen semi-terstruktur sebagai nilai. Meskipun Amazon Redshift mampu menyimpan nilai tersebut menggunakan VARCHAR, kami menyarankan Anda menggunakan tipe data SUPER sebagai gantinya.

Data semi-terstruktur tidak sesuai dengan struktur kaku dan tabular dari model data relasional yang digunakan dalam database SQL. Ini berisi tag yang mereferensikan entitas yang berbeda dalam data. Mereka dapat berisi nilai-nilai kompleks seperti array, struktur bersarang, dan struktur kompleks lainnya yang terkait dengan format serialisasi, seperti JSON. Tipe data SUPER adalah seperangkat array tanpa skema dan nilai struktur yang mencakup semua jenis skalar Amazon Redshift lainnya.

Tipe data SUPER mendukung hingga 16 MB data untuk objek SUPER individu. Untuk informasi selengkapnya tentang tipe data SUPER, termasuk contoh penerapannya dalam tabel, lihat[Data semi-terstruktur di Amazon Redshift](super-overview.md). 

Amazon Redshift menyediakan dukungan bawaan untuk menyerap format data semi-terstruktur berikut menggunakan perintah COPY:
+  JSON 
+  ARRAY 
+  TEXT 
+  CSV 

Objek SUPER yang lebih besar dari 1MB hanya dapat dicerna dari format file berikut:
+  Parquet 
+  JSON 
+  TEXT 
+  CSV 

Tipe data SUPER memiliki properti berikut:
+ Nilai skalar Amazon Redshift:
  + Sebuah nol
  + Sebuah boolean
  + Angka, seperti smallint, integer, bigint, desimal, atau floating point (seperti float4 atau float8)
  + Nilai string, seperti varchar atau char
+ Nilai yang kompleks:
  + Array nilai, termasuk skalar atau kompleks
  + Struktur, juga dikenal sebagai tuple atau objek, yang merupakan peta nama dan nilai atribut (skalar atau kompleks)

Salah satu dari dua jenis nilai kompleks mengandung skalar atau nilai kompleksnya sendiri tanpa batasan keteraturan.

Pengkodean kompresi default untuk tipe data SUPER adalah ZSTD. Untuk informasi lebih lanjut tentang pengkodean kompresi, lihat[Pengkodean kompresi](c_Compression_encodings.md).

Tipe data SUPER mendukung persistensi data semi-terstruktur dalam bentuk skema. Meskipun model data hierarkis dapat berubah, versi data lama dapat hidup berdampingan di kolom SUPER yang sama. 

Amazon Redshift menggunakan PartiQL untuk mengaktifkan navigasi ke dalam array dan struktur. Amazon Redshift juga menggunakan sintaks PartiQL untuk mengulangi array SUPER. Untuk informasi selengkapnya, lihat [PartiQL — bahasa kueri yang kompatibel dengan SQL untuk Amazon Redshift](super-partiql.md).

Amazon Redshift menggunakan pengetikan dinamis untuk memproses data SUPER tanpa skema tanpa perlu mendeklarasikan tipe data sebelum Anda menggunakannya dalam kueri. Untuk informasi selengkapnya, lihat [Pengetikan dinamis](query-super.md#dynamic-typing-lax-processing).

Anda dapat menerapkan kebijakan masking data dinamis ke nilai skalar pada jalur kolom tipe SUPER. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md). Untuk informasi tentang penggunaan masking data dinamis dengan tipe data SUPER, lihat[Menggunakan masking data dinamis dengan jalur tipe data SUPER](t_ddm-super.md).

Kami menyarankan Anda mengatur opsi `r_enable_case_sensitive_super_attribute` konfigurasi ke true saat bekerja dengan data SUPER. Untuk informasi selengkapnya, lihat [enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md). 

# Jenis VARBYTE
<a name="r_VARBYTE_type"></a>

Gunakan kolom VARBYTE, VARBINARY, atau BINARY VARY VARY untuk menyimpan nilai biner panjang variabel dengan batas tetap. 

```
varbyte [ (n) ]
```

Jumlah maksimum byte (*n*) dapat berkisar dari 1 — 16.777.216. Defaultnya adalah 64.000. 

Beberapa contoh di mana Anda mungkin ingin menggunakan tipe data VARBYTE adalah sebagai berikut:
+ Menggabungkan tabel pada kolom VARBYTE.
+ Membuat tampilan terwujud yang berisi kolom VARBYTE. Penyegaran inkremental tampilan terwujud yang berisi kolom VARBYTE didukung. Namun, fungsi agregat selain COUNT, MIN, dan MAX dan GROUP BY pada kolom VARBYTE tidak mendukung penyegaran tambahan.

Untuk memastikan bahwa semua byte adalah karakter yang dapat dicetak, Amazon Redshift menggunakan format hex untuk mencetak nilai VARBYTE. Misalnya, SQL berikut mengubah string heksadesimal menjadi nilai biner. `6162` Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal`6162`.

```
select from_hex('6162');
                      
 from_hex
----------
 6162
```

Amazon Redshift mendukung casting antara VARBYTE dan tipe data berikut:
+ CHAR
+ VARCHAR
+ SMALLINT
+ INTEGER
+ BIGINT

Saat casting dengan CHAR dan VARCHAR format UTF-8 digunakan. Untuk informasi selengkapnya tentang format UTF-8, lihat. [TO\$1VARBYTE](r_TO_VARBYTE.md) Saat casting dari SMALLINT, INTEGER, dan BIGINT jumlah byte dari tipe data asli dipertahankan. Itu adalah dua byte untuk SMALLINT, empat byte untuk INTEGER, dan delapan byte untuk BIGINT.

Pernyataan SQL berikut melemparkan string VARCHAR ke VARBYTE. Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal`616263`.

```
select 'abc'::varbyte;
                      
 varbyte
---------
 616263
```

Pernyataan SQL berikut memberikan nilai CHAR dalam kolom ke VARBYTE. Contoh ini membuat tabel dengan kolom CHAR (10) (c), menyisipkan nilai karakter yang lebih pendek dari panjang 10. Cast yang dihasilkan melapisi hasil dengan karakter spasi (hex'20') ke ukuran kolom yang ditentukan. Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal.

```
create table t (c char(10));
insert into t values ('aa'), ('abc');                 
select c::varbyte from t;
          c
----------------------
 61612020202020202020
 61626320202020202020
```

Pernyataan SQL berikut melemparkan string SMALLINT ke VARBYTE. Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal`0005`, yang merupakan dua byte atau empat karakter heksadesimal.

```
select 5::smallint::varbyte;
                  
 varbyte
---------
 0005
```

Pernyataan SQL berikut melemparkan INTEGER ke VARBYTE. Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal`00000005`, yaitu empat byte atau delapan karakter heksadesimal.

```
select 5::int::varbyte;
                  
 varbyte
----------
 00000005
```

Pernyataan SQL berikut melemparkan BIGINT ke VARBYTE. Meskipun nilai yang dikembalikan adalah nilai biner, hasilnya dicetak sebagai heksadesimal`0000000000000005`, yaitu delapan byte atau 16 karakter heksadesimal.

```
select 5::bigint::varbyte;
                  
     varbyte
------------------
 0000000000000005
```

Fitur Amazon Redshift yang mendukung tipe data VARBYTE meliputi:
+ [Operator VARBYTE](r_VARBYTE_OPERATORS.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [Fungsi PANJANG](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fungsi SUBSTRING](r_SUBSTRING.md)
+ [DARI\$1HEX](r_FROM_HEX.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [DARI\$1VARBYTE](r_FROM_VARBYTE.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [Memuat kolom tipe data VARBYTE](copy-usage-varbyte.md)
+ [Membongkar kolom tipe data VARBYTE](r_UNLOAD.md#unload-usage-notes)

## Keterbatasan saat menggunakan tipe data VARBYTE dengan Amazon Redshift
<a name="varbyte-limitations"></a>

Berikut ini adalah batasan saat menggunakan tipe data VARBYTE dengan Amazon Redshift: 
+ Amazon Redshift Spectrum mendukung tipe data VARBYTE hanya untuk file Parket dan ORC.
+ Editor kueri Amazon Redshift dan editor kueri Amazon Redshift v2 belum sepenuhnya mendukung tipe data VARBYTE. Oleh karena itu, gunakan klien SQL yang berbeda saat bekerja dengan ekspresi VARBYTE. 

  Sebagai solusi untuk menggunakan editor kueri, jika panjang data Anda pada atau di bawah 16.000.000 byte dan kontennya adalah UTF-8 yang valid, Anda dapat mentransmisikan nilai VARBYTE ke VARCHAR, misalnya:

  ```
  select to_varbyte('6162', 'hex')::varchar;
  ```
+ Anda tidak dapat menggunakan tipe data VARBYTE dengan fungsi yang ditentukan pengguna Python atau Lambda (). UDFs 
+ Anda tidak dapat membuat kolom HLLSKETCH dari kolom VARBYTE atau menggunakan PERKIRAAN COUNT DISTINCT pada kolom VARBYTE. 
+ Nilai VARBYTE yang lebih besar dari 1 MB hanya dapat dicerna dari format file berikut:
  + Parquet
  + Teks
  + Nilai dipisahkan koma (CSV)

## Ketik kompatibilitas dan konversi
<a name="r_Type_conversion"></a>

Berikut ini, Anda dapat menemukan diskusi tentang cara kerja aturan konversi tipe dan kompatibilitas tipe data di Amazon Redshift.

### Kompatibilitas
<a name="r_Type_conversion-compatibility"></a>

 Pencocokan tipe data dan pencocokan nilai literal dan konstanta dengan tipe data terjadi selama berbagai operasi database, termasuk yang berikut ini: 
+ Bahasa manipulasi data (DML/bahasa manipulasi data) operasi pada tabel 
+ UNION, INTERSECT, dan EXCEPT query 
+ Ekspresi CASE 
+ Evaluasi predikat, seperti LIKE dan IN 
+ Evaluasi fungsi SQL yang melakukan perbandingan atau ekstraksi data 
+ Perbandingan dengan operator matematika 

Hasil operasi ini bergantung pada aturan konversi tipe dan kompatibilitas tipe data. *Kompatibilitas* menyiratkan bahwa one-to-one pencocokan nilai tertentu dan tipe data tertentu tidak selalu diperlukan. Karena beberapa tipe data *kompatibel*, konversi implisit, atau *paksaan*, dimungkinkan (untuk informasi lebih lanjut, lihat). [Jenis konversi implisit](#implicit-conversion-types) Ketika tipe data tidak kompatibel, terkadang Anda dapat mengonversi nilai dari satu tipe data ke tipe data lainnya dengan menggunakan fungsi konversi eksplisit. 

### Kompatibilitas umum dan aturan konversi
<a name="r_Type_conversion-general-compatibility-and-conversion-rules"></a>

Perhatikan aturan kompatibilitas dan konversi berikut: 
+ Secara umum, tipe data yang termasuk dalam kategori tipe yang sama (seperti tipe data numerik yang berbeda) kompatibel dan dapat dikonversi secara implisit. 

  Misalnya, dengan konversi implisit Anda dapat menyisipkan nilai desimal ke dalam kolom integer. Desimal dibulatkan untuk menghasilkan bilangan bulat. Atau Anda dapat mengekstrak nilai numerik, seperti`2008`, dari tanggal dan memasukkan nilai itu ke dalam kolom integer. 
+ Tipe data numerik memberlakukan kondisi luapan yang terjadi saat Anda mencoba menyisipkan nilai. out-of-range Misalnya, nilai desimal dengan presisi 5 tidak cocok dengan kolom desimal yang didefinisikan dengan presisi 4. Sebuah integer atau seluruh bagian dari desimal tidak pernah terpotong; Namun, bagian fraksional dari desimal dapat dibulatkan ke atas atau ke bawah, sebagaimana mestinya. Namun, hasil pemeran eksplisit nilai yang dipilih dari tabel tidak dibulatkan.
+ Berbagai jenis string karakter kompatibel; String kolom VARCHAR yang berisi data byte tunggal dan string kolom CHAR sebanding dan dapat dikonversi secara implisit. String VARCHAR yang berisi data multibyte tidak sebanding. Selain itu, Anda dapat mengonversi string karakter ke tanggal, waktu, stempel waktu, atau nilai numerik jika string adalah nilai literal yang sesuai; spasi depan atau belakang apa pun diabaikan. Sebaliknya, Anda dapat mengonversi tanggal, waktu, stempel waktu, atau nilai numerik menjadi string karakter dengan panjang tetap atau panjang variabel.
**catatan**  
String karakter yang ingin Anda transmisikan ke tipe numerik harus berisi representasi karakter angka. Misalnya, Anda dapat mentransmisikan string `'1.0'` atau `'5.9'` ke nilai desimal, tetapi Anda tidak dapat mentransmisikan string `'ABC'` ke jenis numerik apa pun.
+ Jika Anda membandingkan nilai DECIMAL dengan string karakter, Amazon Redshift mencoba mengonversi string karakter ke nilai DECIMAL. Saat membandingkan semua nilai numerik lainnya dengan string karakter, nilai numerik dikonversi ke string karakter. Untuk menegakkan konversi yang berlawanan (misalnya, mengubah string karakter menjadi bilangan bulat, atau mengubah nilai DECIMAL menjadi string karakter), gunakan fungsi eksplisit, seperti. [PEMERAN](r_CAST_function.md) 
+ Untuk mengonversi nilai DECIMAL atau NUMERIK 64-bit ke presisi yang lebih tinggi, Anda harus menggunakan fungsi konversi eksplisit seperti fungsi CAST atau CONVERT. 
+ Saat mengonversi DATE atau TIMESTAMP ke TIMESTAMPTZ, atau mengonversi TIME ke TIMETZ, zona waktu diatur ke zona waktu sesi saat ini. Zona waktu sesi adalah UTC secara default. Untuk informasi selengkapnya tentang pengaturan zona waktu sesi, lihat[timezone](r_timezone_config.md). 
+ Demikian pula, TIMESTAMPTZ dikonversi ke DATE, TIME, atau TIMESTAMP berdasarkan zona waktu sesi saat ini. Zona waktu sesi adalah UTC secara default. Setelah konversi, informasi zona waktu dijatuhkan.
+ String karakter yang mewakili stempel waktu dengan zona waktu yang ditentukan dikonversi ke TIMESTAMPTZ menggunakan zona waktu sesi saat ini, yang merupakan UTC secara default. Demikian juga, string karakter yang mewakili waktu dengan zona waktu yang ditentukan dikonversi ke TIMETZ menggunakan zona waktu sesi saat ini, yang merupakan UTC secara default.

### Jenis konversi implisit
<a name="implicit-conversion-types"></a>

Ada dua jenis konversi implisit: 
+ Konversi implisit dalam tugas, seperti menetapkan nilai dalam perintah INSERT atau UPDATE.
+ Konversi implisit dalam ekspresi, seperti melakukan perbandingan dalam klausa WHERE.

Tabel berikut mencantumkan tipe data yang dapat dikonversi secara implisit dalam tugas atau ekspresi. Anda juga dapat menggunakan fungsi konversi eksplisit untuk melakukan konversi ini. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_Supported_data_types.html)

**catatan**  
Konversi implisit antara TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ, atau string karakter menggunakan zona waktu sesi saat ini. Untuk informasi tentang pengaturan zona waktu saat ini, lihat[timezone](r_timezone_config.md).  
Jenis data GEOMETRI dan GEOGRAFI tidak dapat secara implisit dikonversi ke tipe data lain, kecuali satu sama lain. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md).   
Tipe data VARBYTE tidak dapat secara implisit dikonversi ke tipe data lainnya. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md). 

### Menggunakan pengetikan dinamis untuk tipe data SUPER
<a name="r_dynamic_typing_SUPER"></a>

Amazon Redshift menggunakan pengetikan dinamis untuk memproses data SUPER tanpa skema tanpa perlu mendeklarasikan tipe data sebelum Anda menggunakannya dalam kueri. Pengetikan dinamis menggunakan hasil navigasi ke kolom data SUPER tanpa harus secara eksplisit mentransmisikannya ke jenis Amazon Redshift. Untuk informasi selengkapnya tentang penggunaan pengetikan dinamis untuk tipe data SUPER, lihat[Pengetikan dinamis](query-super.md#dynamic-typing-lax-processing).

Anda dapat mentransmisikan nilai SUPER ke dan dari tipe data lain dengan beberapa pengecualian. Untuk informasi selengkapnya, lihat [Batasan](limitations-super.md).

# Urutan pemeriksaan
<a name="c_collation_sequences"></a>

Amazon Redshift tidak mendukung urutan pemeriksaan khusus lokal atau yang ditentukan pengguna. Secara umum, hasil predikat apa pun dalam konteks apa pun dapat dipengaruhi oleh kurangnya aturan khusus lokal untuk menyortir dan membandingkan nilai data. Misalnya, ekspresi dan fungsi ORDER BY seperti MIN, MAX, dan RANK mengembalikan hasil berdasarkan UTF8 urutan biner data yang tidak memperhitungkan karakter spesifik lokal.

# Ekspresi
<a name="r_expressions"></a>

**Topics**
+ [Ekspresi sederhana](#r_expressions-simple-expressions)
+ [Ekspresi majemuk](r_compound_expressions.md)
+ [Daftar ekspresi](r_expression_lists.md)
+ [Subkueri skalar](r_scalar_subqueries.md)
+ [Ekspresi fungsi](r_function_expressions.md)

Ekspresi adalah kombinasi dari satu atau lebih nilai, operator, atau fungsi yang mengevaluasi nilai. Tipe data ekspresi umumnya adalah komponennya. 

## Ekspresi sederhana
<a name="r_expressions-simple-expressions"></a>

Ekspresi sederhana adalah salah satu dari berikut ini: 
+ Nilai konstan atau literal 
+ Nama kolom atau referensi kolom 
+ Fungsi skalar 
+ Fungsi agregat (set) 
+ Fungsi jendela 
+ Sebuah subquery skalar 

Contoh ekspresi sederhana meliputi: 

```
5+12
dateid
sales.qtysold * 100
sqrt (4)
max (qtysold)
(select max (qtysold) from sales)
```

# Ekspresi majemuk
<a name="r_compound_expressions"></a>

Ekspresi majemuk adalah serangkaian ekspresi sederhana yang digabungkan oleh operator aritmatika. Ekspresi sederhana yang digunakan dalam ekspresi majemuk harus mengembalikan nilai numerik.

## Sintaksis
<a name="r_compound_expressions-synopsis"></a>

```
expression 
operator 
expression | (compound_expression)
```

## Argumen
<a name="r_compound_expressions-arguments"></a>

 *ekspresi*   
Ekspresi sederhana yang mengevaluasi nilai.

 *operator*   
 Ekspresi aritmatika majemuk dapat dibangun menggunakan operator berikut, dalam urutan prioritas ini:  
+ (): tanda kurung untuk mengontrol urutan evaluasi
+ \$1, -: tanda/operator positif dan negatif
+  ^, \$1/, \$1\$1/: eksponensial, akar kuadrat, akar kubus
+ \$1,/,%: operator perkalian, pembagian, dan modulo
+  @: nilai absolut
+ \$1, -: penambahan dan pengurangan
+ &, \$1, \$1, \$1, <<, >>: DAN, ATAU, TIDAK, geser ke kiri, geser operator bitwise kanan
+ \$1\$1: penggabungan

 *(compound\$1expression)*   
Ekspresi majemuk dapat disarangkan menggunakan tanda kurung.

## Contoh
<a name="r_compound_expressions-examples"></a>

Contoh ekspresi majemuk meliputi yang berikut ini.

```
('SMITH' || 'JONES')
sum(x) / y
sqrt(256) * avg(column)
rank() over (order by qtysold) / 100
(select (pricepaid - commission) from sales where dateid = 1882) * (qtysold)
```

Beberapa fungsi juga dapat disarangkan dalam fungsi lain. Misalnya, fungsi skalar apa pun dapat bersarang di dalam fungsi skalar lain. Contoh berikut mengembalikan jumlah nilai absolut dari satu set angka:

```
sum(abs(qtysold))
```

Fungsi jendela tidak dapat digunakan sebagai argumen untuk fungsi agregat atau fungsi jendela lainnya. Ekspresi berikut akan mengembalikan kesalahan:

```
avg(rank() over (order by qtysold))
```

Fungsi jendela dapat memiliki fungsi agregat bersarang. Ekspresi berikut menjumlahkan kumpulan nilai dan kemudian memeringkatnya:

```
rank() over (order by sum(qtysold))
```

# Daftar ekspresi
<a name="r_expression_lists"></a>

Daftar ekspresi adalah kombinasi ekspresi, dan dapat muncul dalam kondisi keanggotaan dan perbandingan (klausa WHERE) dan dalam klausa GROUP BY.

## Sintaksis
<a name="r_expression_lists-synopsis"></a>

```
expression , expression , ... | (expression, expression, ...)
```

## Argumen
<a name="r_expression_lists-arguments"></a>

 *ekspresi*   
Ekspresi sederhana yang mengevaluasi nilai. Daftar ekspresi dapat berisi satu atau lebih ekspresi dipisahkan koma atau satu atau lebih kumpulan ekspresi dipisahkan koma. Ketika ada beberapa set ekspresi, setiap set harus berisi jumlah ekspresi yang sama, dan dipisahkan oleh tanda kurung. Jumlah ekspresi di setiap set harus sesuai dengan jumlah ekspresi sebelum operator dalam kondisi.

## Contoh
<a name="r_expression_lists-examples"></a>

Berikut ini adalah contoh daftar ekspresi dalam kondisi:

```
(1, 5, 10)
('THESE', 'ARE', 'STRINGS')
(('one', 'two', 'three'), ('blue', 'yellow', 'green'))
```

Jumlah ekspresi di setiap set harus sesuai dengan angka di bagian pertama pernyataan:

```
select * from venue
where (venuecity, venuestate) in (('Miami', 'FL'), ('Tampa', 'FL'))
order by venueid;

venueid |        venuename        | venuecity | venuestate | venueseats
---------+-------------------------+-----------+------------+------------
28 | American Airlines Arena | Miami     | FL         |          0
54 | St. Pete Times Forum    | Tampa     | FL         |          0
91 | Raymond James Stadium   | Tampa     | FL         |      65647
(3 rows)
```

# Subkueri skalar
<a name="r_scalar_subqueries"></a>

Subquery skalar adalah kueri SELECT biasa dalam tanda kurung yang mengembalikan tepat satu nilai: satu baris dengan satu kolom. Kueri dijalankan dan nilai yang dikembalikan digunakan dalam kueri luar. Jika subquery mengembalikan nol baris, nilai ekspresi subquery adalah nol. Jika mengembalikan lebih dari satu baris, Amazon Redshift mengembalikan kesalahan. Subquery dapat merujuk ke variabel dari kueri induk, yang akan bertindak sebagai konstanta selama salah satu pemanggilan subquery.

Anda dapat menggunakan subkueri skalar di sebagian besar pernyataan yang membutuhkan ekspresi. Subquery skalar bukan ekspresi yang valid dalam kasus berikut:
+ Sebagai nilai default untuk ekspresi
+ Dalam klausa GROUP BY dan HAVING

## Contoh
<a name="r_scalar_subqueries-example"></a>

Subquery berikut menghitung harga rata-rata yang dibayarkan per penjualan sepanjang tahun 2008, kemudian kueri luar menggunakan nilai tersebut dalam output untuk membandingkan dengan harga rata-rata per penjualan per kuartal:

```
select qtr, avg(pricepaid) as avg_saleprice_per_qtr,
(select avg(pricepaid)
from sales join date on sales.dateid=date.dateid
where year = 2008) as avg_saleprice_yearly
from sales join date on sales.dateid=date.dateid
where year = 2008
group by qtr
order by qtr;
qtr  | avg_saleprice_per_qtr | avg_saleprice_yearly
-------+-----------------------+----------------------
1     |                647.64 |               642.28
2     |                646.86 |               642.28
3     |                636.79 |               642.28
4     |                638.26 |               642.28
(4 rows)
```

# Ekspresi fungsi
<a name="r_function_expressions"></a>

## Sintaksis
<a name="r_function_expressions-syntax"></a>

Setiap built-in dapat digunakan sebagai ekspresi. Sintaks untuk panggilan fungsi adalah nama fungsi diikuti oleh daftar argumen dalam tanda kurung. 

```
function ( [expression [, expression...]] )
```

## Pendapat
<a name="r_function_expressions-arguments"></a>

 *fungsi*   
Fungsi bawaan apa pun. Untuk beberapa contoh fungsi, lihat[Referensi fungsi SQL](c_SQL_functions.md).

 *ekspresi*   
Ekspresi apa pun yang cocok dengan tipe data dan jumlah parameter yang diharapkan oleh fungsi. 

## Contoh
<a name="r_function_expressions-examples"></a>

```
abs (variable)
select avg (qtysold + 3) from sales;
select dateadd (day,30,caldate) as plus30days from date;
```

# Ketentuan
<a name="r_conditions"></a>

**Topics**
+ [Sintaksis](#r_conditions-synopsis)
+ [Kondisi perbandingan](r_comparison_condition.md)
+ [Kondisi logis](r_logical_condition.md)
+ [Kondisi pencocokan pola](pattern-matching-conditions.md)
+ [ANTARA kondisi rentang](r_range_condition.md)
+ [Kondisi nol](r_null_condition.md)
+ [Kondisi EXISTS](r_exists_condition.md)
+ [Dalam kondisi](r_in_condition.md)

 Kondisi adalah pernyataan dari satu atau lebih ekspresi dan operator logis yang mengevaluasi benar, salah, atau tidak diketahui. Kondisi juga kadang-kadang disebut sebagai predikat.

**catatan**  
Semua perbandingan string dan kecocokan pola LIKE peka huruf besar/kecil. Misalnya, 'A' dan 'a' tidak cocok. Namun, Anda dapat melakukan kecocokan pola case-insensitive dengan menggunakan predikat ILIKE.

## Sintaksis
<a name="r_conditions-synopsis"></a>

```
comparison_condition
| logical_condition
| range_condition
| pattern_matching_condition
| null_condition
| EXISTS_condition
| IN_condition
```

# Kondisi perbandingan
<a name="r_comparison_condition"></a>

Kondisi perbandingan menyatakan hubungan logis antara dua nilai. Semua kondisi perbandingan adalah operator biner dengan tipe pengembalian Boolean. Amazon Redshift mendukung operator perbandingan yang dijelaskan dalam tabel berikut:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_comparison_condition.html)

## Catatan penggunaan
<a name="r_comparison_condition_usage_notes"></a>

= APA SAJA \$1 BEBERAPA   
Kata kunci ANY dan SOME identik dengan kondisi *IN*, dan mengembalikan true jika perbandingan benar untuk setidaknya satu nilai yang dikembalikan oleh subquery yang mengembalikan satu atau lebih nilai. Amazon Redshift hanya mendukung kondisi = (sama) untuk ANY dan BEBERAPA. Kondisi ketidaksetaraan tidak didukung.  
Predikat ALL tidak didukung.

<> SEMUA  
Kata kunci ALL identik dengan NOT IN (lihat [Dalam kondisi](r_in_condition.md) kondisi) dan mengembalikan true jika ekspresi tidak termasuk dalam hasil subquery. Amazon Redshift hanya mendukung <> atau\$1 = (tidak sama) kondisi untuk SEMUA. Kondisi perbandingan lainnya tidak didukung.

ADALAH TRUE/FALSE/UNKNOWN  
Nilai bukan nol sama dengan TRUE, 0 sama dengan FALSE, dan null sama dengan UNKNOWN. Lihat tipe [Jenis BooleanJenis HLLSKETCH](r_Boolean_type.md) datanya.

## Contoh
<a name="r_comparison_condition-examples"></a>

Berikut adalah beberapa contoh sederhana dari kondisi perbandingan: 

```
a = 5
a < b
min(x) >= 5
qtysold = any (select qtysold from sales where dateid = 1882
```

Kueri berikut mengembalikan tempat dengan lebih dari 10.000 kursi dari tabel VENUE: 

```
select venueid, venuename, venueseats from venue
where venueseats > 10000
order by venueseats desc;

venueid |           venuename            | venueseats
---------+--------------------------------+------------
83 | FedExField                     |      91704
 6 | New York Giants Stadium        |      80242
79 | Arrowhead Stadium              |      79451
78 | INVESCO Field                  |      76125
69 | Dolphin Stadium                |      74916
67 | Ralph Wilson Stadium           |      73967
76 | Jacksonville Municipal Stadium |      73800
89 | Bank of America Stadium        |      73298
72 | Cleveland Browns Stadium       |      73200
86 | Lambeau Field                  |      72922
...
(57 rows)
```

Contoh ini memilih user (USERID) dari tabel USERS yang menyukai musik rock:

```
select userid from users where likerock = 't' order by 1 limit 5;

userid
--------
3
5
6
13
16
(5 rows)
```

Contoh ini memilih user (USERID) dari tabel USERS yang tidak diketahui apakah mereka menyukai musik rock:

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows
```

## Contoh dengan kolom TIME
<a name="r_comparison_condition-examples-time"></a>

Berikut contoh tabel TIME\$1TEST memiliki kolom TIME\$1VAL (tipe TIME) dengan tiga nilai dimasukkan. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

Contoh berikut mengekstrak jam dari setiap timetz\$1val.

```
select time_val from time_test where time_val < '3:00';
   time_val
---------------
 00:00:00.5550
 00:58:00
```

Contoh berikut membandingkan dua literal waktu. 

```
select time '18:25:33.123456' = time '18:25:33.123456';
 ?column?
----------
 t
```

## Contoh dengan kolom TIMETZ
<a name="r_comparison_condition-examples-timetz"></a>

Contoh tabel berikut TIMETZ\$1TEST memiliki kolom TIMETZ\$1VAL (tipe TIMETZ) dengan tiga nilai dimasukkan.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

Contoh berikut hanya memilih nilai TIMETZ kurang dari. `3:00:00 UTC` Perbandingan dilakukan setelah mengkonversi nilai ke UTC.

```
select timetz_val from timetz_test where timetz_val < '3:00:00 UTC';
                  
   timetz_val
---------------
 00:00:00.5550+00
```

Contoh berikut membandingkan dua literal TIMETZ. Zona waktu diabaikan untuk perbandingan. 

```
select time '18:25:33.123456 PST' < time '19:25:33.123456 EST';
                  
 ?column?
----------
 t
```

# Kondisi logis
<a name="r_logical_condition"></a>

Kondisi logis menggabungkan hasil dari dua kondisi untuk menghasilkan satu hasil. Semua kondisi logis adalah operator biner dengan tipe pengembalian Boolean. 

## Sintaksis
<a name="r_logical_condition-synopsis"></a>

```
expression
{ AND | OR }
expression
NOT expression
```

Kondisi logis menggunakan logika Boolean tiga nilai di mana nilai nol mewakili hubungan yang tidak diketahui. Tabel berikut menjelaskan hasil untuk kondisi logis, di mana `E1` dan `E2` mewakili ekspresi:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_logical_condition.html)

Operator NOT dievaluasi sebelum AND, dan operator AND dievaluasi sebelum operator OR. Tanda kurung apa pun yang digunakan dapat mengesampingkan urutan evaluasi default ini. 

### Contoh
<a name="r_logical_condition-examples"></a>

Contoh berikut mengembalikan USERID dan USERNAME dari tabel USERS tempat pengguna menyukai Las Vegas dan olahraga: 

```
select userid, username from users
where likevegas = 1 and likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
67 | TWU10MZT
87 | DUF19VXU
92 | HYP36WEQ
109 | FPL38HZK
120 | DMJ24GUZ
123 | QZR22XGQ
130 | ZQC82ALK
133 | LBN45WCH
144 | UCX04JKN
165 | TEY68OEB
169 | AYQ83HGO
184 | TVX65AZX
...
(2128 rows)
```

Contoh berikutnya mengembalikan USERID dan USERNAME dari tabel USERS di mana pengguna menyukai Las Vegas, atau olahraga, atau keduanya. Kueri ini mengembalikan semua output dari contoh sebelumnya ditambah pengguna yang hanya menyukai Las Vegas atau olahraga. 

```
select userid, username from users
where likevegas = 1 or likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
2 | PGL08LJI
3 | IFT66TXU
5 | AEB55QTM
6 | NDQ15VBM
9 | MSD36KVR
10 | WKW41AIW
13 | QTF33MCG
15 | OWU78MTR
16 | ZMG93CDD
22 | RHT62AGI
27 | KOY02CVE
29 | HUH27PKK
...
(18968 rows)
```

Kueri berikut menggunakan tanda kurung di sekitar `OR` kondisi untuk menemukan tempat di New York atau California tempat Macbeth dilakukan: 

```
select distinct venuename, venuecity
from venue join event on venue.venueid=event.venueid
where (venuestate = 'NY' or venuestate = 'CA') and eventname='Macbeth'
order by 2,1;

venuename                |   venuecity
----------------------------------------+---------------
Geffen Playhouse                       | Los Angeles
Greek Theatre                          | Los Angeles
Royce Hall                             | Los Angeles
American Airlines Theatre              | New York City
August Wilson Theatre                  | New York City
Belasco Theatre                        | New York City
Bernard B. Jacobs Theatre              | New York City
...
```

Menghapus tanda kurung dalam contoh ini mengubah logika dan hasil kueri. 

Contoh berikut menggunakan `NOT` operator: 

```
select * from category
where not catid=1
order by 1;

catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
...
```

Contoh berikut menggunakan `NOT` kondisi yang diikuti oleh suatu `AND` kondisi: 

```
select * from category
where (not catid=1) and catgroup='Sports'
order by catid;

catid | catgroup | catname |             catdesc
-------+----------+---------+---------------------------------
2 | Sports   | NHL     | National Hockey League
3 | Sports   | NFL     | National Football League
4 | Sports   | NBA     | National Basketball Association
5 | Sports   | MLS     | Major League Soccer
(4 rows)
```

# Kondisi pencocokan pola
<a name="pattern-matching-conditions"></a>

**Topics**
+ [SUKA](r_patternmatching_condition_like.md)
+ [SIMILAR TO](pattern-matching-conditions-similar-to.md)
+ [Operator POSIX](pattern-matching-conditions-posix.md)

Operator pencocokan pola mencari string untuk pola yang ditentukan dalam ekspresi kondisional dan mengembalikan true atau false tergantung pada apakah ia menemukan kecocokan. Amazon Redshift menggunakan tiga metode untuk pencocokan pola: 
+ Seperti ekspresi

  Operator LIKE membandingkan ekspresi string, seperti nama kolom, dengan pola yang menggunakan karakter wildcard `%` (persen) dan `_` (garis bawah). Pencocokan pola LIKE selalu mencakup seluruh string. LIKE melakukan kecocokan peka huruf besar/kecil dan ILIKE melakukan pertandingan case-insensitive. 
+ MIRIP dengan ekspresi reguler

  Operator SIMILAR TO mencocokkan ekspresi string dengan pola ekspresi reguler standar SQL, yang dapat menyertakan satu set metakarakter pencocokan pola yang mencakup dua yang didukung oleh operator LIKE. MIRIP DENGAN mencocokkan seluruh string dan melakukan kecocokan peka huruf besar/kecil.
+ Ekspresi reguler bergaya POSIX 

  Ekspresi reguler POSIX memberikan sarana yang lebih kuat untuk pencocokan pola daripada operator LIKE dan SIMILAR TO. Pola ekspresi reguler POSIX dapat mencocokkan bagian mana pun dari string dan melakukan kecocokan peka huruf besar/kecil.

Pencocokan ekspresi reguler, menggunakan operator SIMILAR TO atau POSIX, mahal secara komputasi. Kami merekomendasikan menggunakan LIKE bila memungkinkan, terutama saat memproses sejumlah besar baris. Misalnya, kueri berikut identik secara fungsional, tetapi kueri yang menggunakan LIKE berjalan beberapa kali lebih cepat daripada kueri yang menggunakan ekspresi reguler:

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

# SUKA
<a name="r_patternmatching_condition_like"></a>

Operator LIKE membandingkan ekspresi string, seperti nama kolom, dengan pola yang menggunakan karakter wildcard% (percent) dan \$1 (underscore). Pencocokan pola LIKE selalu mencakup seluruh string. Untuk mencocokkan urutan di mana saja dalam string, pola harus dimulai dan diakhiri dengan tanda persen. 

LIKE peka huruf besar/kecil; ILIKE tidak peka huruf besar/kecil.

## Sintaksis
<a name="r_patternmatching_condition_like-synopsis"></a>

```
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
```

## Argumen
<a name="r_patternmatching_condition_like-arguments"></a>

 *ekspresi*   
Ekspresi karakter UTF-8 yang valid, seperti nama kolom. 

SEPERTI \$1 ILIKE   
LIKE melakukan kecocokan pola peka huruf besar/kecil. ILIKE melakukan kecocokan pola case-insensitive untuk karakter single-byte UTF-8 (ASCII). Untuk melakukan kecocokan pola case-insensitive untuk karakter multibyte, gunakan fungsi [LOWER](r_LOWER.md) pada *ekspresi* dan *pola* dengan kondisi LIKE.  
Berbeda dengan predikat perbandingan, seperti = dan <>, predikat LIKE dan ILIKE tidak secara implisit mengabaikan spasi tambahan. Untuk mengabaikan spasi tambahan, gunakan RTRIM atau secara eksplisit melemparkan kolom CHAR ke VARCHAR.  
`~~`Operator setara dengan LIKE, dan `~~*` setara dengan ILIKE. Juga `!~~` dan `!~~*` operator setara dengan TIDAK SUKA dan TIDAK ILIKE.

 *pola*   
Ekspresi karakter UTF-8 yang valid dengan pola yang akan dicocokkan. 

 *escape\$1char*   
Ekspresi karakter yang akan lolos dari karakter metakarakter dalam pola. Defaultnya adalah dua garis miring terbalik ('\$1\$1'). 

Jika *pola* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan.

Salah satu ekspresi karakter dapat berupa tipe data CHAR atau VARCHAR. *Jika berbeda, Amazon Redshift mengubah *pola* ke tipe data ekspresi.* 

LIKE mendukung metakarakter pencocokan pola berikut: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_patternmatching_condition_like.html)

## Contoh
<a name="r_patternmatching_condition_like-examples"></a>

Tabel berikut menunjukkan contoh pencocokan pola menggunakan LIKE:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_patternmatching_condition_like.html)

Contoh berikut menemukan semua kota yang namanya dimulai dengan “E”: 

```
select distinct city from users
where city like 'E%' order by city;
city
---------------
East Hartford
East Lansing
East Rutherford
East St. Louis
Easthampton
Easton
Eatontown
Eau Claire
...
```

Contoh berikut menemukan pengguna yang nama belakangnya berisi “sepuluh”:

```
select distinct lastname from users
where lastname like '%ten%' order by lastname;
lastname
-------------
Christensen
Wooten
...
```

Contoh berikut menunjukkan bagaimana untuk mencocokkan beberapa pola.

```
select distinct lastname from tickit.users
where lastname like 'Chris%' or lastname like '%Wooten' order by lastname;
lastname
-------------
Christensen
Christian
Wooten
...
```

Contoh berikut menemukan kota yang karakter ketiga dan keempat adalah “ea”. Perintah menggunakan ILIKE untuk menunjukkan ketidakpekaan kasus: 

```
select distinct city from users where city ilike '__EA%' order by city;
city
-------------
Brea
Clearwater
Great Falls
Ocean City
Olean
Wheaton
(6 rows)
```

Contoh berikut menggunakan string escape default (\$1\$1) untuk mencari string yang menyertakan “start\$1” (teks `start` diikuti oleh garis bawah): `_` 

```
select tablename, "column" from pg_table_def 
where "column" like '%start\\_%'
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

Contoh berikut menentukan '^' sebagai karakter escape, kemudian menggunakan karakter escape untuk mencari string yang menyertakan “start\$1” (teks `start` diikuti dengan garis bawah): `_` 

```
select tablename, "column" from pg_table_def 
where "column" like '%start^_%' escape '^' 
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

Contoh berikut menggunakan `~~*` operator untuk melakukan pencarian case-insensitive (ILIKE) untuk kota yang dimulai dengan “Ag”. 

```
select distinct city from users where city ~~* 'Ag%' order by city;
                   
city
------------
Agat	
Agawam	
Agoura Hills	
Aguadilla
```

# SIMILAR TO
<a name="pattern-matching-conditions-similar-to"></a>

Operator MIRIP TO cocok dengan ekspresi string, seperti nama kolom, dengan pola ekspresi reguler standar SQL. Pola ekspresi reguler SQL dapat mencakup satu set metakarakter pencocokan pola, termasuk dua yang didukung oleh operator. [SUKA](r_patternmatching_condition_like.md) 

Operator SIMILAR TO mengembalikan true hanya jika polanya cocok dengan seluruh string, tidak seperti perilaku ekspresi reguler POSIX, di mana pola dapat cocok dengan bagian mana pun dari string. 

MIRIP DENGAN melakukan kecocokan case-sensitive. 

**catatan**  
Pencocokan ekspresi reguler menggunakan SIMILAR TO mahal secara komputasi. Kami merekomendasikan menggunakan LIKE bila memungkinkan, terutama saat memproses sejumlah besar baris. Misalnya, kueri berikut identik secara fungsional, tetapi kueri yang menggunakan LIKE berjalan beberapa kali lebih cepat daripada kueri yang menggunakan ekspresi reguler:  

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## Sintaksis
<a name="pattern-matching-conditions-similar-to-synopsis"></a>

```
expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]
```

## Argumen
<a name="pattern-matching-conditions-similar-to-arguments"></a>

 *ekspresi*   
Ekspresi karakter UTF-8 yang valid, seperti nama kolom. 

SIMILAR TO  
*MIRIP DENGAN melakukan kecocokan pola peka huruf besar/kecil untuk seluruh string dalam ekspresi.* 

 *pola*   
Ekspresi karakter UTF-8 yang valid mewakili pola ekspresi reguler standar SQL. 

 *escape\$1char*   
Ekspresi karakter yang akan lolos dari metakarakter dalam pola. Defaultnya adalah dua garis miring terbalik ('\$1\$1'). 

Jika *pola* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri.

Salah satu ekspresi karakter dapat berupa tipe data CHAR atau VARCHAR. *Jika berbeda, Amazon Redshift mengubah *pola* ke tipe data ekspresi.* 

MIRIP DENGAN mendukung metakarakter pencocokan pola berikut: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

## Contoh
<a name="pattern-matching-conditions-similar-to-examples"></a>

Tabel berikut menunjukkan contoh pencocokan pola menggunakan SIMILAR TO:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

Contoh berikut menemukan kota yang namanya mengandung “E” atau “H”: 

```
SELECT DISTINCT city FROM users
WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

Contoh berikut menggunakan string escape default ('`\\`') untuk mencari string yang menyertakan "`_`“:

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start\\_%'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

Contoh berikut menentukan '`^`' sebagai string escape, kemudian menggunakan string escape untuk mencari string yang menyertakan "“`_`: 

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

# Operator POSIX
<a name="pattern-matching-conditions-posix"></a>

Ekspresi reguler POSIX adalah urutan karakter yang menentukan pola kecocokan. String cocok dengan ekspresi reguler jika itu adalah anggota dari set reguler yang dijelaskan oleh ekspresi reguler.

Ekspresi reguler POSIX memberikan sarana yang lebih kuat untuk pencocokan pola daripada [SIMILAR TO](pattern-matching-conditions-similar-to.md) operator [SUKA](r_patternmatching_condition_like.md) dan. Pola ekspresi reguler POSIX dapat cocok dengan setiap bagian dari string, tidak seperti operator SIMILAR TO, yang mengembalikan true hanya jika polanya cocok dengan seluruh string.

**catatan**  
Pencocokan ekspresi reguler menggunakan operator POSIX mahal secara komputasi. Kami merekomendasikan menggunakan LIKE bila memungkinkan, terutama saat memproses sejumlah besar baris. Misalnya, kueri berikut identik secara fungsional, tetapi kueri yang menggunakan LIKE berjalan beberapa kali lebih cepat daripada kueri yang menggunakan ekspresi reguler:  

```
select count(*) from event where eventname ~ '.*(Ring|Die).*'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## Sintaksis
<a name="pattern-matching-conditions-posix-synopsis"></a>

```
expression [ ! ] ~ pattern
```

## Argumen
<a name="pattern-matching-conditions-posix-arguments"></a>

 *ekspresi*   
Ekspresi karakter UTF-8 yang valid, seperti nama kolom. 

\$1  
Operator negasi. Tidak cocok dengan ekspresi reguler.

\$1  
*Lakukan kecocokan peka huruf besar/kecil untuk setiap substring ekspresi.*   
A `~~` adalah sinonim untuk. [SUKA](r_patternmatching_condition_like.md)

 *pola*   
Sebuah string literal yang mewakili pola ekspresi reguler. 

Jika *pola* tidak mengandung karakter wildcard, maka pola hanya mewakili string itu sendiri.

Untuk mencari string yang menyertakan metakarakter, seperti '`. * | ? `', dan seterusnya, hindari karakter menggunakan dua garis miring terbalik (''). ` \\` Tidak seperti `SIMILAR TO` dan`LIKE`, sintaks ekspresi reguler POSIX tidak mendukung karakter escape yang ditentukan pengguna. 

Salah satu ekspresi karakter dapat berupa tipe data CHAR atau VARCHAR. *Jika berbeda, Amazon Redshift mengubah *pola* ke tipe data ekspresi.* 

Semua ekspresi karakter dapat berupa tipe data CHAR atau VARCHAR. *Jika ekspresi berbeda dalam tipe data, Amazon Redshift mengonversinya menjadi tipe data ekspresi.* 

Pencocokan pola POSIX mendukung metakarakter berikut: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-posix.html)

Amazon Redshift mendukung kelas karakter POSIX berikut. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-posix.html)

 Amazon Redshift mendukung operator yang dipengaruhi Perl berikut dalam ekspresi reguler. Melarikan diri dari operator menggunakan dua garis miring terbalik ('`\\`').   

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-posix.html)

## Contoh
<a name="pattern-matching-conditions-posix-synopsis-examples"></a>

Tabel berikut menunjukkan contoh pencocokan pola menggunakan operator POSIX:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/pattern-matching-conditions-posix.html)

Contoh berikut menemukan kota yang namanya mengandung `E` atau`H`: 

```
SELECT DISTINCT city FROM users
WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

Contoh berikut menemukan kota yang namanya tidak mengandung `E` atau`H`: 

```
SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Aberdeen	
 Abilene	
 Ada	
 Agat	
 Agawam
```

Contoh berikut menggunakan escape string ('`\\`') untuk mencari string yang menyertakan titik. 

```
SELECT venuename FROM venue
WHERE venuename ~ '.*\\..*'
ORDER BY venueid;

          venuename
------------------------------
 St. Pete Times Forum
 Jobing.com Arena
 Hubert H. Humphrey Metrodome
 U.S. Cellular Field
 Superpages.com Center
 E.J. Nutter Center
 Bernard B. Jacobs Theatre
 St. James Theatre
```

# ANTARA kondisi rentang
<a name="r_range_condition"></a>

Sebuah `BETWEEN` kondisi menguji ekspresi untuk dimasukkan dalam berbagai nilai, menggunakan kata kunci `BETWEEN` dan`AND`. 

## Sintaksis
<a name="r_range_condition-synopsis"></a>

```
expression [ NOT ] BETWEEN expression AND expression
```

Ekspresi dapat berupa tipe data numerik, karakter, atau datetime, tetapi harus kompatibel. Kisarannya inklusif.

## Contoh
<a name="r_range_condition-examples"></a>

Contoh pertama menghitung berapa banyak transaksi terdaftar penjualan baik 2, 3, atau 4 tiket: 

```
select count(*) from sales
where qtysold between 2 and 4;

count
--------
104021
(1 row)
```

Kondisi rentang mencakup nilai awal dan akhir.

```
select min(dateid), max(dateid) from sales
where dateid between 1900 and 1910;

min  | max 
-----+-----
1900 | 1910
```

Ekspresi pertama dalam kondisi rentang harus nilai yang lebih rendah dan ekspresi kedua nilai yang lebih besar. Contoh berikut akan selalu mengembalikan nol baris karena nilai-nilai ekspresi: 

```
select count(*) from sales
where qtysold between 4 and 2;

count
-------
0
(1 row)
```

Namun, menerapkan pengubah NOT akan membalikkan logika dan menghasilkan hitungan semua baris: 

```
select count(*) from sales
where qtysold not between 4 and 2;

count
--------
172456
(1 row)
```

Kueri berikut mengembalikan daftar tempat dengan 20000 hingga 50000 kursi: 

```
select venueid, venuename, venueseats from venue
where venueseats between 20000 and 50000
order by venueseats desc;

venueid |       venuename               | venueseats
---------+-------------------------------+------------
116 | Busch Stadium                 |      49660
106 | Rangers BallPark in Arlington |      49115
96 | Oriole Park at Camden Yards   |      48876
...
(22 rows)
```

Contoh berikut menunjukkan menggunakan BETWEEN untuk nilai tanggal:

```
select salesid, qtysold, pricepaid, commission, saletime 
from sales 
where eventid between 1000 and 2000 
   and saletime between '2008-01-01' and '2008-01-03'
order by saletime asc;

salesid | qtysold | pricepaid | commission |   saletime
--------+---------+-----------+------------+---------------
  65082 |       4 |       472 |       70.8 | 1/1/2008 06:06
 110917 |       1 |       337 |      50.55 | 1/1/2008 07:05
 112103 |       1 |       241 |      36.15 | 1/2/2008 03:15
 137882 |       3 |      1473 |     220.95 | 1/2/2008 05:18
  40331 |       2 |        58 |        8.7 | 1/2/2008 05:57
 110918 |       3 |      1011 |     151.65 | 1/2/2008 07:17
  96274 |       1 |       104 |       15.6 | 1/2/2008 07:18
 150499 |       3 |       135 |      20.25 | 1/2/2008 07:20
  68413 |       2 |       158 |       23.7 | 1/2/2008 08:12
```

Perhatikan bahwa meskipun rentang BETWEEN inklusif, tanggal default memiliki nilai waktu 00:00:00. Satu-satunya baris 3 Januari yang valid untuk kueri sampel adalah baris dengan waktu penjualan. `1/3/2008 00:00:00`

# Kondisi nol
<a name="r_null_condition"></a>

Kondisi null menguji nol, ketika nilai hilang atau tidak diketahui. 

## Sintaksis
<a name="r_null_condition-synopsis"></a>

```
expression IS [ NOT ] NULL
```

## Argumen
<a name="r_null_condition-arguments"></a>

 *ekspresi*   
Ekspresi apa pun seperti kolom. 

IS NULL   
Benar ketika nilai ekspresi adalah null dan false ketika memiliki nilai. 

 IS NOT NULL   
Adalah false ketika nilai ekspresi adalah null dan true ketika memiliki nilai. 

## Contoh
<a name="r_null_condition-example"></a>

Contoh ini menunjukkan berapa kali tabel PENJUALAN berisi null di bidang QTYSOLD: 

```
select count(*) from sales
where qtysold is null;
count
-------
0
(1 row)
```

# Kondisi EXISTS
<a name="r_exists_condition"></a>

EXISTS kondisi tes untuk keberadaan baris dalam subquery, dan mengembalikan true jika subquery mengembalikan setidaknya satu baris. Jika NOT ditentukan, kondisi mengembalikan true jika subquery mengembalikan tidak ada baris.

## Sintaksis
<a name="r_exists_condition-synopsis"></a>

```
[ NOT ] EXISTS (table_subquery)
```

## Argumen
<a name="r_exists_condition-arguments"></a>

 ADA   
Benar ketika *table\$1subquery* mengembalikan setidaknya satu baris.

TIDAK ADA   
Benar ketika *table\$1subquery tidak mengembalikan baris*.

 *table\$1subquery*   
Subquery yang mengevaluasi tabel dengan satu atau lebih kolom dan satu atau lebih baris.

## Contoh
<a name="r_exists_condition-example"></a>

Contoh ini mengembalikan semua pengidentifikasi tanggal, masing-masing satu kali, untuk setiap tanggal yang memiliki penjualan dalam bentuk apa pun:

```
select dateid from date
where exists (
select 1 from sales
where date.dateid = sales.dateid
)
order by dateid;

dateid
--------
1827
1828
1829
...
```

# Dalam kondisi
<a name="r_in_condition"></a>

Kondisi IN menguji nilai untuk keanggotaan dalam satu set nilai atau dalam subquery. 

## Sintaksis
<a name="r_in_condition-synopsis"></a>

```
expression [ NOT ] IN (expr_list | table_subquery)
```

## Pendapat
<a name="r_in_condition-arguments"></a>

 *ekspresi*   
Ekspresi numerik, karakter, atau datetime yang dievaluasi terhadap *expr\$1list atau table\$1subquery dan harus kompatibel dengan tipe data daftar* *atau subquery* tersebut. 

 *expr\$1list*   
Satu atau lebih ekspresi yang dibatasi koma, atau satu atau lebih kumpulan ekspresi yang dibatasi koma yang dibatasi oleh tanda kurung. 

 *table\$1subquery*   
Subquery yang mengevaluasi tabel dengan satu atau lebih baris, tetapi terbatas hanya satu kolom dalam daftar pilihannya. 

DI \$1 TIDAK DI   
IN mengembalikan true jika ekspresi adalah anggota dari daftar ekspresi atau query. NOT IN mengembalikan true jika ekspresi bukan anggota. IN dan NOT IN mengembalikan NULL dan tidak ada baris yang dikembalikan dalam kasus berikut: Jika *ekspresi* menghasilkan null; atau jika tidak ada nilai *expr\$1list atau *table\$1subquery** yang cocok dan setidaknya satu dari baris perbandingan ini menghasilkan null. 

## Contoh
<a name="r_in_condition-examples"></a>

Kondisi berikut benar hanya untuk nilai-nilai yang tercantum: 

```
qtysold in (2, 4, 5)
date.day in ('Mon', 'Tues')
date.month not in ('Oct', 'Nov', 'Dec')
```

## Optimalisasi untuk Daftar IN Besar
<a name="r_in_condition-optimization-for-large-in-lists"></a>

Untuk mengoptimalkan kinerja kueri, daftar IN yang mencakup lebih dari 10 nilai dievaluasi secara internal sebagai array skalar. Daftar IN dengan nilai kurang dari 10 dievaluasi sebagai serangkaian predikat OR. Optimalisasi ini didukung untuk tipe data SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP, dan TIMESTAMPTZ. 

Lihatlah output EXPLOW untuk kueri untuk melihat efek dari pengoptimalan ini. Contoh: 

```
explain select * from sales
QUERY PLAN
--------------------------------------------------------------------
XN Seq Scan on sales  (cost=0.00..6035.96 rows=86228 width=53)
Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[]))
(2 rows)
```

# Perintah SQL
<a name="c_SQL_commands"></a>

Bahasa SQL terdiri dari perintah yang Anda gunakan untuk membuat dan memanipulasi objek database, menjalankan kueri, memuat tabel, dan memodifikasi data dalam tabel.

Amazon Redshift didasarkan pada PostgreSQL. Amazon Redshift dan PostgreSQL memiliki sejumlah perbedaan penting yang harus Anda waspadai saat merancang dan mengembangkan aplikasi gudang data Anda. Untuk informasi selengkapnya tentang perbedaan Amazon Redshift SQL dari PostgreSQL, lihat. [Amazon Redshift dan PostgreSQL](c_redshift-and-postgres-sql.md)

**catatan**  
Ukuran maksimum untuk satu pernyataan SQL adalah 16 MB.

**Topics**
+ [MENGGUGURKAN](r_ABORT.md)
+ [ALTER DATABASE](r_ALTER_DATABASE.md)
+ [MENGUBAH DATASHARE](r_ALTER_DATASHARE.md)
+ [MENGUBAH HAK ISTIMEWA DEFAULT](r_ALTER_DEFAULT_PRIVILEGES.md)
+ [MENGUBAH SKEMA EKSTERNAL](r_ALTER_EXTERNAL_SCHEMA.md)
+ [MENGUBAH TAMPILAN EKSTERNAL](r_ALTER_EXTERNAL_VIEW.md)
+ [ALTER FUNCTION](r_ALTER_FUNCTION.md)
+ [MENGUBAH KELOMPOK](r_ALTER_GROUP.md)
+ [MENGUBAH PENYEDIA IDENTITAS](r_ALTER_IDENTITY_PROVIDER.md)
+ [MENGUBAH KEBIJAKAN MASKING](r_ALTER_MASKING_POLICY.md)
+ [MENGUBAH TAMPILAN TERWUJUD](r_ALTER_MATERIALIZED_VIEW.md)
+ [MENGUBAH KEBIJAKAN RLS](r_ALTER_RLS_POLICY.md)
+ [MENGUBAH PERAN](r_ALTER_ROLE.md)
+ [MENGUBAH PROSEDUR](r_ALTER_PROCEDURE.md)
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [MENGUBAH SISTEM](r_ALTER_SYSTEM.md)
+ [ALTER TABLE](r_ALTER_TABLE.md)
+ [UBAH TABEL TAMBAHKAN](r_ALTER_TABLE_APPEND.md)
+ [MENGUBAH TEMPLATE](r_ALTER_TEMPLATE.md)
+ [ALTER USER](r_ALTER_USER.md)
+ [MENGANALISA](r_ANALYZE.md)
+ [MENGANALISIS KOMPRESI](r_ANALYZE_COMPRESSION.md)
+ [LAMPIRKAN KEBIJAKAN MASKING](r_ATTACH_MASKING_POLICY.md)
+ [LAMPIRKAN KEBIJAKAN RLS](r_ATTACH_RLS_POLICY.md)
+ [MULAI](r_BEGIN.md)
+ [PANGGILAN](r_CALL_procedure.md)
+ [CANCEL (BATALKAN)](r_CANCEL.md)
+ [TUTUP](close.md)
+ [MENGOMENTARI](r_COMMENT.md)
+ [COMMIT](r_COMMIT.md)
+ [MENYONTEK](r_COPY.md)
+ [BUAT BASIS DATA](r_CREATE_DATABASE.md)
+ [BUAT DATASHARE](r_CREATE_DATASHARE.md)
+ [BUAT FUNGSI EKSTERNAL](r_CREATE_EXTERNAL_FUNCTION.md)
+ [BUAT MODEL EKSTERNAL](r_create_external_model.md)
+ [BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md)
+ [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)
+ [BUAT TAMPILAN EKSTERNAL](r_CREATE_EXTERNAL_VIEW.md)
+ [CREATE FUNCTION](r_CREATE_FUNCTION.md)
+ [BUAT GRUP](r_CREATE_GROUP.md)
+ [BUAT PENYEDIA IDENTITAS](r_CREATE_IDENTITY_PROVIDER.md)
+ [BUAT PUSTAKA](r_CREATE_LIBRARY.md)
+ [BUAT KEBIJAKAN MASKING](r_CREATE_MASKING_POLICY.md)
+ [BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md)
+ [BUAT MODEL](r_CREATE_MODEL.md)
+ [BUAT PROSEDUR](r_CREATE_PROCEDURE.md)
+ [BUAT KEBIJAKAN RLS](r_CREATE_RLS_POLICY.md)
+ [CREATE ROLE](r_CREATE_ROLE.md)
+ [BUAT SKEMA](r_CREATE_SCHEMA.md)
+ [CREATE TABLE](r_CREATE_TABLE_NEW.md)
+ [CREATE TABLE AS](r_CREATE_TABLE_AS.md)
+ [BUAT TEMPLATE](r_CREATE_TEMPLATE.md)
+ [BUAT PENGGUNA](r_CREATE_USER.md)
+ [CREATE VIEW](r_CREATE_VIEW.md)
+ [DEALOKASI](r_DEALLOCATE.md)
+ [MENYATAKAN](declare.md)
+ [DELETE](r_DELETE.md)
+ [DESC DATASHARE](r_DESC_DATASHARE.md)
+ [PENYEDIA IDENTITAS DESC](r_DESC_IDENTITY_PROVIDER.md)
+ [KEBIJAKAN PELEPASAN MASKING](r_DETACH_MASKING_POLICY.md)
+ [KEBIJAKAN DETACH RLS](r_DETACH_RLS_POLICY.md)
+ [DROP DATABASE](r_DROP_DATABASE.md)
+ [JATUHKAN DATASHARE](r_DROP_DATASHARE.md)
+ [JATUHKAN TAMPILAN EKSTERNAL](r_DROP_EXTERNAL_VIEW.md)
+ [FUNGSI DROP](r_DROP_FUNCTION.md)
+ [GRUP DROP](r_DROP_GROUP.md)
+ [JATUHKAN PENYEDIA IDENTITAS](r_DROP_IDENTITY_PROVIDER.md)
+ [DROP PERPUSTAKAAN](r_DROP_LIBRARY.md)
+ [KEBIJAKAN DROP MASKING](r_DROP_MASKING_POLICY.md)
+ [MODEL DROP](r_DROP_MODEL.md)
+ [JATUHKAN TAMPILAN TERWUJUD](materialized-view-drop-sql-command.md)
+ [PROSEDUR DROP](r_DROP_PROCEDURE.md)
+ [KEBIJAKAN DROP RLS](r_DROP_RLS_POLICY.md)
+ [DROP ROLE](r_DROP_ROLE.md)
+ [DROP SCHEMA](r_DROP_SCHEMA.md)
+ [MEJA DROP](r_DROP_TABLE.md)
+ [DROP TEMPLATE](r_DROP_TEMPLATE.md)
+ [JATUHKAN PENGGUNA](r_DROP_USER.md)
+ [TAMPILAN DROP](r_DROP_VIEW.md)
+ [AKHIR](r_END.md)
+ [EXECUTE](r_EXECUTE.md)
+ [EXPLAIN](r_EXPLAIN.md)
+ [AMBIL](fetch.md)
+ [HIBAH](r_GRANT.md)
+ [INSERT](r_INSERT_30.md)
+ [INSERT (tabel eksternal)](r_INSERT_external_table.md)
+ [GEMBOK](r_LOCK.md)
+ [MERGE](r_MERGE.md)
+ [MEMPERSIAPKAN](r_PREPARE.md)
+ [MENYEGARKAN TAMPILAN TERWUJUD](materialized-view-refresh-sql-command.md)
+ [ATUR ULANG](r_RESET.md)
+ [MENCABUT](r_REVOKE.md)
+ [ROLLBACK](r_ROLLBACK.md)
+ [SELECT](r_SELECT_synopsis.md)
+ [PILIH KE](r_SELECT_INTO.md)
+ [SET](r_SET.md)
+ [MENGATUR OTORISASI SESI](r_SET_SESSION_AUTHORIZATION.md)
+ [MENGATUR KARAKTERISTIK SESI](r_SET_SESSION_CHARACTERISTICS.md)
+ [MEMPERLIHATKAN](r_SHOW.md)
+ [TUNJUKKAN HIBAH KOLOM](r_SHOW_COLUMN_GRANTS.md)
+ [TAMPILKAN KOLOM](r_SHOW_COLUMNS.md)
+ [TUNJUKKAN KENDALA](r_SHOW_CONSTRAINTS.md)
+ [TAMPILKAN TABEL EKSTERNAL](r_SHOW_EXTERNAL_TABLE.md)
+ [TAMPILKAN DATABASE](r_SHOW_DATABASES.md)
+ [TAMPILKAN FUNGSI](r_SHOW_FUNCTIONS.md)
+ [TUNJUKKAN HIBAH](r_SHOW_GRANTS.md)
+ [MODEL PERTUNJUKAN](r_SHOW_MODEL.md)
+ [TAMPILKAN DATASHARES](r_SHOW_DATASHARES.md)
+ [TAMPILKAN PARAMETER](r_SHOW_PARAMETERS.md)
+ [TAMPILKAN KEBIJAKAN](r_SHOW_POLICIES.md)
+ [TAMPILKAN PROSEDUR](r_SHOW_PROCEDURE.md)
+ [TUNJUKKAN PROSEDUR](r_SHOW_PROCEDURES.md)
+ [TAMPILKAN SKEMA](r_SHOW_SCHEMAS.md)
+ [TAMPILKAN TABEL](r_SHOW_TABLE.md)
+ [TAMPILKAN TABEL](r_SHOW_TABLES.md)
+ [TAMPILKAN TEMPLATE](r_SHOW_TEMPLATE.md)
+ [TAMPILKAN TEMPLATE](r_SHOW_TEMPLATES.md)
+ [TAMPILKAN TAMPILAN](r_SHOW_VIEW.md)
+ [START TRANSACTION](r_START_TRANSACTION.md)
+ [MEMOTONG](r_TRUNCATE.md)
+ [MEMBONGKAR](r_UNLOAD.md)
+ [UPDATE](r_UPDATE.md)
+ [USE](r_USE_command.md)
+ [VAKUM](r_VACUUM_command.md)

# MENGGUGURKAN
<a name="r_ABORT"></a>

Menghentikan transaksi yang sedang berjalan dan membuang semua pembaruan yang dilakukan oleh transaksi tersebut. ABORT tidak berpengaruh pada transaksi yang sudah selesai.

Perintah ini melakukan fungsi yang sama dengan perintah ROLLBACK. Untuk informasi, lihat [ROLLBACK](r_ROLLBACK.md).

## Sintaksis
<a name="r_ABORT-synopsis"></a>

```
ABORT [ WORK | TRANSACTION ]
```

## Parameter
<a name="r_ABORT-parameters"></a>

PEKERJAAN  
Kata kunci opsional.

TRANSAKSI  
Kata kunci opsional; KERJA dan TRANSAKSI adalah sinonim.

## Contoh
<a name="r_ABORT-example"></a>

Contoh berikut membuat tabel kemudian memulai transaksi di mana data dimasukkan ke dalam tabel. Perintah ABORT kemudian memutar kembali penyisipan data untuk membiarkan tabel kosong.

Perintah berikut membuat tabel contoh yang disebut MOVIE\$1GROSS:

```
create table movie_gross( name varchar(30), gross bigint );
```

Kumpulan perintah berikutnya memulai transaksi yang menyisipkan dua baris data ke dalam tabel:

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Selanjutnya, perintah berikut memilih data dari tabel untuk menunjukkan bahwa itu berhasil dimasukkan:

```
select * from movie_gross;
```

Output perintah menunjukkan bahwa kedua baris berhasil dimasukkan:

```
         name           |  gross
------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Perintah ini sekarang memutar kembali perubahan data ke tempat transaksi dimulai:

```
abort;
```

Memilih data dari tabel sekarang menunjukkan tabel kosong:

```
select * from movie_gross;

 name | gross
------+-------
(0 rows)
```

# ALTER DATABASE
<a name="r_ALTER_DATABASE"></a>

Mengubah atribut database.

## Hak istimewa yang diperlukan
<a name="r_ALTER_DATABASE-privileges"></a>

Untuk menggunakan ALTER DATABASE, diperlukan salah satu hak istimewa berikut..
+ Superuser
+ Pengguna dengan hak istimewa ALTER DATABASE
+ Pemilik database

## Sintaksis
<a name="r_ALTER_DATABASE-synopsis"></a>

```
ALTER DATABASE database_name
{ 
  RENAME TO new_name
  | OWNER TO new_owner
  | [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
| INTEGRATION
 { 
  REFRESH { { ALL | INERROR } TABLES [ IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] }
   | SET 
     [ QUERY_ALL_STATES [=] { TRUE | FALSE } ] 
     [ ACCEPTINVCHARS [=] { TRUE | FALSE } ] 
     [ REFRESH_INTERVAL <interval> ]
     [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
     [ HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] } ] ]
 }
}
```

## Parameter
<a name="r_ALTER_DATABASE-parameters"></a>

 *database\$1name*   
Nama database untuk diubah. Biasanya, Anda mengubah database yang saat ini tidak terhubung dengan Anda; dalam hal apapun, perubahan hanya berlaku di sesi berikutnya. Anda dapat mengubah pemilik database saat ini, tetapi Anda tidak dapat mengganti namanya:  

```
alter database tickit rename to newtickit;
ERROR:  current database may not be renamed
```

GANTI NAMA MENJADI   
Mengganti nama database yang ditentukan. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md). Anda tidak dapat mengganti nama database dev, padb\$1harvest, template0, template1, atau sys:internal, dan Anda tidak dapat mengganti nama database saat ini. Hanya pemilik database atau yang [superuser](r_superusers.md#def_superusers) dapat mengganti nama database; pemilik non-superuser juga harus memiliki hak istimewa CREATEDB.

 *new\$1name*   
Nama database baru.

PEMILIK UNTUK   
Mengubah pemilik database yang ditentukan. Anda dapat mengubah pemilik database saat ini atau beberapa database lainnya. Hanya superuser yang bisa mengubah pemiliknya.

 *new\$1owner*   
Pemilik database baru. Pemilik baru harus menjadi pengguna database yang sudah ada dengan hak istimewa menulis. Untuk informasi selengkapnya tentang hak istimewa pengguna, lihat[HIBAH](r_GRANT.md).

BATAS KONEKSI \$1*limit* \$1 UNLIMITED\$1   
Jumlah maksimum koneksi database pengguna diizinkan untuk membuka secara bersamaan. Batas tidak diberlakukan untuk pengguna super. Gunakan kata kunci UNLIMITED untuk memungkinkan jumlah maksimum koneksi bersamaan. Batas jumlah koneksi untuk setiap pengguna mungkin juga berlaku. Untuk informasi selengkapnya, lihat [BUAT PENGGUNA](r_CREATE_USER.md). Defaultnya adalah UNLIMITED. Untuk melihat koneksi saat ini, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem.  
Jika batas koneksi pengguna dan database berlaku, slot koneksi yang tidak digunakan harus tersedia yang berada dalam kedua batas saat pengguna mencoba untuk terhubung.

MENYUSUN \$1CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI\$1  
Klausa yang menentukan apakah pencarian string atau perbandingan bersifat case-sensitive atau case-insensitive.   
Anda dapat mengubah sensitivitas kasus database saat ini meskipun kosong.  
Anda harus memiliki izin ALTER untuk database saat ini untuk mengubah sensitivitas kasus. Superuser atau pemilik database dengan izin CREATE DATABASE juga dapat mengubah sensitivitas kasus database.  
CASE\$1SENSITIVE dan CS dapat dipertukarkan dan menghasilkan hasil yang sama. Demikian pula, CASE\$1INSENSITIVE dan CI dapat dipertukarkan dan menghasilkan hasil yang sama.

TINGKAT ISOLASI \$1SNAPSHOT \$1 SERIALIZABLE\$1  
Sebuah klausa yang menentukan tingkat isolasi yang digunakan ketika query dijalankan terhadap database. Untuk informasi lebih lanjut tentang tingkat isolasi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md).  
+ Isolasi SNAPSHOT — menyediakan tingkat isolasi dengan perlindungan terhadap pembaruan dan penghapusan konflik. 
+ Isolasi SERIALIZABLE — menyediakan serialisasi penuh untuk transaksi bersamaan.
Pertimbangkan item berikut saat mengubah tingkat isolasi database:  
+ Anda harus memiliki superuser atau CREATE DATABASE privilege ke database saat ini untuk mengubah tingkat isolasi database.
+ Anda tidak dapat mengubah tingkat isolasi `dev` database. 
+ Anda tidak dapat mengubah tingkat isolasi dalam blok transaksi.
+ Perintah tingkat isolasi alter gagal jika pengguna lain terhubung ke database.
+ Perintah tingkat isolasi alter dapat mengubah pengaturan tingkat isolasi sesi saat ini.

INTEGRASI  
Mengubah database integrasi nol-ETL.

REFRESH \$1\$1ALL \$1 INERROR\$1 TABEL [DALAM SKEMA *SKEMA* [,...]] \$1 TABLE *schema.table* [,...]\$1  
Klausa yang menentukan apakah Amazon Redshift akan menyegarkan semua tabel atau tabel dengan kesalahan dalam skema atau tabel yang ditentukan. Penyegaran akan memicu tabel dalam skema atau tabel yang ditentukan untuk sepenuhnya direplikasi dari database sumber.  
*Untuk informasi selengkapnya, lihat [Integrasi nol-ETL di Panduan Manajemen Pergeseran](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html) Merah Amazon.* Untuk informasi selengkapnya tentang status integrasi, lihat [SVV\$1INTEGRATION\$1TABLE\$1STATE](r_SVV_INTEGRATION_TABLE_STATE.md) dan[SVV\$1INTEGRASI](r_SVV_INTEGRATION.md).

QUERY\$1ALL\$1STATES [=] \$1BENAR \$1 SALAH\$1  
Klausa QUERY\$1ALL\$1STATES menetapkan apakah tabel integrasi Zero-ETL dapat ditanyakan di semua status (,,, dan). `Synced` `Failed` `ResyncRequired` `ResyncInitiated` Secara default, tabel integrasi nol-ETL hanya dapat ditanyakan dalam status. `Synced`

ACCEPTINVCHARS [=] \$1TRUE \$1 FALSE\$1  
Klausa ACCEPTINVCHARS menetapkan apakah tabel integrasi nol-ETL berlanjut dengan konsumsi ketika karakter yang tidak valid terdeteksi untuk tipe data VARCHAR. Ketika karakter yang tidak valid ditemui, karakter yang tidak valid diganti dengan karakter default. `?`

REFRESH\$1INTERVAL <interval>  
Klausa REFRESH\$1INTERVAL menetapkan perkiraan interval waktu, dalam hitungan detik, untuk menyegarkan data dari sumber nol-ETL ke database target. `interval`Dapat diatur 0-432.000 detik (5 hari) untuk integrasi nol-ETL yang tipe sumbernya adalah Aurora MySQL, Aurora PostgreSQL, atau RDS untuk MySQL. Untuk integrasi Amazon DynamoDB Zero-ETL, dapat diatur 900—432.000 detik (15 `interval` menit —5 hari).  
*Untuk informasi selengkapnya tentang membuat database dengan integrasi Nol-ETL, lihat Membuat [database tujuan di Amazon Redshift di Panduan Manajemen Pergeseran Merah Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html).*

TRUNCATECOLUMNS [=] \$1TRUE \$1 FALSE\$1  
Klausa TRUNCATECOLUMNS menetapkan apakah tabel integrasi nol-ETL berlanjut dengan konsumsi ketika nilai untuk kolom VARCHAR atau atribut kolom SUPER berada di luar batas. Kapan`TRUE`, nilai terpotong agar sesuai dengan kolom dan nilai atribut JSON yang meluap dipotong agar sesuai dengan kolom SUPER.

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1 [UNTUK \$1\$1SEMUA\$1 TABEL [DALAM SKEMA SKEMA [,...]] \$1 TABLE schema.table [,...]\$1]  
Klausa yang menentukan apakah Amazon Redshift akan menyetel mode riwayat untuk semua tabel atau tabel dalam skema tertentu yang berpartisipasi dalam integrasi nol-ETL. Opsi ini hanya berlaku untuk database yang dibuat untuk integrasi nol-ETL.  
Klausa HISTORY\$1MODE dapat diatur ke atau. `TRUE` `FALSE` Nilai default-nya `FALSE`. Mengaktifkan dan menonaktifkan mode riwayat hanya berlaku untuk tabel yang berada dalam `Synced` status. Untuk informasi tentang HISTORY\$1MODE, lihat [Mode riwayat](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) di Panduan Manajemen Pergeseran Merah *Amazon*.

## Catatan penggunaan
<a name="r_ALTER_DATABASE-usage-notes"></a>

Perintah ALTER DATABASE berlaku untuk sesi berikutnya bukan sesi saat ini. Anda harus menyambung kembali ke database yang diubah untuk melihat efek perubahan.

## Contoh
<a name="r_ALTER_DATABASE-examples"></a>

Contoh berikut mengganti nama database bernama TICKIT\$1SANDBOX menjadi TICKIT\$1TEST: 

```
alter database tickit_sandbox rename to tickit_test;
```

Contoh berikut mengubah pemilik database TICKIT (database saat ini) menjadi DWUSER: 

```
alter database tickit owner to dwuser;
```

Contoh berikut mengubah sensitivitas kasus database database sampledb:

```
ALTER DATABASE sampledb COLLATE CASE_INSENSITIVE;
```

Contoh berikut mengubah database bernama **sampledb** dengan tingkat isolasi SNAPSHOT.

```
ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

Contoh berikut menyegarkan tabel **schema1.sample\$1table1** dan database **schema2.sample\$1table2** **sample\$1integration\$1db** dalam integrasi nol-ETL Anda.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLE schema1.sample_table1, schema2.sample_table2;
```

Contoh berikut menyegarkan semua tabel yang disinkronkan dan gagal dalam integrasi nol-ETL Anda.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH ALL tables;
```

Contoh berikut menetapkan interval refresh untuk integrasi nol-ETL ke 600 detik..

```
ALTER DATABASE sample_integration_db INTEGRATION SET REFRESH_INTERVAL 600;
```

Contoh berikut menyegarkan semua tabel yang ada di `ErrorState` dalam skema. **sample\$1schema**

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;
```

Contoh berikut mengaktifkan mode riwayat untuk tabel`myschema.table1`.

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true FOR TABLE myschema.table1
```

Contoh berikut mengaktifkan mode riwayat untuk semua tabel di`myschema`. 

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true for ALL TABLES IN SCHEMA myschema
```

# MENGUBAH DATASHARE
<a name="r_ALTER_DATASHARE"></a>

Mengubah definisi datashare. Anda dapat menambahkan objek atau menghapus objek menggunakan ALTER DATASHARE. Anda hanya dapat mengubah datashare di database saat ini. Menambahkan atau menghapus objek dari database terkait ke datashare. Pemilik datashare dengan izin yang diperlukan pada objek datashare yang akan ditambahkan atau dihapus dapat mengubah datashare.

## Hak istimewa yang diperlukan
<a name="r_ALTER_DATASHARE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk ALTER DATASHARE:
+ Pengguna super.
+ Pengguna dengan hak istimewa ALTER DATASHARE.
+ Pengguna yang memiliki hak ALTER atau ALL pada datashare.
+ Untuk menambahkan objek tertentu ke datashare, pengguna harus memiliki hak istimewa pada objek. Untuk kasus ini, pengguna harus menjadi pemilik objek atau memiliki hak PILIH, PENGGUNAAN, atau SEMUA pada objek. 

## Sintaksis
<a name="r_ALTER_DATASHARE-synopsis"></a>

Sintaks berikut menggambarkan cara menambah atau menghapus objek ke datashare.

```
ALTER DATASHARE datashare_name { ADD | REMOVE } {
TABLE schema.table [, ...]
| SCHEMA schema [, ...]
| FUNCTION schema.sql_udf (argtype,...) [, ...]
| ALL TABLES IN SCHEMA schema [, ...]
| ALL FUNCTIONS IN SCHEMA schema [, ...] }
```

Sintaks berikut menggambarkan cara mengkonfigurasi properti datashare.

```
ALTER DATASHARE datashare_name {
[ SET PUBLICACCESSIBLE [=] TRUE | FALSE ]
[ SET INCLUDENEW [=] TRUE | FALSE FOR SCHEMA schema ] }
```

## Parameter
<a name="r_ALTER_DATASHARE-parameters"></a>

*datashare\$1name*  
Nama datashare yang akan diubah. 

TAMBAHKAN \$1 HAPUS  
Klausa yang menentukan apakah akan menambahkan objek ke atau menghapus objek dari datashare.

*Skema* TABEL. *meja* [,...]  
Nama tabel atau tampilan dalam skema yang ditentukan untuk ditambahkan ke datashare.

Skema *SKEMA* [,...]   
Nama skema untuk ditambahkan ke datashare.

*Skema* FUNGSI. *sql\$1udf* (argtype,...) [,...]  
Nama fungsi SQL yang ditentukan pengguna dengan tipe argumen untuk ditambahkan ke datashare.

SEMUA TABEL DALAM *skema* SKEMA [,...]   
Sebuah klausa yang menentukan apakah akan menambahkan semua tabel dan tampilan dalam skema tertentu untuk datashare.

SEMUA FUNGSI DALAM SKEMA *skema* [,...]\$1  
Sebuah klausa yang menentukan menambahkan semua fungsi dalam skema tertentu untuk datashare.

[SET PUBLICACCESSIBLE [=] TRUE \$1 FALSE]  
Klausa yang menentukan apakah datashare dapat dibagikan ke kluster yang dapat diakses publik.

*[SET INCLUDENEW [=] BENAR \$1 SALAH UNTUK SKEMA SKEMA]*  
Klausa yang menentukan apakah akan menambahkan tabel masa depan, tampilan, atau fungsi yang ditentukan pengguna (UDFs) yang dibuat dalam skema yang ditentukan ke datashare. Tabel, tampilan, atau SQL saat ini UDFs dalam skema yang ditentukan tidak ditambahkan ke datashare. Hanya pengguna super yang dapat mengubah properti ini untuk setiap pasangan skema rangkaian data. Secara default, klausa INCLUDENEW adalah false. 

## UBAH CATATAN PENGGUNAAN DATASHARE
<a name="r_ALTER_DATASHARE_usage"></a>
+ Pengguna berikut dapat mengubah datashare:
  + Seorang superuser
  + Pemilik datashare
  + Pengguna yang memiliki hak ALTER atau ALL pada datashare
+ Untuk menambahkan objek tertentu ke datashare, pengguna harus memiliki hak istimewa yang benar pada objek. Pengguna harus menjadi pemilik objek atau memiliki hak PILIH, PENGGUNAAN, atau SEMUA hak istimewa pada objek.
+ Anda dapat berbagi skema, tabel, tampilan reguler, tampilan pengikatan akhir, tampilan terwujud, dan fungsi yang ditentukan pengguna SQL (). UDFs Tambahkan skema ke datashare terlebih dahulu sebelum menambahkan objek dalam skema. 

  Saat Anda menambahkan skema, Amazon Redshift tidak menambahkan semua objek di bawahnya. Anda harus menambahkannya secara eksplisit. 
+ Kami menyarankan Anda membuat AWS Data Exchange datashares dengan pengaturan yang dapat diakses publik diaktifkan.
+ Secara umum, kami menyarankan agar Anda tidak mengubah AWS Data Exchange datashare untuk menonaktifkan aksesibilitas publik menggunakan pernyataan ALTER DATASHARE. Jika Anda melakukannya, Akun AWS yang memiliki akses ke datashare kehilangan akses jika cluster mereka dapat diakses publik. Melakukan jenis perubahan ini dapat melanggar persyaratan produk data di. AWS Data Exchange Untuk pengecualian untuk rekomendasi ini, lihat berikut.

  Contoh berikut menunjukkan kesalahan ketika AWS Data Exchange datashare dibuat dengan pengaturan dimatikan.

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ERROR:  Alter of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value 'c670ba4db22f4b'
  ```

  Untuk memungkinkan mengubah AWS Data Exchange datashare untuk mematikan pengaturan yang dapat diakses publik, atur variabel berikut dan jalankan pernyataan ALTER DATASHARE lagi.

  ```
  SET datashare_break_glass_session_var to 'c670ba4db22f4b';
  ```

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ```

  Dalam kasus ini, Amazon Redshift menghasilkan nilai satu kali acak untuk menyetel variabel sesi agar memungkinkan ALTER DATASHARE SET PUBLICACESSIBLE FALSE untuk datashare. AWS Data Exchange 

## Contoh
<a name="r_ALTER_DATASHARE_examples"></a>

Contoh berikut menambahkan `public` skema ke `salesshare` datashare.

```
ALTER DATASHARE salesshare ADD SCHEMA public;
```

Contoh berikut menambahkan `public.tickit_sales_redshift` tabel ke datashare`salesshare`.

```
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
```

Contoh berikut menambahkan semua tabel ke datashare`salesshare`.

```
ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
```

Contoh berikut menghapus `public.tickit_sales_redshift` tabel dari datashare`salesshare`.

```
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
```

# MENGUBAH HAK ISTIMEWA DEFAULT
<a name="r_ALTER_DEFAULT_PRIVILEGES"></a>

Mendefinisikan set default izin akses yang akan diterapkan ke objek yang dibuat di masa depan oleh pengguna tertentu. Secara default, pengguna hanya dapat mengubah izin akses default mereka sendiri. Hanya pengguna super yang dapat menentukan izin default untuk pengguna lain.

Anda dapat menerapkan hak istimewa default ke peran, pengguna, atau grup pengguna. Anda dapat mengatur izin default secara global untuk semua objek yang dibuat dalam database saat ini, atau untuk objek yang dibuat hanya dalam skema yang ditentukan. 

Izin default hanya berlaku untuk objek baru. Menjalankan HAK ISTIMEWA DEFAULT ALTER tidak mengubah izin pada objek yang ada. Untuk memberikan izin pada semua objek saat ini dan masa depan yang dibuat oleh pengguna mana pun dalam database atau skema, lihat Izin [tercakup](https://docs.aws.amazon.com/redshift/latest/dg/t_scoped-permissions.html). 

Untuk melihat informasi tentang hak istimewa default bagi pengguna database, kueri tabel katalog [PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md) sistem. 

Untuk informasi lebih lanjut tentang hak istimewa, lihat[HIBAH](r_GRANT.md).

## Hak istimewa yang diperlukan
<a name="r_ALTER_DEFAULT_PRIVILEGES-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk MENGUBAH HAK ISTIMEWA DEFAULT:
+ Superuser
+ Pengguna dengan hak istimewa ALTER DEFAULT PRIVILECES
+ Pengguna mengubah hak akses default mereka sendiri
+ Pengguna menetapkan hak istimewa untuk skema yang mereka miliki hak akses

## Sintaksis
<a name="r_ALTER_DEFAULT_PRIVILEGES-synopsis"></a>

```
ALTER DEFAULT PRIVILEGES
    [ FOR USER target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    grant_or_revoke_clause

where grant_or_revoke_clause is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE  { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
```

## Parameter
<a name="r_ALTER_DEFAULT_PRIVILEGES-parameters"></a>

UNTUK PENGGUNA *target\$1user*  <a name="default-for-user"></a>
Tidak wajib. Nama pengguna yang hak istimewa defaultnya ditentukan. Hanya pengguna super yang dapat menentukan hak istimewa default untuk pengguna lain. Nilai default adalah pengguna saat ini.

*DI SKEMA schema\$1name*   <a name="default-in-schema"></a>
Tidak wajib. *Jika klausa IN SCHEMA muncul, hak istimewa default yang ditentukan diterapkan ke objek baru yang dibuat dalam schema\$1name yang ditentukan.* Dalam hal ini, pengguna atau grup pengguna yang menjadi target ALTER DEFAULT PRIVILEGES harus memiliki hak istimewa CREATE untuk skema yang ditentukan. Hak istimewa default yang khusus untuk skema ditambahkan ke hak istimewa default global yang ada. Secara default, hak istimewa default diterapkan secara global ke seluruh database. 

HIBAH   <a name="default-grant"></a>
Kumpulan hak istimewa untuk diberikan kepada pengguna atau grup tertentu untuk semua tabel dan tampilan baru, fungsi, atau prosedur tersimpan yang dibuat oleh pengguna tertentu. Anda dapat mengatur hak istimewa dan opsi yang sama dengan klausa GRANT yang Anda bisa dengan perintah. [HIBAH](r_GRANT.md) 

DENGAN OPSI HIBAH   <a name="default-grant-option"></a>
Klausul yang menunjukkan bahwa pengguna yang menerima hak istimewa pada gilirannya dapat memberikan hak istimewa yang sama kepada orang lain. Anda tidak dapat memberikan WITH GRANT OPTION ke grup atau ke PUBLIK. 

*KE *user\$1name \$1 ROLE role\$1name* *\$1 GROUP group\$1name**   <a name="default-to"></a>
Nama pengguna, peran, atau grup pengguna yang menerapkan hak istimewa default yang ditentukan.

MENCABUT   <a name="default-revoke"></a>
Kumpulan hak istimewa untuk dicabut dari pengguna atau grup yang ditentukan untuk semua tabel, fungsi, atau prosedur tersimpan baru yang dibuat oleh pengguna yang ditentukan. Anda dapat mengatur hak istimewa dan opsi yang sama dengan klausa REVOKE yang Anda bisa dengan perintah. [MENCABUT](r_REVOKE.md) 

OPSI HIBAH UNTUK  <a name="default-revoke-option"></a>
 Klausa yang hanya mencabut opsi untuk memberikan hak istimewa tertentu kepada pengguna lain dan tidak mencabut hak istimewa itu sendiri. Anda tidak dapat mencabut OPSI GRANT dari grup atau dari PUBLIK. 

*DARI *user\$1name \$1 ROLE role\$1name* *\$1 GROUP group\$1name**  <a name="default-from"></a>
Nama pengguna, peran, atau grup pengguna dari mana hak istimewa yang ditentukan dicabut secara default.

MEMBATASI   <a name="default-restrict"></a>
Opsi RESTRICT hanya mencabut hak istimewa yang diberikan pengguna secara langsung. Ini adalah opsi default.

## Contoh
<a name="r_ALTER_DEFAULT_PRIVILEGES-examples"></a>

Misalkan Anda ingin mengizinkan setiap pengguna dalam grup pengguna `report_readers` untuk melihat semua tabel dan tampilan yang dibuat oleh pengguna`report_admin`. Dalam hal ini, jalankan perintah berikut sebagai superuser. 

```
alter default privileges for user report_admin grant select on tables to group report_readers; 
```

Dalam contoh berikut, perintah pertama memberikan hak SELECT pada semua tabel baru yang Anda buat. Setiap kali Anda membuat tampilan baru, Anda harus secara eksplisit memberikan hak istimewa ke tampilan atau menjalankan kembali perintah itu lagi. `alter default privileges`

```
alter default privileges grant select on tables to public; 
```

Contoh berikut memberikan hak istimewa INSERT ke grup `sales_admin` pengguna untuk semua tabel dan tampilan baru yang Anda buat dalam skema. `sales` 

```
alter default privileges in schema sales grant insert on tables to group sales_admin; 
```

Contoh berikut membalikkan perintah ALTER DEFAULT PRIVILEGES dalam contoh sebelumnya. 

```
alter default privileges in schema sales revoke insert on tables from group sales_admin;
```

Secara default, grup pengguna PUBLIC memiliki izin eksekusi untuk semua fungsi baru yang ditentukan pengguna. Untuk mencabut izin `public` eksekusi untuk fungsi baru Anda dan kemudian memberikan izin eksekusi hanya ke grup `dev_test` pengguna, jalankan perintah berikut. 

```
alter default privileges revoke execute on functions from public;
alter default privileges grant execute on functions to group dev_test;
```

# MENGUBAH SKEMA EKSTERNAL
<a name="r_ALTER_EXTERNAL_SCHEMA"></a>

Mengubah skema eksternal yang ada dalam database saat ini. Hanya pemilik skema, pengguna super, atau pengguna dengan hak ALTER pada skema yang dapat mengubahnya. Hanya skema eksternal yang dibuat dari KATALOG DATA, KAFKA, atau MSK yang dapat diubah.

Pemilik skema ini adalah penerbit perintah CREATE EXTERNAL SCHEMA. Untuk mentransfer kepemilikan skema eksternal, gunakan ALTER SCHEMA untuk mengubah pemilik. Untuk memberikan akses ke skema ke pengguna lain atau grup pengguna, gunakan perintah GRANT.

Anda tidak dapat menggunakan perintah GRANT atau REVOKE untuk izin pada tabel eksternal. Sebagai gantinya, berikan atau cabut izin pada skema eksternal. 

Untuk informasi selengkapnya, lihat berikut ini:
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [HIBAH](r_GRANT.md)
+ [MENCABUT](r_REVOKE.md)
+ [BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md)
+ [Mengaktifkan otentikasi mTLS untuk skema eksternal yang ada](materialized-view-streaming-ingestion-mtls.md#materialized-view-streaming-ingestion-mtls-alter)

Untuk melihat detail skema eksternal, kueri tampilan sistem SVV\$1EXTERNAL\$1SCHEMAS. Untuk informasi selengkapnya, lihat [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md).

## Sintaks
<a name="r_ALTER_EXTERNAL_SCHEMA-synopsis"></a>

```
ALTER EXTERNAL SCHEMA schema_name
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn' ]
[ URI 'Kafka bootstrap URL' ]
```

Jika Anda memiliki skema eksternal yang ada yang Anda gunakan untuk streaming konsumsi dan Anda ingin menerapkan TLS timbal balik untuk otentikasi, Anda dapat menjalankan perintah seperti berikut ini, yang menentukan otentikasi mTLS dan sertifikat ACM ARN di ACM. 

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID';
```

Atau Anda dapat memodifikasi otentikasi mTLS, dengan mengacu pada ARN rahasia di Secrets Manager.

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

Contoh berikut menunjukkan cara memodifikasi URI untuk ALTER EXTERNAL SCHEMA:

```
ALTER EXTERNAL SCHEMA schema_name  
URI 'lkc-ghidef-67890.centralus.azure.glb.confluent.cloud:9092';
```

Contoh berikut menunjukkan cara memodifikasi peran IAM untuk ALTER EXTERNAL SCHEMA:

```
ALTER EXTERNAL SCHEMA schema_name  
IAM_ROLE 'arn:aws:iam::012345678901:role/testrole';
```

## Parameter
<a name="r_ALTER_EXTERNAL_SCHEMA-parameters"></a>

 <role-name>IAM\$1ROLE [default \$1 'SESI' \$1 'arn:aws:iam: :< account-id>:role/ ']AWS   
Gunakan `default` kata kunci agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default.  
Gunakan `'SESSION'` jika Anda terhubung ke klaster Amazon Redshift menggunakan identitas federasi dan mengakses tabel dari skema eksternal yang dibuat menggunakan perintah ini.  
Lihat [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

OTENTIKASI  
Jenis otentikasi yang ditentukan untuk konsumsi streaming. Streaming ingestion dengan jenis otentikasi berfungsi dengan Apache Kafka, Confluent Cloud, dan Amazon Managed Streaming for Apache Kafka. Lihat [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

AUTHENTICATION\$1ARN  
ARN dari AWS Certificate Manager sertifikat yang digunakan oleh Amazon Redshift untuk otentikasi mtls dengan Apache Kafka, Confluent Cloud, atau Amazon Managed Streaming for Apache Kafka (Amazon MSK). ARN tersedia di konsol ACM saat Anda memilih sertifikat yang dikeluarkan.

SECRET\$1ARN  
Nama Sumber Daya Amazon (ARN) dari rahasia yang didukung yang dibuat menggunakan. AWS Secrets Manager Untuk informasi tentang cara membuat dan mengambil ARN untuk rahasia, [lihat Mengelola rahasia AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dengan di AWS Secrets Manager Panduan *Pengguna*, [dan Mengambil Nama Sumber Daya Amazon (ARN) rahasia](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html) di Amazon Redshift.

URI  
URL bootstrap dari Apache Kafka, Confluent Cloud atau Amazon Managed Streaming for Apache Kafka (Amazon MSK) cluster. Titik akhir harus dapat dijangkau (dapat dirutekan) dari cluster Amazon Redshift. Lihat [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

# MENGUBAH TAMPILAN EKSTERNAL
<a name="r_ALTER_EXTERNAL_VIEW"></a>

Gunakan perintah ALTER EXTERNAL VIEW untuk memperbarui tampilan eksternal Anda. Bergantung pada parameter yang Anda gunakan, mesin SQL lain seperti Amazon Athena dan Amazon EMR Spark yang juga dapat mereferensikan tampilan ini mungkin terpengaruh. Untuk informasi selengkapnya tentang tampilan Katalog Data, lihat [AWS Glue Data Catalog tampilan](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Sintaksis
<a name="r_ALTER_EXTERNAL_VIEW-synopsis"></a>

```
ALTER EXTERNAL VIEW schema_name.view_name
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
[FORCE] { AS (query_definition) | REMOVE DEFINITION }
```

## Parameter
<a name="r_ALTER_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Skema yang dilampirkan ke AWS Glue database Anda, diikuti dengan nama tampilan.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notasi skema yang akan digunakan saat mengubah tampilan. Anda dapat menentukan untuk menggunakan AWS Glue Data Catalog, database Glue yang Anda buat, atau skema eksternal yang Anda buat. Lihat [MEMBUAT DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) dan [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

KEKUATAN  
Apakah AWS Lake Formation harus memperbarui definisi tampilan bahkan jika objek yang direferensikan dalam tabel tidak konsisten dengan mesin SQL lainnya. Jika Lake Formation memperbarui tampilan, tampilan dianggap basi untuk mesin SQL lainnya sampai mesin tersebut diperbarui juga.

 *AS query\$1definition*   
Definisi kueri SQL yang dijalankan Amazon Redshift untuk mengubah tampilan.

HAPUS DEFINISI  
Apakah akan menjatuhkan dan membuat ulang tampilan. Tampilan harus dijatuhkan dan dibuat ulang untuk menandainya sebagai`PROTECTED`.

## Contoh
<a name="r_ALTER_EXTERNAL_VIEW-examples"></a>

Contoh berikut mengubah tampilan Data Catalog bernama sample\$1schema.glue\$1data\$1catalog\$1view.

```
ALTER EXTERNAL VIEW sample_schema.glue_data_catalog_view
FORCE
REMOVE DEFINITION
```

# ALTER FUNCTION
<a name="r_ALTER_FUNCTION"></a>

Mengganti nama fungsi atau mengubah pemilik. Baik nama fungsi dan tipe data diperlukan. Hanya pemilik atau pengguna super yang dapat mengganti nama suatu fungsi. Hanya superuser yang dapat mengubah pemilik suatu fungsi. 

## Sintaksis
<a name="r_ALTER_FUNCTION-synopsis"></a>

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     RENAME TO new_name
```

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameter
<a name="r_ALTER_FUNCTION-parameters"></a>

 *function\$1name*   
Nama fungsi yang akan diubah. Entah menentukan nama fungsi di jalur pencarian saat ini, atau gunakan format `schema_name.function_name` untuk menggunakan skema tertentu.

*py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Tidak wajib. Daftar nama argumen masukan dan tipe data untuk fungsi yang ditentukan pengguna Python, atau daftar tipe data argumen masukan untuk fungsi yang ditentukan pengguna SQL.

 *new\$1name*   
Nama baru untuk fungsi yang ditentukan pengguna. 

*new\$1owner \$1 CURRENT\$1USER* \$1 SESSION\$1USER  
Pemilik baru untuk fungsi yang ditentukan pengguna. 

## Contoh
<a name="r_ALTER_FUNCTION-examples"></a>

Contoh berikut mengubah nama fungsi dari `first_quarter_revenue` ke`quarterly_revenue`.

```
ALTER FUNCTION first_quarter_revenue(bigint, numeric, int) 
         RENAME TO quarterly_revenue;
```

Contoh berikut mengubah pemilik `quarterly_revenue` fungsi menjadi`etl_user`.

```
ALTER FUNCTION quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# MENGUBAH KELOMPOK
<a name="r_ALTER_GROUP"></a>

Mengubah grup pengguna. Gunakan perintah ini untuk menambahkan pengguna ke grup, menghapus pengguna dari grup, atau mengganti nama grup. 

## Sintaksis
<a name="r_ALTER_GROUP-synopsis"></a>

```
ALTER GROUP group_name
{
ADD USER username [, ... ] |
DROP USER username [, ... ] |
RENAME TO new_name
}
```

## Parameter
<a name="r_ALTER_GROUP-parameters"></a>

 *group\$1name*   
Nama grup pengguna yang akan dimodifikasi. 

MENAMBAHKAN   
Menambahkan pengguna ke grup pengguna. 

MENJATUHKAN   
Menghapus pengguna dari grup pengguna. 

 *username*   
Nama pengguna untuk ditambahkan ke grup atau drop dari grup. 

GANTI NAMA MENJADI   
Mengganti nama grup pengguna. Nama grup yang dimulai dengan dua garis bawah dicadangkan untuk penggunaan internal Amazon Redshift. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md). 

 *new\$1name*   
Nama baru grup pengguna. 

## Contoh
<a name="r_ALTER_GROUP-examples"></a>

Contoh berikut menambahkan pengguna bernama DWUSER ke grup ADMIN\$1GROUP.

```
ALTER GROUP admin_group
ADD USER dwuser;
```

Contoh berikut mengganti nama grup ADMIN\$1GROUP menjadi ADMINISTRATORS. 

```
ALTER GROUP admin_group
RENAME TO administrators;
```

Contoh berikut menambahkan dua pengguna ke grup ADMIN\$1GROUP. 

```
ALTER GROUP admin_group
ADD USER u1, u2;
```

Contoh berikut menjatuhkan dua pengguna dari grup ADMIN\$1GROUP. 

```
ALTER GROUP admin_group
DROP USER u1, u2;
```

# MENGUBAH PENYEDIA IDENTITAS
<a name="r_ALTER_IDENTITY_PROVIDER"></a>

Mengubah penyedia identitas untuk menetapkan parameter dan nilai baru. Saat Anda menjalankan perintah ini, semua nilai parameter yang ditetapkan sebelumnya akan dihapus sebelum nilai baru ditetapkan. Hanya pengguna super yang dapat mengubah penyedia identitas.

## Sintaksis
<a name="r_ALTER_IDENTITY_PROVIDER-synopsis"></a>

```
ALTER IDENTITY PROVIDER identity_provider_name
[PARAMETERS parameter_string]
[NAMESPACE namespace]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
[DISABLE | ENABLE]
```

## Parameter
<a name="r_ALTER_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nama penyedia identitas baru. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

 *parameter\$1string*   
String yang berisi objek JSON yang diformat dengan benar yang berisi parameter dan nilai yang diperlukan untuk penyedia identitas tertentu.

 *namespace*   
Namespace organisasi.

 *iam\$1role*   
Peran IAM yang menyediakan izin untuk koneksi ke IAM Identity Center. Parameter ini hanya berlaku jika tipe penyedia identitas adalah. AWSIDC

 *auto\$1create\$1roles*   
Mengaktifkan atau menonaktifkan fitur peran buat otomatis. Jika nilainya BENAR, Amazon Redshift mengaktifkan fitur peran buat otomatis. Jika nilainya SALAH, Amazon Redshift menonaktifkan fitur peran buat otomatis. Jika nilai untuk parameter ini tidak ditentukan, Amazon Redshift menentukan nilai menggunakan logika berikut:   
+  Jika `AUTO_CREATE_ROLES` disediakan tetapi nilainya tidak ditentukan, nilainya disetel ke TRUE. 
+  Jika `AUTO_CREATE_ROLES` tidak disediakan dan penyedia identitas AWSIDC, nilainya disetel ke FALSE. 
+  Jika `AUTO_CREATE_ROLES` tidak disediakan dan penyedia identitasnya adalah Azure, nilainya disetel ke TRUE. 
Untuk memasukkan grup, tentukan`INCLUDE`. Defaultnya kosong, yang berarti sertakan semua grup `AUTO_CREATE_ROLES` jika aktif.  
Untuk mengecualikan grup, tentukan`EXCLUDE`. Defaultnya kosong, yang berarti jangan mengecualikan grup apa pun `AUTO_CREATE_ROLES` jika aktif.

 *filter\$1pattern*   
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama grup. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan.   
*filter\$1pattern mendukung karakter* berikut:  
+  Karakter alfabet huruf besar dan kecil (A-Z dan a-z) 
+  Angka (0-9) 
+  Karakter khusus berikut: 

  ```
  _ % ^ * + ? { } , $
  ```

 *NONAKTIFKAN atau AKTIFKAN*   
Mengaktifkan atau menonaktifkan penyedia identitas. Defaultnya adalah ENABLE.

## Contoh
<a name="r_ALTER_IDENTITY_PROVIDER-examples"></a>

Contoh berikut mengubah penyedia identitas bernama *oauth\$1standard*. Ini berlaku khusus ketika Microsoft Azure AD adalah penyedia identitas.

```
ALTER IDENTITY PROVIDER oauth_standard
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

Contoh berikut menunjukkan cara mengatur namespace penyedia identitas. Ini dapat berlaku untuk Microsoft Azure AD, jika mengikuti pernyataan seperti sampel sebelumnya, atau ke penyedia identitas lain. Ini juga dapat berlaku untuk kasus di mana Anda menghubungkan kluster yang disediakan Amazon Redshift atau grup kerja Tanpa Server Amazon Redshift ke Pusat Identitas IAM, jika Anda memiliki koneksi yang disiapkan melalui aplikasi terkelola.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
NAMESPACE 'MYCO';
```

Contoh berikut menetapkan peran IAM dan bekerja dalam kasus penggunaan untuk mengonfigurasi integrasi Redshift dengan IAM Identity Center.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
IAM_ROLE 'arn:aws:iam::123456789012:role/myadministratorrole';
```

Untuk informasi selengkapnya tentang pengaturan koneksi ke IAM Identity Center dari Redshift, lihat [Connect Redshift dengan IAM Identity Center untuk memberikan pengalaman masuk tunggal kepada pengguna](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

**Menonaktifkan penyedia identitas**

Pernyataan contoh berikut menunjukkan cara menonaktifkan penyedia identitas. Saat dinonaktifkan, pengguna federasi dari penyedia identitas tidak dapat masuk ke klaster hingga diaktifkan kembali.

```
ALTER IDENTITY PROVIDER "redshift-idc-app" DISABLE;
```

# MENGUBAH KEBIJAKAN MASKING
<a name="r_ALTER_MASKING_POLICY"></a>

Mengubah kebijakan masking data dinamis yang ada. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md).

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat mengubah kebijakan masking.

## Sintaksis
<a name="r_ALTER_MASKING_POLICY-synopsis"></a>

```
ALTER MASKING POLICY
{ policy_name | database_name.policy_name }
USING (masking_expression);
```

## Parameter
<a name="r_ALTER_MASKING_POLICY-parameters"></a>

*policy\$1name*   
 Nama kebijakan masking. Ini harus menjadi nama kebijakan masking yang sudah ada dalam database. 

database\$1name  
Nama database dari mana kebijakan dibuat. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

*masking\$1expression*  
Ekspresi SQL digunakan untuk mengubah kolom target. Ini dapat ditulis menggunakan fungsi manipulasi data seperti fungsi manipulasi String, atau dalam hubungannya dengan fungsi yang ditentukan pengguna yang ditulis dalam SQL, Python, atau dengan. AWS Lambda  
 Ekspresi harus cocok dengan kolom input ekspresi asli dan tipe data. Misalnya, jika kolom input kebijakan masking asli adalah `sample_1 FLOAT` dan`sample_2 VARCHAR(10)`, Anda tidak akan dapat mengubah kebijakan masking untuk mengambil kolom ketiga, atau membuat kebijakan menggunakan FLOAT dan BOOLEAN. Jika Anda menggunakan konstanta sebagai ekspresi masking Anda, Anda harus secara eksplisit mentransmisikannya ke tipe yang cocok dengan tipe input.  
 Anda harus memiliki izin PENGGUNAAN pada fungsi yang ditentukan pengguna yang Anda gunakan dalam ekspresi masking. 

Untuk penggunaan KEBIJAKAN ALTER MASKING di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift.

# MENGUBAH TAMPILAN TERWUJUD
<a name="r_ALTER_MATERIALIZED_VIEW"></a>

Mengubah atribut tampilan terwujud. 

## Sintaksis
<a name="r_ALTER_MATERIALIZED_VIEW-synopsis"></a>

```
ALTER MATERIALIZED VIEW mv_name
{
AUTO REFRESH { YES | NO } 
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [FOR DATASHARES]
};
```

## Parameter
<a name="r_ALTER_MATERIALIZED_VIEW-parameters"></a>

*mv\$1nama*  
Nama pandangan terwujud untuk diubah.

PENYEGARAN OTOMATIS \$1YA \$1 TIDAK\$1  
Klausa yang mengaktifkan atau menonaktifkan penyegaran otomatis tampilan yang terwujud. Untuk informasi selengkapnya tentang penyegaran otomatis tampilan terwujud, lihat[Menyegarkan tampilan yang terwujud](materialized-view-refresh.md).

MENGUBAH DISTSTYLE SEMUA  
Klausa yang mengubah gaya distribusi yang ada dari suatu relasi dengan`ALL`. Pertimbangkan hal berikut:  
+ ALTER DISTYLE, ALTER SORTKEY, dan VACUUM tidak dapat berjalan secara bersamaan pada relasi yang sama. 
  + Jika VACUUM sedang berjalan, maka menjalankan ALTER DISTYLE ALL mengembalikan kesalahan. 
  + Jika ALTER DISTYLE ALL berjalan, maka kekosongan latar belakang tidak dimulai pada relasi. 
+ Perintah ALTER DISTYLE ALL tidak didukung untuk relasi dengan kunci sortir interleaved dan tabel sementara.
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka relasi tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Untuk informasi lebih lanjut tentang DISTSTYLE ALL, kunjungi[BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md).

MENGUBAH DISTSTYLE BAHKAN  
Klausa yang mengubah gaya distribusi yang ada dari suatu relasi dengan`EVEN`. Pertimbangkan hal berikut:  
+ ALTER DISTSYTLE, ALTER SORTKEY, dan VACUUM tidak dapat berjalan secara bersamaan pada relasi yang sama. 
  + Jika VACUUM sedang berjalan, maka menjalankan ALTER DISTYLE EVEN mengembalikan kesalahan. 
  + Jika ALTER DISTYLE EVEN sedang berjalan, maka kekosongan latar belakang tidak dimulai pada relasi. 
+ Perintah ALTER DISTYLE EVEN tidak didukung untuk relasi dengan kunci sortir interleaved dan tabel sementara.
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka relasi tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Untuk informasi lebih lanjut tentang DISTSTYLE EVEN, kunjungi[BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md).

*UBAH DISTKEY *column\$1name atau ALTER DISTYLE KEY DISTYLE column\$1name**  
Klausa yang mengubah kolom yang digunakan sebagai kunci distribusi relasi. Pertimbangkan hal berikut:  
+ VACUUM dan ALTER DISTKEY tidak dapat berjalan secara bersamaan pada relasi yang sama. 
  + Jika VACUUM sudah berjalan, maka ALTER DISTKEY mengembalikan kesalahan.
  + Jika ALTER DISTKEY sedang berjalan, maka vakum latar belakang tidak dimulai pada suatu relasi.
  + Jika ALTER DISTKEY sedang berjalan, maka vakum latar depan mengembalikan kesalahan.
+ Anda hanya dapat menjalankan satu perintah ALTER DISTKEY pada relasi pada satu waktu. 
+ Perintah ALTER DISTKEY tidak didukung untuk hubungan dengan kunci pengurutan yang disisipkan. 
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka relasi tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Saat menentukan KUNCI DISTYLE, data didistribusikan oleh nilai-nilai di kolom DISTKEY. Untuk informasi lebih lanjut tentang DISTSTYLE, kunjungi[BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md).

MENGUBAH DISTSTYLE MOBIL  
Klausa yang mengubah gaya distribusi yang ada dari relasi ke AUTO.   
Saat Anda mengubah gaya distribusi ke AUTO, gaya distribusi relasi diatur ke yang berikut:   
+ Hubungan kecil dengan DISTSTYLE ALL dikonversi ke AUTO (ALL). 
+ Hubungan kecil dengan DISTSTYLE EVEN dikonversi ke AUTO (ALL). 
+ Hubungan kecil dengan DISTYLE KEY dikonversi ke AUTO (ALL). 
+ Hubungan besar dengan DISTSTYLE ALL dikonversi ke AUTO (EVEN). 
+ Hubungan besar dengan DISTSTYLE EVEN dikonversi ke AUTO (EVEN). 
+ Hubungan besar dengan DISTYLE KEY dikonversi ke AUTO (KEY) dan DISTKEY dipertahankan. Dalam hal ini, Amazon Redshift tidak membuat perubahan pada relasi.
Jika Amazon Redshift menentukan bahwa gaya distribusi atau kunci baru akan meningkatkan kinerja kueri, Amazon Redshift dapat mengubah gaya distribusi atau kunci relasi Anda di masa mendatang. Misalnya, Amazon Redshift mungkin mengonversi relasi dengan DISTSTYLE AUTO (KEY) ke AUTO (EVEN), atau sebaliknya. Untuk informasi selengkapnya tentang perilaku saat kunci distribusi diubah, termasuk redistribusi data dan kunci, buka rekomendasi [Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Untuk informasi lebih lanjut tentang DISTSTYLE AUTO, buka. [BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md)   
Untuk melihat gaya distribusi relasi, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, kunjungi [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Untuk melihat rekomendasi Amazon Redshift Advisor untuk relasi, kueri tampilan katalog sistem SVV\$1ALTER\$1TABLE\$1REKOMENDASIONS. Untuk informasi selengkapnya, kunjungi [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Untuk melihat tindakan yang diambil oleh Amazon Redshift, kueri tampilan katalog sistem SVL\$1AUTO\$1WORKER\$1ACTION. Untuk informasi selengkapnya, kunjungi [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

UBAH [COMPOUND] SORTKEY (*column\$1name* [,...])  
Klausa yang mengubah atau menambahkan kunci pengurutan yang digunakan untuk relasi. ALTER SORTKEY tidak didukung untuk tabel sementara.  
Saat Anda mengubah kunci pengurutan, pengkodean kompresi kolom di kunci pengurutan baru atau asli dapat berubah. Jika tidak ada pengkodean yang didefinisikan secara eksplisit untuk relasi, maka Amazon Redshift secara otomatis menetapkan pengkodean kompresi sebagai berikut:  
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, atau DOUBLE PRECISION diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64
+ Kolom yang didefinisikan sebagai CHAR atau VARCHAR diberi kompresi LZO.
Pertimbangkan hal berikut:  
+ Anda dapat menentukan maksimum 400 kolom untuk kunci pengurutan per relasi. 
+ Anda dapat mengubah kunci sortir yang disisipkan ke kunci sortir majemuk atau tanpa kunci pengurutan. Namun, Anda tidak dapat mengubah kunci sortir majemuk menjadi kunci sortir yang disisipkan. 
+ Jika kunci pengurutan sebelumnya didefinisikan sebagai AUTO, maka relasinya tidak lagi menjadi kandidat untuk pengoptimalan tabel otomatis. 
+ Amazon Redshift merekomendasikan penggunaan pengkodean RAW (tanpa kompresi) untuk kolom yang didefinisikan sebagai tombol pengurutan. Saat Anda mengubah kolom untuk memilihnya sebagai kunci pengurutan, kompresi kolom diubah menjadi kompresi RAW (tidak ada kompresi). Ini dapat meningkatkan jumlah penyimpanan yang dibutuhkan oleh relasi. Seberapa besar ukuran relasi meningkat tergantung pada definisi relasi spesifik dan isi relasi. Untuk informasi lebih lanjut tentang kompresi, buka[Pengkodean kompresi](c_Compression_encodings.md). 
Ketika data dimuat ke dalam relasi, data dimuat dalam urutan kunci sortir. Saat Anda mengubah kunci pengurutan, Amazon Redshift menyusun ulang data. Untuk informasi lebih lanjut tentang SORTKEY, kunjungi. [BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md)

MENGUBAH SORTKEY OTOMATIS  
Klausa yang mengubah atau menambahkan kunci pengurutan dari relasi target ke AUTO. ALTER SORTKEY AUTO tidak didukung untuk tabel sementara.   
Saat Anda mengubah kunci pengurutan ke AUTO, Amazon Redshift mempertahankan kunci pengurutan relasi yang ada.   
Jika Amazon Redshift menentukan bahwa kunci pengurutan baru akan meningkatkan kinerja kueri, Amazon Redshift mungkin mengubah kunci jenis relasi Anda di masa mendatang.   
Untuk informasi lebih lanjut tentang SORTKEY AUTO, buka. [BUAT TAMPILAN TERWUJUD](materialized-view-create-sql-command.md)   
Untuk melihat kunci pengurutan relasi, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, kunjungi [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Untuk melihat rekomendasi Amazon Redshift Advisor untuk relasi, kueri tampilan katalog sistem SVV\$1ALTER\$1TABLE\$1REKOMENDASIONS. Untuk informasi selengkapnya, kunjungi [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Untuk melihat tindakan yang diambil oleh Amazon Redshift, kueri tampilan katalog sistem SVL\$1AUTO\$1WORKER\$1ACTION. Untuk informasi selengkapnya, kunjungi [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

UBAH SORTKEY TIDAK ADA  
Sebuah klausa yang menghapus kunci jenis dari relasi target.   
Jika kunci pengurutan sebelumnya didefinisikan sebagai AUTO, maka relasinya tidak lagi menjadi kandidat untuk pengoptimalan tabel otomatis. 

KEAMANAN TINGKAT BARIS \$1ON \$1 OFF\$1 [TIPE KONJUNGSI \$1DAN \$1 ATAU\$1] [UNTUK DATASHARES]  
Klausul yang mengaktifkan atau menonaktifkan keamanan tingkat baris untuk suatu relasi.  
Ketika keamanan tingkat baris diaktifkan untuk suatu relasi, Anda hanya dapat membaca baris yang diizinkan oleh kebijakan keamanan tingkat baris untuk Anda akses. Jika tidak ada kebijakan yang memberi Anda akses ke relasi, Anda tidak dapat melihat baris apa pun dari relasi tersebut. Hanya pengguna super dan pengguna atau peran yang memiliki peran yang dapat menyetel klausa ROW LEVEL SECURITY. `sys:secadmin` Untuk informasi selengkapnya, lihat [Keamanan tingkat baris](t_rls.md).  
+ [TIPE KONJUNGSI \$1DAN \$1 ATAU\$1] 

  Klausa yang memungkinkan Anda memilih jenis konjungsi kebijakan keamanan tingkat baris untuk suatu relasi. Ketika beberapa kebijakan keamanan tingkat baris dilampirkan ke relasi, Anda dapat menggabungkan kebijakan dengan klausa AND atau OR. Secara default, Amazon Redshift menggabungkan kebijakan RLS dengan klausa AND. Pengguna super, pengguna, atau peran yang memiliki `sys:secadmin` peran dapat menggunakan klausa ini untuk menentukan jenis konjungsi kebijakan keamanan tingkat baris untuk suatu relasi. Untuk informasi selengkapnya, lihat [Menggabungkan beberapa kebijakan per pengguna](t_rls_combine_policies.md). 
+ UNTUK DATASHARES

   Klausa yang menentukan apakah relasi yang dilindungi RLS dapat diakses melalui datashares. Secara default, relasi yang dilindungi RLS tidak dapat diakses melalui datashare. Perintah ALTER MATERIALIZED VIEW ROW LEVEL SECURITY yang dijalankan dengan klausa ini hanya memengaruhi properti aksesibilitas datashare relasi. Properti ROW LEVEL SECURITY tidak berubah.

   Jika Anda membuat relasi yang dilindungi RLS dapat diakses melalui datashares, relasi tersebut tidak memiliki keamanan tingkat baris dalam database datashared sisi konsumen. Relasi mempertahankan properti RLS di sisi produsen. 

## Contoh
<a name="r_ALTER_MATERIALIZED_VIEW-examples"></a>

Contoh berikut memungkinkan tampilan `tickets_mv` terwujud untuk disegarkan secara otomatis.

```
ALTER MATERIALIZED VIEW tickets_mv AUTO REFRESH YES
```

# Contoh DISTYLE dan SORTKEY untuk ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW-DISTSTYLE-SORTKEY-examples"></a>

Contoh dalam topik ini menunjukkan cara melakukan perubahan DISTSTYLE dan SORTKEY, menggunakan ALTER MATERIALIZED VIEW.

Contoh kueri berikut menunjukkan cara mengubah kolom DISTYLE KEY DISTYLE menggunakan tabel dasar sampel:

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER diststyle KEY distkey inv_warehouse_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER distkey inv_item_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Ubah tampilan terwujud menjadi DISTSTYLE ALL:

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER MATERIALIZED VIEW inventory ALTER diststyle ALL;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Perintah berikut menunjukkan contoh ALTER MATERIALIZED VIEW SORTKEY menggunakan tabel dasar sampel:

```
CREATE TABLE base_inventory (c0 int, c1 int);

INSERT INTO base_inventory VALUES(1,1);

CREATE materialized VIEW inventory interleaved sortkey(c0, c1) AS SELECT * FROM base_inventory;
SELECT "table", sortkey1 FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0, c1);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey NONE;
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

# MENGUBAH KEBIJAKAN RLS
<a name="r_ALTER_RLS_POLICY"></a>

Ubah kebijakan keamanan tingkat baris yang ada di atas meja.

Pengguna super dan pengguna atau peran yang memiliki `sys:secadmin` peran dapat mengubah kebijakan.

## Sintaksis
<a name="r_ALTER_RLS_POLICY-synopsis"></a>

```
ALTER RLS POLICY
{ policy_name | database_name.policy_name }
USING ( using_predicate_exp );
```

## Parameter
<a name="r_ALTER_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan .

database\$1name  
Nama database dari mana kebijakan dibuat. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

MENGGUNAKAN (*menggunakan\$1predicate\$1exp*)  
Menentukan filter yang diterapkan ke klausa WHERE dari query. Amazon Redshift menerapkan predikat kebijakan sebelum predikat pengguna tingkat kueri. Misalnya, **current\$1user = ‘joe’ and price > 10** membatasi Joe untuk hanya melihat catatan dengan harga lebih dari \$110.  
Ekspresi memiliki akses ke variabel yang dideklarasikan dalam klausa WITH dari pernyataan CREATE RLS POLICY yang digunakan untuk membuat kebijakan dengan nama policy\$1name.

Untuk penggunaan KEBIJAKAN ALTER RLS di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift.

## Contoh
<a name="r_ALTER_RLS_POLICY-examples"></a>

Contoh berikut mengubah kebijakan RLS.

```
-- First create an RLS policy that limits access to rows where catgroup is 'concerts'.
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'concerts');

-- Then, alter the RLS policy to only show rows where catgroup is 'piano concerts'.
ALTER RLS POLICY policy_concerts
USING (catgroup = 'piano concerts');
```

# MENGUBAH PERAN
<a name="r_ALTER_ROLE"></a>

Mengganti nama peran atau mengubah pemilik. Untuk daftar peran yang ditentukan sistem Amazon Redshift, lihat. [Peran yang ditentukan sistem Amazon Redshift](r_roles-default.md)

## Izin yang diperlukan
<a name="r_ALTER_ROLE-privileges"></a>

Berikut ini adalah izin yang diperlukan untuk ALTER ROLE:
+ Superuser
+ Pengguna dengan izin ALTER ROLE

## Sintaksis
<a name="r_ALTER_ROLE-synopsis"></a>

```
ALTER ROLE role [ WITH ]
  { { RENAME TO role } | { OWNER TO user_name } }[, ...]
  [ EXTERNALID TO external_id ]
```

## Parameter
<a name="r_ALTER_ROLE-parameters"></a>

 *peran*   
Nama peran yang akan diubah.

GANTI NAMA MENJADI  
Nama baru untuk peran tersebut.

PEMILIK UNTUK *user\$1name*  
Pemilik baru untuk peran tersebut. 

*EKSTERNALID KE external\$1id*  
ID eksternal baru untuk peran, yang terkait dengan penyedia identitas. Untuk informasi selengkapnya, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Contoh
<a name="r_ALTER_ROLE-examples"></a>

Contoh berikut mengubah nama peran dari `sample_role1` menjadi`sample_role2`.

```
ALTER ROLE sample_role1 RENAME TO sample_role2;
```

Contoh berikut mengubah pemilik peran.

```
ALTER ROLE sample_role1 WITH OWNER TO user1
```

Sintaks dari ALTER ROLE mirip dengan ALTER PROCEDURE berikut.

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

Contoh berikut mengubah pemilik prosedur menjadi`etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

Contoh berikut memperbarui peran `sample_role1` dengan ID eksternal baru yang dikaitkan dengan penyedia identitas.

```
ALTER ROLE sample_role1 EXTERNALID TO "XYZ456";
```

# MENGUBAH PROSEDUR
<a name="r_ALTER_PROCEDURE"></a>

Mengganti nama prosedur atau mengubah pemilik. Baik nama prosedur dan tipe data, atau tanda tangan, diperlukan. Hanya pemilik atau pengguna super yang dapat mengganti nama prosedur. Hanya superuser yang dapat mengubah pemilik prosedur. 

## Sintaksis
<a name="r_ALTER_PROCEDURE-synopsis"></a>

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    RENAME TO new_name
```

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameter
<a name="r_ALTER_PROCEDURE-parameters"></a>

 *sp\$1nama*   
Nama prosedur yang akan diubah. Entah menentukan hanya nama prosedur di jalur pencarian saat ini, atau gunakan format `schema_name.sp_procedure_name` untuk menggunakan skema tertentu.

*[argname] [argmode] argtype*   
Daftar nama argumen, mode argumen, dan tipe data. Hanya tipe data input yang diperlukan, yang digunakan untuk mengidentifikasi prosedur yang disimpan. Atau, Anda dapat memberikan tanda tangan lengkap yang digunakan untuk membuat prosedur termasuk parameter input dan output dengan mode mereka.

 *new\$1name*   
Nama baru untuk prosedur yang disimpan. 

*new\$1owner \$1 CURRENT\$1USER* \$1 SESSION\$1USER  
Pemilik baru untuk prosedur yang disimpan. 

## Contoh
<a name="r_ALTER_PROCEDURE-examples"></a>

Contoh berikut mengubah nama prosedur dari `first_quarter_revenue` menjadi`quarterly_revenue`.

```
ALTER PROCEDURE first_quarter_revenue(volume INOUT bigint, at_price IN numeric,
 result OUT int) RENAME TO quarterly_revenue;
```

Contoh ini setara dengan yang berikut ini.

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

Contoh berikut mengubah pemilik prosedur menjadi`etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER SCHEMA
<a name="r_ALTER_SCHEMA"></a>

Mengubah definisi skema yang ada. Gunakan perintah ini untuk mengganti nama skema atau mengubah pemilik skema. Misalnya, ganti nama skema yang ada untuk menyimpan salinan cadangan skema tersebut saat Anda berencana membuat versi baru skema tersebut. Untuk informasi lebih lanjut tentang skema, lihat[BUAT SKEMA](r_CREATE_SCHEMA.md).

Untuk melihat kuota skema yang dikonfigurasi, lihat. [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md)

Untuk melihat catatan di mana kuota skema terlampaui, lihat. [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md)

## Hak istimewa yang diperlukan
<a name="r_ALTER_SCHEMA-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk ALTER SCHEMA:
+ Superuser
+ Pengguna dengan hak istimewa ALTER SCHEMA
+ Pemilik skema

Saat Anda mengubah nama skema, perhatikan bahwa objek yang menggunakan nama lama, seperti prosedur tersimpan atau tampilan terwujud, harus diperbarui untuk menggunakan nama baru.

## Sintaksis
<a name="r_ALTER_SCHEMA-synopsis"></a>

```
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
```

## Parameter
<a name="r_ALTER_SCHEMA-parameters"></a>

 *schema\$1name*   
Nama skema database yang akan diubah. 

GANTI NAMA MENJADI   
Klausa yang mengganti nama skema. 

 *new\$1name*   
Nama baru skema. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md). 

PEMILIK UNTUK   
Klausul yang mengubah pemilik skema. 

 *new\$1owner*   
Pemilik baru skema. 

KUOTA   
Jumlah maksimum ruang disk yang dapat digunakan skema yang ditentukan. Ruang ini adalah ukuran kolektif dari semua tabel di bawah skema yang ditentukan. Amazon Redshift mengonversi nilai yang dipilih menjadi megabyte. Gigabytes adalah unit pengukuran default ketika Anda tidak menentukan nilai.   
Untuk informasi selengkapnya tentang mengonfigurasi kuota skema, lihat. [BUAT SKEMA](r_CREATE_SCHEMA.md)

## Contoh
<a name="r_ALTER_SCHEMA-examples"></a>

Contoh berikut mengganti nama skema SALES menjadi US\$1SALES.

```
alter schema sales
rename to us_sales;
```

Contoh berikut memberikan kepemilikan skema US\$1SALES kepada pengguna DWUSER.

```
alter schema us_sales
owner to dwuser;
```

Contoh berikut mengubah kuota menjadi 300 GB dan menghapus kuota.

```
alter schema us_sales QUOTA 300 GB;
alter schema us_sales QUOTA UNLIMITED;
```

# MENGUBAH SISTEM
<a name="r_ALTER_SYSTEM"></a>

Mengubah opsi konfigurasi tingkat sistem untuk klaster Amazon Redshift atau grup kerja Redshift Serverless.

## Hak istimewa yang diperlukan
<a name="r_ALTER_SYSTEM-privileges"></a>

Salah satu tipe pengguna berikut dapat menjalankan perintah ALTER SYSTEM:
+ Superuser
+ Pengguna admin

## Sintaksis
<a name="r_ALTER_SYSTEM-synopsis"></a>

```
ALTER SYSTEM SET system-level-configuration = {true| t | on | false | f | off}
```

## Parameter
<a name="r_ALTER_SYSTEM-parameters"></a>

 *system-level-configuration*   
Konfigurasi tingkat sistem. Nilai valid: `data_catalog_auto_mount` dan`metadata_security`.

\$1benar\$1 t \$1 pada \$1 salah \$1 f \$1 mati\$1   
Nilai untuk mengaktifkan atau menonaktifkan konfigurasi tingkat sistem. A`true`,`t`, atau `on` menunjukkan untuk mengaktifkan konfigurasi. A`false`,`f`, atau `off` menunjukkan untuk menonaktifkan konfigurasi.

## Catatan penggunaan
<a name="r_ALTER_SYSTEM-usage-notes"></a>

Untuk klaster yang disediakan, perubahan `data_catalog_auto_mount` akan diterapkan pada reboot cluster berikutnya. Untuk informasi selengkapnya, lihat [Mem-boot ulang klaster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#reboot-cluster) di Panduan Manajemen *Pergeseran Merah Amazon*.

Untuk grup kerja tanpa server, perubahan `data_catalog_auto_mount` tidak segera berlaku.

## Contoh
<a name="r_ALTER_SYSTEM-examples"></a>

Contoh berikut mengaktifkan automounting file. AWS Glue Data Catalog

```
ALTER SYSTEM SET data_catalog_auto_mount = true;
```

Contoh berikut mengaktifkan keamanan metadata.

```
ALTER SYSTEM SET metadata_security = true;
```

### Menyetel namespace identitas default
<a name="r_ALTER_SYSTEM-identity"></a>

Contoh ini khusus untuk bekerja dengan penyedia identitas. Anda dapat mengintegrasikan Redshift dengan IAM Identity Center dan penyedia identitas untuk memusatkan manajemen identitas untuk Redshift dan layanan lainnya. AWS 

Contoh berikut menunjukkan cara mengatur namespace identitas default untuk sistem. Melakukan hal ini selanjutnya membuatnya lebih mudah untuk menjalankan pernyataan GRANT dan CREATE, karena Anda tidak perlu menyertakan namespace sebagai awalan untuk setiap identitas.

```
ALTER SYSTEM SET default_identity_namespace = 'MYCO';
```

Setelah menjalankan perintah, Anda dapat menjalankan pernyataan seperti berikut:

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
               
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

Efek dari pengaturan namespace identitas default adalah bahwa setiap identitas tidak memerlukannya sebagai awalan. Dalam contoh `alice` ini, diganti dengan`MYCO:alice`. Ini terjadi dengan identitas apa pun yang disertakan. Untuk informasi selengkapnya tentang penggunaan penyedia identitas dengan Redshift, lihat Connect [Redshift dengan IAM Identity Center untuk memberikan pengalaman masuk tunggal kepada pengguna](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

Untuk informasi selengkapnya tentang pengaturan yang berkaitan dengan konfigurasi Redshift dengan IAM Identity Center, lihat dan. [SET](r_SET.md) [MENGUBAH PENYEDIA IDENTITAS](r_ALTER_IDENTITY_PROVIDER.md)

# ALTER TABLE
<a name="r_ALTER_TABLE"></a>

Perintah ini mengubah definisi tabel Amazon Redshift atau tabel eksternal Amazon Redshift Spectrum. Perintah ini memperbarui nilai dan properti yang ditetapkan oleh [CREATE TABLE](r_CREATE_TABLE_NEW.md) atau[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Anda dapat menggunakan ALTER TABLE pada tampilan untuk keamanan tingkat baris (RLS).

Anda tidak dapat menjalankan ALTER TABLE pada tabel eksternal dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

ALTER TABLE mengunci tabel untuk operasi baca dan tulis sampai transaksi yang melampirkan operasi ALTER TABLE selesai, kecuali jika secara khusus dinyatakan dalam dokumentasi bahwa Anda dapat melakukan kueri data atau melakukan operasi lain di atas meja saat diubah.

## Hak istimewa yang diperlukan
<a name="r_ALTER_TABLE-privileges"></a>

Pengguna yang mengubah tabel membutuhkan hak istimewa yang tepat agar perintah berhasil. Bergantung pada perintah ALTER TABLE, salah satu hak istimewa berikut diperlukan.
+ Superuser
+ Pengguna dengan hak istimewa ALTER TABLE
+ Pemilik tabel dengan hak istimewa USE pada skema

## Sintaksis
<a name="r_ALTER_TABLE-synopsis"></a>

```
ALTER TABLE table_name
{
ADD table_constraint
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
| OWNER TO new_owner
| RENAME TO new_name
| RENAME COLUMN column_name TO new_name
| ALTER COLUMN column_name TYPE updated_varchar_data_type_size
| ALTER COLUMN column_name ENCODE new_encode_type
| ALTER COLUMN column_name ENCODE encode_type,
| ALTER COLUMN column_name ENCODE encode_type, .....;
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [ FOR DATASHARES ]
| MASKING { ON | OFF } FOR DATASHARES }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value')
| PARTITION ( partition_column=partition_value [, ...] )
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
| ADD [IF NOT EXISTS]
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )
```

Untuk mengurangi waktu menjalankan perintah ALTER TABLE, Anda dapat menggabungkan beberapa klausa dari perintah ALTER TABLE.

Amazon Redshift mendukung kombinasi klausa ALTER TABLE berikut:

```
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id;
ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list);
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL;
ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);
```

## Parameter
<a name="r_ALTER_TABLE-parameters"></a>

 *table\$1name*   
Nama tabel untuk diubah. Entah menentukan hanya nama tabel, atau menggunakan format *schema\$1name.table\$1name* untuk menggunakan skema tertentu. Tabel eksternal harus memenuhi syarat dengan nama skema eksternal. Anda juga dapat menentukan nama tampilan jika Anda menggunakan pernyataan ALTER TABLE untuk mengganti nama tampilan atau mengubah pemiliknya. Panjang maksimum untuk nama tabel adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Anda dapat menggunakan karakter multibyte UTF-8 hingga maksimal empat byte. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

TAMBAHKAN *table\$1constraint*   
Sebuah klausa yang menambahkan kendala tertentu ke tabel. Untuk deskripsi nilai *table\$1constraint* yang valid, lihat. [CREATE TABLE](r_CREATE_TABLE_NEW.md)  
Anda tidak dapat menambahkan batasan kunci utama ke kolom nullable. Jika kolom awalnya dibuat dengan batasan NOT NULL, Anda dapat menambahkan kendala kunci utama.

*DROP CONSTRAINT constraint\$1name*   
Sebuah klausa yang menjatuhkan kendala bernama dari tabel. Untuk menjatuhkan batasan, tentukan nama kendala, bukan tipe kendala. Untuk melihat nama batasan tabel, jalankan kueri berikut.  

```
select constraint_name, constraint_type
from information_schema.table_constraints;
```

MEMBATASI   
Sebuah klausa yang menghapus hanya kendala yang ditentukan. RESTRICT adalah opsi untuk DROP CONSTRAINT. RESTRICT tidak dapat digunakan dengan CASCADE. 

RIAM   
Klausa yang menghapus batasan yang ditentukan dan apa pun yang bergantung pada kendala itu. CASCADE adalah pilihan untuk DROP CONSTRAINT. CASCADE tidak dapat digunakan dengan RESTRICT.

PEMILIK UNTUK *new\$1owner*   
Klausa yang mengubah pemilik tabel (atau tampilan) ke nilai *new\$1owner*.

*GANTI NAMA MENJADI new\$1name*   
*Klausa yang mengganti nama tabel (atau tampilan) ke nilai yang ditentukan dalam new\$1name.* Panjang nama tabel maksimum adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte.  
Anda tidak dapat mengganti nama tabel permanen menjadi nama yang dimulai dengan '\$1'. Nama tabel yang dimulai dengan '\$1' menunjukkan tabel sementara.  
Anda tidak dapat mengganti nama tabel eksternal.

*UBAH KOLOM *column\$1name JENIS updated\$1varchar\$1data\$1type\$1size**   
Sebuah klausa yang mengubah ukuran kolom didefinisikan sebagai tipe data VARCHAR. Klausul ini hanya mendukung mengubah ukuran tipe data VARCHAR. Pertimbangkan batasan berikut:  
+ Anda tidak dapat mengubah kolom dengan pengkodean kompresi BYTEDICT, RUNLENGTH,, atau K. TEXT255 TEXT32 
+ Anda tidak dapat mengurangi ukuran kurang dari ukuran maksimum data yang ada. 
+ Anda tidak dapat mengubah kolom dengan nilai default. 
+ Anda tidak dapat mengubah kolom dengan UNIQUE, PRIMARY KEY, atau FOREIGN KEY. 
+ Anda tidak dapat mengubah kolom dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

*UBAH KOLOM *column\$1name* ENCODE new\$1encode\$1type*   
Klausa yang mengubah pengkodean kompresi kolom. Jika Anda menentukan pengkodean kompresi untuk kolom, tabel tidak lagi diatur ke ENCODE AUTO. Untuk informasi tentang pengkodean kompresi, lihat[Kompresi kolom untuk mengurangi ukuran data yang disimpan](t_Compressing_data_on_disk.md).   
Saat Anda mengubah pengkodean kompresi untuk kolom, tabel tetap tersedia untuk kueri.  
Pertimbangkan batasan berikut:  
+ Anda tidak dapat mengubah kolom ke pengkodean yang sama seperti yang saat ini ditentukan untuk kolom. 
+ Anda tidak dapat mengubah pengkodean untuk kolom dalam tabel dengan sortkey yang disisipkan. 

**UBAH KOLOM *kolom\$1name ENCODE encode\$1type, UBAH KOLOM kolom\$1name* *ENCODE encode\$1type*,** ... ;   
Klausa yang mengubah pengkodean kompresi beberapa kolom dalam satu perintah. Untuk informasi tentang pengkodean kompresi, lihat[Kompresi kolom untuk mengurangi ukuran data yang disimpan](t_Compressing_data_on_disk.md).  
Saat Anda mengubah pengkodean kompresi untuk kolom, tabel tetap tersedia untuk kueri.  
 Pertimbangkan batasan berikut:  
+ Anda tidak dapat mengubah kolom ke jenis pengkodean yang sama atau berbeda beberapa kali dalam satu perintah.
+ Anda tidak dapat mengubah kolom ke pengkodean yang sama seperti yang saat ini ditentukan untuk kolom. 
+ Anda tidak dapat mengubah pengkodean untuk kolom dalam tabel dengan sortkey yang disisipkan. 

MENGUBAH DISTSTYLE SEMUA  
Klausa yang mengubah gaya distribusi tabel yang ada menjadi. `ALL` Pertimbangkan hal berikut:  
+ ALTER DISTYLE, ALTER SORTKEY, dan VACUUM tidak dapat berjalan secara bersamaan pada tabel yang sama. 
  + Jika VACUUM sedang berjalan, maka menjalankan ALTER DISTYLE ALL mengembalikan kesalahan. 
  + Jika ALTER DISTYLE ALL berjalan, maka vakum latar belakang tidak dimulai di atas meja. 
+ Perintah ALTER DISTYLE ALL tidak didukung untuk tabel dengan kunci pengurutan yang disisipkan dan tabel sementara.
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka tabel tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Untuk informasi lebih lanjut tentang DISTSTYLE ALL, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

MENGUBAH DISTSTYLE BAHKAN  
Klausa yang mengubah gaya distribusi tabel yang ada menjadi. `EVEN` Pertimbangkan hal berikut:  
+ ALTER DISTSYTLE, ALTER SORTKEY, dan VACUUM tidak dapat berjalan secara bersamaan pada tabel yang sama. 
  + Jika VACUUM sedang berjalan, maka menjalankan ALTER DISTYLE EVEN mengembalikan kesalahan. 
  + Jika ALTER DISTYLE EVEN sedang berjalan, maka vakum latar belakang tidak dimulai di atas meja. 
+ Perintah ALTER DISTSTYLE EVEN tidak didukung untuk tabel dengan kunci pengurutan yang disisipkan dan tabel sementara.
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka tabel tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Untuk informasi lebih lanjut tentang DISTSTYLE EVEN, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

*UBAH DISTKEY *column\$1name atau ALTER DISTYLE KEY DISTYLE column\$1name**  
Klausa yang mengubah kolom yang digunakan sebagai kunci distribusi tabel. Pertimbangkan hal berikut:  
+ VACUUM dan ALTER DISTKEY tidak dapat berjalan secara bersamaan pada tabel yang sama. 
  + Jika VACUUM sudah berjalan, maka ALTER DISTKEY mengembalikan kesalahan.
  + Jika ALTER DISTKEY sedang berjalan, maka vakum latar belakang tidak dimulai di atas meja.
  + Jika ALTER DISTKEY sedang berjalan, maka vakum latar depan mengembalikan kesalahan.
+ Anda hanya dapat menjalankan satu perintah ALTER DISTKEY di atas meja pada satu waktu. 
+ Perintah ALTER DISTKEY tidak didukung untuk tabel dengan kunci pengurutan yang disisipkan. 
+ Jika gaya distribusi sebelumnya didefinisikan sebagai AUTO, maka tabel tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
Saat menentukan KUNCI DISTYLE, data didistribusikan oleh nilai-nilai di kolom DISTKEY. Untuk informasi lebih lanjut tentang DISTSTYLE, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

MENGUBAH DISTSTYLE MOBIL  
Klausa yang mengubah gaya distribusi tabel yang ada menjadi AUTO.   
Bila Anda mengubah gaya distribusi ke AUTO, gaya distribusi tabel diatur sebagai berikut:   
+ Meja kecil dengan DISTSTYLE ALL dikonversi ke AUTO (ALL). 
+ Meja kecil dengan DISTSTYLE EVEN dikonversi ke AUTO (ALL). 
+ Sebuah meja kecil dengan DISTYLE KEY dikonversi ke AUTO (ALL). 
+ Meja besar dengan DISTSTYLE ALL dikonversi ke AUTO (EVEN). 
+ Meja besar dengan DISTSTYLE EVEN dikonversi ke AUTO (EVEN). 
+ Tabel besar dengan DISTYLE KEY dikonversi ke AUTO (KEY) dan DISTKEY dipertahankan. Dalam hal ini, Amazon Redshift tidak membuat perubahan pada tabel.
Jika Amazon Redshift menentukan bahwa gaya distribusi atau kunci baru akan meningkatkan kinerja kueri, Amazon Redshift dapat mengubah gaya distribusi atau kunci tabel Anda di masa mendatang. Misalnya, Amazon Redshift mungkin mengonversi tabel dengan DISTSTYLE AUTO (KEY) ke AUTO (EVEN), atau sebaliknya. Untuk informasi selengkapnya tentang perilaku saat kunci distribusi diubah, termasuk redistribusi data dan penguncian, lihat rekomendasi [Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Untuk informasi lebih lanjut tentang DISTSTYLE AUTO, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).   
Untuk melihat gaya distribusi tabel, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, lihat [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Untuk melihat rekomendasi Amazon Redshift Advisor untuk tabel, kueri tampilan katalog sistem SVV\$1ALTER\$1TABLE\$1REKOMENDASIONS. Untuk informasi selengkapnya, lihat [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Untuk melihat tindakan yang diambil oleh Amazon Redshift, kueri tampilan katalog sistem SVL\$1AUTO\$1WORKER\$1ACTION. Untuk informasi selengkapnya, lihat [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

UBAH [COMPOUND] SORTKEY (*column\$1name* [,...])  
Klausa yang mengubah atau menambahkan kunci pengurutan yang digunakan untuk tabel. ALTER SORTKEY tidak didukung untuk tabel sementara.  
Saat Anda mengubah kunci pengurutan, pengkodean kompresi kolom di kunci pengurutan baru atau asli dapat berubah. Jika tidak ada pengkodean yang didefinisikan secara eksplisit untuk tabel, maka Amazon Redshift secara otomatis menetapkan pengkodean kompresi sebagai berikut:  
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, atau DOUBLE PRECISION diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64
+ Kolom yang didefinisikan sebagai CHAR atau VARCHAR diberi kompresi LZO.
Pertimbangkan hal berikut:  
+ Anda dapat menentukan maksimum 400 kolom untuk kunci pengurutan per tabel. 
+ Anda dapat mengubah kunci sortir yang disisipkan ke kunci sortir majemuk atau tanpa kunci pengurutan. Namun, Anda tidak dapat mengubah kunci sortir majemuk menjadi kunci sortir yang disisipkan. 
+ Jika kunci pengurutan sebelumnya didefinisikan sebagai AUTO, maka tabel tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 
+ Amazon Redshift merekomendasikan penggunaan pengkodean RAW (tanpa kompresi) untuk kolom yang didefinisikan sebagai tombol pengurutan. Saat Anda mengubah kolom untuk memilihnya sebagai kunci pengurutan, kompresi kolom diubah menjadi kompresi RAW (tidak ada kompresi). Ini dapat meningkatkan jumlah penyimpanan yang dibutuhkan oleh tabel. Berapa banyak ukuran tabel meningkat tergantung pada definisi tabel tertentu dan isi tabel. Untuk informasi selengkapnya tentang kompresi, lihat [Pengkodean kompresi](c_Compression_encodings.md) 
Ketika data dimuat ke dalam tabel, data dimuat dalam urutan kunci sortir. Saat Anda mengubah kunci pengurutan, Amazon Redshift menyusun ulang data. Untuk informasi lebih lanjut tentang SORTKEY, lihat. [CREATE TABLE](r_CREATE_TABLE_NEW.md)

MENGUBAH SORTKEY OTOMATIS  
Klausa yang mengubah atau menambahkan kunci pengurutan dari tabel target ke AUTO. ALTER SORTKEY AUTO tidak didukung untuk tabel sementara.   
Saat Anda mengubah kunci pengurutan ke AUTO, Amazon Redshift mempertahankan kunci pengurutan tabel yang ada.   
Jika Amazon Redshift menentukan bahwa kunci pengurutan baru akan meningkatkan kinerja kueri, Amazon Redshift mungkin mengubah kunci pengurutan tabel Anda di masa mendatang.   
Untuk informasi selengkapnya tentang SORTKEY AUTO, lihat. [CREATE TABLE](r_CREATE_TABLE_NEW.md)   
Untuk melihat kunci pengurutan tabel, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, lihat [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Untuk melihat rekomendasi Amazon Redshift Advisor untuk tabel, kueri tampilan katalog sistem SVV\$1ALTER\$1TABLE\$1REKOMENDASIONS. Untuk informasi selengkapnya, lihat [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Untuk melihat tindakan yang diambil oleh Amazon Redshift, kueri tampilan katalog sistem SVL\$1AUTO\$1WORKER\$1ACTION. Untuk informasi selengkapnya, lihat [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

UBAH SORTKEY TIDAK ADA  
Sebuah klausa yang menghapus kunci sort dari tabel target.   
Jika kunci pengurutan sebelumnya didefinisikan sebagai AUTO, maka tabel tidak lagi menjadi kandidat untuk optimasi tabel otomatis. 

MENGUBAH ENCODE OTOMATIS  
Klausa yang mengubah jenis pengkodean kolom tabel target menjadi AUTO. Saat Anda mengubah pengkodean ke AUTO, Amazon Redshift mempertahankan jenis pengkodean kolom yang ada dalam tabel. Kemudian, jika Amazon Redshift menentukan bahwa jenis pengkodean baru dapat meningkatkan kinerja kueri, Amazon Redshift dapat mengubah jenis pengkodean kolom tabel.   
Jika Anda mengubah satu atau beberapa kolom untuk menentukan pengkodean, Amazon Redshift tidak lagi secara otomatis menyesuaikan pengkodean untuk semua kolom dalam tabel. Kolom mempertahankan pengaturan encode saat ini.  
Tindakan berikut tidak memengaruhi pengaturan ENCODE AUTO untuk tabel:   
+ Mengganti nama tabel.
+ Mengubah pengaturan DISTYLE atau SORTKEY untuk tabel.
+ Menambahkan atau menjatuhkan kolom dengan pengaturan ENCODE.
+ Menggunakan opsi COMPUPDATE dari perintah COPY. Untuk informasi selengkapnya, lihat [Operasi pemuatan data](copy-parameters-data-load.md).
Untuk melihat pengkodean tabel, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, lihat [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md).

*GANTI NAMA KOLOM *column\$1name* MENJADI new\$1name*   
*Sebuah klausa yang mengganti nama kolom ke nilai yang ditentukan dalam new\$1name.* Panjang nama kolom maksimum adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

TAMBAHKAN [KOLOM] *column\$1name*   
Klausa yang menambahkan kolom dengan nama yang ditentukan ke tabel. Anda dapat menambahkan hanya satu kolom di setiap pernyataan ALTER TABLE.  
Anda tidak dapat menambahkan kolom yang merupakan kunci distribusi (DISTKEY) atau kunci sortir (SORTKEY) dari tabel.  
 Anda tidak dapat menggunakan perintah ALTER TABLE ADD COLUMN untuk memodifikasi atribut tabel dan kolom berikut:   
+ UNIK
+ KUNCI UTAMA
+ REFERENSI (kunci asing)
+ IDENTITAS atau DIHASILKAN SECARA DEFAULT SEBAGAI IDENTITAS
Panjang nama kolom maksimum adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600.  
Pembatasan berikut berlaku saat menambahkan kolom ke tabel eksternal:  
+ Anda tidak dapat menambahkan kolom ke tabel eksternal dengan batasan kolom DEFAULT, ENCODE, NOT NULL, atau NULL. 
+ Anda tidak dapat menambahkan kolom ke tabel eksternal yang ditentukan menggunakan format file AVRO. 
+ Jika pseudocolumns diaktifkan, jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel eksternal adalah 1.598. Jika pseudocolumns tidak diaktifkan, jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600. 
Untuk informasi selengkapnya, lihat [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

 *column\$1type*   
Tipe data kolom yang ditambahkan. Untuk kolom CHAR dan VARCHAR, Anda dapat menggunakan kata kunci MAX alih-alih mendeklarasikan panjang maksimum. MAX menetapkan panjang maksimum untuk 4.096 byte untuk CHAR atau 65.535 byte untuk VARCHAR. Ukuran maksimum objek GEOMETRI adalah 1.048.447 byte.   
Untuk informasi tentang tipe data yang didukung Amazon Redshift, lihat. [Jenis Data](c_Supported_data_types.md)

default *default\$1expr*   <a name="alter-table-default"></a>
Sebuah klausa yang menetapkan nilai data default untuk kolom. Tipe data *default\$1expr* harus cocok dengan tipe data kolom. Nilai DEFAULT harus berupa ekspresi bebas variabel. Subkueri, referensi silang ke kolom lain dalam tabel saat ini, dan fungsi yang ditentukan pengguna tidak diperbolehkan.  
*Default\$1expr* digunakan dalam setiap operasi INSERT yang tidak menentukan nilai untuk kolom. Jika tidak ada nilai default yang ditentukan, nilai default untuk kolom adalah null.  
*Jika operasi COPY menemukan bidang null pada kolom yang memiliki nilai DEFAULT dan batasan NOT NULL, perintah COPY menyisipkan nilai default\$1expr.*   
DEFAULT tidak didukung untuk tabel eksternal.

*PENGKODEAN PENGKODEAN*   
Pengkodean kompresi untuk kolom. Secara default, Amazon Redshift secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel jika Anda tidak menentukan pengkodean kompresi untuk kolom apa pun dalam tabel atau jika Anda menentukan opsi ENCODE AUTO untuk tabel.  
Jika Anda menentukan pengkodean kompresi untuk kolom apa pun dalam tabel atau jika Anda tidak menentukan opsi ENCODE AUTO untuk tabel, Amazon Redshift secara otomatis menetapkan pengkodean kompresi ke kolom yang tidak Anda tentukan pengkodean kompresi sebagai berikut:  
+ Semua kolom dalam tabel sementara diberi kompresi RAW secara default.
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, PRESISI GANDA, GEOMETRI, atau GEOGRAFI diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64
+ Kolom yang didefinisikan sebagai CHAR, VARCHAR, atau VARBYTE diberi kompresi LZO.
Jika Anda tidak ingin kolom dikompresi, tentukan secara eksplisit pengkodean RAW.
[compression encodings](c_Compression_encodings.md#compression-encoding-list) berikut didukung:  
+ AZ64
+ BYTEDIKTUS
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (tanpa kompresi)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD
ENCODE tidak didukung untuk tabel eksternal.

TIDAK NULL \$1 NULL   
NOT NULL menentukan bahwa kolom tidak diperbolehkan untuk berisi nilai-nilai null. NULL, default, menentukan bahwa kolom menerima nilai null.  
NOT NULL dan NULL tidak didukung untuk tabel eksternal.

MENYUSUN \$1CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI\$1  
Klausa yang menentukan apakah pencarian string atau perbandingan pada kolom peka huruf besar/kecil atau tidak peka huruf besar/kecil. Nilai defaultnya sama dengan konfigurasi sensitivitas kasus saat ini dari database.  
Untuk menemukan informasi pemeriksaan database, gunakan perintah berikut:  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE dan CS dapat dipertukarkan dan menghasilkan hasil yang sama. Demikian pula, CASE\$1INSENSITIVE dan CI dapat dipertukarkan dan menghasilkan hasil yang sama.

JATUHKAN [KOLOM] *column\$1name*   
Nama kolom yang akan dihapus dari tabel.  
Anda tidak dapat menjatuhkan kolom terakhir dalam tabel. Sebuah tabel harus memiliki setidaknya satu kolom.  
Anda tidak dapat menjatuhkan kolom yang merupakan kunci distribusi (DISTKEY) atau kunci sortir (SORTKEY) dari tabel. Perilaku default untuk DROP COLUMN adalah RESTRICT jika kolom memiliki objek dependen, seperti tampilan, kunci primer, kunci asing, atau pembatasan UNIK.  
Pembatasan berikut berlaku saat menjatuhkan kolom dari tabel eksternal:  
+ Anda tidak dapat menjatuhkan kolom dari tabel eksternal jika kolom digunakan sebagai partisi.
+ Anda tidak dapat menjatuhkan kolom dari tabel eksternal yang ditentukan menggunakan format file AVRO. 
+ RESTRICT dan CASCADE diabaikan untuk tabel eksternal.
+ Anda tidak dapat menghapus kolom tabel kebijakan yang direferensikan di dalam definisi kebijakan kecuali Anda menghapus atau melepaskan kebijakan. Ini juga berlaku ketika opsi CASCADE ditentukan. Anda dapat menjatuhkan kolom lain di tabel kebijakan.
Untuk informasi selengkapnya, lihat [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

MEMBATASI   
Ketika digunakan dengan DROP COLUMN, RESTRICT berarti kolom yang akan dijatuhkan tidak dijatuhkan, dalam kasus ini:  
+ Jika tampilan yang ditentukan mereferensikan kolom yang sedang dijatuhkan
+ Jika kunci asing mereferensikan kolom
+ Jika kolom mengambil bagian dalam kunci multipart
RESTRICT tidak dapat digunakan dengan CASCADE.  
RESTRICT dan CASCADE diabaikan untuk tabel eksternal.

RIAM   
Saat digunakan dengan DROP COLUMN, menghapus kolom yang ditentukan dan apa pun yang bergantung pada kolom itu. CASCADE tidak dapat digunakan dengan RESTRICT.  
RESTRICT dan CASCADE diabaikan untuk tabel eksternal.

Opsi berikut hanya berlaku untuk tabel eksternal.

*SET LOKASI \$1's3://*ember/folder /' \$1 's3://ember/manifest\$1file* '\$1*  
Jalur ke folder Amazon S3 yang berisi file data atau file manifes yang berisi daftar jalur objek Amazon S3. Ember harus berada di AWS Wilayah yang sama dengan cluster Amazon Redshift. Untuk daftar AWS Wilayah yang didukung, lihat[Keterbatasan Amazon Redshift Spectrum](c-spectrum-considerations.md). Untuk informasi selengkapnya tentang menggunakan file manifes, lihat LOKASI dalam [Parameter](r_CREATE_EXTERNAL_TABLE.md#r_CREATE_EXTERNAL_TABLE-parameters) referensi BUAT TABEL EKSTERNAL.

ATUR *FORMAT* FILE  
Format file untuk file data eksternal.  
Format yang valid adalah sebagai berikut:  
+ AVRO 
+ PARQUET
+ RCFILE
+ SEQUENCEFILE
+ TEXTFILE 

*SET PROPERTI TABEL ('*property\$1name*' = 'property\$1value')*   
Klausa yang menetapkan definisi tabel untuk properti tabel untuk tabel eksternal.   
Properti tabel peka huruf besar/kecil.  
*'numRows'=' baris\$1hitungan '*   
Properti yang menetapkan nilai NumRows untuk definisi tabel. Untuk secara eksplisit memperbarui statistik tabel eksternal, atur properti NumRows untuk menunjukkan ukuran tabel. Amazon Redshift tidak menganalisis tabel eksternal untuk menghasilkan statistik tabel yang digunakan pengoptimal kueri untuk menghasilkan paket kueri. Jika statistik tabel tidak disetel untuk tabel eksternal, Amazon Redshift akan menghasilkan rencana eksekusi kueri. Rencana ini didasarkan pada asumsi bahwa tabel eksternal adalah tabel yang lebih besar dan tabel lokal adalah tabel yang lebih kecil.  
*'skip.header.line.count'=' line\$1count '*  
Properti yang menetapkan jumlah baris untuk dilewati di awal setiap file sumber.

PARTISI (*partition\$1column = *partition\$1value** [,...] **SET LOKASI \$1's3://*bucket/*folder* '\$1 's3://bucket*/manifest\$1file'\$1**  
Klausa yang menetapkan lokasi baru untuk satu atau beberapa kolom partisi. 

**TAMBAHKAN [JIKA TIDAK ADA] PARTISI (*partition\$1column = *partition\$1value** [,...]) LOKASI \$1's3://*bucket/folder '\$1 's3://bucket**/manifest\$1file*'\$1 [,...]**  
Sebuah klausa yang menambahkan satu atau lebih partisi. Anda dapat menentukan beberapa klausa PARTISI menggunakan pernyataan ALTER TABLE... ADD tunggal.  
Jika Anda menggunakan AWS Glue katalog, Anda dapat menambahkan hingga 100 partisi menggunakan pernyataan ALTER TABLE tunggal.
Klausa IF NOT EXISTS menunjukkan bahwa jika partisi yang ditentukan sudah ada, perintah seharusnya tidak membuat perubahan. Ini juga menunjukkan bahwa perintah harus mengembalikan pesan bahwa partisi ada, daripada berakhir dengan kesalahan. Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika ALTER TABLE mencoba menambahkan partisi yang sudah ada. 

DROP PARTITION (*partition\$1column* = *partition\$1value* [,...])   
Sebuah klausa yang menjatuhkan partisi yang ditentukan. Menjatuhkan partisi hanya mengubah metadata tabel eksternal. Data di Amazon S3 tidak terpengaruh.

KEAMANAN TINGKAT BARIS \$1ON \$1 OFF\$1 [TIPE KONJUNGSI \$1DAN \$1 ATAU\$1] [UNTUK DATASHARES]  
Klausul yang mengaktifkan atau menonaktifkan keamanan tingkat baris untuk suatu relasi.  
Ketika keamanan tingkat baris diaktifkan untuk suatu relasi, Anda hanya dapat membaca baris yang diizinkan oleh kebijakan keamanan tingkat baris untuk Anda akses. Jika tidak ada kebijakan yang memberi Anda akses ke relasi, Anda tidak dapat melihat baris apa pun dari relasi tersebut. Hanya pengguna super dan pengguna atau peran yang memiliki peran yang dapat menyetel klausa ROW LEVEL SECURITY. `sys:secadmin` Untuk informasi selengkapnya, lihat [Keamanan tingkat baris](t_rls.md). Pernyataan ini didukung pada database yang terhubung atau pada database dengan izin federasi amazon redshift. Klausa FOR DATASHARES tidak didukung pada database dengan izin federasi Amazon Redshift.  
+ [TIPE KONJUNGSI \$1DAN \$1 ATAU\$1] 

  Klausa yang memungkinkan Anda memilih jenis konjungsi kebijakan keamanan tingkat baris untuk suatu relasi. Ketika beberapa kebijakan keamanan tingkat baris dilampirkan ke relasi, Anda dapat menggabungkan kebijakan dengan klausa AND atau OR. Secara default, Amazon Redshift menggabungkan kebijakan RLS dengan klausa AND. Pengguna super, pengguna, atau peran yang memiliki `sys:secadmin` peran dapat menggunakan klausa ini untuk menentukan jenis konjungsi kebijakan keamanan tingkat baris untuk suatu relasi. Untuk informasi selengkapnya, lihat [Menggabungkan beberapa kebijakan per pengguna](t_rls_combine_policies.md). 
+ UNTUK DATASHARES

  Klausa yang menentukan apakah relasi yang dilindungi RLS dapat diakses melalui datashares. Secara default, relasi yang dilindungi RLS tidak dapat diakses melalui datashare. Perintah ALTER TABLE ROW LEVEL SECURITY yang dijalankan dengan klausa ini hanya memengaruhi properti aksesibilitas datashare relasi. Properti ROW LEVEL SECURITY tidak berubah. 

   Jika Anda membuat relasi yang dilindungi RLS dapat diakses melalui datashares, relasi tersebut tidak memiliki keamanan tingkat baris dalam database datashared sisi konsumen. Relasi mempertahankan properti RLS di sisi produsen. 

MASKING \$1ON \$1 OFF\$1 UNTUK DATASHARES  
Klausa yang menentukan apakah relasi yang dilindungi DDM dapat diakses melalui datashares. Secara default, relasi yang dilindungi DDM tidak dapat diakses melalui datashare. Jika Anda membuat relasi yang dilindungi DDM dapat diakses melalui datashares, relasi tersebut tidak akan memiliki perlindungan masking di database datashared sisi konsumen. Relasi mempertahankan properti masking di sisi produsen. Hanya pengguna super dan pengguna atau peran yang memiliki peran yang dapat mengatur `sys:secadmin` klausa MASKING FOR DATASHARES. Untuk informasi selengkapnya, lihat [Penutupan data dinamis](t_ddm.md). 

## Contoh
<a name="r_ALTER_TABLE-examples"></a>

Untuk contoh yang menunjukkan cara menggunakan perintah ALTER TABLE, lihat berikut ini.
+ [Contoh ALTER TABLE](r_ALTER_TABLE_examples_basic.md)
+ [UBAH CONTOH TABEL EKSTERNAL](r_ALTER_TABLE_external-table.md)
+ [ALTER TABLE ADD dan DROP COLUMN contoh](r_ALTER_TABLE_COL_ex-add-drop.md)

# Contoh ALTER TABLE
<a name="r_ALTER_TABLE_examples_basic"></a>

Contoh berikut menunjukkan penggunaan dasar dari perintah ALTER TABLE. 

## Ganti nama tabel atau tampilan
<a name="r_ALTER_TABLE_examples_basic-rename-a-table"></a>

Perintah berikut mengganti nama tabel USERS menjadi USERS\$1BKUP: 

```
alter table users
rename to users_bkup;
```

 Anda juga dapat menggunakan jenis perintah ini untuk mengganti nama tampilan. 

## Mengubah pemilik tabel atau tampilan
<a name="r_ALTER_TABLE_examples_basic-change-the-owner-of-a-table-or-view"></a>

Perintah berikut mengubah pemilik tabel VENUE ke pengguna DWUSER: 

```
alter table venue
owner to dwuser;
```

Perintah berikut membuat tampilan, lalu ubah pemiliknya: 

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## Ubah Nama Kolom
<a name="r_ALTER_TABLE_examples_basic-rename-a-column"></a>

Perintah berikut mengganti nama kolom VENUESEATS di tabel VENUE menjadi VENUESIZE: 

```
alter table venue
rename column venueseats to venuesize;
```

## Jatuhkan kendala tabel
<a name="r_ALTER_TABLE_examples_drop-constraint"></a>

Untuk menjatuhkan batasan tabel, seperti kunci utama, kunci asing, atau batasan unik, pertama-tama temukan nama internal kendala. Kemudian tentukan nama kendala dalam perintah ALTER TABLE. Contoh berikut menemukan kendala untuk tabel CATEGORY, lalu menjatuhkan kunci utama dengan nama. `category_pkey` 

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## Mengubah kolom VARCHAR
<a name="r_ALTER_TABLE_examples_alter-column"></a>

Untuk menghemat penyimpanan, Anda dapat menentukan tabel awalnya dengan kolom VARCHAR dengan ukuran minimum yang diperlukan untuk kebutuhan data Anda saat ini. Kemudian, untuk mengakomodasi string yang lebih panjang, Anda dapat mengubah tabel untuk meningkatkan ukuran kolom. 

Contoh berikut meningkatkan ukuran kolom EVENTNAME ke VARCHAR (300). 

```
alter table event alter column eventname type varchar(300);
```

## Mengubah kolom VARBYTE
<a name="r_ALTER_TABLE_examples_alter-varbyte-column"></a>

Untuk menghemat penyimpanan, Anda dapat menentukan tabel awalnya dengan kolom VARBYTE dengan ukuran minimum yang diperlukan untuk kebutuhan data Anda saat ini. Kemudian, untuk mengakomodasi string yang lebih panjang, Anda dapat mengubah tabel untuk meningkatkan ukuran kolom. 

Contoh berikut meningkatkan ukuran kolom EVENTNAME ke VARBYTE (300). 

```
alter table event alter column eventname type varbyte(300);
```

## Mengubah pengkodean kompresi untuk kolom
<a name="r_ALTER_TABLE_examples_alter-column-encoding"></a>

Anda dapat mengubah pengkodean kompresi kolom. Di bawah ini, Anda dapat menemukan serangkaian contoh yang menunjukkan pendekatan ini. Definisi tabel untuk contoh-contoh ini adalah sebagai berikut.

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

Pernyataan berikut mengubah pengkodean kompresi untuk kolom c0 dari pengkodean LZO ke pengkodean. AZ64 

```
alter table t1 alter column c0 encode az64;
```

Pernyataan berikut mengubah pengkodean kompresi untuk kolom c1 dari pengkodean Zstandard menjadi pengkodean. AZ64 

```
alter table t1 alter column c1 encode az64;
```

Pernyataan berikut mengubah pengkodean kompresi untuk kolom c2 dari pengkodean LZO ke pengkodean Byte-dictionary. 

```
alter table t1 alter column c2 encode bytedict;
```

Pernyataan berikut mengubah pengkodean kompresi untuk kolom c3 dari pengkodean Zstandard ke pengkodean Runlength. 

```
alter table t1 alter column c3 encode runlength;
```

## Mengubah kolom DISTYLE KEY DISTYLE
<a name="r_ALTER_TABLE_examples_alter-distkey"></a>

Contoh berikut menunjukkan bagaimana mengubah DISTYLE dan DISTYLE dari tabel.

Buat tabel dengan gaya distribusi EVEN. Tampilan SVV\$1TABLE\$1INFO menunjukkan bahwa DISTSTYLE adalah EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Ubah tabel DISTKEY menjadi. `inv_warehouse_sk` Tampilan SVV\$1TABLE\$1INFO menunjukkan `inv_warehouse_sk` kolom sebagai kunci distribusi yang dihasilkan. 

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

Ubah tabel DISTKEY menjadi. `inv_item_sk` Tampilan SVV\$1TABLE\$1INFO menunjukkan `inv_item_sk` kolom sebagai kunci distribusi yang dihasilkan. 

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## Ubah tabel menjadi DISTSTYLE ALL
<a name="r_ALTER_TABLE_examples_alter-diststyle-all"></a>

Contoh berikut menunjukkan cara mengubah tabel ke DISTSTYLE ALL.

Buat tabel dengan gaya distribusi EVEN. Tampilan SVV\$1TABLE\$1INFO menunjukkan bahwa DISTSTYLE adalah EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Ubah tabel DISTSTYLE menjadi ALL. Tampilan SVV\$1TABLE\$1INFO menunjukkan DISTSYTLE yang diubah. 

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## Mengubah tabel SORTKEY
<a name="r_ALTER_TABLE_examples_alter-sortkey"></a>

Anda dapat mengubah tabel untuk memiliki kunci sortir majemuk atau tidak ada kunci pengurutan.

Dalam definisi tabel berikut, tabel `t1` didefinisikan dengan sortkey yang disisipkan.

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

Perintah berikut mengubah tabel dari kunci sortir yang disisipkan ke kunci sortir majemuk.

```
alter table t1 alter sortkey(c0, c1);
```

Perintah berikut mengubah tabel untuk menghapus kunci sortir yang disisipkan.

```
alter table t1 alter sortkey none;
```

Dalam definisi tabel berikut, tabel `t1` didefinisikan dengan kolom `c0` sebagai sortkey.

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

Perintah berikut mengubah tabel `t1` menjadi kunci sortir majemuk.

```
alter table t1 alter sortkey(c0, c1);
```

## Ubah tabel menjadi ENCODE AUTO
<a name="r_ALTER_TABLE_examples_alter-encode-auto"></a>

Contoh berikut menunjukkan bagaimana mengubah tabel untuk ENCODE AUTO. 

Definisi tabel untuk contoh ini berikut. Kolom `c0` didefinisikan dengan jenis pengkodean AZ64, dan kolom `c1` didefinisikan dengan jenis pengkodean LZO.

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

Untuk tabel ini, pernyataan berikut mengubah pengkodean ke AUTO.

```
alter table t1 alter encode auto;
```

Contoh berikut menunjukkan cara mengubah tabel untuk menghapus pengaturan ENCODE AUTO. 

Definisi tabel untuk contoh ini berikut. Kolom tabel didefinisikan tanpa pengkodean. Dalam hal ini, encoding default ke ENCODE AUTO.

```
create table t2(c0 int, c1 varchar);
```

Untuk tabel ini, pernyataan berikut mengubah pengkodean kolom c0 ke LZO. Pengkodean tabel tidak lagi diatur ke ENCODE AUTO.

```
alter table t2 alter column c0 encode lzo;;
```

## Ubah kontrol keamanan tingkat baris
<a name="r_ALTER_TABLE_examples_basic-rls"></a>

Perintah berikut mematikan RLS untuk tabel: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

Perintah berikut mengaktifkan RLS untuk tabel: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

Perintah berikut mengaktifkan RLS untuk tabel dan membuatnya dapat diakses melalui datashares: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

Perintah berikut mengaktifkan RLS untuk tabel dan membuatnya tidak dapat diakses melalui datashares: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

Perintah berikut mengaktifkan RLS dan menetapkan tipe konjungsi RLS ke OR untuk tabel: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

Perintah berikut mengaktifkan RLS dan menetapkan tipe konjungsi RLS ke AND untuk tabel: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```

# UBAH CONTOH TABEL EKSTERNAL
<a name="r_ALTER_TABLE_external-table"></a>

Contoh berikut menggunakan bucket Amazon S3 yang terletak di Wilayah AS Timur (Virginia Utara) (`us-east-1`) Wilayah AWS dan tabel contoh yang dibuat [Contoh](r_CREATE_EXTERNAL_TABLE_examples.md) untuk CREATE TABLE. Untuk informasi selengkapnya tentang cara menggunakan partisi dengan tabel eksternal, lihat[Mempartisi tabel eksternal Redshift Spectrum](c-spectrum-external-tables.md#c-spectrum-external-tables-partitioning). 

Contoh berikut menetapkan properti tabel NumRows untuk tabel eksternal SPECTRUM.SALES menjadi 170.000 baris.

```
alter table spectrum.sales
set table properties ('numRows'='170000');
```

Contoh berikut mengubah lokasi untuk tabel eksternal SPECTRUM.SALES.

```
alter table spectrum.sales
set location 's3://redshift-downloads/tickit/spectrum/sales/';
```

Contoh berikut mengubah format untuk tabel eksternal SPECTRUM.SALES menjadi Parket.

```
alter table spectrum.sales
set file format parquet;
```

Contoh berikut menambahkan satu partisi untuk tabel SPECTRUM.SALES\$1PART.

```
alter table spectrum.sales_part
add if not exists partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
```

Contoh berikut menambahkan tiga partisi untuk tabel SPECTRUM.SALES\$1PART.

```
alter table spectrum.sales_part add if not exists
partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/'
partition(saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/'
partition(saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
```

Contoh berikut mengubah SPECTRUM.SALES\$1PART untuk menjatuhkan partisi dengan. `saledate='2008-01-01''`

```
alter table spectrum.sales_part
drop partition(saledate='2008-01-01');
```

Contoh berikut menetapkan jalur Amazon S3 baru untuk partisi dengan. `saledate='2008-01-01'`

```
alter table spectrum.sales_part
partition(saledate='2008-01-01')
set location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01-01/';
```

Contoh berikut mengubah nama `sales_date` menjadi`transaction_date`. 

```
alter table spectrum.sales rename column sales_date to transaction_date;
```

Contoh berikut menetapkan pemetaan kolom ke pemetaan posisi untuk tabel eksternal yang menggunakan format kolom baris (ORC) yang dioptimalkan.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='position');
```

Contoh berikut menetapkan pemetaan kolom untuk pemetaan nama untuk tabel eksternal yang menggunakan format ORC.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='name');
```

# ALTER TABLE ADD dan DROP COLUMN contoh
<a name="r_ALTER_TABLE_COL_ex-add-drop"></a>

Contoh berikut menunjukkan bagaimana menggunakan ALTER TABLE untuk menambahkan dan kemudian menjatuhkan kolom tabel dasar dan juga cara menjatuhkan kolom dengan objek dependen. 

## TAMBAHKAN lalu JATUHKAN kolom dasar
<a name="r_ALTER_TABLE_COL_ex-add-then-drop-a-basic-column"></a>

Contoh berikut menambahkan kolom FEEDBACK\$1SCORE mandiri ke tabel USERS. Kolom ini hanya berisi integer, dan nilai default untuk kolom ini adalah NULL (tidak ada skor umpan balik). 

Pertama, kueri tabel katalog PG\$1TABLE\$1DEF untuk melihat skema tabel USERS: 

```
column        | type                   | encoding | distkey | sortkey
--------------+------------------------+----------+---------+--------
userid        | integer                | delta    | true    |       1
username      | character(8)           | lzo      | false   |       0
firstname     | character varying(30)  | text32k  | false   |       0
lastname      | character varying(30)  | text32k  | false   |       0
city          | character varying(30)  | text32k  | false   |       0
state         | character(2)           | bytedict | false   |       0
email         | character varying(100) | lzo      | false   |       0
phone         | character(14)          | lzo      | false   |       0
likesports    | boolean                | none     | false   |       0
liketheatre   | boolean                | none     | false   |       0
likeconcerts  | boolean                | none     | false   |       0
likejazz      | boolean                | none     | false   |       0
likeclassical | boolean                | none     | false   |       0
likeopera     | boolean                | none     | false   |       0
likerock      | boolean                | none     | false   |       0
likevegas     | boolean                | none     | false   |       0
likebroadway  | boolean                | none     | false   |       0
likemusicals  | boolean                | none     | false   |       0
```

Sekarang tambahkan kolom feedback\$1score: 

```
alter table users
add column feedback_score int
default NULL;
```

Pilih kolom FEEDBACK\$1SCORE dari USERS untuk memverifikasi bahwa kolom tersebut telah ditambahkan: 

```
select feedback_score from users limit 5;

feedback_score
----------------
NULL
NULL
NULL
NULL
NULL
```

Jatuhkan kolom untuk mengembalikan DDL asli: 

```
alter table users drop column feedback_score;
```

## Menjatuhkan kolom dengan objek dependen
<a name="r_ALTER_TABLE_COL_ex-dropping-a-column-with-a-dependent-object"></a>

Contoh berikut menjatuhkan kolom yang memiliki objek dependen. Akibatnya, objek dependen juga dijatuhkan. 

Untuk memulai, tambahkan kolom FEEDBACK\$1SCORE ke tabel USERS lagi: 

```
alter table users
add column feedback_score int
default NULL;
```

Selanjutnya, buat tampilan dari tabel USERS\$1VIEW yang disebut USERS\$1VIEW: 

```
create view users_view as select * from users;
```

Sekarang, coba jatuhkan kolom FEEDBACK\$1SCORE dari tabel USERS. Pernyataan DROP ini menggunakan perilaku default (RESTRICT): 

```
alter table users drop column feedback_score;
```

Amazon Redshift menampilkan pesan kesalahan bahwa kolom tidak dapat dijatuhkan karena objek lain bergantung padanya. 

Coba jatuhkan kolom FEEDBACK\$1SCORE lagi, kali ini tentukan CASCADE untuk menjatuhkan semua objek dependen: 

```
alter table users
drop column feedback_score cascade;
```

# UBAH TABEL TAMBAHKAN
<a name="r_ALTER_TABLE_APPEND"></a>

Menambahkan baris ke tabel target dengan memindahkan data dari tabel sumber yang ada. Data dalam tabel sumber dipindahkan ke kolom yang cocok di tabel target. Urutan kolom tidak masalah. Setelah data berhasil ditambahkan ke tabel target, tabel sumber kosong. ALTER TABLE APPEND biasanya jauh lebih cepat daripada operasi serupa [CREATE TABLE AS](r_CREATE_TABLE_AS.md) atau [INSERT](r_INSERT_30.md) INTO karena data dipindahkan, tidak digandakan. 

**catatan**  
ALTER TABLE APPEND memindahkan blok data antara tabel sumber dan tabel target. Untuk meningkatkan kinerja, ALTER TABLE APPEND tidak memadatkan penyimpanan sebagai bagian dari operasi append. Akibatnya, penggunaan penyimpanan meningkat sementara. Untuk merebut kembali ruang, jalankan operasi. [VAKUM](r_VACUUM_command.md)

Kolom dengan nama yang sama juga harus memiliki atribut kolom yang identik. Jika tabel sumber atau tabel target berisi kolom yang tidak ada di tabel lain, gunakan parameter IGNOREEXTRA atau FILLTARGET untuk menentukan bagaimana kolom tambahan harus dikelola. 

Anda tidak dapat menambahkan kolom identitas. Jika kedua tabel menyertakan kolom identitas, perintah gagal. Jika hanya satu tabel yang memiliki kolom identitas, sertakan parameter FILLTARGET atau IGNOREEXTRA. Untuk informasi selengkapnya, lihat [ALTER TABLE TAMBAHKAN catatan penggunaan](#r_ALTER_TABLE_APPEND_usage).

Anda dapat menambahkan kolom GENERATED BY DEFAULT AS IDENTITY. Anda dapat memperbarui kolom yang didefinisikan sebagai DIHASILKAN OLEH DEFAULT SEBAGAI IDENTITAS dengan nilai yang Anda berikan. Untuk informasi selengkapnya, lihat [ALTER TABLE TAMBAHKAN catatan penggunaan](#r_ALTER_TABLE_APPEND_usage). 

Tabel target harus berupa tabel permanen. Namun, sumbernya dapat berupa tabel permanen atau tampilan terwujud yang dikonfigurasi untuk konsumsi streaming. Kedua objek harus menggunakan gaya distribusi dan kunci distribusi yang sama, jika salah satu didefinisikan. Jika objek diurutkan, kedua objek harus menggunakan gaya pengurutan yang sama dan mendefinisikan kolom yang sama sebagai kunci pengurutan.

Perintah ALTER TABLE APPEND secara otomatis melakukan segera setelah operasi selesai. Itu tidak bisa digulung kembali. Anda tidak dapat menjalankan ALTER TABLE APPEND dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

## Hak istimewa yang diperlukan
<a name="r_ALTER_TABLE_APPEND-privileges"></a>

Bergantung pada perintah ALTER TABLE APPEND, salah satu hak istimewa berikut diperlukan:
+ Superuser
+ Pengguna dengan hak istimewa sistem ALTER TABLE
+ Pengguna dengan hak istimewa DELETE dan SELECT pada tabel sumber, dan hak istimewa INSERT pada tabel target

## Sintaksis
<a name="r_ALTER_TABLE_APPEND-synopsis"></a>

```
ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ]
[ IGNOREEXTRA | FILLTARGET ]
```

Menambahkan dari tampilan terwujud hanya berfungsi jika tampilan terwujud Anda dikonfigurasi. [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md)

## Parameter
<a name="r_ALTER_TABLE_APPEND-parameters"></a>

 *target\$1table\$1name*   
Nama tabel tempat baris ditambahkan. Entah menentukan hanya nama tabel atau menggunakan format *schema\$1name.table\$1name* untuk menggunakan skema tertentu. Tabel target harus berupa tabel permanen yang ada.

 DARI *source\$1table\$1name*   
Nama tabel yang menyediakan baris yang akan ditambahkan. Entah menentukan hanya nama tabel atau menggunakan format *schema\$1name.table\$1name* untuk menggunakan skema tertentu. Tabel sumber harus berupa tabel permanen yang ada.

 DARI *source\$1materialized\$1view\$1name*   
Nama tampilan terwujud yang menyediakan baris yang akan ditambahkan. Menambahkan dari tampilan terwujud hanya berfungsi jika tampilan terwujud Anda dikonfigurasi. [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md) Tampilan sumber yang terwujud harus sudah ada. 

ABAIKANEKSTRA   
Kata kunci yang menentukan bahwa jika tabel sumber menyertakan kolom yang tidak ada dalam tabel target, data di kolom tambahan harus dibuang. Anda tidak dapat menggunakan IGNOREEXTRA dengan FILLTARGET. 

FILLTARGET   
Kata kunci yang menentukan bahwa jika tabel target menyertakan kolom yang tidak ada dalam tabel sumber, kolom harus diisi dengan nilai [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) kolom, jika salah satu didefinisikan, atau NULL. Anda tidak dapat menggunakan IGNOREEXTRA dengan FILLTARGET. 

## ALTER TABLE TAMBAHKAN catatan penggunaan
<a name="r_ALTER_TABLE_APPEND_usage"></a>
+ ALTER TABLE APPEND hanya memindahkan kolom identik dari tabel sumber ke tabel target. Urutan kolom tidak masalah. 
+  Jika tabel sumber atau tabel target berisi kolom tambahan, gunakan FILLTARGET atau IGNOREEXTRA sesuai dengan aturan berikut: 
  + Jika tabel sumber berisi kolom yang tidak ada di tabel target, sertakan IGNOREEXTRA. Perintah mengabaikan kolom tambahan di tabel sumber.
  + Jika tabel target berisi kolom yang tidak ada di tabel sumber, sertakan FILLTARGET. Perintah mengisi kolom tambahan dalam tabel target dengan nilai kolom default atau nilai IDENTITAS, jika salah satu didefinisikan, atau NULL.
  + Jika tabel sumber dan tabel target berisi kolom tambahan, perintah gagal. Anda tidak dapat menggunakan FILLTARGET dan IGNOREEXTRA. 
+ Jika kolom dengan nama yang sama tetapi atribut yang berbeda ada di kedua tabel, perintah gagal. Kolom dengan nama sama harus memiliki atribut berikut yang sama: 
  + Jenis data
  + Ukuran kolom
  + Pengkodean kompresi
  + Tidak null
  + Urutkan gaya
  + Urutkan kolom kunci
  + Gaya distribusi
  + Kolom kunci distribusi
+ Anda tidak dapat menambahkan kolom identitas. Jika tabel sumber dan tabel target memiliki kolom identitas, perintah gagal. Jika hanya tabel sumber yang memiliki kolom identitas, sertakan parameter IGNOREEXTRA sehingga kolom identitas diabaikan. Jika hanya tabel target yang memiliki kolom identitas, sertakan parameter FILLTARGET sehingga kolom identitas diisi sesuai dengan klausa IDENTITY yang ditentukan untuk tabel. Untuk informasi selengkapnya, lihat [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default). 
+ Anda dapat menambahkan kolom identitas default dengan pernyataan ALTER TABLE APPEND. Untuk informasi selengkapnya, lihat [CREATE TABLE](r_CREATE_TABLE_NEW.md). 
+ Operasi ALTER TABLE APPEND menyimpan kunci eksklusif saat dijalankan di Amazon Redshift streaming tampilan terwujud yang terhubung ke salah satu dari berikut ini:
  +  Aliran data Amazon Kinesis 
  +  Topik Amazon Managed Streaming for Apache Kafka 
  +  Aliran eksternal yang didukung, seperti topik Confluent Cloud Kafka 

  Untuk informasi selengkapnya, lihat [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md).

## ALTER TABLE APPEND contoh
<a name="r_ALTER_TABLE_APPEND_examples"></a>

Misalkan organisasi Anda memelihara tabel, SALES\$1MONTHLY, untuk menangkap transaksi penjualan saat ini. Anda ingin memindahkan data dari tabel transaksi ke tabel PENJUALAN, setiap bulan. 

Anda dapat menggunakan perintah INSERT INTO dan TRUNCATE berikut untuk menyelesaikan tugas. 

```
insert into sales (select * from sales_monthly);
truncate sales_monthly;
```

Namun, Anda dapat melakukan operasi yang sama jauh lebih efisien dengan menggunakan perintah ALTER TABLE APPEND. 

Pertama, kueri tabel katalog [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md) sistem untuk memverifikasi bahwa kedua tabel memiliki kolom yang sama dengan atribut kolom yang identik. 

```
select trim(tablename) as table, "column", trim(type) as type,
encoding, distkey, sortkey, "notnull"
from pg_table_def where tablename like 'sales%';

table      | column     | type                        | encoding | distkey | sortkey | notnull
-----------+------------+-----------------------------+----------+---------+---------+--------
sales      | salesid    | integer                     | lzo      | false   |       0 | true
sales      | listid     | integer                     | none     | true    |       1 | true
sales      | sellerid   | integer                     | none     | false   |       2 | true
sales      | buyerid    | integer                     | lzo      | false   |       0 | true
sales      | eventid    | integer                     | mostly16 | false   |       0 | true
sales      | dateid     | smallint                    | lzo      | false   |       0 | true
sales      | qtysold    | smallint                    | mostly8  | false   |       0 | true
sales      | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
sales      | commission | numeric(8,2)                | delta32k | false   |       0 | false
sales      | saletime   | timestamp without time zone | lzo      | false   |       0 | false
salesmonth | salesid    | integer                     | lzo      | false   |       0 | true
salesmonth | listid     | integer                     | none     | true    |       1 | true
salesmonth | sellerid   | integer                     | none     | false   |       2 | true
salesmonth | buyerid    | integer                     | lzo      | false   |       0 | true
salesmonth | eventid    | integer                     | mostly16 | false   |       0 | true
salesmonth | dateid     | smallint                    | lzo      | false   |       0 | true
salesmonth | qtysold    | smallint                    | mostly8  | false   |       0 | true
salesmonth | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | commission | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

Selanjutnya, lihat ukuran setiap tabel.

```
select count(*) from sales_monthly;
 count
-------
  2000
(1 row)

select count(*) from sales;
 count
-------
 412,214
(1 row)
```

Sekarang jalankan perintah ALTER TABLE APPEND berikut.

```
alter table sales append from sales_monthly;         
```

Lihatlah ukuran setiap tabel lagi. Tabel SALES\$1MONTHLY sekarang memiliki 0 baris, dan tabel PENJUALAN telah tumbuh 2000 baris.

```
select count(*) from sales_monthly;
 count
-------
     0
(1 row)

select count(*) from sales;
 count
-------
 414214
(1 row)
```

Jika tabel sumber memiliki lebih banyak kolom daripada tabel target, tentukan parameter IGNOREEXTRA. Contoh berikut menggunakan parameter IGNOREEXTRA untuk mengabaikan kolom tambahan dalam tabel SALES\$1LISTING saat menambahkan ke tabel PENJUALAN.

```
alter table sales append from sales_listing ignoreextra;
```

Jika tabel target memiliki lebih banyak kolom daripada tabel sumber, tentukan parameter FILLTARGET. Contoh berikut menggunakan parameter FILLTARGET untuk mengisi kolom dalam tabel SALES\$1REPORT yang tidak ada dalam tabel SALES\$1MONTH.

```
alter table sales_report append from sales_month filltarget;
```

Contoh berikut menunjukkan contoh bagaimana menggunakan ALTER TABLE APPEND dengan tampilan terwujud sebagai sumber.

```
ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;
```

Tabel dan nama tampilan terwujud dalam contoh ini adalah sampel. Menambahkan dari tampilan terwujud hanya berfungsi jika tampilan terwujud Anda dikonfigurasi. [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md) Ini memindahkan semua catatan dalam tampilan terwujud sumber ke tabel target dengan skema yang sama dengan tampilan terwujud dan membiarkan tampilan terwujud tetap utuh. Ini adalah perilaku yang sama seperti ketika sumber data adalah tabel.

# MENGUBAH TEMPLATE
<a name="r_ALTER_TEMPLATE"></a>

Mengubah definisi template yang ada. Gunakan perintah ini untuk mengganti nama template, mengubah pemilik template, menambah atau menghapus parameter dari definisi template, atau menetapkan nilai parameter.

## Hak istimewa yang diperlukan
<a name="r_ALTER_TEMPLATE-privileges"></a>

Untuk mengubah template, Anda harus memiliki salah satu dari berikut ini:
+ Hak istimewa pengguna super
+ HAK ISTIMEWA UBAH TEMPLATE dan hak istimewa PENGGUNAAN pada skema yang berisi template

## Sintaksis
<a name="r_ALTER_TEMPLATE-synopsis"></a>

```
ALTER TEMPLATE [database_name.][schema_name.]template_name
{
RENAME TO new_name
| OWNER TO new_owner
| ADD  parameter [AS] [value]
| DROP parameter
| SET parameter TO value1 [, parameter2 TO value2 , ...]
};
```

## Parameter
<a name="r_ALTER_TEMPLATE-parameters"></a>

 *database\$1name*   
(Opsional) Nama database tempat template dibuat. Jika tidak ditentukan, database saat ini digunakan. 

 *schema\$1name*   
(Opsional) Nama skema di mana template dibuat. Jika tidak ditentukan, template dicari di jalur pencarian saat ini. 

 *template\$1name*   
Nama template yang akan diubah. 

GANTI NAMA MENJADI   
Sebuah klausa yang mengganti nama template. 

 *new\$1name*   
Nama baru template. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md). 

PEMILIK UNTUK   
Sebuah klausa yang mengubah pemilik template. 

 *new\$1owner*   
Pemilik baru template. 

TAMBAHKAN *parameter* [AS] [*nilai*]  
Menambahkan parameter baru ke template.  
+ Untuk parameter khusus kata kunci (seperti CSV atau GZIP), tentukan hanya nama parameter.
+ Untuk parameter yang memerlukan nilai, tentukan nama parameter diikuti oleh nilai. Anda dapat secara opsional menyertakan AS antara parameter dan nilai. 

*Parameter* DROP  
Menghapus parameter yang ditentukan dari template. Tidak dapat menjatuhkan beberapa parameter dengan satu perintah DROP.

*SET *parameter* KE *value1* [, *parameter2 TO value2*,...]*  
Memperbarui nilai parameter template yang ada. Hanya gunakan untuk parameter yang sudah memiliki nilai. Beberapa parameter dapat diperbarui dalam satu perintah.

## Contoh
<a name="r_ALTER_TEMPLATE-examples"></a>

Contoh berikut mengganti nama template test\$1template menjadi demo\$1template.

```
ALTER TEMPLATE test_template
RENAME TO demo_template;
```

Contoh berikut memberikan kepemilikan skema demo\$1template ke bob pengguna.

```
ALTER TEMPLATE demo_template
OWNER TO bob;
```

Contoh berikut menambahkan parameter `CSV` ke template demo\$1template

```
ALTER TEMPLATE demo_template
ADD CSV;
```

Contoh berikut menambahkan parameter `TIMEFORMAT 'auto'` ke template demo\$1template

```
ALTER TEMPLATE demo_template
ADD TIMEFORMAT 'auto';
```

Contoh berikut menjatuhkan parameter `ENCRYPTED` dari template demo\$1template

```
ALTER TEMPLATE demo_template
DROP ENCRYPTED;
```

Contoh berikut menetapkan `DELIMITER` parameter ke `'|'` dan `TIMEFORMAT` parameter untuk`'epochsecs'`:

```
ALTER TEMPLATE demo_template
SET DELIMITER TO '|', TIMEFORMAT TO 'epochsecs';
```

# ALTER USER
<a name="r_ALTER_USER"></a>

Mengubah pengguna database.

## Hak istimewa yang diperlukan
<a name="r_ALTER_USER-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk ALTER USER:
+ Superuser
+ Pengguna dengan hak istimewa ALTER USER
+ Pengguna saat ini yang ingin mengubah kata sandi mereka sendiri

## Sintaksis
<a name="r_ALTER_USER-synopsis"></a>

```
ALTER USER username [ WITH ] option [, ... ]

where option is

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ VALID UNTIL 'expiration_date' ]
| RENAME TO new_name |
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit | RESET SESSION TIMEOUT
| SET parameter { TO | = } { value | DEFAULT }
| RESET parameter
| EXTERNALID external_id
```

## Parameter
<a name="r_ALTER_USER-parameters"></a>

 *username*   
Nama pengguna. 

DENGAN   
Kata kunci opsional. 

CREATEDB \$1 NOCREATEDB   
Opsi CREATEDB memungkinkan pengguna untuk membuat database baru. NOCREATEDB adalah default. 

CREATEUSER \$1 NOCREATEUSER   
Opsi CREATEUSER menciptakan superuser dengan semua hak istimewa database, termasuk CREATE USER. Defaultnya adalah NOCREATEUSER. Untuk informasi selengkapnya, lihat [Pengguna super](r_superusers.md).

AKSES SYSLOG \$1TERBATAS \$1 TIDAK DIBATASI\$1  <a name="alter-user-syslog-access"></a>
Klausa yang menentukan tingkat akses yang dimiliki pengguna ke tabel dan tampilan sistem Amazon Redshift.   
Pengguna biasa yang memiliki izin SYSLOG ACCESS RESTRICTED hanya dapat melihat baris yang dihasilkan oleh pengguna tersebut dalam tabel dan tampilan sistem yang terlihat pengguna. Defaultnya dibatasi.   
Pengguna biasa yang memiliki izin SYSLOG ACCESS UNRESTRICTED dapat melihat semua baris dalam tabel dan tampilan sistem yang terlihat pengguna, termasuk baris yang dihasilkan oleh pengguna lain. UNRESTRICTED tidak memberikan akses pengguna reguler ke tabel yang terlihat oleh pengguna super. Hanya pengguna super yang dapat melihat tabel yang terlihat oleh pengguna super.   
Memberikan pengguna akses tak terbatas ke tabel sistem memberikan visibilitas pengguna ke data yang dihasilkan oleh pengguna lain. Misalnya, STL\$1QUERY dan STL\$1QUERYTEXT berisi teks lengkap pernyataan INSERT, UPDATE, dan DELETE, yang mungkin berisi data sensitif buatan pengguna. 
Semua baris di SVV\$1TRANSACTIONS dapat dilihat oleh semua pengguna.   
Untuk informasi selengkapnya, lihat [Visibilitas data dalam tabel dan tampilan sistem](cm_chap_system-tables.md#c_visibility-of-data).

PASSWORD \$1'*password*' \$1 '*md5hash' \$1 'sha256hash**' \$1 NONAKTIFKAN*\$1  
Mengatur kata sandi pengguna.   
Secara default, pengguna dapat mengubah kata sandi mereka sendiri, kecuali kata sandi dinonaktifkan. Untuk menonaktifkan kata sandi pengguna, tentukan NONAKTIFKAN. Ketika kata sandi pengguna dinonaktifkan, kata sandi dihapus dari sistem dan pengguna dapat masuk hanya menggunakan kredensyal pengguna sementara AWS Identity and Access Management (IAM). Untuk informasi selengkapnya, lihat [Menggunakan autentikasi IAM untuk menghasilkan kredensi pengguna database](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Hanya superuser yang dapat mengaktifkan atau menonaktifkan kata sandi. Anda tidak dapat menonaktifkan kata sandi pengguna super. Untuk mengaktifkan kata sandi, jalankan ALTER USER dan tentukan kata sandi.  
Untuk detail tentang penggunaan parameter PASSWORD, lihat[BUAT PENGGUNA](r_CREATE_USER.md). 

VALID SAMPAI '*expiration\$1date*'   
Menentukan bahwa password memiliki tanggal kedaluwarsa. Gunakan nilai `'infinity'` untuk menghindari tanggal kedaluwarsa. Tipe data yang valid untuk parameter ini adalah stempel waktu.   
Hanya pengguna super yang dapat menggunakan parameter ini.

GANTI NAMA MENJADI   
Mengganti nama pengguna. 

 *new\$1name*   
Nama baru pengguna. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  
Saat mengganti nama pengguna, Anda juga harus mengatur ulang kata sandi pengguna. Kata sandi reset tidak harus berbeda dari kata sandi sebelumnya. Nama pengguna digunakan sebagai bagian dari enkripsi kata sandi, jadi ketika pengguna diganti namanya, kata sandi dihapus. Pengguna tidak akan dapat masuk sampai kata sandi diatur ulang. Contoh:   

```
alter user newuser password 'EXAMPLENewPassword11'; 
```

BATAS KONEKSI \$1*limit* \$1 UNLIMITED\$1   
Jumlah maksimum koneksi database pengguna diizinkan untuk membuka secara bersamaan. Batas tidak diberlakukan untuk pengguna super. Gunakan kata kunci UNLIMITED untuk memungkinkan jumlah maksimum koneksi bersamaan. Batas jumlah koneksi untuk setiap database mungkin juga berlaku. Untuk informasi selengkapnya, lihat [BUAT BASIS DATA](r_CREATE_DATABASE.md). Defaultnya adalah UNLIMITED. Untuk melihat koneksi saat ini, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem.  
Jika batas koneksi pengguna dan database berlaku, slot koneksi yang tidak digunakan harus tersedia yang berada dalam kedua batas saat pengguna mencoba untuk terhubung.

BATAS WAKTU SESI \$1 ATUR ULANG *BATAS* WAKTU SESI  
Waktu maksimum dalam hitungan detik sesi tetap tidak aktif atau menganggur. Kisarannya adalah 60 detik (satu menit) hingga 1.728.000 detik (20 hari). Jika tidak ada batas waktu sesi yang ditetapkan untuk pengguna, pengaturan cluster berlaku. Untuk informasi selengkapnya, lihat [Kuota dan batas di Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) Redshift di Panduan Manajemen *Pergeseran Merah Amazon*.  
Saat Anda mengatur batas waktu sesi, itu hanya diterapkan ke sesi baru.  
Untuk melihat informasi tentang sesi pengguna aktif, termasuk waktu mulai, nama pengguna, dan batas waktu sesi, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem. Untuk melihat informasi tentang riwayat sesi pengguna, kueri tampilan. [STL\$1SESSION](r_STL_SESSIONS.md) Untuk mengambil informasi tentang pengguna database, termasuk nilai session-timeout, kueri tampilan. [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)

SET   
Menetapkan parameter konfigurasi ke nilai default baru untuk semua sesi yang dijalankan oleh pengguna tertentu. 

ATUR ULANG   
Mengatur ulang parameter konfigurasi ke nilai default asli untuk pengguna yang ditentukan. 

 *parameter*   
Nama parameter untuk mengatur atau mengatur ulang. 

 *nilai*   
Nilai baru dari parameter. 

DEFAULT   
Menetapkan parameter konfigurasi ke nilai default untuk semua sesi yang dijalankan oleh pengguna tertentu. 

*EXTERNALID external\$1id*   
Pengidentifikasi untuk pengguna, yang terkait dengan penyedia identitas. Pengguna harus menonaktifkan kata sandi mereka. Untuk informasi selengkapnya, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Catatan penggunaan
<a name="r_ALTER_USER_usage_notes"></a>
+ **Mencoba mengubah rdsdb** - Anda tidak dapat mengubah nama pengguna. `rdsdb`
+ **Membuat kata sandi yang tidak dikenal** — Saat menggunakan autentikasi AWS Identity and Access Management (IAM) untuk membuat kredensyal pengguna basis data, Anda mungkin ingin membuat superuser yang hanya dapat masuk menggunakan kredensyal sementara. Anda tidak dapat menonaktifkan kata sandi pengguna super, tetapi Anda dapat membuat kata sandi yang tidak dikenal menggunakan string MD5 hash yang dibuat secara acak.

  ```
  alter user iam_superuser password 'md51234567890123456780123456789012';
  ```
+ **Pengaturan search\$1path** - Ketika Anda mengatur [search\$1path](r_search_path.md) parameter dengan perintah ALTER USER, modifikasi akan berlaku pada login berikutnya pengguna yang ditentukan. Jika Anda ingin mengubah nilai search\$1path untuk pengguna dan sesi saat ini, gunakan perintah SET. 
+ **Mengatur zona waktu** - Saat Anda menggunakan SET TIMEZONE dengan perintah ALTER USER, modifikasi akan berlaku pada login berikutnya pengguna yang ditentukan.
+ **Bekerja dengan masking data dinamis dan kebijakan keamanan tingkat baris** — Saat klaster yang disediakan atau namespace tanpa server memiliki kebijakan keamanan masking data dinamis atau tingkat baris, perintah berikut akan diblokir untuk pengguna biasa: 

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  Hanya pengguna super dan pengguna dengan hak istimewa ALTER USER yang dapat mengatur opsi konfigurasi ini. Untuk informasi tentang keamanan tingkat baris, lihat. [Keamanan tingkat baris](t_rls.md) Untuk informasi tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md). 

## Contoh
<a name="r_ALTER_USER-examples"></a>

Contoh berikut memberikan pengguna ADMIN hak istimewa untuk membuat database: 

```
alter user admin createdb;
```

Contoh berikut menetapkan kata sandi pengguna ADMIN ke `adminPass9` dan menetapkan tanggal kedaluwarsa dan waktu untuk kata sandi: 

```
alter user admin password 'adminPass9'
valid until '2017-12-31 23:59';
```

Contoh berikut mengganti nama pengguna ADMIN menjadi SYSADMIN: 

```
alter user admin rename to sysadmin;
```

Contoh berikut memperbarui batas waktu siaga untuk pengguna menjadi 300 detik.

```
ALTER USER dbuser SESSION TIMEOUT 300;
```

Mengatur ulang batas waktu sesi idle pengguna. Saat Anda mengatur ulang, pengaturan cluster berlaku. Anda harus menjadi superuser database untuk menjalankan perintah ini. Untuk informasi selengkapnya, lihat [Kuota dan batasan di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dalam *Panduan Manajemen Amazon Redshift*.

```
ALTER USER dbuser RESET SESSION TIMEOUT;
```

Contoh berikut memperbarui ID eksternal untuk pengguna bernama`bob`. Namespace adalah. `myco_aad` Jika namespace tidak terkait dengan penyedia identitas terdaftar, itu menghasilkan kesalahan.

```
ALTER USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

Contoh berikut menetapkan zona waktu untuk semua sesi yang dijalankan oleh pengguna database tertentu. Ini mengubah zona waktu untuk sesi berikutnya, tetapi tidak untuk sesi saat ini.

```
ALTER USER odie SET TIMEZONE TO 'Europe/Zurich';
```

Contoh berikut menetapkan jumlah maksimum koneksi database yang pengguna `bob` diizinkan untuk membuka.

```
ALTER USER bob CONNECTION LIMIT 10;
```

# MENGANALISA
<a name="r_ANALYZE"></a>

Memperbarui statistik tabel untuk digunakan oleh perencana kueri. 

## Hak istimewa yang diperlukan
<a name="r_ANALYZE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk ANALISIS:
+ Superuser
+ Pengguna dengan hak istimewa ANALISIS
+ Pemilik relasi
+ Pemilik database yang tabel dibagikan

## Sintaksis
<a name="r_ANALYZE-synopsis"></a>

```
ANALYZE [ VERBOSE ]
[ [ table_name [ ( column_name [, ...] ) ] ]
[ PREDICATE COLUMNS | ALL  COLUMNS ]
```

## Parameter
<a name="r_ANALYZE-parameters"></a>

BERTELE-TELE   
Klausa yang mengembalikan pesan informasi kemajuan tentang operasi ANALISIS. Opsi ini berguna ketika Anda tidak menentukan tabel.

 *table\$1name*   
Anda dapat menganalisis tabel tertentu, termasuk tabel sementara. Anda dapat memenuhi syarat tabel dengan nama skema. Anda dapat secara opsional menentukan table\$1name untuk menganalisis satu tabel. Anda tidak dapat menentukan lebih dari satu *table\$1name* dengan satu pernyataan ANALYZE *table\$1name*. Jika Anda tidak menentukan nilai *table\$1name*, semua tabel dalam database yang saat ini terhubung akan dianalisis, termasuk tabel persisten dalam katalog sistem. Amazon Redshift melewatkan menganalisis tabel jika persentase baris yang telah berubah sejak ANALISIS terakhir lebih rendah dari ambang analisis. Untuk informasi selengkapnya, lihat [Menganalisis ambang](#r_ANALYZE-threshold).  
Anda tidak perlu menganalisis tabel sistem Amazon Redshift (tabel STL dan STV).

 *column\$1name*   
Jika Anda menentukan *table\$1name*, Anda juga dapat menentukan satu atau beberapa kolom dalam tabel (sebagai daftar yang dipisahkan kolom dalam tanda kurung). Jika daftar kolom ditentukan, hanya kolom yang terdaftar yang dianalisis.

 KOLOM PREDIKAT \$1 SEMUA KOLOM   
Klausa yang menunjukkan apakah ANALYSIS harus menyertakan hanya kolom predikat. Tentukan KOLOM PREDIKAT untuk menganalisis hanya kolom yang telah digunakan sebagai predikat dalam kueri sebelumnya atau kemungkinan kandidat untuk digunakan sebagai predikat. Tentukan SEMUA KOLOM untuk menganalisis semua kolom. Defaultnya adalah SEMUA KOLOM.   
Kolom disertakan dalam kumpulan kolom predikat jika salah satu dari berikut ini benar:  
+ Kolom telah digunakan dalam kueri sebagai bagian dari filter, kondisi gabungan, atau kelompok demi klausa.
+ Kolom adalah kunci distribusi.
+ Kolom adalah bagian dari kunci sortir.
Jika tidak ada kolom yang ditandai sebagai kolom predikat, misalnya karena tabel belum ditanyakan, semua kolom dianalisis bahkan ketika KOLOM PREDIKAT ditentukan. Ketika ini terjadi, Amazon Redshift mungkin merespons dengan pesan seperti Tidak ada kolom predikat yang ditemukan untuk "”. *table-name* Menganalisis semua kolom. Untuk informasi selengkapnya tentang kolom predikat, lihat[Menganalisis tabel](t_Analyzing_tables.md).

## Catatan penggunaan
<a name="r_ANALYZE-usage-notes"></a>

Amazon Redshift secara otomatis menjalankan ANALISIS pada tabel yang Anda buat dengan perintah berikut: 
+ CREATE TABLE AS
+ BUAT TABEL TEMP SEBAGAI 
+ PILIH KE DALAM

 Anda tidak dapat menganalisis tabel eksternal.

Anda tidak perlu menjalankan perintah ANALYZE pada tabel ini saat pertama kali dibuat. Jika Anda memodifikasinya, Anda harus menganalisisnya dengan cara yang sama seperti tabel lainnya.

### Menganalisis ambang
<a name="r_ANALYZE-threshold"></a>

Untuk mengurangi waktu pemrosesan dan meningkatkan kinerja sistem secara keseluruhan, Amazon Redshift melewatkan ANALISIS untuk tabel jika persentase baris yang telah berubah sejak perintah ANALYZE terakhir dijalankan lebih rendah dari ambang analisis yang ditentukan oleh parameter. [analyze\$1threshold\$1percent](r_analyze_threshold_percent.md) Secara default, `analyze_threshold_percent` adalah 10. `analyze_threshold_percent`Untuk mengubah sesi saat ini, jalankan [SET](r_SET.md) perintah. Contoh berikut berubah `analyze_threshold_percent` menjadi 20 persen.

```
set analyze_threshold_percent to 20;
```

Untuk menganalisis tabel ketika hanya sejumlah kecil baris telah berubah, atur `analyze_threshold_percent` ke angka kecil yang sewenang-wenang. Misalnya, jika Anda mengatur `analyze_threshold_percent` ke 0,01, maka tabel dengan 100.000.000 baris tidak dilewati jika setidaknya 10.000 baris telah berubah. 

```
set analyze_threshold_percent to 0.01;
```

Jika ANALYZE melewatkan tabel karena tidak memenuhi ambang analisis, Amazon Redshift menampilkan pesan berikut.

```
ANALYZE SKIP
```

Untuk menganalisis semua tabel meskipun tidak ada baris yang berubah, atur `analyze_threshold_percent` ke 0.

Untuk melihat hasil operasi ANALISIS, kueri tabel [STL\$1ANALISIS](r_STL_ANALYZE.md) sistem. 

Untuk informasi selengkapnya tentang menganalisis tabel, lihat[Menganalisis tabel](t_Analyzing_tables.md).

## Contoh
<a name="r_ANALYZE-examples"></a>

Analisis semua tabel dalam database TICKIT dan kembalikan informasi kemajuan.

```
analyze verbose;
```

Analisis tabel LISTING saja.

```
analyze listing;
```

Analisis kolom VENUEID dan VENUENAME di tabel VENUE. 

```
analyze venue(venueid, venuename);
```

Analisis hanya kolom predikat di tabel VENUE.

```
analyze venue predicate columns;
```

# MENGANALISIS KOMPRESI
<a name="r_ANALYZE_COMPRESSION"></a>

Melakukan analisis kompresi dan menghasilkan laporan dengan pengkodean kompresi yang disarankan untuk tabel yang dianalisis. Untuk setiap kolom, laporan tersebut mencakup perkiraan potensi pengurangan ruang disk dibandingkan dengan pengkodean RAW.

## Sintaksis
<a name="r_ANALYZE_COMPRESSION-synopsis"></a>

```
ANALYZE COMPRESSION
[ [ table_name ]
[ ( column_name [, ...] ) ] ]
[COMPROWS numrows]
```

## Parameter
<a name="r_ANALYZE_COMPRESSION-parameters"></a>

 *table\$1name*   
Anda dapat menganalisis kompresi untuk tabel tertentu, termasuk tabel sementara. Anda dapat memenuhi syarat tabel dengan nama skema. Anda dapat secara opsional menentukan *table\$1name* untuk menganalisis satu tabel. Jika Anda tidak menentukan *table\$1name*, semua tabel dalam database yang saat ini terhubung akan dianalisis. Anda tidak dapat menentukan lebih dari satu *table\$1name* dengan satu pernyataan ANALYZE COMPRESSION.

 *column\$1name*   
Jika Anda menentukan *table\$1name*, Anda juga dapat menentukan satu atau beberapa kolom dalam tabel (sebagai daftar yang dipisahkan kolom dalam tanda kurung).

COMPROWS  
Jumlah baris yang akan digunakan sebagai ukuran sampel untuk analisis kompresi. Analisis dijalankan pada baris dari setiap irisan data. Misalnya, jika Anda menentukan COMPROWS 1000000 (1.000.000) dan sistem berisi 4 irisan total, tidak lebih dari 250.000 baris per irisan dibaca dan dianalisis. Jika COMPROWS tidak ditentukan, ukuran sampel default menjadi 100.000 per irisan. Nilai COMPROWS lebih rendah dari default 100.000 baris per irisan secara otomatis ditingkatkan ke nilai default. Namun, analisis kompresi tidak menghasilkan rekomendasi jika jumlah data dalam tabel tidak cukup untuk menghasilkan sampel yang bermakna. Jika jumlah COMPROWS lebih besar dari jumlah baris dalam tabel, perintah ANALYZE COMPRESSION masih melanjutkan dan menjalankan analisis kompresi terhadap semua baris yang tersedia. Menggunakan COMPROWS menghasilkan kesalahan jika tabel tidak ditentukan.

 *numrows*   
Jumlah baris yang akan digunakan sebagai ukuran sampel untuk analisis kompresi. Rentang yang diterima untuk *numrows* adalah angka antara 1000 dan 1000000000 (1.000.000.000).

## Catatan penggunaan
<a name="r_ANALYZE_COMPRESSION_usage_notes"></a>

ANALISIS KOMPRESI memperoleh kunci tabel eksklusif, yang mencegah pembacaan dan penulisan bersamaan terhadap tabel. Hanya jalankan perintah ANALYZE COMPRESSION ketika tabel dalam keadaan idle.

Jalankan ANALYZE COMPRESSION untuk mendapatkan rekomendasi skema pengkodean kolom, berdasarkan sampel isi tabel. ANALISIS KOMPRESI adalah alat penasihat dan tidak memodifikasi pengkodean kolom tabel. Anda dapat menerapkan pengkodean yang disarankan dengan membuat ulang tabel atau dengan membuat tabel baru dengan skema yang sama. Membuat ulang tabel yang tidak terkompresi dengan skema pengkodean yang sesuai dapat secara signifikan mengurangi jejak pada disk. Pendekatan ini menghemat ruang disk dan meningkatkan kinerja kueri untuk beban kerja terikat I/O.

ANALISIS KOMPRESI melewatkan fase analisis aktual dan langsung mengembalikan jenis pengkodean asli pada kolom apa pun yang ditunjuk sebagai SORTKEY. Ini dilakukan karena pemindaian terbatas rentang mungkin berkinerja buruk ketika kolom SORTKEY dikompresi jauh lebih tinggi daripada kolom lainnya.

## Contoh
<a name="r_ANALYZE_COMPRESSION-examples"></a>

Contoh berikut menunjukkan pengkodean dan perkiraan pengurangan persen untuk kolom dalam tabel LISTING saja:

```
analyze compression listing;
  
  Table  |     Column     | Encoding | Est_reduction_pct 
---------+----------------+----------+-------------------
 listing | listid         | az64     | 40.96
 listing | sellerid       | az64     | 46.92
 listing | eventid        | az64     | 53.37
 listing | dateid         | raw      | 0.00
 listing | numtickets     | az64     | 65.66
 listing | priceperticket | az64     | 72.94
 listing | totalprice     | az64     | 68.05
 listing | listtime       | az64     | 49.74
```

Contoh berikut menganalisis kolom QTYSOLD, COMMISSION, dan SALETIME dalam tabel PENJUALAN.

```
analyze compression sales(qtysold, commission, saletime);

 Table |   Column   | Encoding | Est_reduction_pct 
-------+------------+----------+-------------------
 sales | salesid    | N/A      | 0.00
 sales | listid     | N/A      | 0.00
 sales | sellerid   | N/A      | 0.00
 sales | buyerid    | N/A      | 0.00
 sales | eventid    | N/A      | 0.00
 sales | dateid     | N/A      | 0.00
 sales | qtysold    | az64     | 83.06
 sales | pricepaid  | N/A      | 0.00
 sales | commission | az64     | 71.85
 sales | saletime   | az64     | 49.63
```

# LAMPIRKAN KEBIJAKAN MASKING
<a name="r_ATTACH_MASKING_POLICY"></a>

Melampirkan kebijakan masking data dinamis yang ada ke kolom. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md).

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat melampirkan kebijakan masking.

## Sintaksis
<a name="r_ATTACH_MASKING_POLICY-synopsis"></a>

```
ATTACH MASKING POLICY 
{
  policy_name ON relation_name
  | database_name.policy_name ON database_name.schema_name.relation_name
}
( { output_column_names | output_path } )
[ USING ( { input_column_names | input_path } ) ]
TO { user_name | ROLE role_name | PUBLIC }
[ PRIORITY priority ];
```

## Parameter
<a name="r_ATTACH_MASKING_POLICY-parameters"></a>

*policy\$1name*   
Nama kebijakan masking untuk dilampirkan.

database\$1name  
Nama database tempat kebijakan dan relasi dibuat. Kebijakan dan relasi harus berada pada database yang sama. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

schema\$1name  
Nama skema yang dimiliki relasi.

 *hubungan\$1nama*   
Nama relasi untuk melampirkan kebijakan masking ke.

*output\$1column\$1names*   
Nama-nama kolom yang akan diterapkan kebijakan masking.

*output\$1paths*   
Jalur lengkap objek SUPER yang akan diterapkan kebijakan masking, termasuk nama kolom. Misalnya, untuk relasi dengan kolom tipe SUPER bernama`person`, *output\$1path mungkin*. `person.name.first_name` 

*input\$1column\$1names*   
Nama-nama kolom yang akan diambil oleh kebijakan masking sebagai masukan. Parameter ini bersifat opsional. Jika tidak ditentukan, kebijakan masking menggunakan *output\$1column\$1names sebagai input*.

*input\$1paths*   
Jalur lengkap objek SUPER yang akan diambil oleh kebijakan masking sebagai input. Parameter ini bersifat opsional. Jika tidak ditentukan, kebijakan masking menggunakan *output\$1path* untuk input.

*user\$1name*   
Nama pengguna yang akan dilampirkan oleh kebijakan masking. Anda tidak dapat melampirkan dua kebijakan ke kombinasi pengguna dan kolom atau peran dan kolom yang sama. Anda dapat melampirkan kebijakan ke pengguna dan kebijakan lain ke peran pengguna. Dalam hal ini, kebijakan dengan prioritas lebih tinggi berlaku.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu perintah ATTACH MASKING POLICY. 

*role\$1name*   
Nama peran yang akan dilampirkan oleh kebijakan masking. Anda tidak dapat melampirkan dua kebijakan ke column/role pasangan yang sama. Anda dapat melampirkan kebijakan ke pengguna dan kebijakan lain ke peran pengguna. Dalam hal ini, kebijakan dengan prioritas lebih tinggi berlaku.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu perintah ATTACH MASKING POLICY. 

*PUBLIK*   
Melampirkan kebijakan masking ke semua pengguna yang mengakses tabel. Anda harus memberikan kebijakan masking lain yang dilampirkan pada spesifik column/user atau column/role pasangan prioritas yang lebih tinggi daripada kebijakan PUBLIK agar dapat diterapkan.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu perintah ATTACH MASKING POLICY. 

*prioritas*   
Prioritas kebijakan masking. Jika beberapa kebijakan masking berlaku untuk kueri pengguna tertentu, kebijakan prioritas tertinggi akan berlaku.  
Anda tidak dapat melampirkan dua kebijakan berbeda ke kolom yang sama dengan prioritas yang sama, meskipun kedua kebijakan tersebut dilampirkan ke pengguna atau peran yang berbeda. Anda dapat melampirkan kebijakan yang sama beberapa kali ke set tabel, kolom keluaran, kolom input, dan parameter prioritas yang sama, selama pengguna atau peran yang dilampirkan kebijakan berbeda setiap kali.   
Anda tidak dapat menerapkan kebijakan ke kolom dengan prioritas yang sama dengan kebijakan lain yang dilampirkan pada kolom tersebut, meskipun untuk peran yang berbeda. Bidang ini bersifat opsional. Jika Anda tidak menentukan prioritas, kebijakan masking default melampirkan dengan prioritas 0.

Untuk penggunaan KEBIJAKAN MASKING LAMPIRKAN di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# LAMPIRKAN KEBIJAKAN RLS
<a name="r_ATTACH_RLS_POLICY"></a>

Lampirkan kebijakan keamanan tingkat baris pada tabel ke satu atau beberapa pengguna atau peran.

Pengguna super dan pengguna atau peran yang memiliki `sys:secadmin` peran dapat melampirkan kebijakan.

## Sintaksis
<a name="r_ATTACH_RLS_POLICY-synopsis"></a>

```
ATTACH RLS POLICY 
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
TO { user_name | ROLE role_name | PUBLIC } [, ...]
```

## Parameter
<a name="r_ATTACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan .

database\$1name  
Nama database tempat kebijakan dan relasi dibuat. Kebijakan dan relasi harus berada pada database yang sama. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

schema\$1name  
Nama skema yang dimiliki relasi.

table\$1name  
Hubungan yang dilampirkan oleh kebijakan keamanan tingkat baris.

KE \$1*user\$1name* \$1 *ROLE role\$1name* \$1 PUBLIK\$1 [,...]  
Menentukan apakah kebijakan dilampirkan ke satu atau beberapa pengguna atau peran tertentu. 

Untuk penggunaan KEBIJAKAN ATTACH RLS di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Catatan penggunaan
<a name="r_ATTACH_RLS_POLICY-usage"></a>

Saat bekerja dengan pernyataan ATTACH RLS POLICY, amati hal berikut:
+ Tabel yang dilampirkan harus memiliki semua kolom yang tercantum dalam klausa WITH dari pernyataan pembuatan kebijakan.
+ Amazon Redshift RLS mendukung melampirkan kebijakan RLS ke objek berikut:
  +  Tabel 
  +  Tampilan
  +  Tampilan pengikatan akhir 
  +  Tampilan terwujud
+ Amazon Redshift RLS tidak mendukung melampirkan kebijakan RLS ke objek berikut:
  +  Tabel katalog 
  +  Hubungan lintas basis data 
  +  Tabel eksternal 
  +  Tabel sementara 
  +  Tabel pencarian kebijakan
  + Tabel dasar tampilan terwujud
+ Kebijakan RLS yang dilampirkan ke pengguna super atau pengguna dengan `sys:secadmin` izin diabaikan.

## Contoh
<a name="r_ATTACH_RLS_POLICY-examples"></a>

Contoh berikut melampirkan kebijakan RLS ke tabel dan kombinasi peran yang ditentukan. Kebijakan RLS berlaku untuk setiap pengguna dengan peran `analyst` atau `dbadmin` ketika mereka mengakses tabel tickit\$1category\$1redshift.

```
ATTACH RLS POLICY policy_concerts ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
```

# MULAI
<a name="r_BEGIN"></a>

Memulai transaksi. Identik dengan MULAI TRANSAKSI.

Transaksi adalah unit kerja tunggal yang logis, apakah itu terdiri dari satu perintah atau beberapa perintah. Secara umum, semua perintah dalam transaksi berjalan pada snapshot database yang waktu mulai ditentukan oleh nilai yang ditetapkan untuk parameter konfigurasi `transaction_snapshot_begin` sistem.

Secara default, operasi Amazon Redshift individual (kueri, pernyataan DDL, pemuatan) secara otomatis berkomitmen ke database. Jika Anda ingin menangguhkan komit untuk operasi sampai pekerjaan selanjutnya selesai, Anda perlu membuka transaksi dengan pernyataan BEGIN, lalu jalankan perintah yang diperlukan, lalu tutup transaksi dengan [AKHIR](r_END.md) pernyataan [COMMIT](r_COMMIT.md) atau. Jika perlu, Anda dapat menggunakan [ROLLBACK](r_ROLLBACK.md) pernyataan untuk menghentikan transaksi yang sedang berlangsung. Pengecualian untuk perilaku ini adalah [MEMOTONG](r_TRUNCATE.md) perintah, yang melakukan transaksi di mana ia dijalankan dan tidak dapat diputar kembali.

## Sintaksis
<a name="r_BEGIN-synopsis"></a>

```
BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

Where option is

SERIALIZABLE
| READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ

Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no
operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster 
by querying the stv_db_isolation_level table.
```

## Parameter
<a name="r_BEGIN-parameters"></a>

PEKERJAAN   
Kata kunci opsional.

TRANSAKSI   
Kata kunci opsional; KERJA dan TRANSAKSI adalah sinonim.

TINGKAT ISOLASI SERIALIZABLE   
Isolasi serializable didukung secara default, sehingga perilaku transaksi adalah sama apakah sintaks ini disertakan dalam pernyataan atau tidak. Untuk informasi selengkapnya, lihat [Mengelola operasi tulis bersamaan](c_Concurrent_writes.md). Tidak ada tingkat isolasi lain yang didukung.  
Standar SQL mendefinisikan empat tingkat isolasi transaksi untuk mencegah *pembacaan kotor* (di mana transaksi membaca data yang ditulis oleh transaksi tanpa komitmen bersamaan), pembacaan yang tidak *dapat diulang (di mana transaksi membaca* ulang data yang dibaca sebelumnya dan menemukan bahwa data diubah oleh transaksi lain yang dilakukan sejak pembacaan awal), dan *phantom membaca* (di mana transaksi menjalankan kembali kueri, mengembalikan serangkaian baris yang memenuhi kondisi pencarian, dan kemudian menemukan bahwa kumpulan baris telah berubah karena yang lain baru-baru ini transaksi yang dilakukan):  
+ Baca tanpa komitmen: Bacaan kotor, bacaan yang tidak dapat diulang, dan pembacaan hantu dimungkinkan.
+ Baca berkomitmen: Pembacaan yang tidak dapat diulang dan pembacaan hantu dimungkinkan.
+ Bacaan berulang: Pembacaan hantu dimungkinkan.
+ Serializable: Mencegah pembacaan kotor, pembacaan yang tidak dapat diulang, dan pembacaan hantu.
Meskipun Anda dapat menggunakan salah satu dari empat tingkat isolasi transaksi, Amazon Redshift memproses semua tingkat isolasi sebagai serializable.

BACA TULIS   
Memberikan izin baca dan tulis transaksi.

BACA SAJA   
Memberikan izin read-only transaksi.

## Contoh
<a name="r_BEGIN-examples"></a>

Contoh berikut memulai blok transaksi serializable: 

```
begin;
```

Contoh berikut memulai blok transaksi dengan tingkat isolasi serializable dan izin baca dan tulis: 

```
begin read write;
```

# PANGGILAN
<a name="r_CALL_procedure"></a>

Menjalankan prosedur yang disimpan. Perintah CALL harus menyertakan nama prosedur dan nilai argumen masukan. Anda harus memanggil prosedur tersimpan dengan menggunakan pernyataan CALL.

**catatan**  
CALL tidak dapat menjadi bagian dari kueri reguler.

## Sintaksis
<a name="r_CALL_procedure-synopsis"></a>

```
CALL sp_name ( [ argument ] [, ...] )
```

## Parameter
<a name="r_CALL_procedure-parameters"></a>

 *sp\$1nama*   
Nama prosedur yang akan dijalankan. 

 *argumen*   
Nilai argumen masukan. Parameter ini juga bisa menjadi nama fungsi, misalnya`pg_last_query_id()`. Anda tidak dapat menggunakan kueri sebagai argumen CALL. 

## Catatan penggunaan
<a name="r_CALL_procedure-usage-notes"></a>

Prosedur tersimpan Amazon Redshift mendukung panggilan bersarang dan rekursif, seperti yang dijelaskan berikut. Selain itu, pastikan dukungan driver Anda up-to-date, juga dijelaskan sebagai berikut.

**Topics**
+ [Panggilan bersarang](#r_CALL_procedure-nested-calls)
+ [Dukungan pengemudi](#r_CALL_procedure-driver-support)

### Panggilan bersarang
<a name="r_CALL_procedure-nested-calls"></a>

Prosedur tersimpan Amazon Redshift mendukung panggilan bersarang dan rekursif. Jumlah maksimum level bersarang yang diizinkan adalah 16. Panggilan bersarang dapat merangkum logika bisnis ke dalam prosedur yang lebih kecil, yang dapat dibagikan oleh beberapa penelepon. 

Jika Anda memanggil prosedur bersarang yang memiliki parameter keluaran, prosedur bagian dalam harus mendefinisikan argumen INOUT. Dalam hal ini, prosedur bagian dalam diteruskan dalam variabel nonkonstan. Argumen OUT tidak diizinkan. Perilaku ini terjadi karena variabel diperlukan untuk menahan output dari panggilan batin.

Hubungan antara prosedur dalam dan luar dicatat di `from_sp_call` kolom[SVL\$1STORED\$1PROC\$1CALL](r_SVL_STORED_PROC_CALL.md). 

Contoh berikut menunjukkan melewati variabel ke panggilan prosedur bersarang melalui argumen INOUT.

```
CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql
AS $$
BEGIN
  a := b * a;
  c := b * c;
END;
$$;

CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql
AS $$
DECLARE
  x int := 3;
  y int := 4;
BEGIN
  DROP TABLE IF EXISTS test_tbl;
  CREATE TEMP TABLE test_tbl(a int, b varchar(256));
  CALL inner_proc(x, multiplier, y);
  insert into test_tbl values (x, y::varchar);
END;
$$;

CALL outer_proc(5);

SELECT * from test_tbl;
 a  | b
----+----
 15 | 20
(1 row)
```

### Dukungan pengemudi
<a name="r_CALL_procedure-driver-support"></a>

Kami menyarankan Anda meningkatkan driver Java Database Connectivity (JDBC) dan Open Database Connectivity (ODBC) ke versi terbaru yang memiliki dukungan untuk prosedur tersimpan Amazon Redshift. 

Anda mungkin dapat menggunakan driver yang ada jika alat klien Anda menggunakan operasi API driver yang melewati pernyataan CALL ke server. Parameter output, jika ada, dikembalikan sebagai hasil set satu baris. 

Versi terbaru dari driver Amazon Redshift JDBC dan ODBC memiliki dukungan metadata untuk penemuan prosedur tersimpan. Mereka juga memiliki `CallableStatement` dukungan untuk aplikasi Java kustom. Untuk informasi selengkapnya tentang driver, lihat [Menghubungkan ke Cluster Amazon Redshift Menggunakan Alat Klien SQL di Panduan](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html) Manajemen *Amazon* Redshift. 

Contoh berikut menunjukkan cara menggunakan operasi API yang berbeda dari driver JDBC untuk panggilan prosedur tersimpan.

```
void statement_example(Connection conn) throws SQLException {
  statement.execute("CALL sp_statement_example(1)");
}

void prepared_statement_example(Connection conn) throws SQLException {
  String sql = "CALL sp_prepared_statement_example(42, 84)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.execute();
}

void callable_statement_example(Connection conn) throws SQLException {
  CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)");
  cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
  cstmt.setInt(2, 42);
  cstmt.executeQuery();
  Integer out_value = cstmt.getInt(1);
}
```

## Contoh
<a name="r_CALL_procedure-examples"></a>

Contoh berikut memanggil nama prosedur`test_spl`.

```
call test_sp1(3,'book');
INFO:  Table "tmp_tbl" does not exist and will be skipped
INFO:  min_val = 3, f2 = book
```

Contoh berikut memanggil nama prosedur`test_spl2`.

```
call test_sp2(2,'2019');

         f2          | column2
---------------------+---------
 2019+2019+2019+2019 | 2
(1 row)
```

# CANCEL (BATALKAN)
<a name="r_CANCEL"></a>

Membatalkan kueri database yang sedang berjalan.

Perintah CANCEL memerlukan ID proses atau ID sesi dari kueri yang sedang berjalan dan menampilkan pesan konfirmasi untuk memverifikasi bahwa kueri telah dibatalkan.

## Hak istimewa yang diperlukan
<a name="r_CANCEL-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CANCEL:
+ Superuser membatalkan kueri mereka sendiri
+ Superuser membatalkan kueri pengguna
+ Pengguna dengan hak istimewa CANCEL membatalkan kueri pengguna
+ Pengguna membatalkan kueri mereka sendiri

## Sintaksis
<a name="r_CANCEL-synopsis"></a>

```
CANCEL process_id [ 'message' ]
```

## Parameter
<a name="r_CANCEL-parameters"></a>

 *process\$1id*   
Untuk membatalkan kueri yang berjalan di klaster Amazon Redshift, gunakan `pid` (ID Proses) dari kueri [STV\$1TERBARU](r_STV_RECENTS.md) yang sesuai dengan kueri yang ingin Anda batalkan.  
Untuk membatalkan kueri yang berjalan di grup kerja Amazon Redshift Tanpa Server, gunakan `session_id` dari kueri [SYS\$1QUERY\$1HISTORY](SYS_QUERY_HISTORY.md) yang sesuai dengan kueri yang ingin Anda batalkan.

'*pesan*'   
Pesan konfirmasi opsional yang ditampilkan saat pembatalan kueri selesai. Jika Anda tidak menentukan pesan, Amazon Redshift menampilkan pesan default sebagai verifikasi. Anda harus melampirkan pesan dalam tanda kutip tunggal.

## Catatan penggunaan
<a name="r_CANCEL-usage-notes"></a>

Anda tidak dapat membatalkan kueri dengan menentukan *ID kueri*; Anda harus menentukan ID *proses* kueri (PID) atau *ID Sesi*. Anda hanya dapat membatalkan kueri yang saat ini dijalankan oleh pengguna Anda. Pengguna super dapat membatalkan semua kueri.

Jika kueri dalam beberapa sesi menahan kunci pada tabel yang sama, Anda dapat menggunakan [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) fungsi untuk mengakhiri salah satu sesi. Melakukan hal ini memaksa setiap transaksi yang sedang berjalan di sesi yang dihentikan untuk melepaskan semua kunci dan memutar kembali transaksi. Untuk melihat kunci yang saat ini ditahan, kueri tabel [STV\$1LOCKS](r_STV_LOCKS.md) sistem. 

Setelah peristiwa internal tertentu, Amazon Redshift mungkin memulai ulang sesi aktif dan menetapkan PID baru. Jika PID telah berubah, Anda mungkin menerima pesan galat berikut.

```
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
```

Untuk menemukan PID baru, kueri tabel [STL\$1RESTARTED\$1SESSIONS](r_STL_RESTARTED_SESSIONS.md) sistem dan filter pada `oldpid` kolom.

```
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
```

## Contoh
<a name="r_CANCEL-examples"></a>

Untuk membatalkan kueri yang sedang berjalan di kluster Amazon Redshift, pertama-tama ambil ID proses untuk kueri yang ingin dibatalkan. Untuk menentukan proses IDs untuk semua kueri yang sedang berjalan, ketik perintah berikut: 

```
select pid, starttime, duration,
trim(user_name) as user,
trim (query) as querytxt
from stv_recents
where status = 'Running';

pid |         starttime          | duration |   user   |    querytxt
-----+----------------------------+----------+----------+-----------------
802 | 2008-10-14 09:19:03.550885 |      132 | dwuser | select
venuename from venue where venuestate='FL', where venuecity not in
('Miami' , 'Orlando');
834 | 2008-10-14 08:33:49.473585 |  1250414 | dwuser | select *
from listing;
964 | 2008-10-14 08:30:43.290527 |   326179 | dwuser | select
sellerid from sales where qtysold in (8, 10);
```

Periksa teks kueri untuk menentukan id proses (PID) mana yang sesuai dengan kueri yang ingin Anda batalkan.

Ketik perintah berikut untuk menggunakan PID 802 untuk membatalkan kueri itu: 

```
cancel 802;
```

Sesi tempat kueri berjalan menampilkan pesan berikut: 

```
ERROR:  Query (168) cancelled on user's request
```

di `168` mana ID kueri (bukan ID proses yang digunakan untuk membatalkan kueri).

Atau, Anda dapat menentukan pesan konfirmasi kustom untuk ditampilkan, bukan pesan default. Untuk menentukan pesan kustom, sertakan pesan Anda dalam tanda kutip tunggal di akhir perintah CANCEL: 

```
cancel 802 'Long-running query';
```

Sesi tempat kueri berjalan menampilkan pesan berikut: 

```
ERROR:  Long-running query
```

# TUTUP
<a name="close"></a>

(Opsional) Menutup semua sumber daya gratis yang terkait dengan kursor terbuka. [COMMIT](r_COMMIT.md),[AKHIR](r_END.md), dan [ROLLBACK](r_ROLLBACK.md) secara otomatis menutup kursor, sehingga tidak perlu menggunakan perintah CLOSE untuk secara eksplisit menutup kursor. 

Untuk informasi lebih lanjut, lihat[MENYATAKAN](declare.md),[AMBIL](fetch.md). 

## Sintaksis
<a name="close-synopsis"></a>

```
CLOSE cursor
```

## Parameter
<a name="close-parameters"></a>

*kursor*   
Nama kursor untuk ditutup. 

## Tutup contoh
<a name="close-example"></a>

Perintah berikut menutup kursor dan melakukan komit, yang mengakhiri transaksi:

```
close movie_cursor;
commit;
```

# MENGOMENTARI
<a name="r_COMMENT"></a>

Membuat atau mengubah komentar tentang objek database.

## Sintaksis
<a name="r_COMMENT-synopsis"></a>

```
COMMENT ON
{
TABLE object_name |
COLUMN object_name.column_name |
CONSTRAINT constraint_name ON table_name |
DATABASE object_name |
VIEW object_name
}
IS 'text' | NULL
```

## Parameter
<a name="r_COMMENT-parameters"></a>

 *object\$1name*   
Nama objek database yang dikomentari. Anda dapat menambahkan komentar ke objek berikut:  
+ TABEL
+ COLUMN (juga mengambil *column\$1name*).
+ *CONSTRAINT (juga mengambil *constraint\$1name* dan table\$1name).*
+ BASIS DATA
+ MELIHAT
+ SCHEMA

IS '*teks*' \$1 NULL  
Teks komentar yang ingin Anda tambahkan atau ganti untuk objek yang ditentukan. String *teks* adalah tipe data TEXT. Lampirkan komentar dalam tanda kutip tunggal. Tetapkan nilainya ke NULL untuk menghapus teks komentar.

 *column\$1name*   
Nama kolom yang dikomentari. Parameter dari COLUMN. Mengikuti tabel yang ditentukan dalam`object_name`.

 *constraint\$1name*   
Nama kendala yang sedang dikomentari. Parameter KENDALA.

 *table\$1name*   
Nama tabel yang berisi kendala. Parameter KENDALA.

## Catatan penggunaan
<a name="r_COMMENT-usage-notes"></a>

Anda harus menjadi superuser atau pemilik objek database untuk menambah atau memperbarui komentar.

Komentar pada database hanya dapat diterapkan ke database saat ini. Pesan peringatan ditampilkan jika Anda mencoba mengomentari database yang berbeda. Peringatan yang sama ditampilkan untuk komentar pada database yang tidak ada.

Komentar pada tabel eksternal, kolom eksternal, dan kolom tampilan pengikatan akhir tidak didukung.

## Contoh
<a name="r_COMMENT-example"></a>

Contoh berikut menambahkan komentar ke tabel PENJUALAN. 

```
COMMENT ON TABLE sales IS 'This table stores tickets sales data';
```

Contoh berikut menampilkan komentar pada tabel PENJUALAN. 

```
select obj_description('public.sales'::regclass);

obj_description
-------------------------------------
This table stores tickets sales data
```

Contoh berikut menghapus komentar dari tabel PENJUALAN. 

```
COMMENT ON TABLE sales IS NULL;
```

Contoh berikut menambahkan komentar ke kolom EVENTID dari tabel PENJUALAN. 

```
COMMENT ON COLUMN sales.eventid IS 'Foreign-key reference to the EVENT table.';
```

Contoh berikut menampilkan komentar pada kolom EVENTID (kolom nomor 5) dari tabel PENJUALAN. 

```
select col_description( 'public.sales'::regclass, 5::integer );

col_description
-----------------------------------------
Foreign-key reference to the EVENT table.
```

Contoh berikut menambahkan komentar deskriptif ke tabel EVENT. 

```
comment on table event is 'Contains listings of individual events.';
```

Untuk melihat komentar, kueri katalog sistem PG\$1DESCRIPTION. Contoh berikut mengembalikan deskripsi untuk tabel EVENT.

```
select * from pg_catalog.pg_description
where objoid =
(select oid from pg_class where relname = 'event'
and relnamespace =
(select oid from pg_catalog.pg_namespace where nspname = 'public') );

objoid | classoid | objsubid | description
-------+----------+----------+----------------------------------------
116658 |     1259 |        0 | Contains listings of individual events.
```

# COMMIT
<a name="r_COMMIT"></a>

Melakukan transaksi saat ini ke database. Perintah ini membuat pembaruan database dari transaksi permanen.

## Sintaksis
<a name="r_COMMIT-synopsis"></a>

```
COMMIT [ WORK | TRANSACTION ]
```

## Parameter
<a name="r_COMMIT-parameters"></a>

PEKERJAAN  
Kata kunci opsional. Kata kunci ini tidak didukung dalam prosedur tersimpan. 

TRANSAKSI  
Kata kunci opsional. KERJA dan TRANSAKSI adalah sinonim. Tidak ada yang didukung dalam prosedur tersimpan. 

Untuk informasi tentang penggunaan COMMIT dalam prosedur tersimpan, lihat[Mengelola transaksi](stored-procedure-transaction-management.md). 

## Contoh
<a name="r_COMMIT-examples"></a>

Masing-masing contoh berikut melakukan transaksi saat ini ke database:

```
commit;
```

```
commit work;
```

```
commit transaction;
```

# MENYONTEK
<a name="r_COPY"></a>


|  | 
| --- |
| Enkripsi sisi klien untuk perintah COPY dan UNLOAD tidak akan lagi terbuka untuk pelanggan baru mulai 30 April 2025. Jika Anda menggunakan enkripsi sisi klien dengan perintah COPY dan UNLOAD dalam 12 bulan sebelum 30 April 2025, Anda dapat terus menggunakan enkripsi sisi klien dengan perintah COPY atau UNLOAD hingga 30 April 2026. Setelah 30 April 2026, Anda tidak akan dapat menggunakan enkripsi sisi klien untuk COPY dan UNLOAD. Kami menyarankan Anda beralih menggunakan enkripsi sisi server untuk COPY dan UNLOAD sesegera mungkin. Jika Anda sudah menggunakan enkripsi sisi server untuk COPY dan UNLOAD, tidak ada perubahan dan Anda dapat terus menggunakannya tanpa mengubah kueri Anda. Untuk informasi selengkapnya tentang enkripsi untuk COPY dan UNLOAD, lihat parameter ENCRYPTED di bawah ini. | 

Memuat data ke dalam tabel dari file data atau dari tabel Amazon DynamoDB. File dapat ditemukan di bucket Amazon Simple Storage Service (Amazon S3), cluster EMR Amazon, atau host jarak jauh yang diakses menggunakan koneksi Secure Shell (SSH).

**catatan**  
Tabel eksternal Amazon Redshift Spectrum hanya bisa dibaca. Anda tidak dapat MENYALIN ke tabel eksternal.

Perintah COPY menambahkan data input sebagai baris tambahan ke tabel.

Ukuran maksimum satu baris input dari sumber apa pun adalah 4 MB.

**Topics**
+ [Izin yang diperlukan](#r_COPY-permissions)
+ [COPY sintaks](#r_COPY-syntax)
+ [Parameter yang diperlukan](#r_COPY-syntax-required-parameters)
+ [Parameter opsional](#r_COPY-syntax-overview-optional-parameters)
+ [Catatan penggunaan dan sumber daya tambahan untuk perintah COPY](#r_COPY-using-the-copy-command)
+ [COPY contoh perintah](#r_COPY-using-the-copy-command-examples)
+ [SALIN PEKERJAAN](r_COPY-JOB.md)
+ [COPY dengan TEMPLATE](r_COPY-WITH-TEMPLATE.md)
+ [Referensi parameter COPY](r_COPY-parameters.md)
+ [Catatan penggunaan](r_COPY_usage_notes.md)
+ [Contoh COPY](r_COPY_command_examples.md)

## Izin yang diperlukan
<a name="r_COPY-permissions"></a>

Untuk menggunakan perintah COPY, Anda harus memiliki [INSERT](r_GRANT.md#grant-insert) hak istimewa untuk tabel Amazon Redshift.

## COPY sintaks
<a name="r_COPY-syntax"></a>

```
COPY table-name 
[ column-list ]
FROM data_source
authorization
[ [ FORMAT ] [ AS ] data_format ] 
[ parameter [ argument ] [, ... ] ]
```

Anda dapat melakukan operasi COPY dengan sedikitnya tiga parameter: nama tabel, sumber data, dan otorisasi untuk mengakses data. 

Amazon Redshift memperluas fungsionalitas perintah COPY untuk memungkinkan Anda memuat data dalam beberapa format data dari berbagai sumber data, mengontrol akses untuk memuat data, mengelola transformasi data, dan mengelola operasi pemuatan. 

Bagian berikut menyajikan parameter perintah COPY yang diperlukan, mengelompokkan parameter opsional berdasarkan fungsi. Mereka juga menjelaskan setiap parameter dan menjelaskan bagaimana berbagai opsi bekerja sama. Anda dapat langsung menuju deskripsi parameter dengan menggunakan daftar parameter alfabet. 

## Parameter yang diperlukan
<a name="r_COPY-syntax-required-parameters"></a>

Perintah COPY membutuhkan tiga elemen: 
+ [Table Name](#r_COPY-syntax-overview-table-name)
+ [Data Source](#r_COPY-syntax-overview-data-source)
+ [Authorization](#r_COPY-syntax-overview-credentials)

Perintah COPY paling sederhana menggunakan format berikut. 

```
COPY table-name 
FROM data-source
authorization;
```

Contoh berikut membuat tabel bernama CATDEMO, dan kemudian memuat tabel dengan data sampel dari file data di Amazon `category_pipe.txt` S3 bernama. 

```
create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));
```

Dalam contoh berikut, sumber data untuk perintah COPY adalah file data bernama `category_pipe.txt` dalam `tickit` folder bucket Amazon S3 bernama. `redshift-downloads` Perintah COPY diizinkan untuk mengakses bucket Amazon S3 melalui peran AWS Identity and Access Management (IAM). Jika klaster Anda memiliki peran IAM yang sudah ada dengan izin untuk mengakses Amazon S3 terlampir, Anda dapat mengganti Nama Sumber Daya Amazon (ARN) peran Anda dalam perintah COPY berikut dan menjalankannya.

```
copy catdemo
from 's3://redshift-downloads/tickit/category_pipe.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-east-1';
```

Untuk petunjuk lengkap tentang cara menggunakan perintah COPY untuk memuat data sampel, termasuk petunjuk untuk memuat data dari AWS wilayah lain, lihat Memuat [Data Sampel dari Amazon S3 di Panduan](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) Memulai Amazon Redshift.

*nama-meja*  <a name="r_COPY-syntax-overview-table-name"></a>
Nama tabel target untuk perintah COPY. Tabel harus sudah ada dalam basis data. Tabel bisa bersifat sementara atau persisten. Perintah COPY menambahkan data input baru ke setiap baris yang ada dalam tabel.

DARI *data-sumber*  <a name="r_COPY-syntax-overview-data-source"></a>
Lokasi data sumber yang akan dimuat ke dalam tabel target. File manifes dapat ditentukan dengan beberapa sumber data.   
Repositori data yang paling umum digunakan adalah bucket Amazon S3. Anda juga dapat memuat dari file data yang terletak di kluster EMR Amazon, instans Amazon EC2, atau host jarak jauh yang dapat diakses kluster menggunakan koneksi SSH, atau Anda dapat memuat langsung dari tabel DynamoDB.   
+ [SALIN dari Amazon S3](copy-parameters-data-source-s3.md)
+ [SALIN dari Amazon EMR](copy-parameters-data-source-emr.md) 
+ [COPY dari host jarak jauh (SSH)](copy-parameters-data-source-ssh.md)
+ [SALIN dari Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

Otorisasi  <a name="r_COPY-syntax-overview-credentials"></a>
Klausa yang menunjukkan metode yang digunakan klaster Anda untuk otentikasi dan otorisasi untuk mengakses sumber daya lain. AWS Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, Amazon DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan peran IAM yang dilampirkan ke klaster Anda atau dengan memberikan ID kunci akses dan kunci akses rahasia untuk pengguna IAM.   
+ [Parameter otorisasi](copy-parameters-authorization.md) 
+ [Kontrol akses berbasis peran](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based) 
+ [Kontrol akses berbasis kunci](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based) 

## Parameter opsional
<a name="r_COPY-syntax-overview-optional-parameters"></a>

Anda dapat secara opsional menentukan cara COPY memetakan data bidang ke kolom di tabel target, menentukan atribut data sumber untuk mengaktifkan perintah COPY membaca dan mengurai data sumber dengan benar, dan mengelola operasi mana yang dilakukan perintah COPY selama proses pemuatan. 
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ [Parameter format data](#r_COPY-syntax-overview-data-format)
+ [Parameter konversi data](#r_COPY-syntax-overview-data-conversion)
+ [Operasi pemuatan data](#r_COPY-syntax-overview-data-load)

### Pemetaan kolom
<a name="r_COPY-syntax-overview-column-mapping"></a>

Secara default, COPY menyisipkan nilai bidang ke kolom tabel target dalam urutan yang sama seperti bidang yang terjadi dalam file data. Jika urutan kolom default tidak akan berfungsi, Anda dapat menentukan daftar kolom atau menggunakan JSONPath ekspresi untuk memetakan bidang data sumber ke kolom target. 
+ [Column List](copy-parameters-column-mapping.md#copy-column-list)
+ [JSONPaths File](copy-parameters-column-mapping.md#copy-column-mapping-jsonpaths)

### Parameter format data
<a name="r_COPY-syntax-overview-data-format"></a>

Anda dapat memuat data dari file teks dalam lebar tetap, dibatasi karakter, nilai dipisahkan koma (CSV), atau format JSON, atau dari file Avro.

Secara default, perintah COPY mengharapkan data sumber berada dalam file teks UTF-8 yang dibatasi karakter. Pembatas default adalah karakter pipa (\$1). Jika data sumber dalam format lain, gunakan parameter berikut untuk menentukan format data.
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter) 
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth) 
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile) 
+ [AVRO](copy-parameters-data-format.md#copy-avro) 
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json) 
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [GZIP](copy-parameters-file-compression.md#copy-gzip) 
+ [LZOP](copy-parameters-file-compression.md#copy-lzop) 
+ [PARQUET](copy-parameters-data-format.md#copy-parquet) 
+ [ORC](copy-parameters-data-format.md#copy-orc) 
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd) 

### Parameter konversi data
<a name="r_COPY-syntax-overview-data-conversion"></a>

Saat memuat tabel, COPY mencoba untuk secara implisit mengonversi string dalam data sumber ke tipe data kolom target. Jika Anda perlu menentukan konversi yang berbeda dari perilaku default, atau jika konversi default menghasilkan kesalahan, Anda dapat mengelola konversi data dengan menentukan parameter berikut.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) 
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding) 
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape) 
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) 
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord) 
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines) 
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader) 
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as) 
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes) 
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 

### Operasi pemuatan data
<a name="r_COPY-syntax-overview-data-load"></a>

Kelola perilaku default operasi pemuatan untuk pemecahan masalah atau untuk mengurangi waktu muat dengan menentukan parameter berikut. 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows) 
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate) 
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors) 
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror) 
+ [NOLOAD](copy-parameters-data-load.md#copy-noload) 
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate) 

## Catatan penggunaan dan sumber daya tambahan untuk perintah COPY
<a name="r_COPY-using-the-copy-command"></a>

Untuk informasi selengkapnya tentang cara menggunakan perintah COPY, lihat topik berikut: 
+ [Catatan penggunaan](r_COPY_usage_notes.md)
+ [Tutorial: Memuat data dari Amazon S3](tutorial-loading-data.md)
+ [Praktik terbaik Amazon Redshift untuk memuat data](c_loading-data-best-practices.md)
+ [Memuat tabel dengan perintah COPY](t_Loading_tables_with_the_COPY_command.md)
  + [Memuat data dari Amazon S3](t_Loading-data-from-S3.md)
  + [Memuat data dari Amazon EMR](loading-data-from-emr.md)
  + [Memuat data dari host jarak jauh](loading-data-from-remote-hosts.md) 
  + [Memuat data dari tabel Amazon DynamoDB](t_Loading-data-from-dynamodb.md)
+ [Memecahkan masalah beban data](t_Troubleshooting_load_errors.md)

## COPY contoh perintah
<a name="r_COPY-using-the-copy-command-examples"></a>

Untuk contoh lainnya yang menunjukkan cara MENYALIN dari berbagai sumber, dalam format yang berbeda, dan dengan opsi COPY yang berbeda, lihat. [Contoh COPY](r_COPY_command_examples.md)

# SALIN PEKERJAAN
<a name="r_COPY-JOB"></a>

Untuk informasi tentang menggunakan perintah ini, lihat[Buat integrasi acara S3 untuk menyalin file secara otomatis dari bucket Amazon S3](loading-data-copy-job.md).

Mengelola perintah COPY yang memuat data ke dalam tabel. Perintah COPY JOB adalah perpanjangan dari perintah COPY dan mengotomatiskan pemuatan data dari bucket Amazon S3. Saat Anda membuat pekerjaan COPY, Amazon Redshift mendeteksi kapan file Amazon S3 baru dibuat di jalur yang ditentukan, lalu memuatnya secara otomatis tanpa campur tangan Anda. Parameter yang sama yang digunakan dalam perintah COPY asli digunakan saat memuat data. Amazon Redshift melacak file yang dimuat (berdasarkan nama file) untuk memverifikasi bahwa file tersebut dimuat hanya satu kali.

**catatan**  
Untuk informasi tentang perintah COPY, termasuk penggunaan, parameter, dan izin, lihat[MENYONTEK](r_COPY.md).

## Izin yang diperlukan
<a name="r_COPY-JOB-privileges"></a>

Untuk menggunakan perintah COPY JOB, Anda harus memiliki salah satu izin berikut selain semua izin yang diperlukan untuk menggunakan COPY:
+ Superuser
+  Semua hal berikut: 
  +  Izin cakupan CREATE, ALTER, atau DROP yang relevan untuk COPY JOBS dalam database yang ingin Anda SALIN. 
  +  Izin PENGGUNAAN untuk skema yang ingin Anda SALIN, atau izin cakupan PENGGUNAAN untuk skema dalam database yang ingin Anda SALIN. 
  +  Izin INSERT untuk tabel yang ingin Anda SALIN, atau INSERT izin cakupan untuk tabel dalam skema atau database yang ingin Anda SALIN. 

Peran IAM yang ditentukan dengan perintah COPY harus memiliki izin untuk mengakses data yang akan dimuat. Untuk informasi selengkapnya, lihat [Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions).

## Sintaks
<a name="r_COPY-JOB-syntax"></a>

Buat pekerjaan penyalinan. Parameter perintah COPY disimpan dengan pekerjaan salin.

Anda tidak dapat menjalankan COPY JOB CREATE dalam lingkup blok transaksi.

```
COPY copy-command JOB CREATE job-name
[AUTO ON | OFF]
```

Ubah konfigurasi pekerjaan penyalinan.

```
COPY JOB ALTER job-name
[AUTO ON | OFF]
```

Jalankan pekerjaan penyalinan. Parameter perintah COPY yang disimpan digunakan.

```
COPY JOB RUN job-name
```

Buat daftar semua pekerjaan salinan.

```
COPY JOB LIST
```

Tampilkan detail pekerjaan penyalinan.

```
COPY JOB SHOW job-name
```

Hapus pekerjaan penyalinan.

Anda tidak dapat menjalankan COPY JOB DROP dalam lingkup blok transaksi.

```
COPY JOB DROP job-name
```

## Parameter
<a name="r_COPY-JOB-parameters"></a>

*salin-perintah*  
Perintah COPY yang memuat data dari Amazon S3 ke Amazon Redshift. Klausa berisi parameter COPY yang menentukan bucket Amazon S3, tabel target, peran IAM, dan parameter lain yang digunakan saat memuat data. Semua parameter perintah COPY untuk pemuatan data Amazon S3 didukung kecuali:  
+ COPY JOB tidak menyerap file yang sudah ada sebelumnya di folder yang ditunjuk oleh perintah COPY. Hanya file yang dibuat setelah stempel waktu pembuatan COPY JOB yang dicerna.
+ Anda tidak dapat menentukan perintah COPY dengan opsi MAXERROR atau IGNOREALLERRORS.
+ Anda tidak dapat menentukan file manifes. COPY JOB memerlukan lokasi Amazon S3 yang ditunjuk untuk memantau file yang baru dibuat.
+ Anda tidak dapat menentukan perintah COPY dengan jenis otorisasi seperti kunci Akses dan Rahasia. Hanya perintah COPY yang menggunakan `IAM_ROLE` parameter untuk otorisasi yang didukung. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).
+ COPY JOB tidak mendukung peran IAM default yang terkait dengan cluster. Anda harus menentukan `IAM_ROLE` dalam perintah COPY. 
Untuk informasi selengkapnya, lihat [SALIN dari Amazon S3](copy-parameters-data-source-s3.md).

*nama-pekerjaan*  
Nama pekerjaan yang digunakan untuk mereferensikan pekerjaan COPY. *Nama pekerjaan* tidak dapat berisi tanda hubung (‐).

 [OTOMATIS HIDUP \$1 MATI]   
Klausul yang menunjukkan apakah data Amazon S3 dimuat secara otomatis ke dalam tabel Amazon Redshift.  
+ Saat`ON`, Amazon Redshift memantau jalur sumber Amazon S3 untuk file yang baru dibuat, dan jika ditemukan, perintah COPY dijalankan dengan parameter COPY dalam definisi pekerjaan. Ini adalah opsi default.
+ Saat`OFF`, Amazon Redshift tidak menjalankan COPY JOB secara otomatis.

## Catatan penggunaan
<a name="r_COPY-JOB-usage-notes"></a>

Opsi perintah COPY tidak divalidasi hingga waktu berjalan. Misalnya, sumber data Amazon S3 yang tidak valid `IAM_ROLE` atau menghasilkan kesalahan waktu proses saat COPY JOB dimulai.

Jika cluster dijeda, COPY JOBS tidak dijalankan.

Untuk menanyakan file perintah COPY yang dimuat dan memuat kesalahan, lihat[STL\$1LOAD\$1COMMIT](r_STL_LOAD_COMMITS.md),[STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md),[STL\$1LOADERROR\$1DETAIL](r_STL_LOADERROR_DETAIL.md). Untuk informasi selengkapnya, lihat [Memverifikasi bahwa data dimuat dengan benar](verifying-that-data-loaded-correctly.md).

COPY JOBS tidak didukung pada database Zero-ETL karena beroperasi dalam mode read-only.

## Contoh
<a name="r_COPY-JOB-examples"></a>

Contoh berikut menunjukkan pembuatan COPY JOB untuk memuat data dari bucket Amazon S3. 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' 
JOB CREATE my_copy_job_name
AUTO ON;
```

# COPY dengan TEMPLATE
<a name="r_COPY-WITH-TEMPLATE"></a>

Anda dapat menggunakan template Redshift dengan perintah COPY untuk menyederhanakan sintaks perintah dan memastikan konsistensi di seluruh operasi pemuatan data. Alih-alih menentukan parameter pemformatan yang sama berulang kali, Anda mendefinisikannya sekali dalam templat dan mereferensikan templat dalam perintah COPY Anda. Saat Anda menggunakan templat, perintah COPY menggabungkan parameter dari template dengan parameter apa pun yang ditentukan langsung dalam perintah. Jika parameter yang sama muncul di template dan perintah, parameter perintah diutamakan. Untuk informasi selengkapnya, lihat [BUAT TEMPLATE](r_CREATE_TEMPLATE.md). 

Template untuk perintah COPY dapat dibuat dengan:
+ [Parameter format data](copy-parameters-data-format.md)
+ [Parameter kompresi file](copy-parameters-file-compression.md)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)

Untuk daftar lengkap parameter yang didukung, lihat [MENYONTEK](r_COPY.md) perintah.

## Izin yang diperlukan
<a name="r_COPY-WITH-TEMPLATE-privileges"></a>

Untuk menggunakan template dalam perintah COPY, Anda harus memiliki:
+ Semua izin yang diperlukan untuk menjalankan perintah COPY (lihat[Izin yang diperlukan](r_COPY.md#r_COPY-permissions))
+ Salah satu izin template berikut:
  + Hak istimewa pengguna super
  + Hak istimewa PENGGUNAAN pada template dan hak istimewa PENGGUNAAN pada skema yang berisi template

## Sintaksis
<a name="r_COPY-WITH-TEMPLATE-syntax"></a>

```
COPY target_table FROM 's3://...'
authorization
[ option, ...]
USING TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameter
<a name="r_COPY-WITH-TEMPLATE-parameters"></a>

 *database\$1name*   
(Opsional) Nama database tempat template ada. Jika tidak ditentukan, database saat ini digunakan.

 *schema\$1name*   
(Opsional) Nama skema tempat template ada. Jika tidak ditentukan, template dicari di jalur pencarian saat ini.

 *template\$1name*   
Nama template yang akan digunakan dalam COPY. 

## Catatan penggunaan
<a name="r_COPY-WITH_TEMPLATE-usage-notes"></a>
+ Parameter khusus perintah (sumber, tujuan, otorisasi) masih harus ditentukan dalam perintah COPY.
+ Template tidak dapat berisi spesifikasi file manifes untuk perintah COPY.

## Contoh
<a name="r_COPY-WITH-TEMPLATE-examples"></a>

Contoh berikut menunjukkan cara membuat template dan menggunakannya dalam perintah COPY:

```
CREATE TEMPLATE public.test_template FOR COPY AS
CSV DELIMITER '|' IGNOREHEADER 1 MAXERROR 100;

COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
USING TEMPLATE public.test_template;
```

Ketika parameter ada di template dan perintah, parameter perintah diutamakan. Dalam contoh ini, jika template `public.test_template` berisi `DELIMITER '|'` tetapi perintah COPY menentukan`DELIMITER ','`, pembatas koma (`,`) dari perintah akan digunakan sebagai pengganti pembatas pipa () dari template. `|` 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
DELIMITER ','
USING TEMPLATE public.test_template;
```

# Referensi parameter COPY
<a name="r_COPY-parameters"></a>

COPY memiliki banyak parameter yang dapat digunakan dalam banyak situasi. Namun, tidak semua parameter didukung dalam setiap situasi. Misalnya, untuk memuat dari file ORC atau PARQUET ada sejumlah parameter yang didukung. Untuk informasi selengkapnya, lihat [COPY dari format data kolumnar](copy-usage_notes-copy-from-columnar.md).

**Topics**
+ [Sumber data](copy-parameters-data-source.md)
+ [Parameter otorisasi](copy-parameters-authorization.md)
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ [Parameter format data](copy-parameters-data-format.md)
+ [Parameter kompresi file](copy-parameters-file-compression.md)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)
+ [Daftar parameter abjad](r_COPY-alphabetical-parm-list.md)

# Sumber data
<a name="copy-parameters-data-source"></a>

Anda dapat memuat data dari file teks di bucket Amazon S3, di kluster EMR Amazon, atau pada host jarak jauh yang dapat diakses klaster Anda menggunakan koneksi SSH. Anda juga dapat memuat data langsung dari tabel DynamoDB. 

Ukuran maksimum satu baris input dari sumber apa pun adalah 4 MB. 

Untuk mengekspor data dari tabel ke satu set file di Amazon S3, gunakan perintah. [MEMBONGKAR](r_UNLOAD.md) 

**Topics**
+ [SALIN dari Amazon S3](copy-parameters-data-source-s3.md)
+ [SALIN dari Amazon EMR](copy-parameters-data-source-emr.md)
+ [COPY dari host jarak jauh (SSH)](copy-parameters-data-source-ssh.md)
+ [SALIN dari Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

# SALIN dari Amazon S3
<a name="copy-parameters-data-source-s3"></a>

Untuk memuat data dari file yang terletak di satu atau beberapa bucket S3, gunakan klausa FROM untuk menunjukkan cara COPY menemukan file di Amazon S3. Anda dapat memberikan jalur objek ke file data sebagai bagian dari klausa FROM, atau Anda dapat memberikan lokasi file manifes yang berisi daftar jalur objek Amazon S3. COPY dari Amazon S3 menggunakan koneksi HTTPS. Pastikan rentang IP S3 ditambahkan ke daftar izin Anda. Untuk mempelajari lebih lanjut tentang rentang IP S3 yang diperlukan, lihat [Isolasi jaringan](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

**penting**  
Jika bucket Amazon S3 yang menyimpan file data tidak berada di AWS Wilayah yang sama dengan cluster Anda, Anda harus menggunakan [REGION](#copy-region) parameter untuk menentukan Wilayah tempat data berada. 

**Topics**
+ [Sintaksis](#copy-parameters-data-source-s3-syntax)
+ [Contoh](#copy-parameters-data-source-s3-examples)
+ [Parameter opsional](#copy-parameters-data-source-s3-optional-parms)
+ [Parameter yang tidak didukung](#copy-parameters-data-source-s3-unsupported-parms)

## Sintaksis
<a name="copy-parameters-data-source-s3-syntax"></a>

```
FROM { 's3://objectpath' | 's3://manifest_file' }
authorization
| MANIFEST
| ENCRYPTED
| REGION [AS] 'aws-region'
| optional-parameters
```

## Contoh
<a name="copy-parameters-data-source-s3-examples"></a>

Contoh berikut menggunakan path objek untuk memuat data dari Amazon S3. 

```
copy customer
from 's3://amzn-s3-demo-bucket/customer' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Contoh berikut menggunakan file manifes untuk memuat data dari Amazon S3. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

### Parameter
<a name="copy-parameters-data-source-s3-parameters"></a>

FROM  <a name="copy-parameters-from"></a>
Sumber data yang akan dimuat. Untuk informasi selengkapnya tentang pengkodean file Amazon S3, lihat. [Parameter konversi data](copy-parameters-data-conversion.md)

*'s3://copy\$1from\$1s3\$1objectpath '*   <a name="copy-s3-objectpath"></a>
Menentukan jalur ke objek Amazon S3 yang berisi data—misalnya,. `'s3://amzn-s3-demo-bucket/custdata.txt'` Parameter *s3://copy\$1from\$1s3\$1objectpath* dapat mereferensikan satu file atau satu set objek atau folder yang memiliki key prefix yang sama. Misalnya, nama `custdata.txt` adalah key prefix yang mengacu pada sejumlah file fisik:`custdata.txt`,,, `custdata.txt.1` `custdata.txt.2``custdata.txt.bak`, dan sebagainya. Key prefix juga dapat mereferensikan sejumlah folder. Misalnya, `'s3://amzn-s3-demo-bucket/custfolder'` mengacu pada folder`custfolder`,`custfolder_1`,`custfolder_2`, dan sebagainya. Jika key prefix mereferensikan beberapa folder, semua file dalam folder dimuat. Jika key prefix cocok dengan file serta folder, seperti`custfolder.log`, COPY mencoba memuat file juga. Jika key prefix dapat mengakibatkan COPY mencoba memuat file yang tidak diinginkan, gunakan file manifes. Untuk informasi lebih lanjut, lihat[copy_from_s3_manifest_file](#copy-manifest-file), berikut.   
Jika bucket S3 yang menyimpan file data tidak berada di AWS Region yang sama dengan cluster Anda, Anda harus menggunakan [REGION](#copy-region) parameter tersebut untuk menentukan Wilayah tempat data berada.
Untuk informasi selengkapnya, lihat [Memuat data dari Amazon S3](t_Loading-data-from-S3.md).

*'s3://copy\$1from\$1s3\$1manifest\$1file '*   <a name="copy-manifest-file"></a>
Menentukan kunci objek Amazon S3 untuk file manifes yang mencantumkan file data yang akan dimuat. Argumen *'s3://*copy\$1from\$1s3\$1manifest\$1file' harus secara eksplisit mereferensikan** satu file—misalnya,. `'s3://amzn-s3-demo-bucket/manifest.txt'` Itu tidak dapat mereferensikan key prefix.  
Manifes adalah file teks dalam format JSON yang mencantumkan URL setiap file yang akan dimuat dari Amazon S3. URL menyertakan nama bucket dan path objek lengkap untuk file tersebut. File yang ditentukan dalam manifes dapat berada di bucket yang berbeda, tetapi semua bucket harus berada di AWS Wilayah yang sama dengan cluster Amazon Redshift. Jika file terdaftar dua kali, file dimuat dua kali. Contoh berikut menunjukkan JSON untuk manifes yang memuat tiga file.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1","mandatory":false}
  ]
}
```
Karakter tanda kutip ganda diperlukan, dan harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”. Setiap entri dalam manifes secara opsional dapat menyertakan `mandatory` bendera. Jika `mandatory` diatur ke`true`, COPY berakhir jika tidak menemukan file untuk entri itu; jika tidak, COPY akan berlanjut. Nilai default-nya `mandatory` is `false`.   
Saat memuat dari file data dalam format ORC atau Parket, `meta` bidang diperlukan, seperti yang ditunjukkan pada contoh berikut.  

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```
File manifes tidak boleh dienkripsi atau dikompresi, bahkan jika opsi ENCRYPTED, GZIP, LZOP,, atau ZSTD ditentukan. BZIP2 COPY mengembalikan kesalahan jika file manifes yang ditentukan tidak ditemukan atau file manifes tidak terbentuk dengan benar.   
Jika file manifes digunakan, parameter MANIFEST harus ditentukan dengan perintah COPY. Jika parameter MANIFEST tidak ditentukan, COPY mengasumsikan bahwa file yang ditentukan dengan FROM adalah file data.   
Untuk informasi selengkapnya, lihat [Memuat data dari Amazon S3](t_Loading-data-from-S3.md).

*otorisasi*  
Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, Amazon DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke klaster Anda (kontrol akses berbasis peran) atau dengan memberikan kredenal akses untuk pengguna (kontrol akses berbasis kunci). Untuk meningkatkan keamanan dan fleksibilitas, sebaiknya gunakan kontrol akses berbasis peran IAM. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).

NYATA  <a name="copy-manifest"></a>
Menentukan bahwa manifes digunakan untuk mengidentifikasi file data yang akan dimuat dari Amazon S3. Jika parameter MANIFEST digunakan, COPY memuat data dari file yang tercantum dalam manifes yang direferensikan oleh *'s3://copy\$1from\$1s3\$1manifest\$1file'*. Jika file manifes tidak ditemukan, atau tidak dibentuk dengan benar, COPY gagal. Untuk informasi selengkapnya, lihat [Menggunakan manifes untuk menentukan file data](loading-data-files-using-manifest.md).

DIENKRIPSI  <a name="copy-encrypted"></a>
Klausa yang menetapkan bahwa file input di Amazon S3 dienkripsi menggunakan enkripsi sisi klien dengan kunci yang dikelola pelanggan. Untuk informasi selengkapnya, lihat [Memuat file data terenkripsi dari Amazon S3](c_loading-encrypted-files.md). Jangan tentukan ENCRYPTED jika file input dienkripsi menggunakan enkripsi sisi server Amazon S3 (SSE-KMS atau SSE-S3). COPY membaca file terenkripsi sisi server secara otomatis.  
Jika Anda menentukan parameter ENCRYPTED, Anda juga harus menentukan [MASTER_SYMMETRIC_KEY](#copy-master-symmetric-key) parameter atau menyertakan **master\$1symmetric\$1key** nilai dalam string. [Menggunakan parameter CREDENTIALS](copy-parameters-authorization.md#copy-credentials)  
Jika file terenkripsi dalam format terkompresi, tambahkan parameter GZIP, LZOP, atau ZSTD. BZIP2  
File dan JSONPaths file manifes tidak boleh dienkripsi, bahkan jika opsi TERENKRIPSI ditentukan.

*MASTER\$1SYMMETRIC\$1KEY 'root\$1key'*  <a name="copy-master-symmetric-key"></a>
Kunci simetris root yang digunakan untuk mengenkripsi file data di Amazon S3. Jika MASTER\$1SYMMETRIC\$1KEY ditentukan, parameter juga harus ditentukan. [ENCRYPTED](#copy-encrypted) MASTER\$1SYMMETRIC\$1KEY tidak dapat digunakan dengan parameter CREDENTIALS. Untuk informasi selengkapnya, lihat [Memuat file data terenkripsi dari Amazon S3](c_loading-encrypted-files.md).  
Jika file terenkripsi dalam format terkompresi, tambahkan parameter GZIP, LZOP, atau ZSTD. BZIP2

WILAYAH [AS] '*aws-region*'  <a name="copy-region"></a>
Menentukan AWS Wilayah tempat data sumber berada. REGION diperlukan untuk COPY dari bucket Amazon S3 atau tabel DynamoDB jika AWS sumber daya yang berisi data tidak berada di Wilayah yang sama dengan cluster Amazon Redshift.   
Nilai untuk *aws\$1region harus cocok dengan Region* yang tercantum di wilayah [Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region) dan tabel titik akhir.  
Jika parameter REGION ditentukan, semua sumber daya, termasuk file manifes atau beberapa bucket Amazon S3, harus berada di Wilayah yang ditentukan.   
Mentransfer data di seluruh Wilayah menimbulkan biaya tambahan terhadap bucket Amazon S3 atau tabel DynamoDB yang berisi data. Untuk informasi selengkapnya tentang harga, lihat **Transfer Data KELUAR Dari Amazon S3 Ke AWS Wilayah Lain** di halaman Harga [Amazon S3](https://aws.amazon.com/s3/pricing/) **dan Transfer Data** KELUAR di halaman Harga Amazon [DynamoDB](https://aws.amazon.com/dynamodb/pricing/). 
Secara default, COPY mengasumsikan bahwa data terletak di Wilayah yang sama dengan cluster Amazon Redshift. 

## Parameter opsional
<a name="copy-parameters-data-source-s3-optional-parms"></a>

Anda dapat secara opsional menentukan parameter berikut dengan COPY dari Amazon S3: 
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ [Parameter format data](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)

## Parameter yang tidak didukung
<a name="copy-parameters-data-source-s3-unsupported-parms"></a>

Anda tidak dapat menggunakan parameter berikut dengan COPY dari Amazon S3: 
+ SSH
+ RASIO BACA

# SALIN dari Amazon EMR
<a name="copy-parameters-data-source-emr"></a>

Anda dapat menggunakan perintah COPY untuk memuat data secara paralel dari kluster EMR Amazon yang dikonfigurasi untuk menulis file teks ke Hadoop Distributed File System (HDFS) cluster dalam bentuk file dengan lebar tetap, file yang dibatasi karakter, file CSV, file berformat JSON, atau file Avro.

**Topics**
+ [Sintaksis](#copy-parameters-data-source-emr-syntax)
+ [Contoh](#copy-parameters-data-source-emr-example)
+ [Parameter](#copy-parameters-data-source-emr-parameters)
+ [Parameter yang didukung](#copy-parameters-data-source-emr-optional-parms)
+ [Parameter yang tidak didukung](#copy-parameters-data-source-emr-unsupported-parms)

## Sintaksis
<a name="copy-parameters-data-source-emr-syntax"></a>

```
FROM 'emr://emr_cluster_id/hdfs_filepath'  
authorization
[ optional_parameters ]
```

## Contoh
<a name="copy-parameters-data-source-emr-example"></a>

Contoh berikut memuat data dari cluster EMR Amazon. 

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Parameter
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
Sumber data yang akan dimuat. 

 *'emr://emr\$1cluster\$1id/ *hdfs\$1file\$1path* '*  <a name="copy-emr"></a>
Pengidentifikasi unik untuk cluster EMR Amazon dan jalur file HDFS yang mereferensikan file data untuk perintah COPY. Nama file data HDFS tidak boleh berisi tanda bintang karakter wildcard (\$1) dan tanda tanya (?).   
Cluster EMR Amazon harus terus berjalan hingga operasi COPY selesai. Jika salah satu file data HDFS diubah atau dihapus sebelum operasi COPY selesai, Anda mungkin memiliki hasil yang tidak terduga, atau operasi COPY mungkin gagal. 
Anda dapat menggunakan karakter wildcard asterisk (\$1) dan tanda tanya (?) sebagai bagian dari argumen *hdfs\$1file\$1path* untuk menentukan beberapa file yang akan dimuat. Misalnya, `'emr://j-SAMPLE2B500FC/myoutput/part*'` mengidentifikasi file`part-0000`,`part-0001`, dan sebagainya. Jika path file tidak berisi karakter wildcard, itu diperlakukan sebagai string literal. Jika Anda hanya menentukan nama folder, COPY mencoba memuat semua file di folder.   
Jika Anda menggunakan karakter wildcard atau hanya menggunakan nama folder, verifikasi bahwa tidak ada file yang tidak diinginkan yang akan dimuat. Misalnya, beberapa proses mungkin menulis file log ke folder output.
Untuk informasi selengkapnya, lihat [Memuat data dari Amazon EMR](loading-data-from-emr.md).

*otorisasi*  
Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, Amazon DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke klaster Anda (kontrol akses berbasis peran) atau dengan memberikan kredenal akses untuk pengguna (kontrol akses berbasis kunci). Untuk meningkatkan keamanan dan fleksibilitas, sebaiknya gunakan kontrol akses berbasis peran IAM. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).

## Parameter yang didukung
<a name="copy-parameters-data-source-emr-optional-parms"></a>

Anda dapat secara opsional menentukan parameter berikut dengan COPY dari Amazon EMR: 
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ [Parameter format data](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)

## Parameter yang tidak didukung
<a name="copy-parameters-data-source-emr-unsupported-parms"></a>

Anda tidak dapat menggunakan parameter berikut dengan COPY dari Amazon EMR: 
+ DIENKRIPSI
+ NYATA
+ DAERAH
+ RASIO BACA
+ SSH

# COPY dari host jarak jauh (SSH)
<a name="copy-parameters-data-source-ssh"></a>

Anda dapat menggunakan perintah COPY untuk memuat data secara paralel dari satu atau beberapa host jarak jauh, seperti instans Amazon Elastic Compute Cloud (Amazon EC2) atau komputer lain. COPY terhubung ke host jarak jauh menggunakan Secure Shell (SSH) dan menjalankan perintah pada host jarak jauh untuk menghasilkan output teks. Host jarak jauh dapat berupa instans Linux EC2 atau komputer Unix atau Linux lain yang dikonfigurasi untuk menerima koneksi SSH. Amazon Redshift dapat terhubung ke beberapa host, dan dapat membuka beberapa koneksi SSH ke setiap host. Amazon Redshift mengirimkan perintah unik melalui setiap koneksi untuk menghasilkan output teks ke output standar host, yang kemudian dibaca Amazon Redshift seperti halnya file teks.

Gunakan klausa FROM untuk menentukan kunci objek Amazon S3 untuk file manifes yang menyediakan informasi yang digunakan COPY untuk membuka koneksi SSH dan menjalankan perintah jarak jauh. 

**Topics**
+ [Sintaksis](#copy-parameters-data-source-ssh-syntax)
+ [Contoh](#copy-parameters-data-source-ssh-examples)
+ [Parameter](#copy-parameters-data-source-ssh-parameters)
+ [Parameter opsional](#copy-parameters-data-source-ssh-optional-parms)
+ [Parameter yang tidak didukung](#copy-parameters-data-source-ssh-unsupported-parms)

**penting**  
 Jika bucket S3 yang menyimpan file manifes tidak berada di AWS Region yang sama dengan cluster, Anda harus menggunakan parameter REGION untuk menentukan Region tempat bucket berada. 

## Sintaksis
<a name="copy-parameters-data-source-ssh-syntax"></a>

```
FROM 's3://'ssh_manifest_file' }
authorization
SSH
| optional-parameters
```

## Contoh
<a name="copy-parameters-data-source-ssh-examples"></a>

Contoh berikut menggunakan file manifes untuk memuat data dari host jarak jauh menggunakan SSH. 

```
copy sales
from 's3://amzn-s3-demo-bucket/ssh_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
ssh;
```

## Parameter
<a name="copy-parameters-data-source-ssh-parameters"></a>

FROM  
Sumber data yang akan dimuat. 

*'s3://copy\$1from\$1ssh\$1manifest\$1file '*  <a name="copy-ssh-manifest"></a>
Perintah COPY dapat terhubung ke beberapa host menggunakan SSH, dan dapat membuat beberapa koneksi SSH ke setiap host. COPY menjalankan perintah melalui setiap koneksi host, dan kemudian memuat output dari perintah secara paralel ke dalam tabel. Argumen *s3://copy\$1from\$1ssh\$1manifest\$1file* menentukan kunci objek Amazon S3 untuk file manifes yang menyediakan informasi yang digunakan COPY untuk membuka koneksi SSH dan menjalankan perintah jarak jauh.  
Argumen *s3://copy\$1from\$1ssh\$1manifest\$1file* harus secara eksplisit mereferensikan satu file; itu tidak bisa menjadi key prefix. Berikut ini menunjukkan contoh:  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
File manifes adalah file teks dalam format JSON yang digunakan Amazon Redshift untuk terhubung ke host. File manifes menentukan titik akhir host SSH dan perintah yang akan dijalankan pada host untuk mengembalikan data ke Amazon Redshift. Secara opsional, Anda dapat menyertakan kunci publik host, nama pengguna login, dan bendera wajib untuk setiap entri. Contoh berikut menunjukkan file manifes yang menciptakan dua koneksi SSH:   

```
{ 
    "entries": [ 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"}, 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"} 
     ] 
}
```
File manifes berisi satu `"entries"` konstruksi untuk setiap koneksi SSH. Anda dapat memiliki beberapa koneksi ke satu host atau beberapa koneksi ke beberapa host. Karakter tanda kutip ganda diperlukan seperti yang ditunjukkan, baik untuk nama bidang maupun nilainya. Karakter tanda kutip harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”. Satu-satunya nilai yang tidak memerlukan karakter tanda kutip ganda adalah nilai Boolean `true` atau `false` untuk bidang. `"mandatory"`   
Daftar berikut menjelaskan bidang dalam file manifes.     
titik akhir  <a name="copy-ssh-manifest-endpoint"></a>
Alamat URL atau alamat IP host—misalnya,`"ec2-111-222-333.compute-1.amazonaws.com"`, atau. `"198.51.100.0"`   
perintah  <a name="copy-ssh-manifest-command"></a>
Perintah yang akan dijalankan oleh host untuk menghasilkan output teks atau output biner dalam format gzip, lzop, bzip2, atau zstd. Perintah dapat berupa perintah apa pun yang pengguna *“host\$1user\$1name”* memiliki izin untuk dijalankan. Perintahnya bisa sesederhana mencetak file, atau bisa menanyakan database atau meluncurkan skrip. Output (file teks, file biner gzip, file biner lzop, atau file biner bzip2) harus dalam bentuk yang dapat dikonsumsi oleh perintah Amazon Redshift COPY. Untuk informasi selengkapnya, lihat [Mempersiapkan data masukan Anda](t_preparing-input-data.md).  
kunci publik  <a name="copy-ssh-manifest-publickey"></a>
(Opsional) Kunci publik tuan rumah. Jika tersedia, Amazon Redshift akan menggunakan kunci publik untuk mengidentifikasi host. Jika kunci publik tidak disediakan, Amazon Redshift tidak akan mencoba identifikasi host. Misalnya, jika kunci publik host jarak jauh adalah`ssh-rsa AbcCbaxxx…Example root@amazon.com`, ketik teks berikut di bidang kunci publik: `"AbcCbaxxx…Example"`  
wajib  <a name="copy-ssh-manifest-mandatory"></a>
(Opsional) Klausa yang menunjukkan apakah perintah COPY harus gagal jika upaya koneksi gagal. Nilai default-nya `false`. Jika Amazon Redshift tidak berhasil membuat setidaknya satu koneksi, perintah COPY gagal.  
nama pengguna  <a name="copy-ssh-manifest-username"></a>
(Opsional) Nama pengguna yang akan digunakan untuk masuk ke sistem host dan menjalankan perintah jarak jauh. Nama login pengguna harus sama dengan login yang digunakan untuk menambahkan kunci publik klaster Amazon Redshift ke file kunci resmi host. Nama pengguna default adalah`redshift`.
Untuk informasi selengkapnya tentang membuat file manifes, lihat[Memuat proses data](loading-data-from-remote-hosts.md#load-from-host-process).  
Untuk COPY dari host jarak jauh, parameter SSH harus ditentukan dengan perintah COPY. Jika parameter SSH tidak ditentukan, COPY mengasumsikan bahwa file yang ditentukan dengan FROM adalah file data dan akan gagal.   
Jika Anda menggunakan kompresi otomatis, perintah COPY melakukan dua operasi baca data, yang berarti akan menjalankan perintah jarak jauh dua kali. Operasi baca pertama adalah menyediakan sampel data untuk analisis kompresi, kemudian operasi baca kedua benar-benar memuat data. Jika menjalankan perintah jarak jauh dua kali dapat menyebabkan masalah, Anda harus menonaktifkan kompresi otomatis. Untuk menonaktifkan kompresi otomatis, jalankan perintah COPY dengan parameter COMPUPDATE diatur ke OFF. Untuk informasi selengkapnya, lihat [Memuat tabel dengan kompresi otomatis](c_Loading_tables_auto_compress.md).  
Untuk prosedur rinci untuk menggunakan COPY dari SSH, lihat[Memuat data dari host jarak jauh](loading-data-from-remote-hosts.md).

*otorisasi*  
Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, Amazon DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke klaster Anda (kontrol akses berbasis peran) atau dengan memberikan kredenal akses untuk pengguna (kontrol akses berbasis kunci). Untuk meningkatkan keamanan dan fleksibilitas, sebaiknya gunakan kontrol akses berbasis peran IAM. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).

SSH  <a name="copy-ssh"></a>
Klausa yang menentukan bahwa data akan dimuat dari host jarak jauh menggunakan protokol SSH. Jika Anda menentukan SSH, Anda juga harus menyediakan file manifes menggunakan [s3://copy_from_ssh_manifest_file](#copy-ssh-manifest) argumen.   
Jika Anda menggunakan SSH untuk menyalin dari host menggunakan alamat IP pribadi di VPC jarak jauh, VPC harus mengaktifkan perutean VPC yang ditingkatkan. Untuk informasi selengkapnya tentang perutean VPC yang Ditingkatkan, lihat Perutean VPC yang Ditingkatkan Amazon [Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html).

## Parameter opsional
<a name="copy-parameters-data-source-ssh-optional-parms"></a>

Anda dapat secara opsional menentukan parameter berikut dengan COPY dari SSH: 
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ [Parameter format data](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)

## Parameter yang tidak didukung
<a name="copy-parameters-data-source-ssh-unsupported-parms"></a>

Anda tidak dapat menggunakan parameter berikut dengan COPY dari SSH: 
+ DIENKRIPSI
+ NYATA
+ RASIO BACA

# SALIN dari Amazon DynamoDB
<a name="copy-parameters-data-source-dynamodb"></a>

Untuk memuat data dari tabel DynamoDB yang ada, gunakan klausa FROM untuk menentukan nama tabel DynamoDB.

**Topics**
+ [Sintaksis](#copy-parameters-data-source-dynamodb-syntax)
+ [Contoh](#copy-parameters-data-source-dynamodb-examples)
+ [Parameter opsional](#copy-parameters-data-source-dynamodb-optional-parms)
+ [Parameter yang tidak didukung](#copy-parameters-data-source-dynamodb-unsupported-parms)

**penting**  
Jika tabel DynamoDB tidak berada di wilayah yang sama dengan kluster Amazon Redshift, Anda harus menggunakan parameter REGION untuk menentukan wilayah tempat data berada. 

## Sintaksis
<a name="copy-parameters-data-source-dynamodb-syntax"></a>

```
FROM 'dynamodb://table-name' 
authorization
READRATIO ratio
| REGION [AS] 'aws_region'  
| optional-parameters
```

## Contoh
<a name="copy-parameters-data-source-dynamodb-examples"></a>

Contoh berikut memuat data dari tabel DynamoDB. 

```
copy favoritemovies from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
readratio 50;
```

### Parameter
<a name="copy-parameters-data-source-dynamodb-parameters"></a>

FROM  
Sumber data yang akan dimuat. 

*'dynamodb://nama-tabel '*  <a name="copy-dynamodb"></a>
Nama tabel DynamoDB yang berisi data, misalnya. `'dynamodb://ProductCatalog'` Untuk detail tentang cara atribut DynamoDB dipetakan ke kolom Amazon Redshift, lihat. [Memuat data dari tabel Amazon DynamoDB](t_Loading-data-from-dynamodb.md)  
Nama tabel DynamoDB unik untuk akun, AWS yang diidentifikasi oleh AWS kredenal akses.

*otorisasi*  
Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke klaster Anda (kontrol akses berbasis peran) atau dengan memberikan kredenal akses untuk pengguna (kontrol akses berbasis kunci). Untuk meningkatkan keamanan dan fleksibilitas, sebaiknya gunakan kontrol akses berbasis peran IAM. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).

*Rasio READRATIO [AS]*  <a name="copy-readratio"></a>
Persentase throughput disediakan tabel DynamoDB untuk digunakan untuk pemuatan data. READRATIO diperlukan untuk COPY dari DynamoDB. Itu tidak dapat digunakan dengan COPY dari Amazon S3. Kami sangat menyarankan untuk menyetel rasio ke nilai yang kurang dari rata-rata throughput yang tidak digunakan. Nilai yang valid adalah bilangan bulat 1-200.  
Menyetel READRATIO ke 100 atau lebih tinggi memungkinkan Amazon Redshift menggunakan keseluruhan throughput yang disediakan tabel DynamoDB, yang secara serius menurunkan kinerja operasi baca bersamaan terhadap tabel yang sama selama sesi COPY. Lalu lintas tulis tidak terpengaruh. Nilai yang lebih tinggi dari 100 diizinkan untuk memecahkan masalah skenario langka saat Amazon Redshift gagal memenuhi throughput tabel yang disediakan. Jika Anda memuat data dari DynamoDB ke Amazon Redshift secara berkelanjutan, pertimbangkan untuk mengatur tabel DynamoDB Anda sebagai rangkaian waktu untuk memisahkan lalu lintas langsung dari operasi COPY.

## Parameter opsional
<a name="copy-parameters-data-source-dynamodb-optional-parms"></a>

Anda dapat secara opsional menentukan parameter berikut dengan COPY dari Amazon DynamoDB: 
+ [Opsi pemetaan kolom](copy-parameters-column-mapping.md)
+ Parameter konversi data berikut didukung:
  + [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
  + [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
  + [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
  + [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
  + [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
  + [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
  + [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
  + [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 
+ [Operasi pemuatan data](copy-parameters-data-load.md)

## Parameter yang tidak didukung
<a name="copy-parameters-data-source-dynamodb-unsupported-parms"></a>

Anda tidak dapat menggunakan parameter berikut dengan COPY dari DynamoDB: 
+ Semua parameter format data
+ MELARIKAN DIRI
+ FILLRECORD
+ IGNOREBLANKLINES
+ IGNOREHEADER
+ NULL
+ HAPUSQUOTES
+ TERIMA INVCHARS
+ NYATA
+ DIENKRIPSI

# Parameter otorisasi
<a name="copy-parameters-authorization"></a>

Perintah COPY memerlukan otorisasi untuk mengakses data di AWS sumber daya lain, termasuk di Amazon S3, Amazon EMR, Amazon DynamoDB, dan Amazon EC2. Anda dapat memberikan otorisasi tersebut dengan mereferensikan [peran AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) yang dilampirkan ke klaster Anda (kontrol akses berbasis *peran*). Anda dapat mengenkripsi data pemuatan Anda di Amazon S3. 

Topik berikut memberikan rincian lebih lanjut dan contoh opsi otentikasi:
+ [Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)
+ [Kontrol akses berbasis peran](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)
+ [Kontrol akses berbasis kunci](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based)

Gunakan salah satu dari berikut ini untuk memberikan otorisasi untuk perintah COPY: 
+ [Menggunakan parameter IAM\$1ROLE](#copy-iam-role)parameter
+ Parameter [Menggunakan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY](#copy-access-key-id)
+ Klausa [Menggunakan parameter CREDENTIALS](#copy-credentials)

## Menggunakan parameter IAM\$1ROLE
<a name="copy-iam-role"></a>

### IAM\$1ROLE
<a name="copy-iam-role-iam"></a>

Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah COPY berjalan. 

Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Jika Anda menentukan IAM\$1ROLE, Anda tidak dapat menggunakan ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN, atau CREDENTIALS.

Berikut ini menunjukkan sintaks untuk parameter IAM\$1ROLE. 

```
IAM_ROLE { default | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' }
```

Untuk informasi selengkapnya, lihat [Kontrol akses berbasis peran](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

## Menggunakan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id"></a>

### ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id-access"></a>

Metode otorisasi ini tidak disarankan. 

**catatan**  
Alih-alih memberikan kredensi akses sebagai teks biasa, kami sangat menyarankan menggunakan otentikasi berbasis peran dengan menentukan parameter IAM\$1ROLE. Untuk informasi selengkapnya, lihat [Kontrol akses berbasis peran](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

### SESSION\$1TOKEN
<a name="copy-token"></a>

Token sesi untuk digunakan dengan kredensil akses sementara. Ketika SESSION\$1TOKEN ditentukan, Anda juga harus menggunakan ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY untuk memberikan kredensyal kunci akses sementara. Jika Anda menentukan SESSION\$1TOKEN, Anda tidak dapat menggunakan IAM\$1ROLE atau CREDENTIALS. Untuk informasi selengkapnya, lihat [Kredensial keamanan sementara](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials) di Panduan Pengguna IAM.

**catatan**  
Alih-alih membuat kredensil keamanan sementara, kami sangat menyarankan untuk menggunakan otentikasi berbasis peran. Saat Anda mengotorisasi penggunaan peran IAM, Amazon Redshift secara otomatis membuat kredensil pengguna sementara untuk setiap sesi. Untuk informasi selengkapnya, lihat [Kontrol akses berbasis peran](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

Berikut ini menunjukkan sintaks untuk parameter SESSION\$1TOKEN dengan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Jika Anda menentukan SESSION\$1TOKEN, Anda tidak dapat menggunakan CREDENTIALS atau IAM\$1ROLE. 

## Menggunakan parameter CREDENTIALS
<a name="copy-credentials"></a>

### KREDENSIAL
<a name="copy-credentials-cred"></a>

Klausa yang menunjukkan metode yang akan digunakan cluster Anda saat mengakses AWS sumber daya lain yang berisi file data atau file manifes. Anda tidak dapat menggunakan parameter CREDENTIALS dengan IAM\$1ROLE atau ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY.

Berikut ini menunjukkan sintaks untuk parameter CREDENTIALS.

```
[WITH] CREDENTIALS [AS] 'credentials-args'
```

**catatan**  
Untuk meningkatkan fleksibilitas, sebaiknya gunakan [IAM\$1ROLE](#copy-iam-role-iam) parameter alih-alih parameter CREDENTIALS.

Secara opsional, jika [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) parameter digunakan, string *credentials-args* juga menyediakan kunci enkripsi.

String *credentials-args* bersifat case-sensitive dan tidak boleh berisi spasi.

Kata kunci WITH dan AS bersifat opsional dan diabaikan.

Anda dapat menentukan [role-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based.phrase) atau [key-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based.phrase). Dalam kedua kasus, peran IAM atau pengguna harus memiliki izin yang diperlukan untuk mengakses sumber daya yang ditentukan AWS . Untuk informasi selengkapnya, lihat [Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions). 

**catatan**  
Untuk melindungi AWS kredensyal Anda dan melindungi data sensitif, kami sangat menyarankan untuk menggunakan kontrol akses berbasis peran. 

Untuk menentukan kontrol akses berbasis peran, berikan string *credentials-args* dalam format berikut.

```
'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
```

Untuk menggunakan kredensil token sementara, Anda harus memberikan ID kunci akses sementara, kunci akses rahasia sementara, dan token sementara. String *credentials-args* dalam format berikut. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>'
```

Perintah COPY menggunakan kontrol akses berbasis peran dengan kredensi sementara akan menyerupai pernyataan contoh berikut: 

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key-id>;token=<temporary-token>'
```

 Untuk informasi selengkapnya, lihat [Kredensial keamanan sementara](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

Jika [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) parameter digunakan, string *credentials-args* dalam format berikut, di mana *<root-key>* nilai kunci root yang digunakan untuk mengenkripsi file.

```
CREDENTIALS
'<credentials-args>;master_symmetric_key=<root-key>'
```

Perintah COPY menggunakan kontrol akses berbasis peran dengan kunci enkripsi akan menyerupai pernyataan contoh berikut:

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS 
'aws_iam_role=arn:aws:iam::<account-id>:role/<role-name>;master_symmetric_key=<root-key>'
```

# Opsi pemetaan kolom
<a name="copy-parameters-column-mapping"></a>

Secara default, COPY menyisipkan nilai ke kolom tabel target dalam urutan yang sama seperti bidang yang terjadi dalam file data. Jika urutan kolom default tidak akan berfungsi, Anda dapat menentukan daftar kolom atau menggunakan JSONPath ekspresi untuk memetakan bidang data sumber ke kolom target. 
+ [Column List](#copy-column-list)
+ [JSONPaths File](#copy-column-mapping-jsonpaths)

## Daftar kolom
<a name="copy-column-list"></a>

Anda dapat menentukan daftar nama kolom yang dipisahkan koma untuk memuat bidang data sumber ke kolom target tertentu. Kolom dapat dalam urutan apa pun dalam pernyataan COPY, tetapi saat memuat dari file datar, seperti di bucket Amazon S3, urutannya harus sesuai dengan urutan data sumber. 

Saat memuat dari tabel Amazon DynamoDB, pesanan tidak masalah. Perintah COPY cocok dengan nama atribut dalam item yang diambil dari tabel DynamoDB ke nama kolom di tabel Amazon Redshift. Untuk informasi selengkapnya, lihat [Memuat data dari tabel Amazon DynamoDB](t_Loading-data-from-dynamodb.md)

 Format untuk daftar kolom adalah sebagai berikut.

```
COPY tablename (column1 [,column2, ...]) 
```

Jika kolom dalam tabel target dihilangkan dari daftar kolom, maka COPY memuat ekspresi kolom target[DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default).

Jika kolom target tidak memiliki default, COPY mencoba memuat NULL.

Jika COPY mencoba untuk menetapkan NULL ke kolom yang didefinisikan sebagai NOT NULL, perintah COPY gagal. 

Jika [IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause) kolom disertakan dalam daftar kolom, maka [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) harus juga ditentukan; jika kolom IDENTITY dihilangkan, maka EXPLICIT\$1IDS tidak dapat ditentukan. Jika tidak ada daftar kolom yang ditentukan, perintah berperilaku seolah-olah daftar kolom lengkap dalam urutan ditentukan, dengan kolom IDENTITY dihilangkan jika EXPLICIT\$1IDS juga tidak ditentukan.

Jika kolom didefinisikan dengan GENERATED BY DEFAULT AS IDENTITY, maka itu dapat disalin. Nilai dihasilkan atau diperbarui dengan nilai yang Anda berikan. Opsi EXPLICIT\$1IDS tidak diperlukan. COPY tidak memperbarui tanda air identitas tinggi. Untuk informasi selengkapnya, lihat [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

## JSONPaths berkas
<a name="copy-column-mapping-jsonpaths"></a>

Saat memuat dari file data dalam format JSON atau Avro, COPY secara otomatis memetakan elemen data dalam data sumber JSON atau Avro ke kolom di tabel target. Ia melakukannya dengan mencocokkan nama bidang dalam skema Avro dengan nama kolom di tabel target atau daftar kolom.

Dalam beberapa kasus, nama kolom dan nama bidang Anda tidak cocok, atau Anda perlu memetakan ke tingkat yang lebih dalam dalam hierarki data. Dalam kasus ini, Anda dapat menggunakan JSONPaths file untuk secara eksplisit memetakan elemen data JSON atau Avro ke kolom. 

Untuk informasi selengkapnya, lihat [JSONPaths berkas](copy-parameters-data-format.md#copy-json-jsonpaths). 

# Parameter format data
<a name="copy-parameters-data-format"></a>

Secara default, perintah COPY mengharapkan data sumber menjadi teks UTF-8 yang dibatasi karakter. Pembatas default adalah karakter pipa (\$1). Jika data sumber dalam format lain, gunakan parameter berikut untuk menentukan format data: 
+ [FORMAT](#copy-format)
+ [CSV](#copy-csv)
+ [DELIMITER](#copy-delimiter) 
+ [FIXEDWIDTH](#copy-fixedwidth) 
+ [SHAPEFILE](#copy-shapefile) 
+ [AVRO](#copy-avro) 
+ [JSON format for COPY](#copy-json) 
+ [PARQUET](#copy-parquet) 
+ [ORC](#copy-orc) 

Selain format data standar, COPY mendukung format data kolumnar berikut untuk COPY dari Amazon S3: 
+ [ORC](#copy-orc) 
+ [PARQUET](#copy-parquet) 

COPY dari format kolumnar didukung dengan batasan tertentu. Untuk informasi selengkapnya, lihat [COPY dari format data kolumnar](copy-usage_notes-copy-from-columnar.md). <a name="copy-data-format-parameters"></a>Parameter format data

FORMAT [SEBAGAI]  <a name="copy-format"></a>
(Opsional) Mengidentifikasi kata kunci format data. Argumen FORMAT dijelaskan sebagai berikut.

CSV [KUTIPAN [AS] *'quote\$1character'*]  <a name="copy-csv"></a>
Memungkinkan penggunaan format CSV dalam data input. Untuk secara otomatis menghindari pembatas, karakter baris baru, dan pengembalian carriage, lampirkan bidang dalam karakter yang ditentukan oleh parameter QUOTE. Karakter tanda kutip default adalah tanda kutip ganda ("). Ketika karakter tanda kutip digunakan dalam bidang, keluar dari karakter dengan karakter tanda kutip tambahan. Misalnya, jika karakter tanda kutip adalah tanda kutip ganda, untuk memasukkan string `A "quoted" word` file input harus menyertakan string. `"A ""quoted"" word"` Ketika parameter CSV digunakan, pembatas default adalah koma (,). Anda dapat menentukan pembatas yang berbeda dengan menggunakan parameter DELIMITER.   
Ketika bidang diapit tanda kutip, spasi putih antara pembatas dan karakter tanda kutip diabaikan. Jika pembatas adalah karakter spasi putih, seperti tab, pembatas tidak diperlakukan sebagai spasi putih.  
CSV tidak dapat digunakan dengan FIXEDWIDTH, REMOVEQUOTES, atau ESCAPE.     
KUTIPAN [AS] *'quote\$1character'*  <a name="copy-csv-quote"></a>
Tidak wajib. Menentukan karakter yang akan digunakan sebagai karakter tanda kutip saat menggunakan parameter CSV. Defaultnya adalah tanda kutip ganda ("). Jika Anda menggunakan parameter QUOTE untuk menentukan karakter tanda kutip selain tanda kutip ganda, Anda tidak perlu melepaskan tanda kutip ganda di dalam bidang. Parameter QUOTE hanya dapat digunakan dengan parameter CSV. Kata kunci AS adalah opsional.

PEMBATAS [AS] ['*delimiter\$1char*']   <a name="copy-delimiter"></a>
Menentukan karakter yang digunakan untuk memisahkan bidang dalam file input, seperti karakter pipa (`|`), koma (`,`), tab (`\t`), atau beberapa karakter seperti. `|~|` Karakter yang tidak dapat dicetak didukung. Karakter juga dapat direpresentasikan dalam oktal sebagai unit kode UTF-8 mereka. Untuk oktal, gunakan format '\$1 ddd', di mana' d 'adalah digit oktal (0-7). Pembatas default adalah karakter pipa (`|`), kecuali parameter CSV digunakan, dalam hal ini pembatas default adalah koma (). `,` Kata kunci AS adalah opsional. DELIMITER tidak dapat digunakan dengan FIXEDWIDTH.

*FIXEDWIDTH 'fixedwidth\$1spec'*   <a name="copy-fixedwidth"></a>
Memuat data dari file di mana setiap lebar kolom adalah panjang tetap, bukan kolom yang dipisahkan oleh pembatas. *Fixedwidth\$1spec* adalah string yang menentukan label kolom yang ditentukan pengguna dan lebar kolom. Label kolom dapat berupa string teks atau bilangan bulat, tergantung pada apa yang dipilih pengguna. Label kolom tidak memiliki hubungan dengan nama kolom. Urutan label/width pasangan harus sesuai dengan urutan kolom tabel dengan tepat. FIXEDWIDTH tidak dapat digunakan dengan CSV atau DELIMITER. Di Amazon Redshift, panjang kolom CHAR dan VARCHAR dinyatakan dalam byte, jadi pastikan bahwa lebar kolom yang Anda tentukan mengakomodasi panjang biner karakter multibyte saat menyiapkan file yang akan dimuat. Untuk informasi selengkapnya, lihat [Jenis karakter](r_Character_types.md).   
Format untuk *fixedwidth\$1spec* ditampilkan sebagai berikut:   

```
'colLabel1:colWidth1,colLabel:colWidth2, ...'
```

SHAPEFILE [MENYEDERHANAKAN [AUTO] [*'toleransi'*]]  <a name="copy-shapefile"></a>
Mengaktifkan penggunaan format SHAPEFILE dalam data input. Secara default, kolom pertama dari shapefile adalah kolom `GEOMETRY` atau`IDENTITY`. Semua kolom berikutnya mengikuti urutan yang ditentukan dalam shapefile.  
Anda tidak dapat menggunakan SHAPEFILE dengan FIXEDWIDTH, REMOVEQUOTES, atau ESCAPE.   
Untuk menggunakan `GEOGRAPHY` objek dengan`COPY FROM SHAPEFILE`, pertama menelan ke dalam `GEOMETRY` kolom, dan kemudian melemparkan objek ke `GEOGRAPHY` objek.    
MENYEDERHANAKAN [*toleransi*]  <a name="copy-shapefile-simplify"></a>
(Opsional) Menyederhanakan semua geometri selama proses konsumsi menggunakan Ramer-Douglas-Peucker algoritma dan toleransi yang diberikan.   
MENYEDERHANAKAN AUTO [*toleransi*]  <a name="copy-shapefile-simplify"></a>
(Opsional) Menyederhanakan hanya geometri yang lebih besar dari ukuran geometri maksimum. Penyederhanaan ini menggunakan Ramer-Douglas-Peucker algoritma dan toleransi yang dihitung secara otomatis jika ini tidak melebihi toleransi yang ditentukan. Algoritma ini menghitung ukuran untuk menyimpan objek dalam toleransi yang ditentukan. Nilai *toleransi* adalah opsional.
Untuk contoh memuat shapefile, lihat. [Memuat shapefile ke Amazon Redshift](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile)

AVRO [AS] '*avro\$1option*'  <a name="copy-avro"></a>
Menentukan bahwa data sumber dalam format Avro.   
Format Avro didukung untuk COPY dari layanan dan protokol ini:  
+ Amazon S3 
+ Amazon EMR 
+ Host jarak jauh (SSH) 
Avro tidak didukung untuk COPY dari DynamoDB.   
Avro adalah protokol serialisasi data. File sumber Avro menyertakan skema yang mendefinisikan struktur data. Jenis skema Avro harus. `record` COPY menerima file Avro yang dibuat menggunakan codec default yang tidak terkompresi serta codec kompresi dan. `deflate` `snappy` Untuk informasi lebih lanjut tentang Avro, buka [Apache](https://avro.apache.org/) Avro.   
Nilai yang valid untuk *avro\$1option* adalah sebagai berikut:  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
Nilai default-nya `'auto'`.  
COPY secara otomatis memetakan elemen data dalam data sumber Avro ke kolom di tabel target. Ia melakukannya dengan mencocokkan nama bidang dalam skema Avro dengan nama kolom di tabel target. Pencocokan peka huruf besar/kecil untuk `'auto'` dan tidak peka huruf besar/kecil untuk. `'auto ignorecase'`   
Nama kolom di tabel Amazon Redshift selalu huruf kecil, jadi saat Anda menggunakan `'auto'` opsi, nama bidang yang cocok juga harus huruf kecil. Jika nama bidang tidak semuanya huruf kecil, Anda dapat menggunakan opsi. `'auto ignorecase'` Dengan `'auto'` argumen default, COPY hanya mengenali bidang tingkat pertama, atau *bidang luar*, dalam struktur.   
Untuk secara eksplisit memetakan nama kolom ke nama bidang Avro, Anda dapat menggunakan. [JSONPaths berkas](#copy-json-jsonpaths)   
Secara default, COPY mencoba untuk mencocokkan semua kolom dalam tabel target dengan nama bidang Avro. Untuk memuat subset kolom, Anda dapat menentukan daftar kolom secara opsional. Jika kolom dalam tabel target dihilangkan dari daftar kolom, COPY memuat ekspresi kolom target[DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default). Jika kolom target tidak memiliki default, COPY mencoba memuat NULL. Jika kolom disertakan dalam daftar kolom dan COPY tidak menemukan bidang yang cocok dalam data Avro, COPY mencoba memuat NULL ke kolom.   
Jika COPY mencoba untuk menetapkan NULL ke kolom yang didefinisikan sebagai NOT NULL, perintah COPY gagal.   
<a name="copy-avro-schema"></a>**Avro Skema**  
File data sumber Avro mencakup skema yang mendefinisikan struktur data. COPY membaca skema yang merupakan bagian dari file data sumber Avro untuk memetakan elemen data ke kolom tabel target. Contoh berikut menunjukkan skema Avro.   

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"}]
}
```
Skema Avro didefinisikan menggunakan format JSON. Objek JSON tingkat atas berisi tiga pasangan nama-nilai dengan nama, atau *kunci*,,, dan. `"name"` `"type"` `"fields"`   
Pasangan `"fields"` kunci dengan array objek yang menentukan nama dan tipe data dari setiap bidang dalam struktur data. Secara default, COPY secara otomatis mencocokkan nama bidang dengan nama kolom. Nama kolom selalu huruf kecil, jadi nama bidang yang cocok juga harus huruf kecil, kecuali jika Anda menentukan opsi. `‘auto ignorecase’` Nama bidang apa pun yang tidak cocok dengan nama kolom akan diabaikan. Pesanan tidak masalah. Pada contoh sebelumnya, COPY memetakan ke nama kolom`id`,`guid`,`name`, dan`address`.   
Dengan `'auto'` argumen default, COPY hanya mencocokkan objek tingkat pertama dengan kolom. Untuk memetakan ke tingkat yang lebih dalam dalam skema, atau jika nama bidang dan nama kolom tidak cocok, gunakan JSONPaths file untuk menentukan pemetaan. Untuk informasi selengkapnya, lihat [JSONPaths berkas](#copy-json-jsonpaths).   
Jika nilai yang terkait dengan kunci adalah tipe data Avro yang kompleks seperti byte, array, record, map, atau link, COPY memuat nilai sebagai string. Di sini, string adalah representasi JSON dari data. COPY memuat tipe data Avro enum sebagai string, di mana konten adalah nama tipe. Sebagai contoh, lihat [COPY dari format JSON](copy-usage_notes-copy-from-json.md).  
Ukuran maksimum header file Avro, yang mencakup skema dan metadata file, adalah 1 MB.     
Ukuran maksimum satu blok data Avro adalah 4 MB. Ini berbeda dari ukuran baris maksimum. Jika ukuran maksimum satu blok data Avro terlampaui, bahkan jika ukuran baris yang dihasilkan kurang dari batas ukuran baris 4 MB, perintah COPY gagal.   
Dalam menghitung ukuran baris, Amazon Redshift secara internal menghitung karakter pipa (\$1) dua kali. Jika data input Anda berisi sejumlah besar karakter pipa, dimungkinkan untuk ukuran baris melebihi 4 MB bahkan jika blok data kurang dari 4 MB.

JSON [AS] '*json\$1option*'  <a name="copy-json"></a>
Sumber data dalam format JSON.   
Format JSON didukung untuk COPY dari layanan dan protokol ini:  
+ Amazon S3
+ SALIN dari Amazon EMR
+ COPY dari SSH
JSON tidak didukung untuk COPY dari DynamoDB.   
Nilai yang valid untuk *json\$1option* adalah sebagai berikut:  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
Nilai default-nya `'auto'`. Amazon Redshift tidak merusak atribut struktur JSON menjadi beberapa kolom saat memuat dokumen JSON.  
Secara default, COPY mencoba untuk mencocokkan semua kolom dalam tabel target dengan kunci nama bidang JSON. Untuk memuat subset kolom, Anda dapat menentukan daftar kolom secara opsional. Jika kunci nama bidang JSON tidak semuanya huruf kecil, Anda dapat menggunakan `'auto ignorecase'` opsi atau untuk secara eksplisit [JSONPaths berkas](#copy-json-jsonpaths) memetakan nama kolom ke kunci nama bidang JSON.  
Jika kolom dalam tabel target dihilangkan dari daftar kolom, maka COPY memuat ekspresi kolom target[DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default). Jika kolom target tidak memiliki default, COPY mencoba memuat NULL. Jika kolom disertakan dalam daftar kolom dan COPY tidak menemukan bidang yang cocok dalam data JSON, COPY mencoba memuat NULL ke kolom.   
Jika COPY mencoba untuk menetapkan NULL ke kolom yang didefinisikan sebagai NOT NULL, perintah COPY gagal.   
COPY memetakan elemen data dalam data sumber JSON ke kolom di tabel target. Ia melakukannya dengan mencocokkan *kunci objek*, atau nama, dalam pasangan nama-nilai sumber dengan nama kolom dalam tabel target.   
Lihat detail berikut tentang setiap nilai *json\$1option*:    
'otomatis'  <a name="copy-json-auto"></a>
Dengan opsi ini, pencocokan peka huruf besar/kecil. Nama kolom di tabel Amazon Redshift selalu huruf kecil, jadi saat Anda menggunakan `'auto'` opsi, nama bidang JSON yang cocok juga harus huruf kecil.  
'abaikan otomatis'  <a name="copy-json-auto-ignorecase"></a>
Dengan opsi ini, pencocokan tidak peka huruf besar/kecil. Nama kolom di tabel Amazon Redshift selalu huruf kecil, jadi saat Anda menggunakan `'auto ignorecase'` opsi, nama bidang JSON yang sesuai dapat berupa huruf kecil, huruf besar, atau huruf campuran.   
*'s3://jsonpaths\$1file '*  <a name="copy-json-pathfile"></a>
Dengan opsi ini, COPY menggunakan JSONPaths file bernama untuk memetakan elemen data dalam data sumber JSON ke kolom di tabel target. *`s3://jsonpaths_file`*Argumen harus berupa kunci objek Amazon S3 yang secara eksplisit mereferensikan satu file. Contohnya adalah `'s3://amzn-s3-demo-bucket/jsonpaths.txt` '. Argumen tidak bisa menjadi key prefix. Untuk informasi selengkapnya tentang menggunakan JSONPaths file, lihat[JSONPaths berkas](#copy-json-jsonpaths).  
Dalam beberapa kasus, file yang ditentukan oleh `jsonpaths_file` memiliki awalan yang sama dengan jalur yang ditentukan oleh `copy_from_s3_objectpath` untuk file data. Jika demikian, COPY membaca JSONPaths file sebagai file data dan mengembalikan kesalahan. Misalnya, misalkan file data Anda menggunakan path objek `s3://amzn-s3-demo-bucket/my_data.json` dan JSONPaths file Anda`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. Dalam hal ini, COPY mencoba memuat `my_data.jsonpaths` sebagai file data.  
'hidung'  <a name="copy-json-noshred"></a>
Dengan opsi ini, Amazon Redshift tidak merusak atribut struktur JSON menjadi beberapa kolom saat memuat dokumen JSON.

## Berkas data JSON
<a name="copy-json-data-file"></a>

File data JSON berisi satu set objek atau array. COPY memuat setiap objek JSON atau array ke dalam satu baris dalam tabel target. Setiap objek atau array yang sesuai dengan baris harus merupakan struktur tingkat akar yang berdiri sendiri; artinya, ia tidak boleh menjadi anggota struktur JSON lain.

*Objek* JSON dimulai dan diakhiri dengan tanda kurung kurung (\$1\$1) dan berisi kumpulan pasangan nama-nilai yang tidak berurutan. Setiap nama dan nilai yang dipasangkan dipisahkan oleh titik dua, dan pasangan dipisahkan dengan koma. Secara default, *kunci objek*, atau nama, dalam pasangan nama-nilai harus cocok dengan nama kolom yang sesuai dalam tabel. Nama kolom di tabel Amazon Redshift selalu huruf kecil, jadi kunci nama bidang JSON yang cocok juga harus huruf kecil. Jika nama kolom dan kunci JSON Anda tidak cocok, gunakan a [JSONPaths berkas](#copy-json-jsonpaths) untuk secara eksplisit memetakan kolom ke kunci. 

Urutan dalam objek JSON tidak masalah. Nama apa pun yang tidak cocok dengan nama kolom diabaikan. Berikut ini menunjukkan struktur objek JSON sederhana.

```
{
  "column1": "value1",
  "column2": value2,
  "notacolumn" : "ignore this value"
}
```

*Array* JSON dimulai dan diakhiri dengan tanda kurung ([]), dan berisi kumpulan nilai yang diurutkan dipisahkan oleh koma. Jika file data Anda menggunakan array, Anda harus menentukan JSONPaths file untuk mencocokkan nilai ke kolom. Berikut ini menunjukkan struktur array JSON sederhana. 

```
["value1", value2]
```

JSON harus dibentuk dengan baik. Misalnya, objek atau array tidak dapat dipisahkan dengan koma atau karakter lain kecuali spasi putih. String harus dilampirkan dalam karakter tanda kutip ganda. Karakter kutipan harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”.

Ukuran maksimum objek atau array JSON tunggal, termasuk kawat gigi atau tanda kurung, adalah 4 MB. Ini berbeda dari ukuran baris maksimum. Jika ukuran maksimum objek atau array JSON tunggal terlampaui, bahkan jika ukuran baris yang dihasilkan kurang dari batas ukuran baris 4 MB, perintah COPY gagal. 

Dalam menghitung ukuran baris, Amazon Redshift secara internal menghitung karakter pipa (\$1) dua kali. Jika data input Anda berisi sejumlah besar karakter pipa, dimungkinkan untuk ukuran baris melebihi 4 MB bahkan jika ukuran objek kurang dari 4 MB.

COPY dimuat `\n` sebagai karakter baris baru dan dimuat `\t` sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan garis miring terbalik (). `\\`

COPY mencari sumber JSON yang ditentukan untuk objek atau array JSON yang terbentuk dengan baik dan valid. Jika COPY menemukan karakter non-spasi putih sebelum menemukan struktur JSON yang dapat digunakan, atau di antara objek atau array JSON yang valid, COPY mengembalikan kesalahan untuk setiap instance. Kesalahan ini dihitung dalam jumlah kesalahan MAXERROR. Ketika jumlah kesalahan sama atau melebihi MAXERROR, COPY gagal. 

Untuk setiap kesalahan, Amazon Redshift merekam baris dalam tabel sistem STL\$1LOAD\$1ERRORS. Kolom LINE\$1NUMBER mencatat baris terakhir dari objek JSON yang menyebabkan kesalahan. 

Jika IGNOREHEADER ditentukan, COPY mengabaikan jumlah baris yang ditentukan dalam data JSON. Karakter baris baru dalam data JSON selalu dihitung untuk perhitungan IGNOREHEADER. 

COPY memuat string kosong sebagai bidang kosong secara default. Jika EMTTYASNULL ditentukan, COPY memuat string kosong untuk bidang CHAR dan VARCHAR sebagai NULL. String kosong untuk tipe data lain, seperti INT, selalu dimuat dengan NULL. 

Opsi berikut tidak didukung dengan JSON: 
+ CSV
+ PEMBATAS 
+ MELARIKAN DIRI
+ FILLRECORD 
+ FIXEDWIDTH
+ IGNOREBLANKLINES
+ NULL SEBAGAI
+ RASIO BACA
+ HAPUSQUOTES 

Untuk informasi selengkapnya, lihat [COPY dari format JSON](copy-usage_notes-copy-from-json.md). Untuk informasi lebih lanjut tentang struktur data JSON, kunjungi [www.json.org](https://www.json.org/). 

## JSONPaths berkas
<a name="copy-json-jsonpaths"></a>

Jika Anda memuat dari data sumber berformat JSON atau Avro, secara default COPY memetakan elemen data tingkat pertama dalam data sumber ke kolom di tabel target. Ia melakukannya dengan mencocokkan setiap nama, atau kunci objek, dalam pasangan nama-nilai dengan nama kolom dalam tabel target. 

Jika nama kolom dan kunci objek Anda tidak cocok, atau untuk memetakan ke tingkat yang lebih dalam dalam hierarki data, Anda dapat menggunakan JSONPaths file untuk secara eksplisit memetakan elemen data JSON atau Avro ke kolom. JSONPaths File memetakan elemen data JSON ke kolom dengan mencocokkan urutan kolom dalam tabel target atau daftar kolom.

 JSONPaths File harus berisi hanya satu objek JSON (bukan array). Objek JSON adalah pasangan nama-nilai. *Kunci objek*, yang merupakan nama dalam pasangan nama-nilai, harus. `"jsonpaths"` *Nilai* *dalam pasangan nama-nilai adalah array ekspresi. JSONPath * Setiap JSONPath ekspresi mereferensikan satu elemen dalam hierarki data JSON atau skema Avro, mirip dengan bagaimana XPath ekspresi mengacu pada elemen dalam dokumen XHTML. Untuk informasi selengkapnya, lihat [JSONPath ekspresi](#copy-json-jsonpath-expressions).

Untuk menggunakan JSONPaths file, tambahkan kata kunci JSON atau AVRO ke perintah COPY. Tentukan nama bucket S3 dan path objek JSONPaths file menggunakan format berikut.

```
COPY tablename 
FROM 'data_source' 
CREDENTIALS 'credentials-args' 
FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
```

`s3://jsonpaths_file`Nilai harus berupa kunci objek Amazon S3 yang secara eksplisit mereferensikan satu file, seperti. `'s3://amzn-s3-demo-bucket/jsonpaths.txt'` Itu tidak bisa menjadi key prefix. 

Dalam beberapa kasus, jika Anda memuat dari Amazon S3, file yang ditentukan oleh `jsonpaths_file` memiliki awalan yang sama dengan jalur yang ditentukan oleh `copy_from_s3_objectpath` untuk file data. Jika demikian, COPY membaca JSONPaths file sebagai file data dan mengembalikan kesalahan. Misalnya, misalkan file data Anda menggunakan path objek `s3://amzn-s3-demo-bucket/my_data.json` dan JSONPaths file Anda`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. Dalam hal ini, COPY mencoba memuat `my_data.jsonpaths` sebagai file data.

 Jika nama kunci adalah string selain`"jsonpaths"`, perintah COPY tidak mengembalikan kesalahan, tetapi mengabaikan *jsonpaths\$1file* dan menggunakan argumen sebagai gantinya. `'auto'` 

Jika salah satu hal berikut terjadi, perintah COPY gagal:
+ JSON cacat.
+ Ada lebih dari satu objek JSON.
+ Karakter apa pun kecuali ruang putih ada di luar objek.
+ Elemen array adalah string kosong atau bukan string.

MAXERROR tidak berlaku untuk JSONPaths file. 

 JSONPaths File tidak boleh dienkripsi, bahkan jika [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) opsi ditentukan.

Untuk informasi selengkapnya, lihat [COPY dari format JSON](copy-usage_notes-copy-from-json.md). 

## JSONPath ekspresi
<a name="copy-json-jsonpath-expressions"></a>

 JSONPaths File menggunakan JSONPath ekspresi untuk memetakan bidang data ke kolom target. Setiap JSONPath ekspresi sesuai dengan satu kolom di tabel target Amazon Redshift. Urutan elemen JSONPath array harus sesuai dengan urutan kolom dalam tabel target atau daftar kolom, jika daftar kolom digunakan. 

Karakter tanda kutip ganda diperlukan seperti yang ditunjukkan, baik untuk nama bidang maupun nilainya. Karakter tanda kutip harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”.

Jika elemen objek yang direferensikan oleh JSONPath ekspresi tidak ditemukan dalam data JSON, COPY mencoba memuat nilai NULL. Jika objek yang direferensikan cacat, COPY mengembalikan kesalahan pemuatan. 

Jika elemen array yang direferensikan oleh JSONPath ekspresi tidak ditemukan dalam data JSON atau Avro, COPY gagal dengan kesalahan berikut: `Invalid JSONPath format: Not an array or index out of range.` Hapus elemen array dari JSONPaths yang tidak ada dalam data sumber dan verifikasi bahwa array dalam data sumber terbentuk dengan baik.  

 JSONPath Ekspresi dapat menggunakan notasi braket atau notasi titik, tetapi Anda tidak dapat mencampur notasi. Contoh berikut menunjukkan JSONPath ekspresi menggunakan notasi braket. 

```
{
    "jsonpaths": [
        "$['venuename']",
        "$['venuecity']",
        "$['venuestate']",
        "$['venueseats']"
    ]
}
```

Contoh berikut menunjukkan JSONPath ekspresi menggunakan notasi titik. 

```
{
    "jsonpaths": [
        "$.venuename",
        "$.venuecity",
        "$.venuestate",
        "$.venueseats"
    ]
}
```

Dalam konteks sintaks Amazon Redshift COPY, JSONPath ekspresi harus menentukan jalur eksplisit ke elemen nama tunggal dalam struktur data hierarkis JSON atau Avro. Amazon Redshift tidak mendukung JSONPath elemen apa pun, seperti karakter wildcard atau ekspresi filter, yang mungkin diselesaikan ke jalur ambigu atau beberapa elemen nama.

Untuk informasi selengkapnya, lihat [COPY dari format JSON](copy-usage_notes-copy-from-json.md). 

## Menggunakan JSONPaths dengan Avro Data
<a name="using-jsonpath-with-avro"></a>

Contoh berikut menunjukkan skema Avro dengan beberapa level.

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "isActive", "type": "boolean"},
        {"name": "age", "type": "int"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"},
        {"name": "latitude", "type": "double"},
        {"name": "longitude", "type": "double"},
        {
            "name": "tags",
            "type": {
                        "type" : "array",
                        "name" : "inner_tags",
                        "items" : "string"
                    }
        },
        {
            "name": "friends",
            "type": {
                        "type" : "array",
                        "name" : "inner_friends",
                        "items" : {
                                    "name" : "friends_record",
                                    "type" : "record",
                                    "fields" : [
                                                 {"name" : "id", "type" : "int"},
                                                 {"name" : "name", "type" : "string"}
                                               ]
                                  }
                    }
        },
        {"name": "randomArrayItem", "type": "string"}
    ]
}
```

Contoh berikut menunjukkan JSONPaths file yang menggunakan AvroPath ekspresi untuk referensi skema sebelumnya. 

```
{
    "jsonpaths": [
        "$.id",
        "$.guid",
        "$.address",
        "$.friends[0].id"
    ]
}
```

 JSONPaths Contohnya meliputi elemen-elemen berikut:

jsonpath  
Nama objek JSON yang berisi AvroPath ekspresi.

[ … ]  
Tanda kurung melampirkan array JSON yang berisi elemen jalur.

\$1  
Tanda dolar mengacu pada elemen root dalam skema Avro, yang merupakan array. `"fields"`

“\$1.id”,  
Target AvroPath ekspresi. Dalam hal ini, target adalah elemen dalam `"fields"` array dengan nama`"id"`. Ekspresi dipisahkan oleh koma.

“\$1.friends [0] .id”  
Tanda kurung menunjukkan indeks array. JSONPath ekspresi menggunakan pengindeksan berbasis nol, jadi ekspresi ini mereferensikan elemen pertama dalam `"friends"` array dengan nama. `"id"`

Sintaks skema Avro membutuhkan penggunaan *bidang dalam* untuk menentukan struktur tipe data record dan array. Bidang dalam diabaikan oleh AvroPath ekspresi. Misalnya, bidang `"friends"` mendefinisikan array bernama`"inner_friends"`, yang pada gilirannya mendefinisikan catatan bernama. `"friends_record"` AvroPath Ekspresi untuk mereferensikan bidang `"id"` dapat mengabaikan bidang tambahan untuk mereferensikan bidang target secara langsung. AvroPath Ekspresi berikut mereferensikan dua bidang yang termasuk dalam `"friends"` array.

```
"$.friends[0].id"
"$.friends[0].name"
```

## Parameter format data kolumnar
<a name="copy-parameters-columnar-data"></a>

Selain format data standar, COPY mendukung format data kolumnar berikut untuk COPY dari Amazon S3. COPY dari format kolumnar didukung dengan batasan tertentu. Untuk informasi selengkapnya, lihat [COPY dari format data kolumnar](copy-usage_notes-copy-from-columnar.md). 

ORC  <a name="copy-orc"></a>
Memuat data dari file yang menggunakan format file Optimized Row Columnar (ORC). 

PARQUET  <a name="copy-parquet"></a>
Memuat data dari file yang menggunakan format file Parket. 

# Parameter kompresi file
<a name="copy-parameters-file-compression"></a>

Anda dapat memuat dari file data terkompresi dengan menentukan parameter berikut. Parameter kompresi file

BZIP2   <a name="copy-bzip2"></a>
Nilai yang menentukan bahwa file input atau file dalam format bzip2 terkompresi (file.bz2). Operasi COPY membaca setiap file terkompresi dan membuka kompres data saat dimuat.

GZIP   <a name="copy-gzip"></a>
Nilai yang menentukan bahwa file input atau file dalam format gzip terkompresi (file.gz). Operasi COPY membaca setiap file terkompresi dan membuka kompres data saat dimuat.

LZOP   <a name="copy-lzop"></a>
Nilai yang menentukan bahwa file input atau file dalam format lzop terkompresi (file.lzo). Operasi COPY membaca setiap file terkompresi dan membuka kompres data saat dimuat.  
*COPY tidak mendukung file yang dikompresi menggunakan opsi lzop --filter.*

ZSTD   <a name="copy-zstd"></a>
Nilai yang menentukan bahwa file input atau file dalam format Zstandard terkompresi (file.zst). Operasi COPY membaca setiap file terkompresi dan membuka kompres data saat dimuat.  
ZSTD hanya didukung dengan COPY dari Amazon S3.

# Parameter konversi data
<a name="copy-parameters-data-conversion"></a>

Saat memuat tabel, COPY mencoba untuk secara implisit mengonversi string dalam data sumber ke tipe data kolom target. Jika Anda perlu menentukan konversi yang berbeda dari perilaku default, atau jika konversi default menghasilkan kesalahan, Anda dapat mengelola konversi data dengan menentukan parameter berikut. Untuk informasi selengkapnya tentang sintaks parameter ini, lihat [sintaks COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax).
+ [ACCEPTANYDATE](#copy-acceptanydate) 
+ [ACCEPTINVCHARS](#copy-acceptinvchars) 
+ [BLANKSASNULL](#copy-blanksasnull) 
+ [DATEFORMAT](#copy-dateformat) 
+ [EMPTYASNULL](#copy-emptyasnull) 
+ [ENCODING](#copy-encoding) 
+ [ESCAPE](#copy-escape) 
+ [EXPLICIT_IDS](#copy-explicit-ids) 
+ [FILLRECORD](#copy-fillrecord) 
+ [IGNOREBLANKLINES](#copy-ignoreblanklines) 
+ [IGNOREHEADER](#copy-ignoreheader) 
+ [NULL AS](#copy-null-as) 
+ [REMOVEQUOTES](#copy-removequotes) 
+ [ROUNDEC](#copy-roundec) 
+ [TIMEFORMAT](#copy-timeformat) 
+ [TRIMBLANKS](#copy-trimblanks) 
+ [TRUNCATECOLUMNS](#copy-truncatecolumns) <a name="copy-data-conversion-parameters"></a>Parameter konversi data

ACCEPTANYDATE   <a name="copy-acceptanydate"></a>
Memungkinkan format tanggal apa pun, termasuk format yang tidak valid seperti`00/00/00 00:00:00`, dimuat tanpa menimbulkan kesalahan. Parameter ini hanya berlaku untuk kolom TIMESTAMP dan DATE. Selalu gunakan ACCEPTANYDATE dengan parameter DATEFORMAT. Jika format tanggal untuk data tidak cocok dengan spesifikasi DATEFORMAT, Amazon Redshift menyisipkan nilai NULL ke bidang tersebut.

*TERIMA INVCHARS [AS] ['replacement\$1char']*   <a name="copy-acceptinvchars"></a>
Memungkinkan pemuatan data ke kolom VARCHAR bahkan jika data berisi karakter UTF-8 yang tidak valid. *Ketika ACCEPTINVCHARS ditentukan, COPY menggantikan setiap karakter UTF-8 yang tidak valid dengan string dengan panjang yang sama yang terdiri dari karakter yang ditentukan oleh replacement\$1char.* Misalnya, jika karakter pengganti adalah '`^`', karakter tiga byte yang tidak valid akan diganti dengan ''. `^^^`  
 Karakter pengganti dapat berupa karakter ASCII kecuali NULL. Defaultnya adalah tanda tanya (? ). Untuk informasi tentang karakter UTF-8 yang tidak valid, lihat. [Kesalahan pemuatan karakter multibyte](multi-byte-character-load-errors.md)  
COPY mengembalikan jumlah baris yang berisi karakter UTF-8 yang tidak valid, dan menambahkan entri ke tabel [STL\$1REPLACEMENTS](r_STL_REPLACEMENTS.md) sistem untuk setiap baris yang terpengaruh, hingga maksimum 100 baris untuk setiap irisan node. Karakter UTF-8 tambahan yang tidak valid juga diganti, tetapi peristiwa pengganti tersebut tidak direkam.  
Jika ACCEPTINVCHARS tidak ditentukan, COPY mengembalikan kesalahan setiap kali menemukan karakter UTF-8 yang tidak valid.   
ACCEPTINVCHARS hanya berlaku untuk kolom VARCHAR.

BLANKSASNULL   <a name="copy-blanksasnull"></a>
Memuat bidang kosong, yang hanya terdiri dari karakter spasi putih, sebagai NULL. Opsi ini hanya berlaku untuk kolom CHAR dan VARCHAR. Bidang kosong untuk tipe data lain, seperti INT, selalu dimuat dengan NULL. Misalnya, string yang berisi tiga karakter spasi berturut-turut (dan tidak ada karakter lain) dimuat sebagai NULL. Perilaku default, tanpa opsi ini, adalah memuat karakter spasi apa adanya. 

DATEFORMAT [AS] \$1'*dateformat\$1string' \$1 'auto*'\$1  <a name="copy-dateformat"></a>
Jika tidak ada DATEFORMAT yang ditentukan, format defaultnya adalah. `'YYYY-MM-DD'` Misalnya, format alternatif yang valid adalah`'MM-DD-YYYY'`.   
Jika perintah COPY tidak mengenali format nilai tanggal atau waktu Anda, atau jika nilai tanggal atau waktu Anda menggunakan format yang berbeda, gunakan `'auto'` argumen dengan parameter DATEFORMAT atau TIMEFORMAT. `'auto'`Argumen mengenali beberapa format yang tidak didukung saat menggunakan string DATEFORMAT dan TIMEFORMAT. Kata kunci `'auto'` 'peka huruf besar/kecil. Untuk informasi selengkapnya, lihat [Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT](automatic-recognition.md).   
Format tanggal dapat mencakup informasi waktu (jam, menit, detik), tetapi informasi ini diabaikan. Kata kunci AS adalah opsional. Untuk informasi selengkapnya, lihat [string DATEFORMAT dan TIMEFORMATContoh](r_DATEFORMAT_and_TIMEFORMAT_strings.md).

KOSONGNULL   <a name="copy-emptyasnull"></a>
Menunjukkan bahwa Amazon Redshift harus memuat bidang CHAR dan VARCHAR kosong sebagai NULL. Bidang kosong untuk tipe data lain, seperti INT, selalu dimuat dengan NULL. Bidang kosong terjadi ketika data berisi dua pembatas berturut-turut tanpa karakter di antara pembatas. EMTTYASNULL dan NULL AS "(string kosong) menghasilkan perilaku yang sama.

*PENGKODEAN [AS] file\$1encoding*  <a name="copy-encoding"></a>
Menentukan jenis pengkodean data beban. Perintah COPY mengubah data dari pengkodean yang ditentukan menjadi UTF-8 selama pemuatan.   
Nilai yang valid untuk *file\$1encoding* adalah sebagai berikut:  
+ `UTF8`
+ `UTF16`
+ `UTF16LE`
+ `UTF16BE`
+ `ISO88591`
Nilai default-nya `UTF8`.  
Nama file sumber harus menggunakan pengkodean UTF-8.  
File-file berikut harus menggunakan pengkodean UTF-8, bahkan jika pengkodean yang berbeda ditentukan untuk data beban:  
+ File manifes
+ JSONPaths berkas
String argumen yang disediakan dengan parameter berikut harus menggunakan UTF-8:  
+ *FIXEDWIDTH 'fixedwidth\$1spec'*
+ *TERIMA INVCHARS 'replacement\$1char'*
+ *DATEFORMAT 'dateformat\$1string'*
+ *FORMAT WAKTU 'timeformat\$1string'*
+ NULL SEBAGAI '*null\$1string*'
File data dengan lebar tetap harus menggunakan pengkodean UTF-8. Lebar bidang didasarkan pada jumlah karakter, bukan jumlah byte.   
Semua data beban harus menggunakan pengkodean yang ditentukan. Jika COPY menemukan pengkodean yang berbeda, ia melewatkan file dan mengembalikan kesalahan.   
Jika Anda menentukan`UTF16`, maka data Anda harus memiliki tanda urutan byte (BOM). Jika Anda tahu apakah data UTF-16 Anda adalah little-endian (LE) atau big-endian (BE), Anda dapat menggunakan `UTF16LE` atau`UTF16BE`, terlepas dari keberadaan BOM.   
Untuk menggunakan pengkodean ISO-8859-1 tentukan. `ISO88591` *Untuk informasi lebih lanjut, lihat [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1) di Wikipedia.*

MELARIKAN DIRI   <a name="copy-escape"></a>
Ketika parameter ini ditentukan, karakter garis miring terbalik (`\`) dalam data input diperlakukan sebagai karakter escape. Karakter yang segera mengikuti karakter garis miring terbalik dimuat ke dalam tabel sebagai bagian dari nilai kolom saat ini, bahkan jika itu adalah karakter yang biasanya melayani tujuan khusus. Misalnya, Anda dapat menggunakan parameter ini untuk menghindari karakter pembatas, tanda kutip, karakter baris baru yang disematkan, atau karakter escape itu sendiri ketika salah satu karakter ini adalah bagian yang sah dari nilai kolom.  
Jika Anda menentukan parameter ESCAPE dalam kombinasi dengan parameter REMOVEQUOTES, Anda dapat melarikan diri dan mempertahankan tanda kutip (`'`atau`"`) yang mungkin dihapus. String null default,`\N`, berfungsi apa adanya, tetapi juga dapat diloloskan dalam data input sebagai. `\\N` Selama Anda tidak menentukan string null alternatif dengan parameter NULL AS, `\N` dan `\\N` menghasilkan hasil yang sama.  
Karakter kontrol `0x00` (NUL) tidak dapat lolos dan harus dihapus dari data input atau dikonversi. Karakter ini diperlakukan sebagai penanda akhir catatan (EOR), menyebabkan sisa catatan terpotong.
Anda tidak dapat menggunakan parameter ESCAPE untuk beban FIXEDWIDTH, dan Anda tidak dapat menentukan karakter escape itu sendiri; karakter escape selalu karakter garis miring terbalik. Selain itu, Anda harus memastikan bahwa data input berisi karakter escape di tempat yang sesuai.  
Berikut adalah beberapa contoh data input dan data yang dimuat yang dihasilkan saat parameter ESCAPE ditentukan. Hasil untuk baris 4 mengasumsikan bahwa parameter REMOVEQUOTES juga ditentukan. Data input terdiri dari dua bidang yang dibatasi pipa:   

```
1|The quick brown fox\[newline]
jumped over the lazy dog.
2| A\\B\\C
3| A \| B \| C
4| 'A Midsummer Night\'s Dream'
```
Data yang dimuat ke kolom 2 terlihat seperti ini:   

```
The quick brown fox
jumped over the lazy dog.
A\B\C
A|B|C
A Midsummer Night's Dream
```
Menerapkan karakter escape ke data input untuk beban adalah tanggung jawab pengguna. Satu pengecualian untuk persyaratan ini adalah ketika Anda memuat ulang data yang sebelumnya dibongkar dengan parameter ESCAPE. Dalam hal ini, data sudah berisi karakter escape yang diperlukan.
Parameter ESCAPE tidak menafsirkan oktal, hex, Unicode, atau notasi urutan escape lainnya. Misalnya, jika data sumber Anda berisi nilai umpan baris oktal (`\012`) dan Anda mencoba memuat data ini dengan parameter ESCAPE, Amazon Redshift memuat `012` nilai ke dalam tabel dan tidak menafsirkan nilai ini sebagai umpan baris yang sedang di-escape.  
Untuk menghindari karakter baris baru dalam data yang berasal dari platform Microsoft Windows, Anda mungkin perlu menggunakan dua karakter escape: satu untuk carriage return dan satu untuk line feed. Atau, Anda dapat menghapus pengembalian carriage sebelum memuat file (misalnya, dengan menggunakan utilitas dos2unix).

EKSPLISIT   <a name="copy-explicit-ids"></a>
Gunakan EXPLICIT\$1IDS dengan tabel yang memiliki kolom IDENTITY jika Anda ingin mengganti nilai yang dibuat secara otomatis dengan nilai eksplisit dari file data sumber untuk tabel. Jika perintah menyertakan daftar kolom, daftar itu harus menyertakan kolom IDENTITY untuk menggunakan parameter ini. Format data untuk nilai EXPLICIT\$1IDS harus cocok dengan format IDENTITY yang ditentukan oleh definisi CREATE TABLE.  
Saat Anda menjalankan perintah COPY terhadap tabel dengan opsi EXPLICIT\$1IDS, Amazon Redshift tidak memeriksa keunikan kolom IDENTITY dalam tabel.  
Jika kolom didefinisikan dengan GENERATED BY DEFAULT AS IDENTITY, maka itu dapat disalin. Nilai dihasilkan atau diperbarui dengan nilai yang Anda berikan. Opsi EXPLICIT\$1IDS tidak diperlukan. COPY tidak memperbarui tanda air identitas tinggi.  
 Untuk contoh perintah COPY menggunakan EXPLICIT\$1IDS, lihat. [Muat VENUE dengan nilai eksplisit untuk kolom IDENTITY](r_COPY_command_examples.md#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)

FILLRECORD   <a name="copy-fillrecord"></a>
Memungkinkan file data dimuat ketika kolom yang berdekatan hilang di akhir beberapa catatan. Kolom yang hilang dimuat sebagai NULLs. Untuk format teks dan CSV, jika kolom yang hilang adalah kolom VARCHAR, string panjang nol dimuat, bukan. NULLs Untuk memuat NULLs ke kolom VARCHAR dari teks dan CSV, tentukan kata kunci EMPTYASNULL. Substitusi NULL hanya berfungsi jika definisi kolom memungkinkan. NULLs  
Misalnya, jika definisi tabel berisi empat kolom CHAR yang dapat dibatalkan, dan catatan berisi nilai`apple, orange, banana, mango`, perintah COPY dapat memuat dan mengisi catatan yang hanya berisi nilai. `apple, orange` Nilai CHAR yang hilang akan dimuat sebagai nilai NULL.

IGNOREBLANKLINES   <a name="copy-ignoreblanklines"></a>
Mengabaikan baris kosong yang hanya berisi umpan baris dalam file data dan tidak mencoba memuatnya.

*IGNOREHEADER [AS] number\$1rows*   <a name="copy-ignoreheader"></a>
Memperlakukan *number\$1rows* yang ditentukan sebagai header file dan tidak memuatnya. Gunakan IGNOREHEADER untuk melewati header file di semua file dalam beban paralel.

NULL SEBAGAI '*null\$1string*'   <a name="copy-null-as"></a>
Memuat bidang yang cocok dengan *null\$1string* sebagai NULL, di mana *null\$1string* dapat berupa string apa pun. Jika data Anda menyertakan terminator null, juga disebut NUL (UTF-8 0000) atau biner nol (0x000), COPY memperlakukannya sebagai karakter lainnya. Misalnya, rekaman yang berisi '1' \$1\$1 NUL \$1\$1 '2' disalin sebagai string dengan panjang 3 byte. Jika bidang hanya berisi NUL, Anda dapat menggunakan NULL AS untuk mengganti terminator null dengan NULL dengan menentukan `'\0'` atau —misalnya, atau. `'\000'` `NULL AS '\0'` `NULL AS '\000'` Jika bidang berisi string yang berakhir dengan NUL dan NULL AS ditentukan, string dimasukkan dengan NUL di akhir. Jangan gunakan '\$1n' (baris baru) untuk nilai *null\$1string*. Amazon Redshift mencadangkan '\$1n' untuk digunakan sebagai pembatas garis. *Null\$1string* default adalah '. `'\N`  
Jika Anda mencoba memuat null ke dalam kolom yang didefinisikan sebagai NOT NULL, perintah COPY akan gagal.

HAPUSQUOTES   <a name="copy-removequotes"></a>
Hapus tanda kutip yang mengelilingi string pada data yang akan masuk. Semua karakter dalam tanda kutip, termasuk delimiter, dipertahankan. Jika string memiliki tanda kutip tunggal atau ganda awal tetapi tidak ada tanda akhir yang sesuai, perintah COPY gagal memuat baris itu dan mengembalikan kesalahan. Tabel berikut menunjukkan beberapa contoh sederhana dari string yang berisi tanda kutip dan nilai dimuat yang dihasilkan.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/copy-parameters-data-conversion.html)

ROUNDEC   <a name="copy-roundec"></a>
Membulatkan nilai numerik ketika skala nilai input lebih besar dari skala kolom. Secara default, COPY memotong nilai bila perlu agar sesuai dengan skala kolom. Misalnya, jika nilai dimuat ke kolom DECIMAL (8,2), COPY memotong nilainya secara default. `20.259` `20.25` Jika ROUNDEC ditentukan, COPY membulatkan nilainya ke. `20.26` Perintah INSERT selalu membulatkan nilai bila diperlukan untuk mencocokkan skala kolom, sehingga perintah COPY dengan parameter ROUNDEC berperilaku sama seperti perintah INSERT.

TIMEFORMAT [AS] \$1'*timeformat\$1string*' \$1 'auto' \$1 'epochsecs' \$1 'epochmillisecs'\$1  <a name="copy-timeformat"></a>
Menentukan format waktu. Jika tidak ada TIMEFORMAT yang ditentukan, format default adalah `YYYY-MM-DD HH:MI:SS` untuk kolom TIMESTAMP atau `YYYY-MM-DD HH:MI:SSOF` untuk kolom TIMESTAMPTZ, di mana offset dari Coordinated `OF` Universal Time (UTC). Anda tidak dapat menyertakan penentu zona waktu dalam *timeformat\$1string*. Untuk memuat data TIMESTAMPTZ yang dalam format yang berbeda dari format default, tentukan 'auto'; untuk informasi selengkapnya, lihat. [Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT](automatic-recognition.md) Untuk informasi selengkapnya tentang *timeformat\$1string*, lihat. [string DATEFORMAT dan TIMEFORMATContoh](r_DATEFORMAT_and_TIMEFORMAT_strings.md)  
`'auto'`Argumen mengenali beberapa format yang tidak didukung saat menggunakan string DATEFORMAT dan TIMEFORMAT. Jika perintah COPY tidak mengenali format nilai tanggal atau waktu Anda, atau jika nilai tanggal dan waktu Anda menggunakan format yang berbeda satu sama lain, gunakan `'auto'` argumen dengan parameter DATEFORMAT atau TIMEFORMAT. Untuk informasi selengkapnya, lihat [Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT](automatic-recognition.md).   
Jika data sumber Anda direpresentasikan sebagai waktu epoch, itu adalah jumlah detik atau milidetik sejak 1 Januari 1970, 00:00:00 UTC, tentukan atau. `'epochsecs'` `'epochmillisecs'`   
Kata kunci `'auto'``'epochsecs'`, dan `'epochmillisecs'` kata kunci peka huruf besar/kecil.  
Kata kunci AS adalah opsional.

TRIMBLANKS   <a name="copy-trimblanks"></a>
Menghapus karakter spasi putih tertinggal dari string VARCHAR. Parameter ini hanya berlaku untuk kolom dengan tipe data VARCHAR.

TRUNCATECOLUMNS   <a name="copy-truncatecolumns"></a>
Potong data dalam kolom sesuai dengan jumlah karakter sehingga cocok dengan spesifikasi kolom. Berlaku hanya pada kolom dengan tipe data VARCHAR atau CHAR, dan baris berukuran 4 MB atau kurang.

# Operasi pemuatan data
<a name="copy-parameters-data-load"></a>

Kelola perilaku default operasi pemuatan untuk pemecahan masalah atau untuk mengurangi waktu muat dengan menentukan parameter berikut. 
+ [COMPROWS](#copy-comprows) 
+ [COMPUPDATE](#copy-compupdate) 
+ [IGNOREALLERRORS](#copy-ignoreallerrors) 
+ [MAXERROR](#copy-maxerror) 
+ [NOLOAD](#copy-noload) 
+ [STATUPDATE](#copy-statupdate) <a name="copy-data-load-parameters"></a>Parameter

*COMPROWS numrows*   <a name="copy-comprows"></a>
Menentukan jumlah baris yang akan digunakan sebagai ukuran sampel untuk analisis kompresi. Analisis dijalankan pada baris dari setiap irisan data. Misalnya, jika Anda menentukan `COMPROWS 1000000` (1.000.000) dan sistem berisi empat irisan total, tidak lebih dari 250.000 baris untuk setiap irisan dibaca dan dianalisis.  
Jika COMPROWS tidak ditentukan, ukuran sampel default menjadi 100.000 untuk setiap irisan. Nilai COMPROWS lebih rendah dari default 100.000 baris untuk setiap irisan secara otomatis ditingkatkan ke nilai default. Namun, kompresi otomatis tidak akan terjadi jika jumlah data yang dimuat tidak cukup untuk menghasilkan sampel yang berarti.  
Jika jumlah COMPROWS lebih besar dari jumlah baris dalam file input, perintah COPY masih melanjutkan dan menjalankan analisis kompresi pada semua baris yang tersedia. Rentang yang diterima untuk argumen ini adalah angka antara 1000 dan 2147483647 (2.147.483.647).

COMPUPDATE [PRESET \$1 \$1ON \$1 TRUE\$1 \$1 \$1OFF \$1 FALSE\$1]  <a name="copy-compupdate"></a>
Mengontrol apakah pengkodean kompresi diterapkan secara otomatis selama COPY.   
Ketika COMPUPDATE PRESET, perintah COPY memilih pengkodean kompresi untuk setiap kolom jika tabel target kosong; bahkan jika kolom sudah memiliki pengkodean selain RAW. Saat ini pengkodean kolom yang ditentukan dapat diganti. Pengkodean untuk setiap kolom didasarkan pada tipe data kolom. Tidak ada data yang diambil sampelnya. Amazon Redshift secara otomatis menetapkan pengkodean kompresi sebagai berikut:  
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, atau DOUBLE PRECISION diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64 
+ Kolom yang didefinisikan sebagai CHAR atau VARCHAR diberi kompresi LZO.
Ketika COMPUPDATE dihilangkan, perintah COPY memilih pengkodean kompresi untuk setiap kolom hanya jika tabel target kosong dan Anda belum menentukan pengkodean (selain RAW) untuk salah satu kolom. Pengkodean untuk setiap kolom ditentukan oleh Amazon Redshift. Tidak ada data yang diambil sampelnya.   
Ketika COMPUPDATE AKTIF (atau TRUE), atau COMPUPDATE ditentukan tanpa opsi, perintah COPY menerapkan kompresi otomatis jika tabel kosong; bahkan jika kolom tabel sudah memiliki pengkodean selain RAW. Saat ini pengkodean kolom yang ditentukan dapat diganti. Pengkodean untuk setiap kolom didasarkan pada analisis data sampel. Untuk informasi selengkapnya, lihat [Memuat tabel dengan kompresi otomatis](c_Loading_tables_auto_compress.md).  
Ketika COMPUPDATE OFF (atau FALSE), kompresi otomatis dinonaktifkan. Pengkodean kolom tidak diubah.  
Untuk informasi tentang tabel sistem untuk menganalisis kompresi, lihat[STL\$1ANALYZE\$1COMPRESSION](r_STL_ANALYZE_COMPRESSION.md). 

IGNOREALLERRORS   <a name="copy-ignoreallerrors"></a>
Anda dapat menentukan opsi ini untuk mengabaikan semua kesalahan yang terjadi selama operasi pemuatan.   
Anda tidak dapat menentukan opsi IGNOREALLERRORS jika Anda menentukan opsi MAXERROR. Anda tidak dapat menentukan opsi IGNOREALLERRORS untuk format kolumnar termasuk ORC dan Parket.

*MAXERROR [AS] error\$1count*   <a name="copy-maxerror"></a>
Jika beban mengembalikan jumlah *kesalahan error\$1count* atau lebih besar, beban gagal. Jika beban mengembalikan lebih sedikit kesalahan, itu berlanjut dan mengembalikan pesan INFO yang menyatakan jumlah baris yang tidak dapat dimuat. Gunakan parameter ini untuk memungkinkan pemuatan berlanjut ketika baris tertentu gagal dimuat ke dalam tabel karena kesalahan pemformatan atau ketidakkonsistenan lainnya dalam data.   
Tetapkan nilai ini ke `0` atau `1` jika Anda ingin beban gagal segera setelah kesalahan pertama terjadi. Kata kunci AS adalah opsional. Nilai default MAXERROR adalah `0` dan batasnya adalah`100000`.  
 Jumlah aktual kesalahan yang dilaporkan mungkin lebih besar daripada MAXERROR yang ditentukan karena sifat paralel Amazon Redshift. Jika ada node di cluster Amazon Redshift yang mendeteksi bahwa MAXERROR telah terlampaui, setiap node melaporkan semua kesalahan yang dialaminya.

NOLOAD   <a name="copy-noload"></a>
Memeriksa validitas file data tanpa benar-benar memuat data. Gunakan parameter NOLOAD untuk memastikan bahwa file data Anda dimuat tanpa kesalahan sebelum menjalankan pemuatan data yang sebenarnya. Menjalankan COPY dengan parameter NOLOAD jauh lebih cepat daripada memuat data karena hanya mem-parsing file.

STATUPDATE [\$1ON \$1 TRUE\$1 \$1 \$1OFF \$1 FALSE\$1]  <a name="copy-statupdate"></a>
Mengatur komputasi otomatis dan penyegaran statistik pengoptimal di akhir perintah COPY yang berhasil. Secara default, jika parameter STATUPDATE tidak digunakan, statistik diperbarui secara otomatis jika tabel awalnya kosong.  
Setiap kali memasukkan data ke dalam tabel nonempty secara signifikan mengubah ukuran tabel, kami sarankan memperbarui statistik baik dengan menjalankan [MENGANALISA](r_ANALYZE.md) perintah atau dengan menggunakan argumen STATUPDATE ON.  
Dengan STATUPDATE ON (atau TRUE), statistik diperbarui secara otomatis terlepas dari apakah tabel awalnya kosong. Jika STATUPDATE digunakan, pengguna saat ini harus pemilik tabel atau superuser. Jika STATUPDATE tidak ditentukan, hanya izin INSERT yang diperlukan.  
Dengan STATUPDATE OFF (atau FALSE), statistik tidak pernah diperbarui.  
Untuk informasi tambahan, lihat [Menganalisis tabel](t_Analyzing_tables.md).

# Daftar parameter abjad
<a name="r_COPY-alphabetical-parm-list"></a>

Daftar berikut menyediakan link ke setiap deskripsi parameter perintah COPY, diurutkan menurut abjad.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate)
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)
+ [ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id-access)
+ [AVRO](copy-parameters-data-format.md#copy-avro)
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull)
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows)
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate)
+ [KREDENSIAL](copy-parameters-authorization.md#copy-credentials-cred)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter)
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull)
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding)
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape)
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth)
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
+ [GZIP](copy-parameters-file-compression.md#copy-gzip)
+ [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role-iam)
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors)
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines)
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader)
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json)
+ [LZOP](copy-parameters-file-compression.md#copy-lzop)
+ [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
+ [MASTER_SYMMETRIC_KEY](copy-parameters-data-source-s3.md#copy-master-symmetric-key)
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror)
+ [NOLOAD](copy-parameters-data-load.md#copy-noload)
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as)
+ [READRATIO](copy-parameters-data-source-dynamodb.md#copy-readratio)
+ [REGION](copy-parameters-data-source-s3.md#copy-region)
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes)
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec)
+ [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token)
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile)
+ [SSH](copy-parameters-data-source-ssh.md#copy-ssh)
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat)
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks)
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns)
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd)

# Catatan penggunaan
<a name="r_COPY_usage_notes"></a>

**Topics**
+ [Izin untuk mengakses Sumber Daya lainnya AWS](copy-usage_notes-access-permissions.md)
+ [Menggunakan COPY dengan alias jalur akses Amazon S3](copy-usage_notes-s3-access-point-alias.md)
+ [Memuat data multibyte dari Amazon S3](copy-usage_notes-multi-byte.md)
+ [Memuat kolom tipe data GEOMETRI atau GEOGRAFI](copy-usage_notes-spatial-data.md)
+ [Memuat tipe data HLLSKETCH](copy-usage_notes-hll.md)
+ [Memuat kolom tipe data VARBYTE](copy-usage-varbyte.md)
+ [Kesalahan saat membaca banyak file](copy-usage_notes-multiple-files.md)
+ [COPY dari format JSON](copy-usage_notes-copy-from-json.md)
+ [COPY dari format data kolumnar](copy-usage_notes-copy-from-columnar.md)
+ [string DATEFORMAT dan TIMEFORMAT](r_DATEFORMAT_and_TIMEFORMAT_strings.md)
+ [Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT](automatic-recognition.md)

# Izin untuk mengakses Sumber Daya lainnya AWS
<a name="copy-usage_notes-access-permissions"></a>

 Untuk memindahkan data antara cluster Anda dan AWS sumber daya lain, seperti Amazon S3, Amazon DynamoDB, Amazon EMR, atau Amazon EC2, klaster Anda harus memiliki izin untuk mengakses sumber daya dan melakukan tindakan yang diperlukan. Misalnya, untuk memuat data dari Amazon S3, COPY harus memiliki akses LIST ke bucket dan GET access untuk objek bucket. Untuk informasi tentang izin minimum, lihat[Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](#copy-usage_notes-iam-permissions).

Untuk mendapatkan otorisasi untuk mengakses sumber daya, cluster Anda harus diautentikasi. Anda dapat memilih salah satu dari metode otentikasi berikut: 
+ [Kontrol akses berbasis peran](#copy-usage_notes-access-role-based)— Untuk kontrol akses berbasis peran, Anda menentukan peran AWS Identity and Access Management (IAM) yang digunakan klaster Anda untuk otentikasi dan otorisasi. Untuk melindungi AWS kredensi dan data sensitif Anda, kami sangat menyarankan untuk menggunakan otentikasi berbasis peran.
+ [Kontrol akses berbasis kunci](#copy-usage_notes-access-key-based)— Untuk kontrol akses berbasis kunci, Anda memberikan kredensi AWS akses (ID kunci akses dan kunci akses rahasia) untuk pengguna sebagai teks biasa.

## Kontrol akses berbasis peran
<a name="copy-usage_notes-access-role-based"></a>

Dengan <a name="copy-usage_notes-access-role-based.phrase"></a>kontrol akses berbasis peran, klaster Anda untuk sementara mengambil peran IAM atas nama Anda. Kemudian, berdasarkan otorisasi yang diberikan untuk peran tersebut, klaster Anda dapat mengakses AWS sumber daya yang diperlukan.

Membuat *peran* IAM mirip dengan memberikan izin kepada pengguna, karena itu adalah AWS identitas dengan kebijakan izin yang menentukan apa yang dapat dan tidak dapat dilakukan identitas. AWS Namun, alih-alih dikaitkan secara unik dengan satu pengguna, peran dapat diasumsikan oleh entitas mana pun yang membutuhkannya. Selain itu, peran tidak memiliki kredensi apa pun (kata sandi atau kunci akses) yang terkait dengannya. Sebaliknya, jika peran dikaitkan dengan cluster, kunci akses dibuat secara dinamis dan disediakan untuk cluster.

Sebaiknya gunakan kontrol akses berbasis peran karena memberikan kontrol akses yang lebih aman dan halus terhadap AWS sumber daya dan data pengguna yang sensitif, selain melindungi kredensil Anda. AWS 

Otentikasi berbasis peran memberikan manfaat berikut:
+ Anda dapat menggunakan alat IAM AWS standar untuk menentukan peran IAM dan mengaitkan peran dengan beberapa cluster. Saat Anda mengubah kebijakan akses untuk peran, perubahan akan diterapkan secara otomatis ke semua cluster yang menggunakan peran tersebut.
+ Anda dapat menentukan kebijakan IAM berbutir halus yang memberikan izin bagi kluster dan pengguna database tertentu untuk mengakses sumber daya dan tindakan tertentu. AWS 
+ Cluster Anda memperoleh kredensi sesi sementara pada waktu berjalan dan menyegarkan kredensialnya sesuai kebutuhan hingga operasi selesai. Jika Anda menggunakan kredensil sementara berbasis kunci, operasi gagal jika kredensil sementara kedaluwarsa sebelum selesai.
+ ID kunci akses dan ID kunci akses rahasia Anda tidak disimpan atau ditransmisikan dalam kode SQL Anda.

Untuk menggunakan kontrol akses berbasis peran, Anda harus terlebih dahulu membuat peran IAM menggunakan jenis peran layanan Amazon Redshift, lalu lampirkan peran tersebut ke cluster Anda. Peran harus memiliki, setidaknya, izin yang tercantum dalam[Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](#copy-usage_notes-iam-permissions). Untuk langkah-langkah untuk membuat peran IAM dan melampirkannya ke klaster Anda, lihat [Mengotorisasi Amazon Redshift untuk Mengakses Layanan AWS Lain Atas Nama Anda di Panduan](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) Manajemen Amazon *Redshift*.

Anda dapat menambahkan peran ke klaster atau melihat peran yang terkait dengan klaster menggunakan Amazon Redshift Management Console, CLI, atau API. Untuk informasi selengkapnya, lihat [Mengaitkan Peran IAM Dengan Cluster di Panduan](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) Manajemen *Pergeseran Merah Amazon*.

Saat Anda membuat peran IAM, IAM mengembalikan Amazon Resource Name (ARN) untuk peran tersebut. Untuk menentukan peran IAM, berikan peran ARN dengan parameter atau [Menggunakan parameter CREDENTIALS](copy-parameters-authorization.md#copy-credentials) parameter. [Menggunakan parameter IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) 

Sebagai contoh, misalkan peran berikut dilampirkan ke cluster.

```
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
```

Contoh perintah COPY berikut menggunakan parameter IAM\$1ROLE dengan ARN pada contoh sebelumnya untuk otentikasi dan akses ke Amazon S3.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Contoh perintah COPY berikut menggunakan parameter CREDENTIALS untuk menentukan peran IAM.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata' 
credentials 
'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Selain itu, superuser dapat memberikan hak istimewa ASSUMEROLE kepada pengguna database dan grup untuk menyediakan akses ke peran untuk operasi COPY. Untuk informasi, lihat [HIBAH](r_GRANT.md).

## Kontrol akses berbasis kunci
<a name="copy-usage_notes-access-key-based"></a>

Dengan <a name="copy-usage_notes-access-key-based.phrase"></a>kontrol akses berbasis kunci, Anda memberikan ID kunci akses dan kunci akses rahasia untuk pengguna IAM yang berwenang untuk mengakses AWS sumber daya yang berisi data. Anda dapat menggunakan [Menggunakan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) parameter bersama-sama atau [Menggunakan parameter CREDENTIALS](copy-parameters-authorization.md#copy-credentials) parameter.

**catatan**  
Kami sangat menyarankan menggunakan peran IAM untuk otentikasi daripada menyediakan ID kunci akses teks biasa dan kunci akses rahasia. Jika Anda memilih kontrol akses berbasis kunci, jangan pernah menggunakan kredensyal AWS akun (root) Anda. Selalu buat pengguna IAM dan berikan ID kunci akses dan kunci akses rahasia pengguna tersebut. Untuk langkah-langkah untuk membuat pengguna IAM, lihat [Membuat Pengguna IAM di Akun Anda AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).

Untuk mengautentikasi menggunakan ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY, ganti *<access-key-id>* dan *<secret-access-key>* dengan ID kunci akses pengguna resmi dan kunci akses rahasia lengkap seperti yang ditunjukkan berikut. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>';
```

Untuk mengautentikasi menggunakan parameter CREDENTIALS, ganti *<access-key-id>* dan *<secret-access-key>* dengan ID kunci akses pengguna resmi dan kunci akses rahasia lengkap seperti yang ditunjukkan berikut.

```
CREDENTIALS
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
```

Pengguna IAM harus memiliki, minimal, izin yang tercantum dalam. [Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY](#copy-usage_notes-iam-permissions)

### Kredensial keamanan sementara
<a name="r_copy-temporary-security-credentials"></a>

 Jika Anda menggunakan kontrol akses berbasis kunci, Anda dapat membatasi akses yang dimiliki pengguna ke data Anda dengan menggunakan kredensil keamanan sementara. Otentikasi berbasis peran secara otomatis menggunakan kredensil sementara. 

**catatan**  
Kami sangat menyarankan menggunakan [role-based access control](#copy-usage_notes-access-role-based.phrase) alih-alih membuat kredensil sementara dan memberikan ID kunci akses dan kunci akses rahasia sebagai teks biasa. Kontrol akses berbasis peran secara otomatis menggunakan kredensil sementara. 

Kredensyal keamanan sementara memberikan keamanan yang ditingkatkan karena mereka memiliki rentang hidup yang pendek dan tidak dapat digunakan kembali setelah kedaluwarsa. ID kunci akses dan kunci akses rahasia yang dihasilkan dengan token tidak dapat digunakan tanpa token, dan pengguna yang memiliki kredensil keamanan sementara ini dapat mengakses sumber daya Anda hanya sampai kredensialnya kedaluwarsa.

Untuk memberi pengguna akses sementara ke sumber daya Anda, Anda memanggil operasi API AWS Security Token Service (AWS STS). Operasi AWS STS API mengembalikan kredensil keamanan sementara yang terdiri dari token keamanan, ID kunci akses, dan kunci akses rahasia. Anda mengeluarkan kredensi keamanan sementara kepada pengguna yang membutuhkan akses sementara ke sumber daya Anda. Pengguna ini bisa menjadi pengguna IAM yang sudah ada, atau mereka bisa bukan AWS pengguna. Untuk informasi selengkapnya tentang membuat kredensil keamanan sementara, lihat [Menggunakan Kredensil Keamanan Sementara di Panduan Pengguna IAM](https://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html).

Anda dapat menggunakan [Menggunakan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) parameter bersama dengan [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token) parameter atau [Menggunakan parameter CREDENTIALS](copy-parameters-authorization.md#copy-credentials) parameter. Anda juga harus menyediakan ID kunci akses dan kunci akses rahasia yang disediakan dengan token.

Untuk mengautentikasi menggunakan ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY, dan SESSION\$1TOKEN, ganti, dan seperti yang ditunjukkan berikut. *<temporary-access-key-id>* *<temporary-secret-access-key>* *<temporary-token>* 

```
ACCESS_KEY_ID '<temporary-access-key-id>'
SECRET_ACCESS_KEY '<temporary-secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Untuk mengautentikasi menggunakan CREDENTIALS, sertakan `session_token=<temporary-token>` dalam string kredensial seperti yang ditunjukkan berikut. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>';
```

Contoh berikut menunjukkan perintah COPY dengan kredenal keamanan sementara.

```
copy table-name
from 's3://objectpath'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>';
```

Contoh berikut memuat tabel LISTING dengan kredensyal sementara dan enkripsi file.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>'
master_symmetric_key '<root-key>'
encrypted;
```

Contoh berikut memuat tabel LISTING menggunakan parameter CREDENTIALS dengan kredensyal sementara dan enkripsi file.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
credentials 
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>;master_symmetric_key=<root-key>'
encrypted;
```

**penting**  
Kredensi keamanan sementara harus valid selama seluruh durasi operasi COPY atau UNLOAD. Jika kredensil keamanan sementara kedaluwarsa selama operasi, perintah gagal dan transaksi dibatalkan. Misalnya, jika kredensyal keamanan sementara kedaluwarsa setelah 15 menit dan operasi COPY membutuhkan satu jam, operasi COPY gagal sebelum selesai. Jika Anda menggunakan akses berbasis peran, kredensyal keamanan sementara secara otomatis disegarkan hingga operasi selesai.

## Izin IAM untuk COPY, UNLOAD, dan CREATE LIBRARY
<a name="copy-usage_notes-iam-permissions"></a>

Peran IAM atau pengguna yang direferensikan oleh parameter CREDENTIALS harus memiliki, minimal, izin berikut:
+ Untuk COPY dari Amazon S3, izin untuk MENCANTUMKAN bucket Amazon S3 dan DAPATKAN objek Amazon S3 yang sedang dimuat, dan file manifes, jika digunakan.
+ Untuk COPY dari Amazon S3, Amazon EMR, dan host jarak jauh (SSH) dengan data berformat JSON, izin untuk DAFTAR dan DAPATKAN file di JSONPaths Amazon S3, jika digunakan. 
+ Untuk COPY dari DynamoDB, izin untuk SCAN dan DESKRIPSIKAN tabel DynamoDB yang sedang dimuat. 
+ Untuk COPY dari kluster EMR Amazon, izin untuk `ListInstances` tindakan di klaster EMR Amazon. 
+ Untuk izin UNLOAD ke Amazon S3, GET, LIST, dan PUT untuk bucket Amazon S3 tempat file datanya dibongkar.
+ Untuk CREATE LIBRARY dari Amazon S3, izin untuk DAFTAR bucket Amazon S3 dan DAPATKAN objek Amazon S3 yang sedang diimpor.

**catatan**  
Jika Anda menerima pesan galat`S3ServiceException: Access Denied`, saat menjalankan perintah COPY, UNLOAD, atau CREATE LIBRARY, klaster Anda tidak memiliki izin akses yang tepat untuk Amazon S3.

Anda dapat mengelola izin IAM dengan melampirkan kebijakan IAM ke peran IAM yang dilampirkan ke kluster Anda, ke pengguna, atau ke grup tempat pengguna Anda berada. Misalnya, kebijakan `AmazonS3ReadOnlyAccess` terkelola memberikan izin LIST dan GET ke resource Amazon S3. Untuk informasi selengkapnya tentang kebijakan IAM, lihat [Mengelola Kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) di Panduan Pengguna *IAM*. 

# Menggunakan COPY dengan alias jalur akses Amazon S3
<a name="copy-usage_notes-s3-access-point-alias"></a>

COPY mendukung alias jalur akses Amazon S3. Untuk informasi selengkapnya, lihat [Menggunakan alias gaya ember untuk titik akses Anda di](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html) Panduan Pengguna Layanan Penyimpanan *Sederhana Amazon*.

# Memuat data multibyte dari Amazon S3
<a name="copy-usage_notes-multi-byte"></a>

Jika data Anda menyertakan karakter multibyte non-ASCII (seperti karakter Mandarin atau Sirilik), Anda harus memuat data ke kolom VARCHAR. Tipe data VARCHAR mendukung karakter UTF-8 empat byte, tetapi tipe data CHAR hanya menerima karakter ASCII single-byte. Anda tidak dapat memuat karakter lima byte atau lebih panjang ke dalam tabel Amazon Redshift. Untuk informasi selengkapnya, lihat [Karakter multibyte](c_Supported_data_types.md#c_Supported_data_types-multi-byte-characters). 

# Memuat kolom tipe data GEOMETRI atau GEOGRAFI
<a name="copy-usage_notes-spatial-data"></a>

Anda dapat MENYALIN ke `GEOMETRY` atau `GEOGRAPHY` kolom dari data dalam file teks yang dibatasi karakter, seperti file CSV. Data harus dalam bentuk heksadesimal dari format biner yang terkenal (baik WKB atau EWKB) atau format teks terkenal (baik WKT atau EWKT) dan sesuai dengan ukuran maksimum satu baris input ke perintah COPY. Untuk informasi selengkapnya, lihat [MENYONTEK](r_COPY.md). 

Untuk informasi tentang cara memuat dari shapefile, lihat. [Memuat shapefile ke Amazon Redshift](spatial-copy-shapefile.md)

Untuk informasi selengkapnya tentang `GEOMETRY` atau tipe `GEOGRAPHY` data, lihat[Menanyakan data spasial di Amazon Redshift](geospatial-overview.md).

# Memuat tipe data HLLSKETCH
<a name="copy-usage_notes-hll"></a>

Anda dapat menyalin sketsa HLL hanya dalam format jarang atau padat yang didukung oleh Amazon Redshift. Untuk menggunakan perintah COPY pada HyperLogLog sketsa, gunakan format Base64 untuk HyperLogLog sketsa padat dan format JSON untuk sketsa jarang. HyperLogLog Untuk informasi selengkapnya, lihat [HyperLogLog fungsi](hyperloglog-functions.md). 

Contoh berikut mengimpor data dari file CSV ke dalam tabel menggunakan CREATE TABLE dan COPY. Pertama, contoh membuat tabel `t1` menggunakan CREATE TABLE.

```
CREATE TABLE t1 (sketch hllsketch, a bigint);
```

Kemudian menggunakan COPY untuk mengimpor data dari file CSV ke dalam tabel`t1`. 

```
COPY t1 FROM s3://amzn-s3-demo-bucket/unload/' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' CSV;
```

# Memuat kolom tipe data VARBYTE
<a name="copy-usage-varbyte"></a>

Anda dapat memuat data dari file dalam format CSV, Parket, dan ORC. Untuk CSV, data dimuat dari file dalam representasi heksadesimal dari data VARBYTE. Anda tidak dapat memuat data VARBYTE dengan `FIXEDWIDTH` opsi. `REMOVEQUOTES`Opsi `ADDQUOTES` atau COPY tidak didukung. Kolom VARBYTE tidak dapat digunakan sebagai kolom partisi. 

# Kesalahan saat membaca banyak file
<a name="copy-usage_notes-multiple-files"></a>

Perintah COPY adalah atom dan transaksional. Dengan kata lain, bahkan ketika perintah COPY membaca data dari beberapa file, seluruh proses diperlakukan sebagai satu transaksi. Jika COPY mengalami kesalahan saat membaca file, COPY akan mencoba ulang secara otomatis hingga waktu proses habis (lihat[statement\$1timeout](r_statement_timeout.md)) atau jika data tidak dapat diunduh dari Amazon S3 untuk jangka waktu yang lama (antara 15 dan 30 menit), memastikan bahwa setiap file dimuat hanya sekali. Jika perintah COPY gagal, seluruh transaksi dibatalkan dan semua perubahan dibatalkan. Untuk informasi selengkapnya tentang penanganan error beban, lihat[Memecahkan masalah beban data](t_Troubleshooting_load_errors.md). 

Setelah perintah COPY berhasil dimulai, itu tidak gagal jika sesi berakhir, misalnya ketika klien terputus. Namun, jika perintah COPY berada dalam blok transaksi BEGIN... END yang tidak selesai karena sesi berakhir, seluruh transaksi, termasuk COPY, akan dibatalkan. Untuk informasi lebih lanjut tentang transaksi, lihat[MULAI](r_BEGIN.md).

# COPY dari format JSON
<a name="copy-usage_notes-copy-from-json"></a>

Struktur data JSON terdiri dari satu set objek atau array. *Objek* JSON dimulai dan diakhiri dengan tanda kurung gigi, dan berisi kumpulan pasangan nama-nilai yang tidak berurutan. Setiap nama dan nilai dipisahkan oleh titik dua, dan pasangan dipisahkan dengan koma. Namanya adalah string dalam tanda kutip ganda. Karakter tanda kutip harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”. 

*Array* JSON dimulai dan diakhiri dengan tanda kurung, dan berisi kumpulan nilai yang diurutkan dipisahkan oleh koma. Nilai dapat berupa string dalam tanda kutip ganda, angka, Boolean benar atau salah, null, objek JSON, atau array. 

Objek dan array JSON dapat bersarang, memungkinkan struktur data hierarkis. Contoh berikut menunjukkan struktur data JSON dengan dua objek yang valid. 

```
{
    "id": 1006410,
    "title": "Amazon Redshift Database Developer Guide"
}
{
    "id": 100540,
    "name": "Amazon Simple Storage Service User Guide"
}
```

Berikut ini menunjukkan data yang sama dengan dua array JSON.

```
[
    1006410,
    "Amazon Redshift Database Developer Guide"
]
[
    100540,
    "Amazon Simple Storage Service User Guide"
]
```

## Opsi COPY untuk JSON
<a name="copy-usage-json-options"></a>

Anda dapat menentukan opsi berikut saat menggunakan COPY dengan data format JSON: 
+ `'auto' `— COPY secara otomatis memuat bidang dari file JSON. 
+ `'auto ignorecase'`— COPY secara otomatis memuat bidang dari file JSON sambil mengabaikan kasus nama bidang.
+ `s3://jsonpaths_file`— COPY menggunakan JSONPaths file untuk mengurai data sumber JSON. *JSONPaths File adalah file* teks yang berisi objek JSON tunggal dengan nama `"jsonpaths"` dipasangkan dengan array ekspresi. JSONPath Jika nama adalah string selain`"jsonpaths"`, COPY menggunakan `'auto'` argumen alih-alih menggunakan JSONPaths file. 

Untuk contoh yang menunjukkan cara memuat data menggunakan`'auto'`,`'auto ignorecase'`, atau JSONPaths file, dan menggunakan objek JSON atau array, lihat. [Salin dari contoh JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json) 

## JSONPath pilihan
<a name="copy-usage-json-options"></a>

Dalam sintaks Amazon Redshift COPY, JSONPath ekspresi menentukan jalur eksplisit ke elemen nama tunggal dalam struktur data hierarkis JSON, menggunakan notasi braket atau notasi titik. Amazon Redshift tidak mendukung JSONPath elemen apa pun, seperti karakter wildcard atau ekspresi filter, yang mungkin diselesaikan ke jalur ambigu atau beberapa elemen nama. Akibatnya, Amazon Redshift tidak dapat mengurai struktur data multi-level yang kompleks.

Berikut ini adalah contoh JSONPaths file dengan JSONPath ekspresi menggunakan notasi braket. Tanda dolar (\$1) mewakili struktur tingkat akar. 

```
{
    "jsonpaths": [
       "$['id']",
       "$['store']['book']['title']",
	"$['location'][0]" 
    ]
}
```

 Pada contoh sebelumnya, `$['location'][0]` referensi elemen pertama dalam array. JSON menggunakan pengindeksan array berbasis nol. Indeks array harus bilangan bulat positif (lebih besar dari atau sama dengan nol).

Contoh berikut menunjukkan JSONPaths file sebelumnya menggunakan notasi titik. 

```
{
    "jsonpaths": [
       "$.id",
       "$.store.book.title",
	"$.location[0]"
    ]
}
```

Anda tidak dapat mencampur notasi braket dan notasi titik dalam array. `jsonpaths` Kurung dapat digunakan dalam notasi braket dan notasi titik untuk referensi elemen array. 

Saat menggunakan notasi titik, JSONPath ekspresi tidak dapat berisi karakter berikut: 
+ Tanda kutip lurus tunggal (') 
+ Periode, atau titik (.) 
+ Kurung ([]) kecuali digunakan untuk referensi elemen array 

Jika nilai dalam pasangan nama-nilai direferensikan oleh JSONPath ekspresi adalah objek atau array, seluruh objek atau array dimuat sebagai string, termasuk tanda kurung atau tanda kurung. Misalnya, misalkan data JSON Anda berisi objek berikut. 

```
{
    "id": 0,
    "guid": "84512477-fa49-456b-b407-581d0d851c3c",
    "isActive": true,
    "tags": [
        "nisi",
        "culpa",
        "ad",
        "amet",
        "voluptate",
        "reprehenderit",
        "veniam"
    ],
    "friends": [
        {
            "id": 0,
            "name": "Martha Rivera"
        },
        {
            "id": 1,
            "name": "Renaldo"
        }
    ]
}
```

 JSONPath Ekspresi `$['tags']` kemudian mengembalikan nilai berikut. 

```
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]" 
```

 JSONPath Ekspresi `$['friends'][1]` kemudian mengembalikan nilai berikut. 

```
"{"id": 1,"name": "Renaldo"}" 
```

Setiap JSONPath ekspresi dalam `jsonpaths` array sesuai dengan satu kolom di tabel target Amazon Redshift. Urutan elemen `jsonpaths` array harus sesuai dengan urutan kolom dalam tabel target atau daftar kolom, jika daftar kolom digunakan. 

Untuk contoh yang menunjukkan cara memuat data menggunakan `'auto'` argumen atau JSONPaths file, dan menggunakan objek JSON atau array, lihat. [Salin dari contoh JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json) 

Untuk informasi tentang cara menyalin beberapa file JSON, lihat[Menggunakan manifes untuk menentukan file data](loading-data-files-using-manifest.md).

## Karakter melarikan diri di JSON
<a name="copy-usage-json-escape-characters"></a>

COPY dimuat `\n` sebagai karakter baris baru dan dimuat `\t` sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan garis miring terbalik (). `\\`

Misalnya, Anda memiliki JSON berikut dalam file bernama `escape.json` dalam ember`s3://amzn-s3-demo-bucket/json/`.

```
{
  "backslash": "This is a backslash: \\",
  "newline": "This sentence\n is on two lines.",
  "tab": "This sentence \t contains a tab."
}
```

Jalankan perintah berikut untuk membuat tabel ESCAPES dan memuat JSON.

```
create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35));

copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as json 'auto';
```

Kueri tabel ESCAPES untuk melihat hasilnya.

```
select * from escapes;

       backslash        |      newline      |               tab
------------------------+-------------------+----------------------------------
 This is a backslash: \ | This sentence     | This sentence    contains a tab.
                        :  is on two lines.
(1 row)
```

## Hilangnya presisi numerik
<a name="copy-usage-json-rounding"></a>

Anda mungkin kehilangan presisi saat memuat angka dari file data dalam format JSON ke kolom yang didefinisikan sebagai tipe data numerik. Beberapa nilai floating point tidak terwakili persis dalam sistem komputer. Akibatnya, data yang Anda salin dari file JSON mungkin tidak dibulatkan seperti yang Anda harapkan. Untuk menghindari hilangnya presisi, kami sarankan menggunakan salah satu alternatif berikut:
+ Mewakili angka sebagai string dengan melampirkan nilai dalam karakter kutipan ganda.
+ Gunakan [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) untuk membulatkan angka alih-alih memotong.
+ Alih-alih menggunakan file JSON atau Avro, gunakan file teks CSV, dibatasi karakter, atau lebar tetap.

# COPY dari format data kolumnar
<a name="copy-usage_notes-copy-from-columnar"></a>

COPY dapat memuat data dari Amazon S3 dalam format kolumnar berikut:
+ ORC
+ Parquet

Untuk contoh menggunakan COPY dari format data kolumnar, lihat. [Contoh COPY](r_COPY_command_examples.md)

COPY mendukung data berformat kolom dengan pertimbangan berikut:
+ Bucket Amazon S3 harus berada di AWS Wilayah yang sama dengan database Amazon Redshift. 
+ *Untuk mengakses data Amazon S3 Anda melalui titik akhir VPC, siapkan akses menggunakan kebijakan IAM dan peran IAM seperti yang dijelaskan dalam Menggunakan Amazon Redshift Spectrum dengan Perutean [VPC yang Ditingkatkan dalam Panduan Manajemen Pergeseran Merah Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html).* 
+ COPY tidak secara otomatis menerapkan pengkodean kompresi. 
+ Hanya parameter COPY berikut yang didukung: 
  + [TERIMA INVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) saat menyalin dari file ORC atau Parket.
  + [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
  + [DARI](copy-parameters-data-source-s3.md#copy-parameters-from)
  + [IAM\$1PERAN](copy-parameters-authorization.md#copy-iam-role)
  + [KREDENSIAL](copy-parameters-authorization.md#copy-credentials)
  + [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
  + [MANIFES](copy-parameters-data-source-s3.md#copy-manifest)
  + [EKSPLISIT\$1ID](copy-parameters-data-conversion.md#copy-explicit-ids)
+ Jika COPY mengalami kesalahan saat memuat, perintah gagal. ACCEPTANYDATE dan MAXERROR tidak didukung untuk tipe data kolumnar.
+ Pesan kesalahan dikirim ke klien SQL. Beberapa kesalahan dicatat di STL\$1LOAD\$1ERRORS dan STL\$1ERROR.
+ COPY menyisipkan nilai ke dalam kolom tabel target dalam urutan yang sama seperti kolom terjadi dalam file data kolumnar. Jumlah kolom dalam tabel target dan jumlah kolom dalam file data harus cocok.
+ Jika file yang Anda tentukan untuk operasi COPY mencakup salah satu ekstensi berikut, kami mendekompresi data tanpa perlu menambahkan parameter apa pun: 
  + `.gz`
  + `.snappy`
  + `.bz2`
+ SALIN dari format file Parket dan ORC menggunakan Redshift Spectrum dan akses bucket. Untuk menggunakan COPY untuk format ini, pastikan tidak ada kebijakan IAM yang memblokir penggunaan Amazon URLs S3 yang telah ditetapkan sebelumnya. Presigned URLs yang dihasilkan oleh Amazon Redshift berlaku selama 1 jam sehingga Amazon Redshift memiliki cukup waktu untuk memuat semua file dari bucket Amazon S3. URL presigned unik dihasilkan untuk setiap file yang dipindai oleh COPY dari format data kolumnar. Untuk kebijakan bucket yang menyertakan `s3:signatureAge` tindakan, pastikan untuk menetapkan nilainya setidaknya 3.600.000 milidetik. Untuk informasi selengkapnya, lihat [Menggunakan Amazon Redshift Spectrum dengan perutean VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html) yang disempurnakan.
+ Parameter REGION tidak didukung dengan COPY dari format data kolumnar. Bahkan jika bucket Amazon S3 dan database Anda sama Wilayah AWS, Anda dapat menemukan kesalahan, seperti, argumen REGION tidak didukung untuk COPY berbasis PARQUET.
+ COPY dari format kolumnar sekarang mendukung penskalaan konkurensi. Untuk mengaktifkan penskalaan konkurensi, lihat [Mengonfigurasi antrian penskalaan konkurensi](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html#concurrency-scaling-queues).

# string DATEFORMAT dan TIMEFORMAT
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings"></a>

Perintah COPY menggunakan opsi DATEFORMAT dan TIMEFORMAT untuk mengurai nilai tanggal dan waktu dalam data sumber Anda. DATEFORMAT dan TIMEFORMAT adalah string yang diformat yang harus sesuai dengan format nilai tanggal dan waktu data sumber Anda. Misalnya, perintah COPY memuat data sumber dengan nilai tanggal `Jan-01-1999` harus menyertakan string DATEFORMAT berikut:

```
COPY ...
            DATEFORMAT AS 'MON-DD-YYYY'
```

Untuk informasi selengkapnya tentang mengelola konversi data COPY, lihat [Parameter konversi data](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html). 

String DATEFORMAT dan TIMEFORMAT dapat berisi pemisah datetime (seperti '', '`-`', atau '`/``:`'), serta format datepart dan timepart dalam tabel berikut.

**catatan**  
Jika Anda tidak dapat mencocokkan format nilai tanggal atau waktu dengan bagian tanggal dan waktu berikut, atau jika Anda memiliki nilai tanggal dan waktu yang menggunakan format yang berbeda satu sama lain, gunakan `'auto'` argumen dengan parameter DATEFORMAT atau TIMEFORMAT. `'auto'`Argumen mengenali beberapa format yang tidak didukung saat menggunakan string DATEFORMAT atau TIMEFORMAT. Untuk informasi selengkapnya, lihat [Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT](automatic-recognition.md).

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

Format tanggal default adalah YYYY-MM-DD. Format stempel waktu default tanpa zona waktu (TIMESTAMP) adalah HH: MI: SS. YYYY-MM-DD Stempel waktu default dengan format zona waktu (TIMESTAMPTZ) adalah YYYY-MM-DD HH:MI:SSOF, di mana OF adalah offset dari UTC (misalnya, - 8:00. Anda tidak dapat menyertakan penentu zona waktu (TZ, tz, atau OF) di timeformat\$1string. Bidang detik (SS) juga mendukung detik pecahan hingga tingkat detail mikrodetik. Untuk memuat data TIMESTAMPTZ yang dalam format yang berbeda dari format default, tentukan 'otomatis'.

Berikut ini adalah beberapa contoh tanggal atau waktu yang dapat Anda temui dalam data sumber Anda, dan string DATEFORMAT atau TIMEFORMAT yang sesuai untuknya.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

## Contoh
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings-examples"></a>

Untuk contoh menggunakan TIMEFORMAT, lihat[Memuat stempel waktu atau datestamp](r_COPY_command_examples.md#r_COPY_command_examples-load-a-time-datestamp).

# Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT
<a name="automatic-recognition"></a>

Jika Anda menentukan `'auto'` sebagai argumen untuk parameter DATEFORMAT atau TIMEFORMAT, Amazon Redshift akan secara otomatis mengenali dan mengonversi format tanggal atau format waktu dalam data sumber Anda. Bagian berikut menunjukkan satu contoh.

```
copy favoritemovies from 'dynamodb://ProductCatalog' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
dateformat 'auto';
```

Ketika digunakan dengan `'auto'` argumen untuk DATEFORMAT dan TIMEFORMAT, COPY mengenali dan mengonversi format tanggal dan waktu yang tercantum dalam tabel di. [string DATEFORMAT dan TIMEFORMATContoh](r_DATEFORMAT_and_TIMEFORMAT_strings.md) Selain itu, `'auto'` argumen mengenali format berikut yang tidak didukung saat menggunakan string DATEFORMAT dan TIMEFORMAT.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/automatic-recognition.html)

Pengenalan otomatis tidak mendukung epochsec dan epochmillisecs.

Untuk menguji apakah nilai tanggal atau stempel waktu akan dikonversi secara otomatis, gunakan fungsi CAST untuk mencoba mengonversi string ke nilai tanggal atau stempel waktu. Misalnya, perintah berikut menguji nilai stempel waktu: `'J2345678 04:05:06.789'`

```
create table formattest (test char(21));
insert into formattest values('J2345678 04:05:06.789');
select test, cast(test as timestamp) as timestamp, cast(test as date) as date from formattest;

        test          |      timestamp      |	date
----------------------+---------------------+------------
J2345678 04:05:06.789   1710-02-23 04:05:06	1710-02-23
```

Jika data sumber untuk kolom DATE menyertakan informasi waktu, komponen waktu terpotong. Jika data sumber untuk kolom TIMESTAMP menghilangkan informasi waktu, 00:00:00 digunakan untuk komponen waktu.

# Contoh COPY
<a name="r_COPY_command_examples"></a>

**catatan**  
Contoh-contoh ini berisi jeda baris untuk keterbacaan. Jangan sertakan jeda baris atau spasi dalam string *credentials-args* Anda.

**Topics**
+ [Muat FAVORITEMOVIES dari tabel DynamoDB](#r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table)
+ [Muat LISTING dari bucket Amazon S3](#r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket)
+ [Muat LISTING dari kluster EMR Amazon](#copy-command-examples-emr)
+ [Example: COPY from Amazon S3 using a manifest](#copy-command-examples-manifest)
+ [Muat LISTING dari file yang dibatasi pipa (pembatas default)](#r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter)
+ [Muat LISTING menggunakan data kolumnar dalam format Parket](#r_COPY_command_examples-load-listing-from-parquet)
+ [Muat LISTING menggunakan data kolumnar dalam format ORC](#r_COPY_command_examples-load-listing-from-orc)
+ [Muat EVENT dengan opsi](#r_COPY_command_examples-load-event-with-options)
+ [Muat VENUE dari file data dengan lebar tetap](#r_COPY_command_examples-load-venue-from-a-fixed-width-data-file)
+ [Muat KATEGORI dari file CSV](#load-from-csv)
+ [Muat VENUE dengan nilai eksplisit untuk kolom IDENTITY](#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)
+ [Muat WAKTU dari file GZIP yang dibatasi pipa](#r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file)
+ [Memuat stempel waktu atau datestamp](#r_COPY_command_examples-load-a-time-datestamp)
+ [Memuat data dari file dengan nilai default](#r_COPY_command_examples-load-data-from-a-file-with-default-values)
+ [SALIN data dengan opsi ESCAPE](#r_COPY_command_examples-copy-data-with-the-escape-option)
+ [Salin dari contoh JSON](#r_COPY_command_examples-copy-from-json)
+ [Salin dari contoh Avro](#r_COPY_command_examples-copy-from-avro)
+ [Mempersiapkan file untuk COPY dengan opsi ESCAPE](#r_COPY_preparing_data)
+ [Memuat shapefile ke Amazon Redshift](#copy-example-spatial-copy-shapefile)
+ [COPY perintah dengan opsi NOLOAD](#r_COPY_command_examples-load-noload-option)
+ [Perintah COPY dengan pembatas multibyte dan opsi ENCODING](#r_COPY_command_examples-load-encoding-multibyte-delimiter-option)

## Muat FAVORITEMOVIES dari tabel DynamoDB
<a name="r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table"></a>

 AWS SDKs *Termasuk contoh sederhana membuat tabel DynamoDB yang disebut Movies.* (Untuk contoh ini, lihat [Memulai dengan DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html).) Contoh berikut memuat tabel Amazon Redshift MOVIES dengan data dari tabel DynamoDB. Tabel Amazon Redshift harus sudah ada di database.

```
copy favoritemovies from 'dynamodb://Movies'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
readratio 50;
```

## Muat LISTING dari bucket Amazon S3
<a name="r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket"></a>

Contoh berikut memuat LISTING dari bucket Amazon S3. Perintah COPY memuat semua file di `/data/listing/` folder.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listing/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Muat LISTING dari kluster EMR Amazon
<a name="copy-command-examples-emr"></a>

Contoh berikut memuat tabel PENJUALAN dengan data yang dibatasi tab dari file terkompresi lzop di cluster EMR Amazon. COPY memuat setiap file di `myoutput/` folder yang dimulai dengan`part-`.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;
```

Contoh berikut memuat tabel PENJUALAN dengan data yang diformat JSON di cluster EMR Amazon. COPY memuat setiap file di `myoutput/json/` folder.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/json/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON 's3://amzn-s3-demo-bucket/jsonpaths.txt';
```

## Menggunakan manifes untuk menentukan file data
<a name="copy-command-examples-manifest"></a>

Anda dapat menggunakan manifes untuk memastikan bahwa perintah COPY memuat semua file yang diperlukan, dan hanya file yang diperlukan, dari Amazon S3. Anda juga dapat menggunakan manifes saat Anda perlu memuat beberapa file dari bucket atau file berbeda yang tidak memiliki awalan yang sama. 

Misalnya, anggaplah Anda perlu memuat tiga file berikut:`custdata1.txt`,`custdata2.txt`, dan`custdata3.txt`. Anda dapat menggunakan perintah berikut untuk memuat semua file `amzn-s3-demo-bucket` yang dimulai `custdata` dengan menentukan awalan: 

```
copy category
from 's3://amzn-s3-demo-bucket/custdata' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Jika hanya dua file yang ada karena kesalahan, COPY hanya memuat dua file tersebut dan selesai dengan sukses, menghasilkan pemuatan data yang tidak lengkap. Jika bucket juga berisi file yang tidak diinginkan yang kebetulan menggunakan awalan yang sama, seperti file bernama `custdata.backup` misalnya, COPY memuat file itu juga, sehingga data yang tidak diinginkan dimuat.

Untuk memastikan bahwa semua file yang diperlukan dimuat dan untuk mencegah file yang tidak diinginkan dimuat, Anda dapat menggunakan file manifes. Manifes adalah file teks berformat JSON yang mencantumkan file yang akan diproses oleh perintah COPY. Misalnya, manifes berikut memuat tiga file dalam contoh sebelumnya.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.1",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.2",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.3",
         "mandatory":true
      }
   ]
}
```

`mandatory`Bendera opsional menunjukkan apakah COPY harus dihentikan jika file tidak ada. Nilai default-nya `false`. Terlepas dari pengaturan wajib, COPY berakhir jika tidak ada file yang ditemukan. Dalam contoh ini, COPY mengembalikan kesalahan jika salah satu file tidak ditemukan. File yang tidak diinginkan yang mungkin telah diambil jika Anda menetapkan hanya sebuah key prefix, seperti, diabaikan`custdata.backup`, karena mereka tidak berada di manifes. 

Saat memuat dari file data dalam format ORC atau Parket, `meta` bidang diperlukan, seperti yang ditunjukkan pada contoh berikut.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```

Contoh berikut menggunakan manifes bernama`cust.manifest`. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc
manifest;
```

Anda dapat menggunakan manifes untuk memuat file dari bucket atau file yang berbeda yang tidak memiliki awalan yang sama. Contoh berikut menunjukkan JSON untuk memuat data dengan file yang namanya dimulai dengan cap tanggal.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/2013-10-04-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-05-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-06-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-07-custdata.txt","mandatory":true}
  ]
}
```

Manifes dapat mencantumkan file yang ada di bucket yang berbeda, selama bucket berada di AWS Region yang sama dengan cluster. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata2.txt","mandatory":false}
  ]
}
```

## Muat LISTING dari file yang dibatasi pipa (pembatas default)
<a name="r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter"></a>

Contoh berikut adalah kasus yang sangat sederhana di mana tidak ada opsi yang ditentukan dan file input berisi pembatas default, karakter pipa ('\$1'). 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Muat LISTING menggunakan data kolumnar dalam format Parket
<a name="r_COPY_command_examples-load-listing-from-parquet"></a>

Contoh berikut memuat data dari folder di Amazon S3 bernama parket. 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/parquet/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as parquet;
```

## Muat LISTING menggunakan data kolumnar dalam format ORC
<a name="r_COPY_command_examples-load-listing-from-orc"></a>

Contoh berikut memuat data dari folder di Amazon S3 bernama. `orc` 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/orc/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc;
```

## Muat EVENT dengan opsi
<a name="r_COPY_command_examples-load-event-with-options"></a>

Contoh berikut memuat data yang dibatasi pipa ke dalam tabel EVENT dan menerapkan aturan berikut: 
+ Jika pasangan tanda kutip digunakan untuk mengelilingi string karakter apa pun, mereka akan dihapus.
+ Baik string kosong dan string yang berisi kosong dimuat sebagai nilai NULL.
+ Beban gagal jika lebih dari 5 kesalahan dikembalikan.
+ Nilai stempel waktu harus sesuai dengan format yang ditentukan; misalnya, stempel waktu yang valid adalah. `2008-09-26 05:43:12`

```
copy event
from 's3://amzn-s3-demo-bucket/data/allevents_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
removequotes
emptyasnull
blanksasnull
maxerror 5
delimiter '|'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

## Muat VENUE dari file data dengan lebar tetap
<a name="r_COPY_command_examples-load-venue-from-a-fixed-width-data-file"></a>

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

Contoh sebelumnya mengasumsikan file data yang diformat dengan cara yang sama seperti data sampel yang ditampilkan. Dalam contoh berikut, spasi bertindak sebagai placeholder sehingga semua kolom memiliki lebar yang sama seperti yang tercantum dalam spesifikasi: 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
```

## Muat KATEGORI dari file CSV
<a name="load-from-csv"></a>

Misalkan Anda ingin memuat KATEGORI dengan nilai yang ditunjukkan pada tabel berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_COPY_command_examples.html)

Contoh berikut menunjukkan isi file teks dengan nilai bidang dipisahkan dengan koma.

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,All "non-musical" theatre  
14,Shows,Opera,All opera, light, and "rock" opera
15,Concerts,Classical,All symphony, concerto, and choir concerts
```

Jika Anda memuat file menggunakan parameter DELIMITER untuk menentukan input yang dibatasi koma, perintah COPY gagal karena beberapa kolom input berisi koma. Anda dapat menghindari masalah itu dengan menggunakan parameter CSV dan melampirkan bidang yang berisi koma dalam karakter tanda kutip. Jika karakter tanda kutip muncul dalam string yang dikutip, Anda harus menghindarinya dengan menggandakan karakter tanda kutip. Karakter tanda kutip default adalah tanda kutip ganda, jadi Anda harus keluar dari setiap tanda kutip ganda dengan tanda kutip ganda tambahan. File input baru Anda terlihat seperti ini. 

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,"All ""non-musical"" theatre"
14,Shows,Opera,"All opera, light, and ""rock"" opera"
15,Concerts,Classical,"All symphony, concerto, and choir concerts"
```

Dengan asumsi nama file`category_csv.txt`, Anda dapat memuat file dengan menggunakan perintah COPY berikut:

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv;
```

Atau, untuk menghindari kebutuhan untuk menghindari tanda kutip ganda di input Anda, Anda dapat menentukan karakter tanda kutip yang berbeda dengan menggunakan parameter QUOTE AS. Misalnya, versi berikut `category_csv.txt` menggunakan '`%`' sebagai karakter tanda kutip.

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,%All "non-musical" theatre%
14,Shows,Opera,%All opera, light, and "rock" opera%
15,Concerts,Classical,%All symphony, concerto, and choir concerts%
```

Perintah COPY berikut menggunakan QUOTE AS untuk memuat`category_csv.txt`:

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv quote as '%';
```

## Muat VENUE dengan nilai eksplisit untuk kolom IDENTITY
<a name="r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column"></a>

Contoh berikut mengasumsikan bahwa ketika tabel VENUE dibuat bahwa setidaknya satu kolom (seperti `venueid` kolom) ditentukan untuk menjadi kolom IDENTITY. Perintah ini mengesampingkan perilaku IDENTITY default dari nilai autogenerating untuk kolom IDENTITY dan sebagai gantinya memuat nilai eksplisit dari file venue.txt. Amazon Redshift tidak memeriksa apakah nilai IDENTITAS duplikat dimuat ke dalam tabel saat menggunakan opsi EXLICIT\$1IDS. 

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
explicit_ids;
```

## Muat WAKTU dari file GZIP yang dibatasi pipa
<a name="r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file"></a>

Contoh berikut memuat tabel TIME dari file GZIP yang dibatasi pipa:

```
copy time
from 's3://amzn-s3-demo-bucket/data/timerows.gz' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
gzip
delimiter '|';
```

## Memuat stempel waktu atau datestamp
<a name="r_COPY_command_examples-load-a-time-datestamp"></a>

Contoh berikut memuat data dengan stempel waktu yang diformat.

**catatan**  
TIMEFORMAT juga `HH:MI:SS` dapat mendukung detik pecahan di luar tingkat `SS` detail hingga mikrodetik. File yang `time.txt` digunakan dalam contoh ini berisi satu baris,`2009-01-12 14:15:57.119568`.

```
copy timestamp1 
from 's3://amzn-s3-demo-bucket/data/time.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

Hasil dari salinan ini adalah sebagai berikut: 

```
select * from timestamp1;
c1
----------------------------
2009-01-12 14:15:57.119568
(1 row)
```

## Memuat data dari file dengan nilai default
<a name="r_COPY_command_examples-load-data-from-a-file-with-default-values"></a>

Contoh berikut menggunakan variasi tabel VENUE dalam database TICKIT. Pertimbangkan tabel VENUE\$1NEW yang didefinisikan dengan pernyataan berikut: 

```
create table venue_new(
venueid smallint not null,
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Pertimbangkan file data venue\$1noseats.txt yang tidak berisi nilai untuk kolom VENUESEATS, seperti yang ditunjukkan pada contoh berikut: 

```
1|Toyota Park|Bridgeview|IL|
2|Columbus Crew Stadium|Columbus|OH|
3|RFK Stadium|Washington|DC|
4|CommunityAmerica Ballpark|Kansas City|KS|
5|Gillette Stadium|Foxborough|MA|
6|New York Giants Stadium|East Rutherford|NJ|
7|BMO Field|Toronto|ON|
8|The Home Depot Center|Carson|CA|
9|Dick's Sporting Goods Park|Commerce City|CO|
10|Pizza Hut Park|Frisco|TX|
```

Pernyataan COPY berikut akan berhasil memuat tabel dari file dan menerapkan nilai DEFAULT ('1000') ke kolom yang dihilangkan: 

```
copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_noseats.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Sekarang lihat tabel yang dimuat: 

```
select * from venue_new order by venueid;
venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |       1000
2 | Columbus Crew Stadium      | Columbus        | OH         |       1000
3 | RFK Stadium                | Washington      | DC         |       1000
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |       1000
5 | Gillette Stadium           | Foxborough      | MA         |       1000
6 | New York Giants Stadium    | East Rutherford | NJ         |       1000
7 | BMO Field                  | Toronto         | ON         |       1000
8 | The Home Depot Center      | Carson          | CA         |       1000
9 | Dick's Sporting Goods Park | Commerce City   | CO         |       1000
10 | Pizza Hut Park             | Frisco          | TX         |       1000
(10 rows)
```

Untuk contoh berikut, selain mengasumsikan bahwa tidak ada data VENUESEATS yang disertakan dalam file, asumsikan juga bahwa tidak ada data VENUENAME yang disertakan: 

```
1||Bridgeview|IL|
2||Columbus|OH|
3||Washington|DC|
4||Kansas City|KS|
5||Foxborough|MA|
6||East Rutherford|NJ|
7||Toronto|ON|
8||Carson|CA|
9||Commerce City|CO|
10||Frisco|TX|
```

 Menggunakan definisi tabel yang sama, pernyataan COPY berikut gagal karena tidak ada nilai DEFAULT yang ditentukan untuk VENUENAME, dan VENUENAME adalah kolom NOT NULL: 

```
copy venue(venueid, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Sekarang pertimbangkan variasi tabel VENUE yang menggunakan kolom IDENTITY: 

```
create table venue_identity(
venueid int identity(1,1),
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Seperti contoh sebelumnya, asumsikan bahwa kolom VENUESEATS tidak memiliki nilai yang sesuai dalam file sumber. Pernyataan COPY berikut berhasil memuat tabel, termasuk nilai data IDENTITAS yang telah ditentukan sebelumnya, bukan membuat nilai tersebut secara otomatis: 

```
copy venue(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Pernyataan ini gagal karena tidak menyertakan kolom IDENTITY (VENUEID hilang dari daftar kolom) namun menyertakan parameter EXPLICIT\$1IDS: 

```
copy venue(venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Pernyataan ini gagal karena tidak menyertakan parameter EXPLICIT\$1IDS: 

```
copy venue(venueid, venuename, venuecity, venuestate)
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

## SALIN data dengan opsi ESCAPE
<a name="r_COPY_command_examples-copy-data-with-the-escape-option"></a>

Contoh berikut menunjukkan cara memuat karakter yang cocok dengan karakter pembatas (dalam hal ini, karakter pipa). Dalam file input, pastikan bahwa semua karakter pipa (\$1) yang ingin Anda muat lolos dengan karakter garis miring terbalik (\$1). Kemudian muat file dengan parameter ESCAPE. 

```
$ more redshiftinfo.txt
1|public\|event\|dwuser
2|public\|sales\|dwuser

create table redshiftinfo(infoid int,tableinfo varchar(50));

copy redshiftinfo from 's3://amzn-s3-demo-bucket/data/redshiftinfo.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
delimiter '|' escape;

select * from redshiftinfo order by 1;
infoid |       tableinfo
-------+--------------------
1      | public|event|dwuser
2      | public|sales|dwuser
(2 rows)
```

Tanpa parameter ESCAPE, perintah COPY ini gagal dengan `Extra column(s) found` kesalahan.

**penting**  
Jika Anda memuat data Anda menggunakan COPY dengan parameter ESCAPE, Anda juga harus menentukan parameter ESCAPE dengan perintah UNLOAD Anda untuk menghasilkan file output timbal balik. Demikian pula, jika Anda BONGKAR menggunakan parameter ESCAPE, Anda perlu menggunakan ESCAPE saat Anda MENYALIN data yang sama.

## Salin dari contoh JSON
<a name="r_COPY_command_examples-copy-from-json"></a>

Dalam contoh berikut, Anda memuat tabel CATEGORY dengan data berikut. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Muat dari data JSON menggunakan opsi 'auto'](#copy-from-json-examples-using-auto)
+ [Muat dari data JSON menggunakan opsi 'auto ignorecase'](#copy-from-json-examples-using-auto-ignorecase)
+ [Muat dari data JSON menggunakan file JSONPaths](#copy-from-json-examples-using-jsonpaths)
+ [Muat dari array JSON menggunakan file JSONPaths](#copy-from-json-examples-using-jsonpaths-arrays)

### Muat dari data JSON menggunakan opsi 'auto'
<a name="copy-from-json-examples-using-auto"></a>

Untuk memuat dari data JSON menggunakan `'auto'` opsi, data JSON harus terdiri dari satu set objek. Nama kunci harus cocok dengan nama kolom, tetapi urutannya tidak masalah. Berikut ini menunjukkan isi dari sebuah file bernama`category_object_auto.json`.

```
{
    "catdesc": "Major League Baseball",
    "catid": 1,
    "catgroup": "Sports",
    "catname": "MLB"
}
{
    "catgroup": "Sports",
    "catid": 2,
    "catname": "NHL",
    "catdesc": "National Hockey League"
}
{
    "catid": 3,
    "catname": "NFL",
    "catgroup": "Sports",
    "catdesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "catid": 4,
    "catgroup": "Sports",
    "catname": "NBA",
    "catdesc": "National Basketball Association"
}
{
    "catid": 5,
    "catgroup": "Shows",
    "catname": "Musicals",
    "catdesc": "All symphony, concerto, and choir concerts"
}
```

Untuk memuat dari file data JSON dalam contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto';
```

### Muat dari data JSON menggunakan opsi 'auto ignorecase'
<a name="copy-from-json-examples-using-auto-ignorecase"></a>

Untuk memuat dari data JSON menggunakan `'auto ignorecase'` opsi, data JSON harus terdiri dari satu set objek. Kasus nama kunci tidak harus cocok dengan nama kolom dan urutannya tidak masalah. Berikut ini menunjukkan isi dari sebuah file bernama`category_object_auto-ignorecase.json`.

```
{
    "CatDesc": "Major League Baseball",
    "CatID": 1,
    "CatGroup": "Sports",
    "CatName": "MLB"
}
{
    "CatGroup": "Sports",
    "CatID": 2,
    "CatName": "NHL",
    "CatDesc": "National Hockey League"
}
{
    "CatID": 3,
    "CatName": "NFL",
    "CatGroup": "Sports",
    "CatDesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "CatID": 4,
    "CatGroup": "Sports",
    "CatName": "NBA",
    "CatDesc": "National Basketball Association"
}
{
    "CatID": 5,
    "CatGroup": "Shows",
    "CatName": "Musicals",
    "CatDesc": "All symphony, concerto, and choir concerts"
}
```

Untuk memuat dari file data JSON dalam contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto ignorecase.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto ignorecase';
```

### Muat dari data JSON menggunakan file JSONPaths
<a name="copy-from-json-examples-using-jsonpaths"></a>

Jika objek data JSON tidak sesuai langsung dengan nama kolom, Anda dapat menggunakan JSONPaths file untuk memetakan elemen JSON ke kolom. Urutan tidak masalah dalam data sumber JSON, tetapi urutan ekspresi JSONPaths file harus sesuai dengan urutan kolom. Misalkan Anda memiliki file data berikut, bernama`category_object_paths.json`.

```
{
    "one": 1,
    "two": "Sports",
    "three": "MLB",
    "four": "Major League Baseball"
}
{
    "three": "NHL",
    "four": "National Hockey League",
    "one": 2,
    "two": "Sports"
}
{
    "two": "Sports",
    "three": "NFL",
    "one": 3,
    "four": "National Football League"
}
{
    "one": 4,
    "two": "Sports",
    "three": "NBA",
    "four": "National Basketball Association"
}
{
    "one": 6,
    "two": "Shows",
    "three": "Musicals",
    "four": "All symphony, concerto, and choir concerts"
}
```

 JSONPaths File berikut, bernama`category_jsonpath.json`, memetakan data sumber ke kolom tabel.

```
{
    "jsonpaths": [
        "$['one']",
        "$['two']",
        "$['three']",
        "$['four']"
    ]
}
```

Untuk memuat dari file data JSON dalam contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_jsonpath.json';
```

### Muat dari array JSON menggunakan file JSONPaths
<a name="copy-from-json-examples-using-jsonpaths-arrays"></a>

Untuk memuat dari data JSON yang terdiri dari satu set array, Anda harus menggunakan JSONPaths file untuk memetakan elemen array ke kolom. Misalkan Anda memiliki file data berikut, bernama`category_array_data.json`.

```
[1,"Sports","MLB","Major League Baseball"]
[2,"Sports","NHL","National Hockey League"]
[3,"Sports","NFL","National Football League"]
[4,"Sports","NBA","National Basketball Association"]
[5,"Concerts","Classical","All symphony, concerto, and choir concerts"]
```

 JSONPaths File berikut, bernama`category_array_jsonpath.json`, memetakan data sumber ke kolom tabel.

```
{
    "jsonpaths": [
        "$[0]",
        "$[1]",
        "$[2]",
        "$[3]"
    ]
}
```

Untuk memuat dari file data JSON dalam contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_array_data.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_array_jsonpath.json';
```

## Salin dari contoh Avro
<a name="r_COPY_command_examples-copy-from-avro"></a>

Dalam contoh berikut, Anda memuat tabel CATEGORY dengan data berikut. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Muat dari data Avro menggunakan opsi 'auto'](#copy-from-avro-examples-using-auto)
+ [Muat dari data Avro menggunakan opsi 'auto ignorecase'](#copy-from-avro-examples-using-auto-ignorecase)
+ [Muat dari data Avro menggunakan file JSONPaths](#copy-from-avro-examples-using-avropaths)

### Muat dari data Avro menggunakan opsi 'auto'
<a name="copy-from-avro-examples-using-auto"></a>

Untuk memuat dari data Avro menggunakan `'auto'` argumen, nama bidang dalam skema Avro harus cocok dengan nama kolom. Saat menggunakan `'auto'` argumen, urutan tidak masalah. Berikut ini menunjukkan skema untuk file bernama`category_auto.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "catid", "type": "int"},
        {"name": "catdesc", "type": "string"},
        {"name": "catname", "type": "string"},
        {"name": "catgroup", "type": "string"},
}
```

Data dalam file Avro dalam format biner, jadi tidak dapat dibaca manusia. Berikut ini menunjukkan representasi JSON dari data dalam `category_auto.avro` file. 

```
{
   "catid": 1,
   "catdesc": "Major League Baseball",
   "catname": "MLB",
   "catgroup": "Sports"
}
{
   "catid": 2,
   "catdesc": "National Hockey League",
   "catname": "NHL",
   "catgroup": "Sports"
}
{
   "catid": 3,
   "catdesc": "National Basketball Association",
   "catname": "NBA",
   "catgroup": "Sports"
}
{
   "catid": 4,
   "catdesc": "All symphony, concerto, and choir concerts",
   "catname": "Classical",
   "catgroup": "Concerts"
}
```

Untuk memuat dari file data Avro pada contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto';
```

### Muat dari data Avro menggunakan opsi 'auto ignorecase'
<a name="copy-from-avro-examples-using-auto-ignorecase"></a>

Untuk memuat dari data Avro menggunakan `'auto ignorecase'` argumen, kasus nama bidang dalam skema Avro tidak harus cocok dengan kasus nama kolom. Saat menggunakan `'auto ignorecase'` argumen, urutan tidak masalah. Berikut ini menunjukkan skema untuk file bernama`category_auto-ignorecase.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "CatID", "type": "int"},
        {"name": "CatDesc", "type": "string"},
        {"name": "CatName", "type": "string"},
        {"name": "CatGroup", "type": "string"},
}
```

Data dalam file Avro dalam format biner, jadi tidak dapat dibaca manusia. Berikut ini menunjukkan representasi JSON dari data dalam `category_auto-ignorecase.avro` file. 

```
{
   "CatID": 1,
   "CatDesc": "Major League Baseball",
   "CatName": "MLB",
   "CatGroup": "Sports"
}
{
   "CatID": 2,
   "CatDesc": "National Hockey League",
   "CatName": "NHL",
   "CatGroup": "Sports"
}
{
   "CatID": 3,
   "CatDesc": "National Basketball Association",
   "CatName": "NBA",
   "CatGroup": "Sports"
}
{
   "CatID": 4,
   "CatDesc": "All symphony, concerto, and choir concerts",
   "CatName": "Classical",
   "CatGroup": "Concerts"
}
```

Untuk memuat dari file data Avro pada contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto-ignorecase.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto ignorecase';
```

### Muat dari data Avro menggunakan file JSONPaths
<a name="copy-from-avro-examples-using-avropaths"></a>

Jika nama bidang dalam skema Avro tidak sesuai langsung dengan nama kolom, Anda dapat menggunakan JSONPaths file untuk memetakan elemen skema ke kolom. Urutan ekspresi JSONPaths file harus sesuai dengan urutan kolom. 

Misalkan Anda memiliki file data bernama `category_paths.avro` yang berisi data yang sama seperti pada contoh sebelumnya, tetapi dengan skema berikut.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "desc", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "group", "type": "string"},
        {"name": "region", "type": "string"} 
     ]
}
```

 JSONPaths File berikut, bernama`category_path.avropath`, memetakan data sumber ke kolom tabel.

```
{
    "jsonpaths": [
        "$['id']",
        "$['group']",
        "$['name']",
        "$['desc']"
    ]
}
```

Untuk memuat dari file data Avro pada contoh sebelumnya, jalankan perintah COPY berikut.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
format avro 's3://amzn-s3-demo-bucket/category_path.avropath ';
```

## Mempersiapkan file untuk COPY dengan opsi ESCAPE
<a name="r_COPY_preparing_data"></a>

Contoh berikut menjelaskan bagaimana Anda menyiapkan data untuk “melarikan diri” karakter baris baru sebelum mengimpor data ke dalam tabel Amazon Redshift menggunakan perintah COPY dengan parameter ESCAPE. Tanpa menyiapkan data untuk membatasi karakter baris baru, Amazon Redshift mengembalikan kesalahan pemuatan saat Anda menjalankan perintah COPY, karena karakter baris baru biasanya digunakan sebagai pemisah catatan. 

Misalnya, pertimbangkan file atau kolom dalam tabel eksternal yang ingin Anda salin ke tabel Amazon Redshift. Jika file atau kolom berisi konten berformat XML atau data serupa, Anda perlu memastikan bahwa semua karakter baris baru (\$1n) yang merupakan bagian dari konten diloloskan dengan karakter garis miring terbalik (\$1). 

File atau tabel yang berisi karakter baris baru yang disematkan memberikan pola yang relatif mudah untuk dicocokkan. Setiap karakter baris baru yang disematkan kemungkinan besar selalu mengikuti `>` karakter dengan potensi beberapa karakter spasi putih (`' '`atau tab) di antaranya, seperti yang dapat Anda lihat dalam contoh file teks bernama `nlTest1.txt` berikut. 

```
$ cat nlTest1.txt
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>|1000
<xml>
</xml>|2000
```

Dengan contoh berikut, Anda dapat menjalankan utilitas pemrosesan teks untuk pra-proses file sumber dan menyisipkan karakter escape jika diperlukan. (`|`Karakter dimaksudkan untuk digunakan sebagai pembatas untuk memisahkan data kolom saat disalin ke tabel Amazon Redshift.) 

```
$ sed -e ':a;N;$!ba;s/>[[:space:]]*\n/>\\\n/g' nlTest1.txt > nlTest2.txt
```

Demikian pula, Anda dapat menggunakan Perl untuk melakukan operasi serupa: 

```
cat nlTest1.txt | perl -p -e 's/>\s*\n/>\\\n/g' > nlTest2.txt
```

Untuk mengakomodasi pemuatan data dari `nlTest2.txt` file ke Amazon Redshift, kami membuat tabel dua kolom di Amazon Redshift. Kolom pertama c1, adalah kolom karakter yang menyimpan konten berformat XML dari file. `nlTest2.txt` Kolom kedua c2 memegang nilai integer dimuat dari file yang sama. 

Setelah menjalankan `sed` perintah, Anda dapat memuat data dengan benar dari `nlTest2.txt` file ke tabel Amazon Redshift menggunakan parameter ESCAPE. 

**catatan**  
Ketika Anda menyertakan parameter ESCAPE dengan perintah COPY, ia lolos dari sejumlah karakter khusus yang menyertakan karakter garis miring terbalik (termasuk baris baru). 

```
copy t2 from 's3://amzn-s3-demo-bucket/data/nlTest2.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'  
escape
delimiter as '|';

select * from t2 order by 2;

c1           |  c2
-------------+------
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>
| 1000
<xml>
</xml>       | 2000
(2 rows)
```

Anda dapat menyiapkan file data yang diekspor dari database eksternal dengan cara yang sama. Misalnya, dengan database Oracle, Anda dapat menggunakan fungsi REPLACE pada setiap kolom yang terpengaruh dalam tabel yang ingin Anda salin ke Amazon Redshift. 

```
SELECT c1, REPLACE(c2, \n',\\n' ) as c2 from my_table_with_xml
```

Selain itu, banyak alat ekspor dan ekstrak basis data, transformasi, muat (ETL) yang secara rutin memproses sejumlah besar data menyediakan opsi untuk menentukan karakter escape dan delimiter. 

## Memuat shapefile ke Amazon Redshift
<a name="copy-example-spatial-copy-shapefile"></a>

Contoh berikut menunjukkan cara memuat shapefile Esri menggunakan COPY. Untuk informasi selengkapnya tentang memuat shapefile, lihat. [Memuat shapefile ke Amazon Redshift](spatial-copy-shapefile.md) 

### Memuat shapefile
<a name="copy-example-spatial-copy-shapefile-loading-copy"></a>

Langkah-langkah berikut menunjukkan cara menelan OpenStreetMap data dari Amazon S3 menggunakan perintah COPY. Contoh ini mengasumsikan bahwa arsip shapefile Norwegia dari [situs unduhan Geofabrik](https://download.geofabrik.de/europe.html) telah diunggah ke bucket Amazon S3 pribadi di Wilayah Anda. AWS `.dbf`File`.shp`,`.shx`, dan harus berbagi awalan dan nama file Amazon S3 yang sama.

#### Menelan data tanpa penyederhanaan
<a name="spatial-copy-shapefile-loading-copy-fits"></a>

Perintah berikut membuat tabel dan menelan data yang dapat muat dalam ukuran geometri maksimum tanpa penyederhanaan apa pun. Buka perangkat `gis_osm_natural_free_1.shp` lunak GIS pilihan Anda dan periksa kolom di lapisan ini. Secara default, kolom IDENTITAS atau GEOMETRI adalah yang pertama. Ketika kolom GEOMETRI pertama, Anda dapat membuat tabel seperti yang ditunjukkan berikut.

```
CREATE TABLE norway_natural (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Atau, ketika kolom IDENTITY pertama, Anda dapat membuat tabel seperti yang ditunjukkan berikut.

```
CREATE TABLE norway_natural_with_id (
   fid INT IDENTITY(1,1),
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Sekarang Anda dapat menelan data menggunakan COPY.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully
```

Atau Anda dapat menelan data seperti yang ditunjukkan berikut. 

```
COPY norway_natural_with_id FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural_with_id' completed, 83891 record(s) loaded successfully.
```

#### Menelan data dengan penyederhanaan
<a name="spatial-copy-shapefile-loading-copy-no-fit"></a>

Perintah berikut membuat tabel dan mencoba untuk menelan data yang tidak dapat muat dalam ukuran geometri maksimum tanpa penyederhanaan apa pun. Periksa `gis_osm_water_a_free_1.shp` shapefile dan buat tabel yang sesuai seperti yang ditunjukkan berikut.

```
CREATE TABLE norway_water (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Ketika perintah COPY berjalan, itu menghasilkan kesalahan.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
ERROR:  Load into table 'norway_water' failed.  Check 'stl_load_errors' system table for details.
```

Query `STL_LOAD_ERRORS` menunjukkan bahwa geometri terlalu besar. 

```
SELECT line_number, btrim(colname), btrim(err_reason) FROM stl_load_errors WHERE query = pg_last_copy_id();
 line_number |    btrim     |                                 btrim
-------------+--------------+-----------------------------------------------------------------------
     1184705 | wkb_geometry | Geometry size: 1513736 is larger than maximum supported size: 1048447
```

Untuk mengatasinya, `SIMPLIFY AUTO` parameter ditambahkan ke perintah COPY untuk menyederhanakan geometri.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989196 record(s) loaded successfully.
```

Untuk melihat baris dan geometri yang disederhanakan, kueri`SVL_SPATIAL_SIMPLIFY`.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size |   final_tolerance
-------+-------------+-------------------+--------------+------------+------------+----------------------
    20 |     1184704 |                -1 |      1513736 | t          |    1008808 |   1.276386653895e-05
    20 |     1664115 |                -1 |      1233456 | t          |    1023584 | 6.11707814796635e-06
```

Menggunakan SIMPLIFY AUTO *max\$1tolerance* dengan toleransi yang lebih rendah dari yang dihitung secara otomatis mungkin menghasilkan kesalahan konsumsi. Dalam hal ini, gunakan MAXERROR untuk mengabaikan kesalahan.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO 1.1E-05
MAXERROR 2
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989195 record(s) loaded successfully.
INFO:  Load into table 'norway_water' completed, 1 record(s) could not be loaded.  Check 'stl_load_errors' system table for details.
```

Kueri `SVL_SPATIAL_SIMPLIFY` lagi untuk mengidentifikasi catatan yang tidak berhasil dimuat COPY.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance
-------+-------------+-------------------+--------------+------------+------------+-----------------
    29 |     1184704 |           1.1e-05 |      1513736 | f          |          0 |               0
    29 |     1664115 |           1.1e-05 |      1233456 | t          |     794432 |         1.1e-05
```

Dalam contoh ini, rekaman pertama tidak berhasil cocok, sehingga `simplified` kolom menunjukkan false. Rekor kedua dimuat dalam toleransi yang diberikan. Namun, ukuran akhir lebih besar daripada menggunakan toleransi yang dihitung secara otomatis tanpa menentukan toleransi maksimum. 

### Memuat dari shapefile terkompresi
<a name="copy-example-spatial-copy-shapefile-compressed"></a>

Amazon Redshift COPY mendukung pengambilan data dari shapefile terkompresi. Semua komponen shapefile harus memiliki awalan Amazon S3 yang sama dan akhiran kompresi yang sama. Sebagai contoh, misalkan Anda ingin memuat data dari contoh sebelumnya. Dalam hal ini, file`gis_osm_water_a_free_1.shp.gz`,`gis_osm_water_a_free_1.dbf.gz`, dan `gis_osm_water_a_free_1.shx.gz` harus berbagi direktori Amazon S3 yang sama. Perintah COPY memerlukan opsi GZIP, dan klausa FROM harus menentukan file terkompresi yang benar, seperti yang ditunjukkan berikut.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/compressed/gis_osm_natural_free_1.shp.gz'
FORMAT SHAPEFILE
GZIP
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural' completed, 83891 record(s) loaded successfully.
```

### Memuat data ke dalam tabel dengan urutan kolom yang berbeda
<a name="copy-example-spatial-copy-shapefile-column-order"></a>

Jika Anda memiliki tabel yang tidak memiliki `GEOMETRY` kolom pertama, Anda dapat menggunakan pemetaan kolom untuk memetakan kolom ke tabel target. Misalnya, buat tabel dengan `osm_id` ditentukan sebagai kolom pertama.

```
CREATE TABLE norway_natural_order (
   osm_id BIGINT,
   wkb_geometry GEOMETRY,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Kemudian menelan shapefile menggunakan pemetaan kolom.

```
COPY norway_natural_order(wkb_geometry, osm_id, code, fclass, name) 
FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural_order' completed, 83891 record(s) loaded successfully.
```

### Memuat data ke dalam tabel dengan kolom geografi
<a name="copy-example-spatial-copy-shapefile-geography"></a>

Jika Anda memiliki tabel yang memiliki `GEOGRAPHY` kolom, pertama-tama Anda menelan ke dalam `GEOMETRY` kolom dan kemudian melemparkan objek ke `GEOGRAPHY` objek. Misalnya, setelah Anda menyalin shapefile Anda ke `GEOMETRY` kolom, ubah tabel untuk menambahkan kolom tipe data. `GEOGRAPHY`

```
ALTER TABLE norway_natural ADD COLUMN wkb_geography GEOGRAPHY;
```

Kemudian ubah geometri menjadi geografi.

```
UPDATE norway_natural SET wkb_geography = wkb_geometry::geography;
```

Secara opsional, Anda dapat menjatuhkan `GEOMETRY` kolom.

```
ALTER TABLE norway_natural DROP COLUMN wkb_geometry;
```

## COPY perintah dengan opsi NOLOAD
<a name="r_COPY_command_examples-load-noload-option"></a>

Untuk memvalidasi file data sebelum Anda benar-benar memuat data, gunakan opsi NOLOAD dengan perintah COPY. Amazon Redshift mem-parsing file input dan menampilkan kesalahan yang terjadi. Contoh berikut menggunakan opsi NOLOAD dan tidak ada baris yang benar-benar dimuat ke dalam tabel.

```
COPY public.zipcode1
FROM 's3://amzn-s3-demo-bucket/mydata/zipcode.csv' 
DELIMITER ';' 
IGNOREHEADER 1 REGION 'us-east-1'
NOLOAD
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole';

Warnings:
Load into table 'zipcode1' completed, 0 record(s) loaded successfully.
```

## Perintah COPY dengan pembatas multibyte dan opsi ENCODING
<a name="r_COPY_command_examples-load-encoding-multibyte-delimiter-option"></a>

Contoh berikut dimuat LATIN1 dari file Amazon S3 yang berisi data multibyte. Perintah COPY menentukan pembatas dalam bentuk oktal `\302\246\303\254` untuk memisahkan bidang dalam file input yang dikodekan sebagai ISO-8859-1. Untuk menentukan pembatas yang sama di UTF-8, tentukan. `DELIMITER '¦ì'`

```
COPY latin1
FROM 's3://amzn-s3-demo-bucket/multibyte/myfile' 
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole'
DELIMITER '\302\246\303\254'
ENCODING ISO88591
```

# BUAT BASIS DATA
<a name="r_CREATE_DATABASE"></a>

Membuat database baru.

Untuk membuat database, Anda harus menjadi superuser atau memiliki hak istimewa CREATEDB. Untuk membuat database yang terkait dengan integrasi nol-ETL, Anda harus menjadi pengguna super atau memiliki hak istimewa CREATEDB dan CREATEUSER.

Anda tidak dapat menjalankan CREATE DATABASE dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

## Sintaksis
<a name="r_CREATE_DATABASE-synopsis"></a>

```
CREATE DATABASE database_name 
[ { [ 
      FROM INTEGRATION '<integration_id>'[ DATABASE '<source_database>' ]
      [ SET ]
      [ ACCEPTINVCHARS [=] { TRUE | FALSE }]
      [ QUERY_ALL_STATES [=] { TRUE | FALSE }] 
      [ REFRESH_INTERVAL <interval> ] 
      [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
      [ HISTORY_MODE [=] {TRUE | FALSE} ]
    ]
    [ WITH ]
    [ OWNER [=] db_owner ]
    [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
  }
  | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } }
  | { IAM_ROLE  {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }
  | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid }
]
```

## Parameter
<a name="r_CREATE_DATABASE-parameters"></a>

 *database\$1name*   
Nama database baru. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

DARI INTEGRASI '<integration\$1id>' [DATABASE '<source\$1database>']   
Menentukan apakah akan membuat database menggunakan identifier integrasi nol-ETL. Anda dapat mengambil `integration_id` dari tampilan sistem SVV\$1INTEGRATION. Untuk integrasi Aurora PostgreSQL Zero-ETL, Anda juga perlu menentukan nama, yang juga dapat diambil dari SVV\$1INTEGRATION. `source_database`  
Sebagai contoh, lihat [Buat database untuk menerima hasil integrasi nol-ETL](#r_CREATE_DATABASE-integration). *Untuk informasi selengkapnya tentang membuat database dengan integrasi Nol-ETL, lihat Membuat [database tujuan di Amazon Redshift di Panduan Manajemen Pergeseran Merah Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html).*

SET  
Kata kunci opsional.

ACCEPTINVCHARS [=] \$1TRUE \$1 FALSE\$1  
Klausa ACCEPTINVCHARS menetapkan apakah tabel integrasi nol-ETL berlanjut dengan konsumsi ketika karakter yang tidak valid terdeteksi untuk tipe data VARCHAR. Ketika karakter yang tidak valid ditemui, karakter yang tidak valid diganti dengan karakter default. `?`

QUERY\$1ALL\$1STATES [=] \$1BENAR \$1 SALAH\$1  
Klausa QUERY\$1ALL\$1STATES menetapkan apakah tabel integrasi Zero-ETL dapat ditanyakan di semua status (,,, dan). `Synced` `Failed` `ResyncRequired` `ResyncInitiated` Secara default, tabel integrasi nol-ETL hanya dapat ditanyakan dalam status. `Synced`

REFRESH\$1INTERVAL <interval>  
Klausa REFRESH\$1INTERVAL menetapkan perkiraan interval waktu, dalam hitungan detik, untuk menyegarkan data dari sumber nol-ETL ke database target. Nilai dapat diatur 0—432.000 detik (5 hari) untuk integrasi nol-ETL yang tipe sumbernya adalah Aurora MySQL, Aurora PostgreSQL, atau RDS untuk MySQL. Untuk integrasi Amazon DynamoDB Zero-ETL, nilainya dapat diatur 900—432.000 detik (15 menit —5 hari). `interval`Defaultnya adalah nol (0) detik untuk integrasi nol-ETL yang tipe sumbernya adalah Aurora MySQL, Aurora PostgreSQL, atau RDS untuk MySQL. Untuk integrasi Amazon DynamoDB Zero-ETL, defaultnya adalah 900 detik (15 menit). `interval`

TRUNCATECOLUMNS [=] \$1TRUE \$1 FALSE\$1  
Klausa TRUNCATECOLUMNS menetapkan apakah tabel integrasi nol-ETL berlanjut dengan konsumsi ketika nilai untuk kolom VARCHAR atau atribut kolom SUPER berada di luar batas. Kapan`TRUE`, nilai terpotong agar sesuai dengan kolom dan nilai atribut JSON yang meluap dipotong agar sesuai dengan kolom SUPER.

HISTORY\$1MODE [=] \$1BENAR \$1 SALAH\$1  
Klausa yang menentukan apakah Amazon Redshift akan mengatur mode riwayat untuk semua tabel baru dalam database yang ditentukan. Opsi ini hanya berlaku untuk database yang dibuat untuk integrasi nol-ETL.  
Klausa HISTORY\$1MODE dapat diatur ke atau. `TRUE` `FALSE` Nilai default-nya `FALSE`. Untuk informasi tentang HISTORY\$1MODE, lihat [Mode riwayat](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) di Panduan Manajemen Pergeseran Merah *Amazon*.

DENGAN  
Kata kunci opsional.

PEMILIK [=] db\$1owner  
Menentukan username dari pemilik database.

BATAS KONEKSI \$1*limit* \$1 UNLIMITED\$1   
Jumlah maksimum koneksi database pengguna diizinkan untuk membuka secara bersamaan. Batas tidak diberlakukan untuk pengguna super. Gunakan kata kunci UNLIMITED untuk memungkinkan jumlah maksimum koneksi bersamaan. Batas jumlah koneksi untuk setiap pengguna mungkin juga berlaku. Untuk informasi selengkapnya, lihat [BUAT PENGGUNA](r_CREATE_USER.md). Defaultnya adalah UNLIMITED. Untuk melihat koneksi saat ini, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem.  
Jika batas koneksi pengguna dan database berlaku, slot koneksi yang tidak digunakan harus tersedia yang berada dalam kedua batas saat pengguna mencoba untuk terhubung.

MENYUSUN \$1CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI\$1  
Klausa yang menentukan apakah pencarian string atau perbandingan peka huruf besar/kecil atau tidak peka huruf besar/kecil. Defaultnya peka huruf besar/case sensitive.  
COLLATE tidak didukung saat Anda membuat database dari datashare.  
CASE\$1SENSITIVE dan CS dapat dipertukarkan dan menghasilkan hasil yang sama. Demikian pula, CASE\$1INSENSITIVE dan CI dapat dipertukarkan dan menghasilkan hasil yang sama.

TINGKAT ISOLASI \$1SNAPSHOT \$1 SERIALIZABLE\$1  
Sebuah klausa yang menentukan tingkat isolasi yang digunakan ketika query dijalankan terhadap database. Untuk informasi lebih lanjut tentang tingkat isolasi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md).  
+ Isolasi SNAPSHOT - Menyediakan tingkat isolasi dengan perlindungan terhadap pembaruan dan penghapusan konflik. Ini adalah default untuk database yang dibuat dalam cluster yang disediakan atau namespace tanpa server. 
+ Isolasi SERIALIZABLE - Menyediakan serialisasi penuh untuk transaksi bersamaan. 

<ARN>DARI ARN ''  
 AWS Glue Basis data ARN digunakan untuk membuat database.

\$1DENGAN SKEMA KATALOG DATA '<schema>' \$1 TANPA SKEMA KATALOG DATA\$1  
Parameter ini hanya berlaku jika perintah CREATE DATABASE Anda juga menggunakan parameter FROM ARN.
Menentukan apakah untuk membuat database menggunakan skema untuk membantu mengakses objek di. AWS Glue Data Catalog

IAM\$1ROLE \$1default \$1 'SESI' \$1 'arn:aws:iam: ::role/ '\$1 *<Akun AWS-id>* *<role-name>*  
Parameter ini hanya berlaku jika perintah CREATE DATABASE Anda juga menggunakan parameter FROM ARN.
Jika Anda menentukan peran IAM yang terkait dengan cluster saat menjalankan perintah CREATE DATABASE, Amazon Redshift akan menggunakan kredenal peran saat Anda menjalankan kueri pada database.  
Menentukan `default` kata kunci berarti menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster.  
Gunakan `'SESSION'` jika Anda terhubung ke klaster Amazon Redshift menggunakan identitas federasi dan mengakses tabel dari skema eksternal yang dibuat menggunakan perintah ini. Untuk contoh penggunaan identitas federasi, lihat [Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum, yang menjelaskan cara mengonfigurasi identitas](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html) federasi.   
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Minimal, peran IAM harus memiliki izin untuk melakukan operasi LIST di bucket Amazon S3 untuk diakses dan operasi GET pada objek Amazon S3 yang berisi bucket. Untuk mempelajari lebih lanjut tentang menggunakan IAM\$1ROLE saat membuat database yang menggunakan AWS Glue Data Catalog untuk datashares, lihat [Bekerja dengan jaringan data yang dikelola Lake](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) Formation sebagai konsumen.  
Berikut ini menunjukkan sintaks untuk string parameter IAM\$1ROLE untuk ARN tunggal.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran IAM lain, mungkin milik akun lain. Anda dapat merantai hingga 10 peran. Untuk informasi selengkapnya, lihat [Merantai peran IAM dalam Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Untuk peran IAM ini, lampirkan kebijakan izin IAM yang serupa dengan yang berikut ini.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Untuk langkah-langkah untuk membuat peran IAM yang akan digunakan dengan kueri federasi, lihat. [Membuat rahasia dan peran IAM untuk menggunakan kueri federasi](federated-create-secret-iam-role.md)   
Jangan sertakan spasi dalam daftar peran yang dirantai.
Berikut ini menunjukkan sintaks untuk rantai tiga peran.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

## Sintaks untuk menggunakan CREATE DATABASE dengan datashare
<a name="r_CREATE_DATABASE-datashare-synopsis"></a>

Sintaks berikut menjelaskan perintah CREATE DATABASE yang digunakan untuk membuat database dari datashare untuk berbagi data dalam akun yang sama. AWS 

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
```

Sintaks berikut menjelaskan perintah CREATE DATABASE yang digunakan untuk membuat database dari datashare untuk berbagi data di seluruh akun. AWS 

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid
```

### Parameter untuk menggunakan CREATE DATABASE dengan datashare
<a name="r_CREATE_DATABASE-parameters-datashare"></a>

DARI DATASHARE   
Kata kunci yang menunjukkan di mana datashare berada.

 *datashare\$1name*   
Nama datashare tempat basis data konsumen dibuat.

DENGAN IZIN  
Menentukan bahwa database yang dibuat dari datashare memerlukan izin tingkat objek untuk mengakses objek database individu. Tanpa klausa ini, pengguna atau peran yang diberikan izin USAGE pada database akan secara otomatis memiliki akses ke semua objek database dalam database.

 *Namespace namespace\$1guid*   
Nilai yang menentukan namespace produsen yang dimiliki datashare.

ACCOUNT *account\$1id*  
Nilai yang menentukan akun produsen yang dimiliki datashare.

## Catatan penggunaan untuk CREATE DATABASE untuk berbagi data
<a name="r_CREATE_DATABASE-usage"></a>

Sebagai superuser database, saat Anda menggunakan CREATE DATABASE untuk membuat database dari datashares dalam AWS akun, tentukan opsi NAMESPACE. Opsi AKUN adalah opsional. Bila Anda menggunakan CREATE DATABASE untuk membuat database dari datashares di seluruh AWS account, tentukan kedua ACCOUNT dan NAMESPACE dari produsen.

Anda hanya dapat membuat satu database konsumen untuk satu datashare pada cluster konsumen. Anda tidak dapat membuat beberapa database konsumen yang mengacu pada datashare yang sama.

## BUAT DATABASE dari AWS Glue Data Catalog
<a name="r_CREATE_DATABASE_data-catalog"></a>

Untuk membuat database menggunakan ARN AWS Glue database, tentukan ARN dalam perintah CREATE DATABASE Anda.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
```

Secara opsional, Anda juga dapat memberikan nilai ke dalam parameter IAM\$1ROLE. Untuk informasi selengkapnya tentang parameter dan nilai yang diterima, lihat [Parameter](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html#r_CREATE_DATABASE-parameters).

Berikut ini adalah contoh yang menunjukkan cara membuat database dari ARN menggunakan peran IAM.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
```

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
```

Anda juga dapat membuat database menggunakan SKEMA KATALOG DATA.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
```

## Buat database untuk menerima hasil integrasi nol-ETL
<a name="r_CREATE_DATABASE-integration"></a>

Untuk membuat database menggunakan identitas integrasi nol-ETL, tentukan perintah CREATE `integration_id` DATABASE Anda.

```
CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';
```

Misalnya, pertama, ambil id integrasi dari SVV\$1INTEGRATION;

```
SELECT integration_id FROM SVV_INTEGRATION;
```

Kemudian gunakan salah satu id integrasi yang diambil untuk membuat database yang menerima integrasi nol-ETL.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
```

Ketika database sumber integrasi nol-ETL diperlukan, maka, misalnya, tentukan.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE sourcedb;
```

Anda juga dapat mengatur interval penyegaran untuk database. Misalnya, untuk mengatur interval penyegaran ke 7.200 detik untuk data dari sumber integrasi nol-ETL:

```
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
```

Kueri tampilan katalog SVV\$1INTEGRATION untuk informasi tentang integrasi nol-ETL, seperti, integration\$1id, target\$1database, source, refresh\$1interval, dan banyak lagi.

```
SELECT * FROM svv_integration;
```

Contoh berikut membuat database dari integrasi dengan mode riwayat aktif.

```
CREATE DATABASE sample_integration_db FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET HISTORY_MODE = true;
```

## BUAT batas DATABASE
<a name="r_CREATE_DATABASE-create-database-limits"></a>

Amazon Redshift memberlakukan batasan ini untuk database:
+ Maksimal 60 basis data yang ditentukan pengguna per cluster.
+ Maksimum 127 byte untuk nama database.
+ Nama database tidak bisa menjadi kata yang dicadangkan. 

## Pengumpulan basis data
<a name="r_CREATE_DATABASE-collation"></a>

Collation adalah seperangkat aturan yang mendefinisikan bagaimana mesin database membandingkan dan mengurutkan data tipe karakter dalam SQL. Pemeriksaan case-insensitive adalah pemeriksaan yang paling umum digunakan. Amazon Redshift menggunakan pemeriksaan case-insensitive untuk memfasilitasi migrasi dari sistem gudang data lainnya. Dengan dukungan asli dari pemeriksaan case-insensitive, Amazon Redshift terus menggunakan metode penyetelan atau pengoptimalan penting, seperti kunci distribusi, kunci sortir, atau pemindaian terbatas rentang. 

Klausa COLLATE menentukan pemeriksaan default untuk semua kolom CHAR dan VARCHAR dalam database. Jika CASE\$1INSENSITIVE ditentukan, semua kolom CHAR atau VARCHAR menggunakan pemeriksaan case-insensitive. Untuk informasi tentang pemeriksaan, lihat[Urutan pemeriksaan](c_collation_sequences.md).

Data yang dimasukkan atau dicerna dalam kolom case-insensitive akan menyimpan case aslinya. Tetapi semua operasi string berbasis perbandingan termasuk penyortiran dan pengelompokan tidak peka huruf besar/kecil. Operasi pencocokan pola seperti predikat LIKE, mirip dengan, dan fungsi ekspresi reguler juga tidak peka huruf besar/kecil.

Operasi SQL berikut mendukung semantik pemeriksaan yang berlaku:
+ Operator perbandingan: =, <>, <, <=, >, >=.
+ Seperti operator
+ ORDER BY klausa
+ Klausul GROUP BY
+ Fungsi agregat yang menggunakan perbandingan string, seperti MIN dan MAX dan LISTAGG
+ Fungsi jendela, seperti klausa PARTITION BY dan klausa ORDER BY
+ Fungsi skalar terbesar () dan terkecil (), STRPOS (), REGEXP\$1COUNT (), REGEXP\$1REPLACE (), REGEXP\$1INSTR (), REGEXP\$1SUBSTR ()
+ Klausa yang berbeda
+ UNION, INTERSECT dan KECUALI
+ DALAM DAFTAR

Untuk kueri eksternal, termasuk kueri federasi Amazon Redshift Spectrum dan Aurora PostgreSQL, pengumpulan kolom VARCHAR atau CHAR sama dengan pengumpulan tingkat database saat ini.

Contoh berikut menanyakan tabel Amazon Redshift Spectrum:

```
SELECT ci_varchar FROM spectrum.test_collation
WHERE ci_varchar = 'AMAZON';

ci_varchar
----------
amazon
Amazon
AMAZON
AmaZon
(4 rows)
```

Untuk informasi tentang cara membuat tabel menggunakan pemeriksaan database, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

Untuk informasi tentang fungsi COLLATE, lihat[Fungsi COLLATE](r_COLLATE.md).

### Batasan pemeriksaan basis data
<a name="r_CREATE_DATABASE-collation-limitations"></a>

Berikut ini adalah batasan saat bekerja dengan pemeriksaan database di Amazon Redshift:
+ Semua tabel atau tampilan sistem, termasuk tabel katalog PG dan tabel sistem Amazon Redshift peka huruf besar/kecil.
+ Ketika database konsumen dan database produsen memiliki kumpulan tingkat database yang berbeda, Amazon Redshift tidak mendukung kueri lintas basis data dan lintas klaster.
+ Amazon Redshift tidak mendukung pemeriksaan case-insensitive dalam kueri khusus node pemimpin.

  Contoh berikut menunjukkan kueri case-insensitive yang tidak didukung dan kesalahan yang dikirimkan Amazon Redshift:

  ```
  SELECT collate(usename, 'case_insensitive') FROM pg_user;
  ERROR:  Case insensitive collation is not supported in leader node only query.
  ```
+ Amazon Redshift tidak mendukung interaksi antara kolom case-sensitive dan case-sensitive, seperti perbandingan, fungsi, gabungan, atau operasi set.

  Contoh berikut menunjukkan kesalahan saat kolom peka huruf besar/kecil dan tidak peka huruf besar/kecil berinteraksi:

  ```
  CREATE TABLE test
    (ci_col varchar(10) COLLATE case_insensitive,
     cs_col varchar(10) COLLATE case_sensitive,
     cint int,
     cbigint bigint);
  ```

  ```
  SELECT ci_col = cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT concat(ci_col, cs_col) FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT ci_col FROM test UNION SELECT cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select Coalesce(ci_col, cs_col) from test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select case when cint > 0 then ci_col else cs_col end from test;
  ERROR:  Query with different collations is not supported yet.
  ```

Untuk membuat kueri ini berfungsi, gunakan fungsi COLLATE untuk mengonversi pemeriksaan satu kolom agar sesuai dengan yang lain. Untuk informasi selengkapnya, lihat [Fungsi COLLATE](r_COLLATE.md).

## Contoh
<a name="r_CREATE_DATABASE-examples"></a>

**Membuat basis data**  
Contoh berikut membuat database bernama TICKIT dan memberikan kepemilikan kepada pengguna DWUSER.

```
create database tickit
with owner dwuser;
```

Untuk melihat detail tentang database, kueri tabel katalog PG\$1DATABASE\$1INFO. 

```
select datname, datdba, datconnlimit
from pg_database_info
where datdba > 1;

 datname     | datdba | datconnlimit
-------------+--------+-------------
 admin       |    100 | UNLIMITED
 reports     |    100 | 100
 tickit      |    100 | 100
```

Contoh berikut membuat database bernama **sampledb** dengan tingkat isolasi SNAPSHOT.

```
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

Contoh berikut membuat database sales\$1db dari datashare salesshare.

```
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

### Contoh pengumpulan basis data
<a name="r_CREATE_DATABASE-collation-examples"></a>

**Membuat database case-insensitive**  
Contoh berikut membuat `sampledb` database, membuat `T1` tabel, dan menyisipkan data ke dalam `T1` tabel.

```
create database sampledb collate case_insensitive;
```

Connect ke database baru yang baru saja Anda buat menggunakan klien SQL Anda. **Saat menggunakan editor kueri Amazon Redshift v2, pilih `sampledb` di Editor.** Saat menggunakan RSQL, gunakan perintah seperti berikut ini.

```
\connect sampledb;
```

```
CREATE TABLE T1 (
  col1 Varchar(20) distkey sortkey
);
```

```
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
```

Kemudian kueri menemukan hasil dengan`John`.

```
SELECT * FROM T1 WHERE col1 = 'John';

 col1
 ------
 john
 JOHN
(2 row)
```

**Memesan dalam urutan tidak peka huruf besar/kecil**  
Contoh berikut menunjukkan urutan case-insensitive dengan tabel T1. Urutan *Bob dan *bob** atau *John dan *john** adalah nondeterministik karena mereka sama dalam kolom case-insensitive.

```
SELECT * FROM T1 ORDER BY 1;

 col1
 ------
 bob
 Bob
 JOHN
 john
 Mary
(5 rows)
```

Demikian pula, contoh berikut menunjukkan urutan case-insensitive dengan klausa GROUP BY. *Bob* dan *bob* sama dan termasuk dalam kelompok yang sama. Adalah nondeterministik yang mana yang muncul dalam hasilnya.

```
SELECT col1, count(*) FROM T1 GROUP BY 1;

 col1 | count
 -----+------
 Mary |  1
 bob  |  2
 JOHN |  2
(3 rows)
```

**Menanyakan dengan fungsi jendela pada kolom yang tidak peka huruf besar/kecil**  
Contoh berikut query fungsi jendela pada kolom case-insensitive.

```
SELECT col1, rank() over (ORDER BY col1) FROM T1;

 col1 | rank
 -----+------
 bob  |   1
 Bob  |   1
 john |   3
 JOHN |   3
 Mary |   5
(5 rows)
```

**Query dengan kata kunci DISTINCT**  
Contoh berikut query `T1` tabel dengan kata kunci DISTINCT.

```
SELECT DISTINCT col1 FROM T1;

 col1
 ------
 bob
 Mary
 john
(3 rows)
```

**Menanyakan dengan klausa UNION**  
Contoh berikut menunjukkan hasil dari UNION tabel `T1` dan`T2`.

```
CREATE TABLE T2 AS SELECT * FROM T1;
```

```
SELECT col1 FROM T1 UNION SELECT col1 FROM T2;

 col1
 ------
 john
 bob
 Mary
(3 rows)
```

# BUAT DATASHARE
<a name="r_CREATE_DATASHARE"></a>

Membuat datashare baru dalam database saat ini. Pemilik datashare ini adalah penerbit perintah CREATE DATASHARE.

Amazon Redshift mengaitkan setiap datashare dengan satu database Amazon Redshift. Anda hanya dapat menambahkan objek dari database terkait ke datashare. Anda dapat membuat beberapa datashares pada database Amazon Redshift yang sama.

Untuk informasi tentang datashares, lihat. [Berbagi data di Amazon Redshift](datashare-overview.md)

Untuk melihat informasi tentang datashares, gunakan. [TAMPILKAN DATASHARES](r_SHOW_DATASHARES.md)

## Hak istimewa yang diperlukan
<a name="r_CREATE_DATASHARE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE DATASHARE:
+ Superuser
+ Pengguna dengan hak istimewa CREATE DATASHARE
+ Pemilik database

## Sintaksis
<a name="r_CREATE_DATASHARE-synopsis"></a>

```
CREATE DATASHARE datashare_name
[[SET] PUBLICACCESSIBLE [=] TRUE | FALSE ];
```

## Parameter
<a name="r_CREATE_DATASHARE-parameters"></a>

*datashare\$1name*  
Nama datashare. Nama datashare harus unik di namespace cluster.

[[SET] DAPAT DIAKSES PUBLIK]  
Klausa yang menentukan apakah datashare dapat dibagikan ke cluster yang dapat diakses publik.  
Nilai default-nya `SET PUBLICACCESSIBLE` is `FALSE`.

## Catatan penggunaan
<a name="r_CREATE_DATASHARE_usage"></a>

Secara default, pemilik datashare hanya memiliki saham tetapi bukan objek dalam saham.

Hanya pengguna super dan pemilik database yang dapat menggunakan CREATE DATASHARE dan mendelegasikan hak ALTER ke pengguna atau grup lain. 

## Contoh
<a name="r_CREATE_DATASHARE_examples"></a>

Contoh berikut menciptakan datashare`salesshare`.

```
CREATE DATASHARE salesshare;
```

Contoh berikut menciptakan datashare `demoshare` yang AWS Data Exchange mengelola.

```
CREATE DATASHARE demoshare SET PUBLICACCESSIBLE TRUE, MANAGEDBY ADX;
```

# BUAT FUNGSI EKSTERNAL
<a name="r_CREATE_EXTERNAL_FUNCTION"></a>

Membuat fungsi yang ditentukan pengguna skalar (UDF) berdasarkan Amazon AWS Lambda Redshift. Untuk informasi selengkapnya tentang fungsi yang ditentukan pengguna Lambda, lihat. [Lambda Skalar UDFs](udf-creating-a-lambda-sql-udf.md)

## Hak istimewa yang diperlukan
<a name="r_CREATE_EXTERNAL_FUNCTION-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE EXTERNAL FUNCTION:
+ Superuser
+ Pengguna dengan hak istimewa CREATE [OR REPLACE] EXTERNAL FUNCTION

## Sintaksis
<a name="r_CREATE_EXTERNAL_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] EXTERNAL FUNCTION external_fn_name ( [data_type] [, ...] )
RETURNS data_type
{ VOLATILE | STABLE }
LAMBDA 'lambda_fn_name'
IAM_ROLE { default | ‘arn:aws:iam::<Akun AWS-id>:role/<role-name>’
RETRY_TIMEOUT milliseconds
MAX_BATCH_ROWS count
MAX_BATCH_SIZE size [ KB | MB ];
```

## Parameter
<a name="r_CREATE_EXTERNAL_FUNCTION-parameters"></a>

ATAU GANTI  
Sebuah klausa yang menentukan bahwa jika fungsi dengan nama yang sama dan tipe data argumen masukan, atau *tanda tangan*, karena ini sudah ada, fungsi yang ada diganti. Anda hanya dapat mengganti fungsi dengan fungsi baru yang mendefinisikan kumpulan tipe data yang identik. Anda harus menjadi superuser untuk mengganti fungsi.  
Jika Anda mendefinisikan fungsi dengan nama yang sama dengan fungsi yang ada tetapi tanda tangan yang berbeda, Anda membuat fungsi baru. Dengan kata lain, nama fungsi kelebihan beban. Untuk informasi selengkapnya, lihat [Nama fungsi overloading](udf-naming-udfs.md#udf-naming-overloading-function-names).

*external\$1fn\$1name*  
Nama fungsi eksternal. Jika Anda menentukan nama skema (seperti myschema.myfunction), fungsi dibuat menggunakan skema yang ditentukan. Jika tidak, fungsi dibuat dalam skema saat ini. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).   
Kami menyarankan Anda untuk mengawali semua nama UDF dengan. `f_` Amazon Redshift mencadangkan `f_` awalan untuk nama UDF. Dengan menggunakan `f_` awalan, Anda membantu memastikan bahwa nama UDF Anda tidak akan bertentangan dengan nama fungsi SQL bawaan untuk Amazon Redshift sekarang atau di masa mendatang. Untuk informasi selengkapnya, lihat [Mencegah konflik penamaan UDF](udf-naming-udfs.md).

*data\$1type*  
Tipe data untuk argumen masukan. Untuk informasi selengkapnya, lihat [Skalar Python UDFs](udf-creating-a-scalar-udf.md) dan [Lambda Skalar UDFs](udf-creating-a-lambda-sql-udf.md).

RETURNS *data\$1type*  
Tipe data dari nilai yang dikembalikan oleh fungsi. Tipe data RETURNS dapat berupa tipe data Amazon Redshift standar apa pun. Untuk informasi selengkapnya, lihat [Skalar Python UDFs](udf-creating-a-scalar-udf.md) dan [Lambda Skalar UDFs](udf-creating-a-lambda-sql-udf.md).

VOLATIL \$1 STABIL  
Menginformasikan pengoptimal kueri tentang volatilitas fungsi.   
Untuk mendapatkan optimasi terbaik, beri label fungsi Anda dengan kategori volatilitas ketat yang berlaku untuk itu. Dalam urutan keketatan, dimulai dengan yang paling ketat, kategori volatilitas adalah sebagai berikut:  
+ VOLATIL
+ STABIL
VOLATIL  
Dengan argumen yang sama, fungsi dapat mengembalikan hasil yang berbeda pada panggilan berturut-turut, bahkan untuk baris dalam satu pernyataan. Pengoptimal kueri tidak dapat membuat asumsi tentang perilaku fungsi volatile. Kueri yang menggunakan fungsi volatile harus mengevaluasi kembali fungsi untuk setiap input.  
STABIL  
Dengan argumen yang sama, fungsi dijamin untuk mengembalikan hasil yang sama pada panggilan berturut-turut yang diproses dalam satu pernyataan. Fungsi ini dapat mengembalikan hasil yang berbeda ketika dipanggil dalam pernyataan yang berbeda. Kategori ini membuatnya sehingga pengoptimal dapat mengurangi berapa kali fungsi dipanggil dalam satu pernyataan.  
Perhatikan bahwa jika keketatan yang dipilih tidak valid untuk fungsi tersebut, ada risiko bahwa pengoptimal mungkin melewatkan beberapa panggilan berdasarkan keketatan ini. Hal ini dapat mengakibatkan set hasil yang salah.  
Klausa IMMUTABLE saat ini tidak didukung untuk Lambda. UDFs

LAMBDA *'lambda\$1fn\$1name'*   
 Nama fungsi yang dipanggil Amazon Redshift.  
Untuk langkah-langkah membuat AWS Lambda fungsi, lihat [Membuat fungsi Lambda dengan konsol di Panduan AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) *Pengembang*.  
*Untuk informasi mengenai izin yang diperlukan untuk fungsi Lambda, [AWS Lambda lihat](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html) izin di AWS Lambda Panduan Pengembang.*

IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '*<Akun AWS-id>**<role-name>*   
Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE EXTERNAL FUNCTION berjalan.  
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Perintah CREATE EXTERNAL FUNCTION diotorisasi untuk memanggil fungsi Lambda melalui peran IAM ini. Jika klaster Anda memiliki peran IAM yang sudah ada dengan izin untuk memanggil fungsi Lambda yang terpasang, Anda dapat mengganti ARN peran Anda. Untuk informasi selengkapnya, lihat [Mengkonfigurasi parameter otorisasi untuk Lambda UDFs](udf-creating-a-lambda-sql-udf.md#udf-lambda-authorization).  
Berikut ini menunjukkan sintaks untuk parameter IAM\$1ROLE.  

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

*RETRY\$1TIMEOUT milidetik*   
Jumlah total waktu dalam milidetik yang digunakan Amazon Redshift untuk penundaan backoff coba lagi.   
Alih-alih mencoba kembali segera untuk kueri yang gagal, Amazon Redshift melakukan backoff dan menunggu waktu tertentu di antara percobaan ulang. Kemudian Amazon Redshift mencoba ulang permintaan untuk menjalankan kembali kueri yang gagal hingga jumlah semua penundaan sama dengan atau melebihi nilai RETRY\$1TIMEOUT yang Anda tentukan. Nilai default adalah 20.000 milidetik.  
Saat fungsi Lambda dipanggil, Amazon Redshift mencoba ulang kueri yang menerima kesalahan seperti,, dan. `TooManyRequestsException` `EC2ThrottledException` `ServiceException`   
Anda dapat mengatur parameter RETRY\$1TIMEOUT ke 0 milidetik untuk mencegah percobaan ulang untuk Lambda UDF.

*Jumlah MAX\$1BATCH\$1ROWS*  
 Jumlah maksimum baris yang dikirimkan Amazon Redshift dalam satu permintaan batch untuk satu pemanggilan lambda.   
 Nilai minimum parameter ini adalah 1. Nilai maksimumnya adalah INT\$1MAX, atau 2.147.483.647.   
 Parameter ini bersifat opsional. Nilai defaultnya adalah INT\$1MAX, atau 2.147,483.647. 

MAX\$1BATCH\$1SIZE *ukuran [KB \$1 MB]*   
 Ukuran maksimum payload data yang dikirimkan Amazon Redshift dalam satu permintaan batch untuk satu pemanggilan lambda.   
 Nilai minimum parameter ini adalah 1 KB. Nilai maksimumnya adalah 5 MB.   
 Nilai default parameter ini adalah 5 MB.   
 KB dan MB adalah opsional. Jika Anda tidak menyetel unit pengukuran, Amazon Redshift default menggunakan KB. 

## Catatan penggunaan
<a name="r_CREATE_FUNCTION-usage-notes"></a>

Pertimbangkan hal berikut saat Anda membuat Lambda UDFs: 
+ Urutan panggilan fungsi Lambda pada argumen input tidak diperbaiki atau dijamin. Ini mungkin berbeda antara contoh kueri yang berjalan, tergantung pada konfigurasi cluster.
+ Fungsi tidak dijamin akan diterapkan pada setiap argumen masukan sekali dan hanya sekali. Interaksi antara Amazon Redshift dan AWS Lambda dapat menyebabkan panggilan berulang dengan input yang sama.

## Contoh
<a name="r_CREATE_FUNCTION-examples"></a>

Berikut ini adalah contoh penggunaan fungsi skalar Lambda yang ditentukan pengguna (). UDFs

### Contoh Skalar Lambda UDF menggunakan fungsi Lambda Node.js
<a name="r_CREATE_FUNCTION-lambda-example-node"></a>

Contoh berikut menciptakan fungsi eksternal yang disebut `exfunc_sum` yang mengambil dua bilangan bulat sebagai argumen masukan. Fungsi ini mengembalikan jumlah sebagai output integer. Nama fungsi Lambda yang akan dipanggil adalah. `lambda_sum` Bahasa yang digunakan untuk fungsi Lambda ini adalah Node.js 12.x. Pastikan untuk menentukan peran IAM. Contoh digunakan `'arn:aws:iam::123456789012:user/johndoe'` sebagai peran IAM.

```
CREATE EXTERNAL FUNCTION exfunc_sum(INT,INT)
RETURNS INT
VOLATILE
LAMBDA 'lambda_sum'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Fungsi Lambda mengambil payload permintaan dan iterasi di setiap baris. Semua nilai dalam satu baris ditambahkan untuk menghitung jumlah untuk baris itu, yang disimpan dalam array respons. Jumlah baris dalam larik hasil mirip dengan jumlah baris yang diterima dalam payload permintaan. 

Payload respons JSON harus memiliki data hasil di bidang 'hasil' agar dapat dikenali oleh fungsi eksternal. Bidang argumen dalam permintaan yang dikirim ke fungsi Lambda berisi payload data. Mungkin ada beberapa baris dalam payload data jika terjadi permintaan batch. Fungsi Lambda berikut iterasi atas semua baris dalam payload data permintaan. Ini juga secara individual mengulangi semua nilai dalam satu baris.

```
exports.handler = async (event) => {
    // The 'arguments' field in the request sent to the Lambda function contains the data payload.
    var t1 = event['arguments'];

    // 'len(t1)' represents the number of rows in the request payload.
    // The number of results in the response payload should be the same as the number of rows received.
    const resp = new Array(t1.length);

    // Iterating over all the rows in the request payload.
    for (const [i, x] of t1.entries())
    {
        var sum = 0;
        // Iterating over all the values in a single row.
        for (const y of x) {
            sum = sum + y;
        }
        resp[i] = sum;
    }
    // The 'results' field should contain the results of the lambda call.
    const response = {
        results: resp
    };
    return JSON.stringify(response);
};
```

Contoh berikut memanggil fungsi eksternal dengan nilai literal.

```
select exfunc_sum(1,2);
exfunc_sum
------------
 3
(1 row)
```

Contoh berikut membuat tabel yang disebut t\$1sum dengan dua kolom, c1 dan c2, dari tipe data integer dan menyisipkan dua baris data. Kemudian fungsi eksternal dipanggil dengan melewatkan nama kolom tabel ini. Dua baris tabel dikirim dalam permintaan batch dalam payload permintaan sebagai pemanggilan Lambda tunggal.

```
CREATE TABLE t_sum(c1 int, c2 int);
INSERT INTO t_sum VALUES (4,5), (6,7);
SELECT exfunc_sum(c1,c2) FROM t_sum;
 exfunc_sum
---------------
 9
 13
(2 rows)
```

### Contoh Skalar Lambda UDF menggunakan atribut RETRY\$1TIMEOUT
<a name="r_CREATE_FUNCTION-lambda-example-retry"></a>

Di bagian berikut, Anda dapat menemukan contoh cara menggunakan atribut RETRY\$1TIMEOUT di Lambda. UDFs 

AWS Lambda fungsi memiliki batas konkurensi yang dapat Anda atur untuk setiap fungsi. Untuk informasi selengkapnya tentang batas konkurensi, lihat [Mengelola konkurensi untuk fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) di *Panduan AWS Lambda Pengembang* dan posting [Mengelola Konkurensi AWS Lambda Fungsi](https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency) di Blog Komputasi. AWS 

Ketika jumlah permintaan yang dilayani oleh Lambda UDF melebihi batas konkurensi, permintaan baru menerima kesalahan. `TooManyRequestsException` Lambda UDF mencoba ulang kesalahan ini hingga jumlah semua penundaan antara permintaan yang dikirim ke fungsi Lambda sama dengan atau melebihi nilai RETRY\$1TIMEOUT yang Anda tetapkan. Nilai RETRY\$1TIMEOUT default adalah 20.000 milidetik.

Contoh berikut menggunakan fungsi Lambda bernama. `exfunc_sleep_3` Fungsi ini mengambil payload permintaan, iterasi di setiap baris, dan mengubah input menjadi huruf besar. Kemudian tidur selama 3 detik dan mengembalikan hasilnya. Bahasa yang digunakan untuk fungsi Lambda ini adalah Python 3.8. 

Jumlah baris dalam larik hasil mirip dengan jumlah baris yang diterima dalam payload permintaan. Payload respons JSON harus memiliki data hasil di `results` lapangan agar dapat dikenali oleh fungsi eksternal. `arguments`Bidang dalam permintaan yang dikirim ke fungsi Lambda berisi muatan data. Dalam kasus permintaan batch, beberapa baris dapat muncul di payload data.

Batas konkurensi untuk fungsi ini secara khusus diatur ke 1 dalam konkurensi cadangan untuk menunjukkan penggunaan atribut RETRY\$1TIMEOUT. Ketika atribut diatur ke 1, fungsi Lambda hanya dapat melayani satu permintaan pada satu waktu.

```
import json
import time
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            resp[i] = y.upper()

    time.sleep(3)
    ret = dict()
    ret['results'] = resp
    ret_json = json.dumps(ret)
    return ret_json
```

Berikut, dua contoh tambahan menggambarkan atribut RETRY\$1TIMEOUT. Mereka masing-masing memanggil Lambda UDF tunggal. Saat menjalankan Lambda UDF, setiap contoh menjalankan kueri SQL yang sama untuk memanggil UDF Lambda dari dua sesi database bersamaan pada saat yang bersamaan. Ketika kueri pertama yang memanggil Lambda UDF sedang dilayani oleh UDF, kueri kedua menerima kesalahan. `TooManyRequestsException` Hasil ini terjadi karena Anda secara khusus mengatur konkurensi cadangan di UDF ke 1. Untuk informasi tentang cara menyetel konkurensi cadangan untuk fungsi Lambda, [lihat Mengonfigurasi konkurensi](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reservedconfiguration-concurrency-reserved) cadangan.

Contoh pertama, berikut, menetapkan atribut RETRY\$1TIMEOUT untuk Lambda UDF ke 0 milidetik. Jika permintaan Lambda menerima pengecualian apa pun dari fungsi Lambda, Amazon Redshift tidak akan mencoba lagi. Hasil ini terjadi karena atribut RETRY\$1TIMEOUT disetel ke 0.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 0;
```

Dengan RETRY\$1TIMEOUT disetel ke 0, Anda dapat menjalankan dua kueri berikut dari sesi database terpisah untuk melihat hasil yang berbeda.

Kueri SQL pertama yang menggunakan Lambda UDF berjalan dengan sukses.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

Kueri kedua, yang dijalankan dari sesi database terpisah pada saat yang sama, menerima `TooManyRequestsException` kesalahan.

```
select exfunc_upper('Varchar');
ERROR:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
DETAIL:
-----------------------------------------------
error:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
code:      32103
context:query:     0
location:  exfunc_client.cpp:102
process:   padbmaster [pid=26384]
-----------------------------------------------
```

Contoh kedua, berikut, menetapkan atribut RETRY\$1TIMEOUT untuk Lambda UDF menjadi 3.000 milidetik. Bahkan jika kueri kedua dijalankan secara bersamaan, Lambda UDF mencoba ulang hingga total penundaan adalah 3.000 milidetik. Dengan demikian, kedua kueri berjalan dengan sukses.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 3000;
```

Dengan RETRY\$1TIMEOUT disetel ke 3.000 milidetik, Anda dapat menjalankan dua kueri berikut dari sesi database terpisah untuk melihat hasil yang sama.

Kueri SQL pertama yang menjalankan Lambda UDF berjalan dengan sukses.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

Kueri kedua berjalan secara bersamaan, dan Lambda UDF mencoba lagi hingga total penundaan 3.000 milidetik.

```
select exfunc_upper('Varchar');
 exfunc_upper
--------------
 VARCHAR
(1 row)
```

### Contoh Skalar Lambda UDF menggunakan fungsi Lambda Python
<a name="r_CREATE_FUNCTION-lambda-example-python"></a>

Contoh berikut menciptakan fungsi eksternal yang bernama `exfunc_multiplication` dan yang mengalikan angka dan mengembalikan integer. Contoh ini menggabungkan keberhasilan dan `error_msg` bidang dalam respons Lambda. Bidang sukses diatur ke false ketika ada luapan bilangan bulat dalam hasil perkalian, dan `error_msg` pesan disetel ke. `Integer multiplication overflow` `exfunc_multiplication`Fungsi ini mengambil tiga bilangan bulat sebagai argumen masukan dan mengembalikan jumlah sebagai output integer. 

Nama fungsi Lambda yang disebut adalah. `lambda_multiplication` Bahasa yang digunakan untuk fungsi Lambda ini adalah Python 3.8. Pastikan untuk menentukan peran IAM.

```
CREATE EXTERNAL FUNCTION exfunc_multiplication(int, int, int)
RETURNS INT
VOLATILE
LAMBDA 'lambda_multiplication'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Fungsi Lambda mengambil payload permintaan dan iterasi di setiap baris. Semua nilai dalam satu baris dikalikan untuk menghitung hasil untuk baris itu, yang disimpan dalam daftar respons. Contoh ini menggunakan nilai keberhasilan Boolean yang diatur ke true secara default. Jika hasil perkalian untuk baris memiliki overflow integer, maka nilai keberhasilan disetel ke false. Kemudian loop iterasi rusak. 

Saat membuat payload respons, jika nilai keberhasilannya salah, fungsi Lambda berikut menambahkan bidang `error_msg` di payload. Ini juga mengatur pesan kesalahan ke`Integer multiplication overflow`. Jika nilai keberhasilan benar, maka data hasil ditambahkan di bidang hasil. Jumlah baris dalam larik hasil, jika ada, mirip dengan jumlah baris yang diterima dalam payload permintaan. 

Bidang argumen dalam permintaan yang dikirim ke fungsi Lambda berisi payload data. Mungkin ada beberapa baris dalam payload data jika terjadi permintaan batch. Fungsi Lambda berikut mengulangi semua baris dalam payload data permintaan dan secara individual mengulangi semua nilai dalam satu baris. 

```
import json
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # By default success is set to 'True'.
    success = True
    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        mul = 1
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            mul = mul*y

        # Check integer overflow.
        if (mul >= 9223372036854775807 or mul <= -9223372036854775808):
            success = False
            break
        else:
            resp[i] = mul
    ret = dict()
    ret['success'] = success
    if not success:
        ret['error_msg'] = "Integer multiplication overflow"
    else:
        ret['results'] = resp
    ret_json = json.dumps(ret)

    return ret_json
```

Contoh berikut memanggil fungsi eksternal dengan nilai literal.

```
SELECT exfunc_multiplication(8, 9, 2);
  exfunc_multiplication
---------------------------
          144
(1 row)
```

Contoh berikut membuat tabel bernama t\$1multi dengan tiga kolom, c1, c2, dan c3, dari tipe data integer. Fungsi eksternal dipanggil dengan melewatkan nama kolom tabel ini. Data dimasukkan sedemikian rupa untuk menyebabkan integer overflow untuk menunjukkan bagaimana kesalahan disebarkan.

```
CREATE TABLE t_multi (c1 int, c2 int, c3 int);
INSERT INTO t_multi VALUES (2147483647, 2147483647, 4);
SELECT exfunc_multiplication(c1, c2, c3) FROM t_multi;
DETAIL:
  -----------------------------------------------
  error:  Integer multiplication overflow
  code:      32004context:
  context:
  query:     38
  location:  exfunc_data.cpp:276
  process:   query2_16_38 [pid=30494]
  -----------------------------------------------
```

# BUAT MODEL EKSTERNAL
<a name="r_create_external_model"></a>

**Topics**
+ [Prasyarat untuk MEMBUAT MODEL EKSTERNAL](#r_create_external_model_prereqs)
+ [Hak istimewa yang diperlukan](#r_simple_create_model-privileges)
+ [Pengendalian biaya](#r_create_model_cost)
+ [BUAT SINTAKS MODEL EKSTERNAL](#r_create_external_model_syntax)
+ [BUAT parameter dan pengaturan MODEL EKSTERNAL](#r_create_external_model_parameters_settings)
+ [BUAT parameter fungsi inferensi MODEL EKSTERNAL](#r_create_external_model_if_parameters)

## Prasyarat untuk MEMBUAT MODEL EKSTERNAL
<a name="r_create_external_model_prereqs"></a>

Sebelum Anda menggunakan pernyataan CREATE EXTERNAL MODEL, lengkapi prasyarat di. [Penyiapan klaster untuk menggunakan Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup) Berikut ini adalah ringkasan prasyarat tingkat tinggi.
+ Buat klaster Amazon Redshift dengan AWS Management Console atau AWS Command Line Interface (CLI AWS ).
+ Lampirkan kebijakan AWS Identity and Access Management (IAM) saat membuat cluster.
+ Untuk memungkinkan Amazon Redshift dan Amazon Bedrock mengambil peran untuk berinteraksi dengan layanan lain, tambahkan kebijakan kepercayaan yang sesuai ke peran IAM.
+ Aktifkan akses ke spesifik LLMs yang ingin Anda gunakan dari konsol Amazon Bedrock.
+ (Opsional) Jika Anda menemukan pengecualian pembatasan yang berasal dari Amazon Bedrock seperti`Too many requests, please wait before trying again`, bahkan dengan sejumlah kecil data, periksa **kuota di bawah Service Quotas** di akun Amazon Bedrock Anda. Periksa apakah kuota tingkat akun yang diterapkan setidaknya sama dengan nilai kuota AWS default untuk **InvokeModel**permintaan model yang Anda gunakan.

Untuk detail tentang peran IAM, kebijakan kepercayaan, dan prasyarat lainnya, lihat. [Penyiapan klaster untuk menggunakan Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup)

## Hak istimewa yang diperlukan
<a name="r_simple_create_model-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE EXTERNAL MODEL:
+ Superuser
+ Pengguna dengan hak istimewa CREATE MODEL
+ Peran dengan hak istimewa GRANT CREATE MODEL

## Pengendalian biaya
<a name="r_create_model_cost"></a>

 Amazon Redshift MLmenggunakan sumber daya kluster yang ada untuk membuat model prediksi, sehingga Anda tidak perlu membayar biaya tambahan. Namun, AWS biaya untuk menggunakan Amazon Bedrock berdasarkan model yang Anda pilih. Untuk informasi selengkapnya, lihat [Biaya untuk menggunakan Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/cost.html) Ml. 

## BUAT SINTAKS MODEL EKSTERNAL
<a name="r_create_external_model_syntax"></a>

Berikut ini adalah sintaks lengkap dari pernyataan CREATE EXTERNAL MODEL.

```
CREATE EXTERNAL MODEL model_name 
FUNCTION function_name
IAM_ROLE {default/'arn:aws:iam::<account-id>:role/<role-name>'}
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID model_id
   [, PROMPT 'prompt prefix']
   [, SUFFIX 'prompt suffix']
   [, REQUEST_TYPE {RAW|UNIFIED}]
   [, RESPONSE_TYPE {VARCHAR|SUPER}]
);
```

`CREATE EXTERNAL MODEL`Perintah membuat fungsi inferensi yang Anda gunakan untuk menghasilkan konten. 

Berikut ini adalah sintaks dari fungsi inferensi yang `CREATE EXTERNAL MODEL` membuat menggunakan dari`REQUEST_TYPE`: `RAW` 

```
SELECT inference_function_name(request_super) 
[FROM table];
```

Berikut ini adalah sintaks dari fungsi inferensi yang `CREATE EXTERNAL MODEL` membuat menggunakan dari`REQUEST_TYPE`: `UNIFIED` 

```
SELECT inference_function_name(input_text, [, inference_config [, additional_model_request_fields]])
[FROM table];
```

Untuk informasi tentang cara menggunakan fungsi inferensi, lihat[Menggunakan model eksternal untuk integrasi Amazon Redshift MLdengan Amazon Bedrock](machine-learning-br.md#machine-learning-br-use).

## BUAT parameter dan pengaturan MODEL EKSTERNAL
<a name="r_create_external_model_parameters_settings"></a>

Bagian ini menjelaskan parameter dan pengaturan untuk `CREATE EXTERNAL MODEL` perintah.

**Topics**
+ [BUAT parameter MODEL EKSTERNAL](#r_create_external_model_parameters)
+ [BUAT pengaturan MODEL EKSTERNAL](#r_create_external_model_settings)

### BUAT parameter MODEL EKSTERNAL
<a name="r_create_external_model_parameters"></a>

nama\$1model  
Nama untuk model eksternal. Nama model dalam skema harus unik.

FUNGSI *function\$1name (data\$1type* [,...])  
Nama untuk fungsi inferensi yang `CREATE EXTERNAL MODEL` menciptakan. Anda menggunakan fungsi inferensi untuk mengirim permintaan ke Amazon Bedrock dan mengambil teks yang dihasilkan MP.

<account-id><role-name>IAM\$1ROLE *\$1default \$1 'arn:aws:iam: ::role/ '*\$1  
Peran IAM yang digunakan Amazon Redshift untuk mengakses Amazon Bedrock. Untuk informasi tentang peran IAM, lihat [Membuat atau memperbarui peran IAM untuk integrasi Amazon Redshift MLdengan Amazon Bedrock](machine-learning-br.md#machine-learning-br-iam).

BATUAN DASAR MODEL\$1TYPE  
Menentukan jenis model. Satu-satunya nilai yang valid adalah `BEDROCK`.

PENGATURAN (MODEL\$1ID model\$1id [,...])  
Menentukan pengaturan model eksternal. Lihat bagian berikut untuk detailnya.

### BUAT pengaturan MODEL EKSTERNAL
<a name="r_create_external_model_settings"></a>

MODEL\$1ID model\$1id  
Pengidentifikasi untuk model eksternal, misalnya,`anthropic.claude-v2`. Untuk informasi tentang model Amazon Bedrock IDs, lihat Model [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html). IDs

PROMPT 'awalan cepat'  
Menentukan prompt statis yang ditambahkan Amazon Redshift ke awal setiap permintaan inferensi. Hanya didukung dengan `REQUEST_TYPE` a`UNIFIED`.

AKHIRAN 'akhiran cepat'  
Menentukan prompt statis yang ditambahkan Amazon Redshift ke akhir setiap permintaan inferensi. Hanya didukung dengan `REQUEST_TYPE` a`UNIFIED`.

REQUEST\$1TYPE \$1MENTAH \$1 TERPADU\$1  
Menentukan format permintaan yang dikirim ke Amazon Bedrock. Nilai-nilai yang valid meliputi:  
+ **RAW**: Fungsi inferensi mengambil input sebagai nilai super tunggal, dan selalu mengembalikan nilai super. Format nilai super khusus untuk model Amazon Bedrock yang dipilih. Super adalah model prediksi yang menggabungkan beberapa algoritma untuk menghasilkan prediksi tunggal yang lebih baik.
+ **UNIFIED**: Fungsi inferensi menggunakan API terpadu. Semua model memiliki antarmuka yang terpadu dan konsisten dengan Amazon Bedrock. Ini berfungsi untuk semua model yang mendukung pesan. Nilai ini adalah default.

  Untuk informasi selengkapnya, lihat dokumentasi [Converse API di dokumentasi](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) *Amazon Bedrock API*.

RESPONSE\$1TYPE \$1VARCHAR \$1 SUPER\$1  
Menentukan format respon. Jika `REQUEST_TYPE` ada`RAW`, `RESPONSE_TYPE` yang diminta dan satu-satunya nilai yang valid adalah`SUPER`. Untuk semua `REQUEST TYPE` nilai lainnya, nilai defaultnya adalah`VARCHAR`, dan `RESPONSE_TYPE` bersifat opsional. Nilai-nilai yang valid meliputi:  
+ **VARCHAR**: Amazon Redshift hanya mengembalikan respons teks yang dihasilkan oleh model.
+ **SUPER**: Amazon Redshift mengembalikan seluruh respons JSON yang dihasilkan oleh model sebagai super. Ini termasuk respons teks, dan informasi seperti alasan berhenti, dan penggunaan token input dan output model. Super adalah model prediksi yang menggabungkan beberapa algoritma untuk menghasilkan prediksi tunggal yang lebih baik. 

## BUAT parameter fungsi inferensi MODEL EKSTERNAL
<a name="r_create_external_model_if_parameters"></a>

Bagian ini menjelaskan parameter yang valid untuk fungsi inferensi yang dibuat oleh `CREATE EXTERNAL MODEL` perintah. 

### BUAT parameter fungsi inferensi MODEL EKSTERNAL untuk `REQUEST_TYPE` `RAW`
<a name="r_create_external_model_if_parameters_raw"></a>

Fungsi inferensi yang dibuat dengan a `REQUEST_TYPE` of `RAW` memiliki satu argumen input super dan selalu mengembalikan tipe data super. Sintaks input super mengikuti sintaks permintaan model tertentu yang dipilih dari Amazon Bedrock.

### BUAT parameter fungsi inferensi MODEL EKSTERNAL untuk `REQUEST_TYPE` `UNIFIED`
<a name="r_create_external_model_if_parameters_unified"></a>

input\$1text  
Teks yang dikirim Amazon Redshift ke Amazon Bedrock.

inference\$1config  
Nilai super yang berisi parameter opsional yang dikirimkan Amazon Redshift ke Amazon Bedrock. Ini dapat mencakup yang berikut:  
+ MaxTokens
+ StopSequences
+ suhu
+ TopP
Parameter ini semuanya opsional dan semuanya peka huruf besar/kecil. Untuk informasi tentang parameter ini, lihat [ InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)di *Referensi Amazon Bedrock API*.

# BUAT SKEMA EKSTERNAL
<a name="r_CREATE_EXTERNAL_SCHEMA"></a>

Membuat skema eksternal baru dalam database saat ini. Anda dapat menggunakan skema eksternal ini untuk terhubung ke Amazon RDS for PostgreSQL atau database Edisi yang kompatibel dengan Amazon Aurora PostgreSQL. Anda juga dapat membuat skema eksternal yang mereferensikan database dalam katalog data eksternal seperti AWS Glue, Athena, atau database di metastore Apache Hive, seperti Amazon EMR.

Pemilik skema ini adalah penerbit perintah CREATE EXTERNAL SCHEMA. Untuk mentransfer kepemilikan skema eksternal, gunakan [ALTER SCHEMA](r_ALTER_SCHEMA.md) untuk mengubah pemilik. Untuk memberikan akses ke skema ke pengguna lain atau grup pengguna, gunakan [HIBAH](r_GRANT.md) perintah. 

Anda tidak dapat menggunakan perintah GRANT atau REVOKE untuk izin pada tabel eksternal. Sebagai gantinya, berikan atau cabut izin pada skema eksternal. 

**catatan**  
Jika saat ini Anda memiliki tabel eksternal Redshift Spectrum di katalog data Amazon Athena, Anda dapat memigrasikan katalog data Athena ke katalog data. AWS Glue Data Catalog Untuk menggunakan Katalog AWS Glue Data dengan Redshift Spectrum, Anda mungkin perlu mengubah kebijakan AWS Identity and Access Management (IAM). Untuk informasi selengkapnya, lihat [Memutakhirkan ke Katalog AWS Glue Data](https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html#glue-upgrade) di Panduan *Pengguna Athena*.

Untuk melihat detail skema eksternal, kueri tampilan [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) sistem. 

## Sintaksis
<a name="r_CREATE_EXTERNAL_SCHEMA-synopsis"></a>

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk referensi data menggunakan katalog data eksternal. Untuk informasi selengkapnya, lihat [Amazon Redshift Spectrum](c-using-spectrum.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM [ [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT | KAFKA ]
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ]
[ URI ['hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URL'] ] 
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<Akun AWS-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE [ 'SESSION' | 'catalog-role-arn-string' ] ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]
```

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk referensi data menggunakan query federasi untuk RDS POSTGRES atau Aurora PostgreSQL. Anda juga dapat membuat skema eksternal yang mereferensikan sumber streaming, seperti Kinesis Data Streams. Untuk informasi selengkapnya, lihat [Menanyakan data dengan kueri gabungan di Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk referensi data menggunakan query federasi untuk RDS MySQL atau Aurora MySQL. Untuk informasi selengkapnya, lihat [Menanyakan data dengan kueri gabungan di Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk referensi data dalam aliran Kinesis. Untuk informasi selengkapnya, lihat [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE [ default | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' ]
```

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk mereferensikan Amazon Managed Streaming for Apache Kafka atau cluster Confluent Cloud dan topiknya untuk dicerna. Untuk terhubung, Anda menyediakan URI broker. Untuk informasi selengkapnya, lihat [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KAFKA
[ IAM_ROLE [ default | 'arn:aws:iam::<Akun AWS-id>:role/<role-name>' ] ]
URI 'Kafka bootstrap URI'
AUTHENTICATION [ none | iam | mtls ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];
```

Sintaks berikut menjelaskan perintah CREATE EXTERNAL SCHEMA yang digunakan untuk referensi data menggunakan query cross-database.

```
CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
```

## Parameter
<a name="r_CREATE_EXTERNAL_SCHEMA-parameters"></a>

JIKA TIDAK ADA  
Klausa yang menunjukkan bahwa jika skema yang ditentukan sudah ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa skema itu ada, daripada berakhir dengan kesalahan. Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika CREATE EXTERNAL SCHEMA mencoba membuat skema yang sudah ada. 

local\$1schema\$1name  
Nama skema eksternal baru. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

DARI [KATALOG DATA] \$1 HIVE METASTORE \$1 POSTGRES \$1 MYSQL \$1 KINESIS \$1 MSK \$1 PERGESERAN MERAH   
Kata kunci yang menunjukkan di mana database eksternal berada.   
KATALOG DATA menunjukkan bahwa database eksternal didefinisikan dalam katalog data Athena atau. AWS Glue Data Catalog  
Jika database eksternal didefinisikan dalam Katalog Data eksternal di AWS Wilayah yang berbeda, parameter REGION diperlukan. DATA CATALOG adalah default.  
HIVE METASTORE menunjukkan bahwa database eksternal didefinisikan dalam metastore Apache Hive. Jika HIVE METASTORE, ditentukan, URI diperlukan.   
POSTGRES menunjukkan bahwa database eksternal didefinisikan dalam RDS PostgreSQL atau Aurora PostgreSQL.  
MYSQL menunjukkan bahwa database eksternal didefinisikan dalam RDS MySQL atau Aurora MySQL.  
KINESIS menunjukkan bahwa sumber data adalah aliran dari Kinesis Data Streams.  
MSK menunjukkan bahwa sumber data adalah kluster Amazon MSK yang disediakan atau tanpa server.  
KAFKA menunjukkan bahwa sumber data adalah cluster Kafka. Anda dapat menggunakan kata kunci ini untuk Amazon MSK dan Confluent Cloud.

DARI PERGESERAN MERAH  
Kata kunci yang menunjukkan bahwa database terletak di Amazon Redshift.

*DATABASE '*redshift\$1database\$1name' SKEMA 'redshift\$1schema\$1name*'*  
Nama database Amazon Redshift.   
*Redshift\$1schema\$1name menunjukkan skema di* Amazon Redshift. *Redshift\$1schema\$1name* default adalah. `public`

DATABASE '*federated\$1database\$1name*'  
Kata kunci yang menunjukkan nama database eksternal di PostgreSQL atau mesin database MySQL yang didukung. 

[SKEMA '*schema\$1name*']  
*Schema\$1name* menunjukkan skema dalam mesin database PostgreSQL yang didukung. *Schema\$1name* default adalah. `public`  
Anda tidak dapat menentukan SKEMA saat menyiapkan kueri federasi ke mesin database MySQL yang didukung. 

WILAYAH '*aws-region*'  
Jika database eksternal didefinisikan dalam katalog data Athena atau AWS Glue Data Catalog, AWS Wilayah di mana database berada. Parameter ini diperlukan jika database didefinisikan dalam Katalog Data eksternal. 

URI ['hive\$1metastore\$1uri' [PORT port\$1number] \$1 'hostname' [PORT port\$1number] \$1 'Kafka bootstrap URI']  
URI hostname dan port\$1number dari mesin database PostgreSQL atau MySQL yang didukung. *Nama host* adalah simpul kepala dari set replika. Titik akhir harus dapat dijangkau (dapat dirutekan) dari cluster Amazon Redshift. PostgreSQL port\$1number default adalah 5432. Port\$1number MySQL default adalah 3306.  
Mesin database PostgreSQL atau MySQL yang didukung harus berada di VPC yang sama dengan cluster Amazon Redshift Anda dengan grup keamanan yang menghubungkan Amazon Redshift dan URL RDSPOSTGRESQL atau Aurora PostgreSQL. Selain itu, Anda dapat menggunakan perutean VPC yang disempurnakan untuk mengonfigurasi kasus penggunaan lintas VPC. Untuk informasi selengkapnya, lihat Titik akhir [VPC yang dikelola RedShift](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html).
**Menentukan URI metastore sarang**  
Jika database berada dalam metastore Hive, tentukan URI dan opsional nomor port untuk metastore. Nomor port default adalah 9083.   
URI tidak berisi spesifikasi protokol (“http://”). Contoh URI yang valid:`uri '172.10.10.10'`.   
**Menentukan URI broker untuk streaming konsumsi**  
Termasuk URI bootstrap-broker menyediakan kemampuan untuk terhubung ke Amazon MSK atau cluster Confluent Cloud dan menerima data streaming. Untuk informasi selengkapnya dan untuk melihat contohnya, lihat [Memulai konsumsi streaming dari Amazon Managed Streaming for](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html) Apache Kafka.

IAM\$1ROLE [default \$1 'SESI' \$1 'arn:aws:iam: ::role/ '] *<Akun AWS-id>* *<role-name>*  
Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE EXTERNAL SCHEMA berjalan.  
Gunakan `'SESSION'` jika Anda terhubung ke klaster Amazon Redshift menggunakan identitas federasi dan mengakses tabel dari skema eksternal yang dibuat menggunakan perintah ini. Untuk informasi selengkapnya, lihat [Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html), yang menjelaskan cara mengonfigurasi identitas federasi. Perhatikan bahwa konfigurasi ini, menggunakan `'SESSION'` sebagai pengganti ARN, hanya dapat digunakan jika skema dibuat menggunakan. `DATA CATALOG`   
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Minimal, peran IAM harus memiliki izin untuk melakukan operasi LIST di bucket Amazon S3 untuk diakses dan operasi GET pada objek Amazon S3 yang berisi bucket.  
Berikut ini menunjukkan sintaks untuk string parameter IAM\$1ROLE untuk ARN tunggal.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran IAM lain, mungkin milik akun lain. Anda dapat merantai hingga 10 peran. Untuk contoh peran rantai, lihat[Merantai peran IAM dalam Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Untuk peran IAM ini, lampirkan kebijakan izin IAM yang serupa dengan yang berikut ini.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Untuk langkah-langkah untuk membuat peran IAM yang akan digunakan dengan kueri federasi, lihat. [Membuat rahasia dan peran IAM untuk menggunakan kueri federasi](federated-create-secret-iam-role.md)   
Jangan sertakan spasi dalam daftar peran yang dirantai.
Berikut ini menunjukkan sintaks untuk rantai tiga peran.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

RAHASIA\$1ARN '' *ssm-secret-arn*  
Nama Sumber Daya Amazon (ARN) dari rahasia mesin database PostgreSQL atau MySQL yang didukung yang dibuat menggunakan. AWS Secrets Manager Untuk informasi tentang cara membuat dan mengambil ARN untuk rahasia, [lihat Mengelola rahasia AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dengan di AWS Secrets Manager Panduan *Pengguna*, [dan Mengambil Nama Sumber Daya Amazon (ARN) rahasia](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html) di Amazon Redshift.. 

CATALOG\$1ROLE ['SESI' \$1] *catalog-role-arn-string*  
Gunakan `'SESSION'` untuk menyambung ke klaster Amazon Redshift menggunakan identitas federasi untuk autentikasi dan otorisasi ke katalog data. Untuk informasi selengkapnya tentang menyelesaikan langkah-langkah untuk identitas federasi, lihat [Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Perhatikan bahwa `'SESSION'` peran hanya dapat digunakan jika skema dibuat dalam KATALOG DATA.  
Gunakan ARN Nama Sumber Daya Amazon untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi katalog data.   
Jika CATALOG\$1ROLE tidak ditentukan, Amazon Redshift menggunakan IAM\$1ROLE yang ditentukan. Peran katalog harus memiliki izin untuk mengakses Katalog Data di AWS Glue atau Athena. Untuk informasi selengkapnya, lihat [Kebijakan IAM untuk Amazon Redshift Spectrum](c-spectrum-iam-policies.md).   
Berikut ini menunjukkan sintaks untuk string parameter CATALOG\$1ROLE untuk ARN tunggal.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'
```
Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran IAM lain, mungkin milik akun lain. Anda dapat merantai hingga 10 peran. Untuk informasi selengkapnya, lihat [Merantai peran IAM dalam Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
Daftar peran yang dirantai tidak boleh menyertakan spasi.
Berikut ini menunjukkan sintaks untuk rantai tiga peran.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'
```


BUAT DATABASE EKSTERNAL JIKA TIDAK ADA  
Klausa yang membuat database eksternal dengan nama yang ditentukan oleh argumen DATABASE, jika database eksternal yang ditentukan tidak ada. Jika database eksternal yang ditentukan ada, perintah tidak membuat perubahan. Dalam hal ini, perintah mengembalikan pesan bahwa database eksternal ada, bukan berakhir dengan kesalahan.  
Anda tidak dapat menggunakan CREATE EXTERNAL DATABASE JIKA TIDAK ADA dengan HIVE METASTORE.  
Untuk menggunakan CREATE EXTERNAL DATABASE JIKA TIDAK ADA dengan Katalog Data diaktifkan AWS Lake Formation, Anda memerlukan `CREATE_DATABASE` izin pada Katalog Data. 

CATALOG\$1ID 'ID akun *Amazon Web Services yang berisi basis data Glue atau Lake Formation '*  
Id akun tempat database katalog data disimpan.  
`CATALOG_ID`dapat ditentukan hanya jika Anda berencana untuk terhubung ke klaster Amazon Redshift atau ke Amazon Redshift Tanpa Server menggunakan identitas federasi untuk otentikasi dan otorisasi ke katalog data dengan menyetel salah satu dari berikut ini:   
+ `CATALOG_ROLE` untuk `'SESSION'`
+ `IAM_ROLE`ke `'SESSION'` dan `'CATALOG_ROLE'` atur ke defaultnya 
Untuk informasi selengkapnya tentang menyelesaikan langkah-langkah untuk identitas federasi, lihat [Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). 

OTENTIKASI  
Jenis otentikasi yang ditentukan untuk konsumsi streaming. Penyerapan streaming dengan jenis otentikasi berfungsi dengan Amazon Managed Streaming for Apache Kafka. `AUTHENTICATION`Jenisnya adalah sebagai berikut:  
+ **none** - Menentukan bahwa tidak ada otentikasi yang diperlukan. Ini sesuai dengan Akses tidak diautentikasi di MSK atau plaintext dengan TLS di Apache Kafka.
+ **iam** - Menentukan otentikasi IAM. Ketika Anda memilih ini, pastikan bahwa peran IAM memiliki izin untuk autentikasi IAM. Untuk informasi lebih lanjut tentang mendefinisikan skema eksternal, lihat. [Memulai dengan konsumsi streaming dari sumber Apache Kafka](materialized-view-streaming-ingestion-getting-started-MSK.md)
+ **mtls** — Menentukan bahwa keamanan lapisan transportasi timbal balik menyediakan komunikasi yang aman dengan memfasilitasi otentikasi antara klien dan server. Dalam hal ini, klien adalah Redshift dan servernya adalah Amazon MSK. Untuk informasi selengkapnya tentang mengonfigurasi konsumsi streaming dengan mTL, lihat. [Otentikasi dengan mTL untuk konsumsi streaming Redshift dari sumber Apache Kafka](materialized-view-streaming-ingestion-mtls.md)


AUTHENTICATION\$1ARN  
ARN dari AWS Certificate Manager sertifikat yang digunakan oleh Amazon Redshift untuk otentikasi mtls dengan Amazon MSK. ARN tersedia di konsol ACM saat Anda memilih sertifikat yang dikeluarkan.

CLUSTER\$1ARN  
Untuk konsumsi streaming, CLUSTER\$1ARN adalah pengidentifikasi cluster untuk cluster Amazon Managed Streaming for Apache Kafka Kafka tempat Anda streaming. Saat menggunakan CLUSTER\$1ARN, ini memerlukan kebijakan peran IAM yang menyertakan izin. `kafka:GetBootstrapBrokers` Opsi ini disediakan untuk kompatibilitas mundur. Saat ini, kami merekomendasikan menggunakan opsi URI bootstrap-broker untuk terhubung ke Amazon Managed Streaming for Apache Kafka Kafka cluster. Untuk informasi lebih lanjut, lihat [Streaming ingestion](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html).

## Catatan penggunaan
<a name="r_CREATE_EXTERNAL_SCHEMA_usage"></a>

Untuk batasan saat menggunakan katalog data Athena, lihat Batas [Athena](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#amazon-athena-limits) di. Referensi Umum AWS

Untuk batas saat menggunakan AWS Glue Data Catalog, lihat [AWS Glue Batas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_glue) di Referensi Umum AWS.

Batasan ini tidak berlaku untuk metastore Hive.

Ada maksimum 9.900 skema per database. Untuk informasi selengkapnya, lihat [Kuota dan batasan](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) di Panduan Manajemen *Pergeseran Merah Amazon*.

Untuk membatalkan pendaftaran skema, gunakan perintah. [DROP SCHEMA](r_DROP_SCHEMA.md) 

Untuk melihat detail skema eksternal, kueri tampilan sistem berikut: 
+ [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) 
+ [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) 
+ [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) 

## Contoh
<a name="r_CREATE_EXTERNAL_SCHEMA_examples"></a>

Contoh berikut membuat skema eksternal menggunakan database dalam katalog data bernama `sampledb` di Wilayah Barat AS (Oregon). Gunakan contoh ini dengan Athena atau katalog AWS Glue data.

```
create external schema spectrum_schema
from data catalog
database 'sampledb'
region 'us-west-2'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

Contoh berikut membuat skema eksternal dan membuat database eksternal baru bernama`spectrum_db`.

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
create external database if not exists;
```

Contoh berikut membuat skema eksternal menggunakan database metastore Hive bernama. `hive_db`

```
create external schema hive_schema
from hive metastore
database 'hive_db'
uri '172.10.10.10' port 99
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

Contoh berikut merantai peran untuk menggunakan peran `myS3Role` untuk mengakses Amazon S3 dan `myAthenaRole` digunakan untuk akses katalog data. Untuk informasi selengkapnya, lihat [Merantai peran IAM dalam Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role'
catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole'
create external database if not exists;
```

Contoh berikut membuat skema eksternal yang mereferensikan database Aurora PostgreSQL. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM POSTGRES
DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema'
URI 'endpoint to aurora hostname' PORT 5432  
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

Contoh berikut membuat skema eksternal untuk merujuk ke sales\$1db diimpor pada cluster konsumen.

```
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
```

Contoh berikut membuat skema eksternal yang mereferensikan database Aurora MySQL. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM MYSQL
DATABASE 'my_aurora_db'
URI 'endpoint to aurora hostname'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

# CREATE EXTERNAL TABLE
<a name="r_CREATE_EXTERNAL_TABLE"></a>

Membuat tabel eksternal baru dalam skema yang ditentukan. Semua tabel eksternal harus dibuat dalam skema eksternal. Jalur penelusuran tidak didukung untuk skema eksternal dan tabel eksternal. Untuk informasi selengkapnya, lihat [BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md).

Selain tabel eksternal yang dibuat menggunakan perintah CREATE EXTERNAL TABLE, Amazon Redshift dapat mereferensikan tabel eksternal yang ditentukan dalam AWS Glue atau AWS Lake Formation katalog atau metastore Apache Hive. Gunakan [BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md) perintah untuk mendaftarkan database eksternal yang ditentukan dalam katalog eksternal dan membuat tabel eksternal tersedia untuk digunakan di Amazon Redshift. Jika tabel eksternal ada di AWS Glue atau AWS Lake Formation katalog atau metastore Hive, Anda tidak perlu membuat tabel menggunakan CREATE EXTERNAL TABLE. Untuk melihat tabel eksternal, kueri tampilan [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) sistem. 

Dengan menjalankan perintah CREATE EXTERNAL TABLE AS, Anda dapat membuat tabel eksternal berdasarkan definisi kolom dari kueri dan menulis hasil kueri tersebut ke Amazon S3. Hasilnya dalam Apache Parquet atau format teks yang dibatasi. Jika tabel eksternal memiliki kunci atau kunci partisi, Amazon Redshift mempartisi file baru sesuai dengan kunci partisi tersebut dan mendaftarkan partisi baru ke dalam katalog eksternal secara otomatis. Untuk informasi selengkapnya tentang CREATE EXTERNAL TABLE AS, lihat[Catatan penggunaan](r_CREATE_EXTERNAL_TABLE_usage.md). 

Anda dapat melakukan kueri tabel eksternal menggunakan sintaks SELECT yang sama yang Anda gunakan dengan tabel Amazon Redshift lainnya. Anda juga dapat menggunakan sintaks INSERT untuk menulis file baru ke lokasi tabel eksternal di Amazon S3. Untuk informasi selengkapnya, lihat [INSERT (tabel eksternal)](r_INSERT_external_table.md).

Untuk membuat tampilan dengan tabel eksternal, sertakan klausa WITH NO SCHEMA BINDING dalam pernyataan. [CREATE VIEW](r_CREATE_VIEW.md)

Anda tidak dapat menjalankan CREATE EXTERNAL TABLE di dalam transaksi (BEGIN... END). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

## Hak istimewa yang diperlukan
<a name="r_CREATE_EXTERNAL_TABLE-privileges"></a>

Untuk membuat tabel eksternal, Anda harus menjadi pemilik skema eksternal atau superuser. Untuk mentransfer kepemilikan skema eksternal, gunakan ALTER SCHEMA untuk mengubah pemilik. Akses ke tabel eksternal dikendalikan oleh akses ke skema eksternal. Anda tidak bisa [HIBAH](r_GRANT.md) atau [MENCABUT](r_REVOKE.md) izin pada tabel eksternal. Sebagai gantinya, berikan atau cabut USE pada skema eksternal.

[Catatan penggunaan](r_CREATE_EXTERNAL_TABLE_usage.md)Memiliki informasi tambahan tentang izin khusus untuk tabel eksternal.

## Sintaksis
<a name="r_CREATE_EXTERNAL_TABLE-synopsis"></a>

```
CREATE EXTERNAL TABLE
external_schema.table_name
(column_name data_type [, …] )
[ PARTITIONED BY (col_name data_type [, … ] )]
[ { ROW FORMAT DELIMITED row_format |
  ROW FORMAT SERDE 'serde_name'
  [ WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ] } ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
```

Berikut ini adalah sintaks untuk CREATE EXTERNAL TABLE AS.

```
CREATE EXTERNAL TABLE
external_schema.table_name
[ PARTITIONED BY (col_name [, … ] ) ]
[ ROW FORMAT DELIMITED row_format ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
 AS
 { select_statement }
```

## Parameter
<a name="r_CREATE_EXTERNAL_TABLE-parameters"></a>

 *external\$1schema.table\$1name*   
Nama tabel yang akan dibuat, dikualifikasikan oleh nama skema eksternal. Tabel eksternal harus dibuat dalam skema eksternal. Untuk informasi selengkapnya, lihat [BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md).  
Panjang maksimum untuk nama tabel adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Anda dapat menggunakan karakter multibyte UTF-8 hingga maksimal empat byte. Amazon Redshift memberlakukan batas 9.900 tabel per cluster, termasuk tabel sementara yang ditentukan pengguna dan tabel sementara yang dibuat oleh Amazon Redshift selama pemrosesan kueri atau pemeliharaan sistem. Secara opsional, Anda dapat memenuhi syarat nama tabel dengan nama database. Dalam contoh berikut, nama database adalah`spectrum_db`, nama skema eksternal`spectrum_schema`, dan nama tabel adalah`test`.  

```
create external table spectrum_db.spectrum_schema.test (c1 int)
stored as parquet
location 's3://amzn-s3-demo-bucket/myfolder/';
```
Jika database atau skema yang ditentukan tidak ada, tabel tidak dibuat, dan pernyataan mengembalikan kesalahan. Anda tidak dapat membuat tabel atau tampilan dalam database sistem`template0`,, `template1``padb_harvest`, atau`sys:internal`.  
Nama tabel harus berupa nama unik untuk skema yang ditentukan.   
Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

*(*column\$1name data\$1type*)*  
Nama dan tipe data dari setiap kolom yang sedang dibuat.  
Panjang maksimum untuk nama kolom adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Anda dapat menggunakan karakter multibyte UTF-8 hingga maksimal empat byte. Anda tidak dapat menentukan nama kolom `"$path"` atau`"$size"`. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  
Secara default, Amazon Redshift membuat tabel eksternal dengan `$path` pseudocolumns dan. `$size` Anda dapat menonaktifkan pembuatan pseudocolumns untuk sesi dengan menyetel parameter `spectrum_enable_pseudo_columns` konfigurasi ke. `false` Untuk informasi selengkapnya, lihat [Pseudokolom](r_CREATE_EXTERNAL_TABLE_usage.md#r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns).  
Jika pseudocolumns diaktifkan, jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.598. Jika pseudocolumns tidak diaktifkan, jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600.   
Jika Anda membuat “tabel lebar”, pastikan daftar kolom Anda tidak melebihi batas lebar baris untuk hasil perantara selama pemuatan dan pemrosesan kueri. Untuk informasi selengkapnya, lihat [Catatan penggunaan](r_CREATE_TABLE_NEW.md#r_CREATE_TABLE_usage).  
Untuk perintah CREATE EXTERNAL TABLE AS, daftar kolom tidak diperlukan, karena kolom berasal dari kueri.

 *data\$1type*   
[Jenis Data](c_Supported_data_types.md) berikut didukung:  
+ KECIL () INT2
+ BILANGAN BULAT (INT, INT4)
+ BIGINT () INT8
+ DESIMAL (NUMERIK)
+ NYATA (FLOAT4)
+ PRESISI GANDA (FLOAT8)
+ BOOLEAN (BOOL)
+ CHAR (KARAKTER)
+ VARCHAR (KARAKTER BERVARIASI)
+ VARBYTE (CHARACTER VARY) - dapat digunakan dengan file data Parket dan ORC, dan hanya dengan tabel non-partisi.
+ DATE - hanya dapat digunakan dengan teks, Parket, atau file data ORC, atau sebagai kolom partisi.
+ TIMESTAMP
  
Untuk DATE, Anda dapat menggunakan format seperti yang dijelaskan berikut. Untuk nilai bulan yang diwakili menggunakan digit, format berikut didukung:  
+ `mm-dd-yyyy`Misalnya,`05-01-2017`. Ini adalah opsi default.
+ `yyyy-mm-dd`, di mana tahun diwakili oleh lebih dari 2 digit. Misalnya, `2017-05-01`.
Untuk nilai bulan yang diwakili menggunakan singkatan tiga huruf, format berikut didukung:  
+ `mmm-dd-yyyy`Misalnya,`may-01-2017`. Ini adalah opsi default.
+ `dd-mmm-yyyy`, di mana tahun diwakili oleh lebih dari 2 digit. Misalnya, `01-may-2017`.
+ `yyyy-mmm-dd`, di mana tahun diwakili oleh lebih dari 2 digit. Misalnya, `2017-may-01`.
Untuk nilai tahun yang secara konsisten kurang dari 100, tahun dihitung dengan cara berikut:  
+ Jika tahun kurang dari 70, tahun dihitung sebagai tahun ditambah 2000. Misalnya, tanggal 05-01-17 dalam `mm-dd-yyyy` format diubah menjadi. `05-01-2017`
+ Jika tahun kurang dari 100 dan lebih besar dari 69, tahun dihitung sebagai tahun ditambah 1900. Misalnya tanggal 05-01-89 dalam `mm-dd-yyyy` format diubah menjadi. `05-01-1989`
+ Untuk nilai tahun yang diwakili oleh dua digit, tambahkan angka nol utama untuk mewakili tahun dalam 4 digit.
Nilai stempel waktu dalam file teks harus dalam format`yyyy-mm-dd HH:mm:ss.SSSSSS`, seperti yang ditunjukkan oleh nilai stempel waktu berikut:. `2017-05-01 11:30:59.000000`  
Panjang kolom VARCHAR didefinisikan dalam byte, bukan karakter. Misalnya, kolom VARCHAR (12) dapat berisi 12 karakter single-byte atau 6 karakter dua-byte. Saat Anda menanyakan tabel eksternal, hasil dipotong agar sesuai dengan ukuran kolom yang ditentukan tanpa mengembalikan kesalahan. Untuk informasi selengkapnya, lihat [Penyimpanan dan rentang](r_Character_types.md#r_Character_types-storage-and-ranges).   
Untuk performa terbaik, sebaiknya tentukan ukuran kolom terkecil yang sesuai dengan data Anda. Untuk menemukan ukuran maksimum dalam byte untuk nilai dalam kolom, gunakan fungsi [OCTET\$1LENGTH](r_OCTET_LENGTH.md). Contoh berikut mengembalikan ukuran maksimum nilai dalam kolom email.  

```
select max(octet_length(email)) from users;

max
---
 62
```

DIPARTISI OLEH (*col\$1name *data\$1type** [,...])  
Sebuah klausa yang mendefinisikan tabel dipartisi dengan satu atau lebih kolom partisi. Direktori data terpisah digunakan untuk setiap kombinasi yang ditentukan, yang dapat meningkatkan kinerja kueri dalam beberapa keadaan. Kolom yang dipartisi tidak ada dalam data tabel itu sendiri. Jika Anda menggunakan nilai untuk *col\$1name* yang sama dengan kolom tabel, Anda mendapatkan kesalahan.   
Setelah membuat tabel yang dipartisi, ubah tabel menggunakan pernyataan[ALTER TABLE](r_ALTER_TABLE.md)... ADD PARTITION untuk mendaftarkan partisi baru ke katalog eksternal. Saat Anda menambahkan partisi, Anda menentukan lokasi subfolder di Amazon S3 yang berisi data partisi.  
Misalnya, jika tabel `spectrum.lineitem_part` didefinisikan dengan`PARTITIONED BY (l_shipdate date)`, jalankan perintah ALTER TABLE berikut untuk menambahkan partisi.  

```
ALTER TABLE spectrum.lineitem_part ADD PARTITION (l_shipdate='1992-01-29')
LOCATION 's3://spectrum-public/lineitem_partition/l_shipdate=1992-01-29';
```
Jika Anda menggunakan CREATE EXTERNAL TABLE AS, Anda tidak perlu menjalankan ALTER TABLE... ADD PARTITION. Amazon Redshift secara otomatis mendaftarkan partisi baru di katalog eksternal. Amazon Redshift juga secara otomatis menulis data yang sesuai ke partisi di Amazon S3 berdasarkan kunci partisi atau kunci yang ditentukan dalam tabel.  
Untuk melihat partisi, kueri tampilan [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md) sistem.  
Untuk perintah CREATE EXTERNAL TABLE AS, Anda tidak perlu menentukan tipe data kolom partisi karena kolom ini berasal dari kueri. 

*FORMAT BARIS FORMAT BARIS DIBATASI*  
Klausa yang menentukan format data yang mendasarinya. Nilai yang mungkin untuk *rowformat* adalah sebagai berikut:  
+ GARIS DIAKHIRI OLEH '*pembatas*' 
+ BIDANG DIAKHIRI OLEH '*pembatas*' 
Tentukan satu karakter ASCII untuk '*pembatas*'. Anda dapat menentukan karakter ASCII non-cetak menggunakan oktal, dalam format di `'\` *`ddd`*`'`mana *`d`*adalah digit oktal (0—7) hingga '\$1 177'. Contoh berikut menentukan BEL (bel) karakter menggunakan oktal.   

```
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
```
Jika ROW FORMAT dihilangkan, format defaultnya adalah DELIMITED FIELDS TERMINATED BY '\$1 A' (awal heading) dan LINES TERMINATED BY'\$1n'(baris baru). 

FORMAT BARIS SERDE '*serde\$1name*' *[DENGAN SERDEPROPERTIES ('*property\$1name' = 'property\$1value*' [,...])]*  
Klausa yang menentukan format SERDE untuk data yang mendasarinya.     
'*serde\$1name*'  
Nama SerDe. Anda dapat menentukan format berikut:  
+ org.apache.hadoop.hive.serde2. RegexSerDe 
+ com.amazonaws.glue.serde. GrokSerDe 
+ org.apache.hadoop.hive.serde2.open CSVSerde 

  Parameter ini mendukung SerDe properti berikut untuk OpenCSVSerde: 

  ```
  'wholeFile' = 'true' 
  ```

  Setel `wholeFile` properti `true` untuk mengurai karakter baris baru dengan benar (\$1n) dalam string yang dikutip untuk permintaan OpenCSV. 
+ org.openx.data.jsonserde. JsonSerDe
  + JSON SERDE juga mendukung file Ion. 
  + JSON harus dibentuk dengan baik. 
  + Stempel waktu di Ion dan JSON harus menggunakan format. ISO8601
  + Parameter ini mendukung SerDe properti berikut untuk JsonSerDe: 

    ```
    'strip.outer.array'='true' 
    ```

    Memproses Ion/JSON file yang berisi satu array yang sangat besar tertutup dalam tanda kurung luar ([...]) seolah-olah berisi beberapa catatan JSON dalam array. 
+ com.amazon.ionhiveserde. IonHiveSerDe

  Format Amazon ION menyediakan format teks dan biner, selain tipe data. Untuk tabel eksternal yang mereferensikan data dalam format ION, Anda memetakan setiap kolom di tabel eksternal ke elemen yang sesuai dalam data format ION. Untuk informasi lebih lanjut, lihat [Amazon Ion](https://amzn.github.io/ion-docs/). Anda juga perlu menentukan format input dan output.  
*DENGAN SERDEPROPERTIES ('*property\$1name' = 'property\$1value*' [,...])]*  
Secara opsional, tentukan nama dan nilai properti, dipisahkan dengan koma.
Jika ROW FORMAT dihilangkan, format defaultnya adalah DELIMITED FIELDS TERMINATED BY '\$1 A' (awal heading) dan LINES TERMINATED BY'\$1n'(baris baru). 

DISIMPAN SEBAGAI *file\$1format*  
Format file untuk file data.   
Format yang valid adalah sebagai berikut:  
+ PARQUET
+ RCFILE (untuk data ColumnarSerDe hanya menggunakan, tidak) LazyBinaryColumnarSerDe
+ SEQUENCEFILE
+ TEXTFILE (untuk file teks, termasuk file JSON).
+ ORC 
+ AVRO 
+ *INPUTFORMAT 'input\$1format\$1classname' OUTPUTFORMAT '*output\$1format\$1classname*'* 
Perintah CREATE EXTERNAL TABLE AS hanya mendukung dua format file, TEXTFILE dan PARQUET.  
Untuk INPUTFORMAT dan OUTPUTFORMAT, tentukan nama kelas, seperti yang ditunjukkan contoh berikut.   

```
'org.apache.hadoop.mapred.TextInputFormat'
```

*LOKASI \$1's3://*ember/folder /' \$1 's3://ember/manifest\$1file* '\$1*  <a name="create-external-table-location"></a>
Jalur ke bucket atau folder Amazon S3 yang berisi file data atau file manifes yang berisi daftar jalur objek Amazon S3. Ember harus berada di AWS Wilayah yang sama dengan cluster Amazon Redshift. Untuk daftar Wilayah AWS yang didukung, lihat [Keterbatasan Amazon Redshift Spectrum](c-spectrum-considerations.md).  
Jika jalur menentukan bucket atau folder, misalnya`'s3://amzn-s3-demo-bucket/custdata/'`, Redshift Spectrum memindai file di bucket atau folder tertentu dan subfolder apa pun. Redshift Spectrum mengabaikan file dan file tersembunyi yang dimulai dengan titik atau garis bawah.   
Jika jalur menentukan file manifes, `'s3://bucket/manifest_file'` argumen harus secara eksplisit mereferensikan satu file — misalnya,. `'s3://amzn-s3-demo-bucket/manifest.txt'` Itu tidak dapat mereferensikan key prefix.   
Manifes adalah file teks dalam format JSON yang mencantumkan URL setiap file yang akan dimuat dari Amazon S3 dan ukuran file, dalam byte. URL menyertakan nama bucket dan path objek lengkap untuk file tersebut. File yang ditentukan dalam manifes dapat berada di bucket yang berbeda, tetapi semua bucket harus berada di AWS Wilayah yang sama dengan cluster Amazon Redshift. Jika file terdaftar dua kali, file dimuat dua kali. Contoh berikut menunjukkan JSON untuk manifes yang memuat tiga file.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Anda dapat membuat penyertaan file tertentu wajib. Untuk melakukan ini, sertakan `mandatory` opsi di tingkat file dalam manifes. Saat Anda menanyakan tabel eksternal dengan file wajib yang hilang, pernyataan SELECT gagal. Pastikan bahwa semua file yang termasuk dalam definisi tabel eksternal ada. Jika tidak semuanya ada, kesalahan muncul yang menunjukkan file wajib pertama yang tidak ditemukan. Contoh berikut menunjukkan JSON untuk manifes dengan `mandatory` opsi disetel ke`true`.  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "mandatory":true, "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "mandatory":false, "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Untuk mereferensikan file yang dibuat menggunakan UNLOAD, Anda dapat menggunakan manifes yang dibuat menggunakan [MEMBONGKAR](r_UNLOAD.md) parameter MANIFEST. File manifes kompatibel dengan file manifes untuk[SALIN dari Amazon S3](copy-parameters-data-source-s3.md), tetapi menggunakan kunci yang berbeda. Kunci yang tidak digunakan diabaikan. 

PROPERTI TABEL ('*property\$1name*' = '*property\$1value*' [,...])   
Sebuah klausa yang menetapkan definisi tabel untuk properti tabel.   
Properti tabel peka huruf besar/kecil.  
 *'compression\$1type'=' nilai '*   
 Properti yang menetapkan jenis kompresi yang akan digunakan jika nama file tidak berisi ekstensi. Jika Anda mengatur properti ini dan ada ekstensi file, ekstensi diabaikan dan nilai yang ditetapkan oleh properti digunakan. Nilai yang valid untuk jenis kompresi adalah sebagai berikut:  
+ bzip2
+ gzip
+ none
+ tajam  
'data\$1cleansing\$1enabled'='benar/salah'  
Properti ini menetapkan apakah penanganan data aktif untuk tabel. Ketika 'data\$1cleansing\$1enabled' disetel ke true, penanganan data aktif untuk tabel. Ketika 'data\$1cleansing\$1enabled' disetel ke false, penanganan data tidak aktif untuk tabel. Berikut ini adalah daftar properti penanganan data tingkat tabel yang dikendalikan oleh properti ini:  
+ column\$1count\$1mismatch\$1handling
+ invalid\$1char\$1handling
+ numeric\$1overflow\$1handling
+ replacement\$1char
+ surplus\$1char\$1handling
Sebagai contoh, lihat [Contoh penanganan data](r_CREATE_EXTERNAL_TABLE_examples.md#r_CREATE_EXTERNAL_TABLE_examples-data-handling).  
*'invalid\$1char\$1handling'=' nilai '*   
Menentukan tindakan untuk melakukan ketika hasil query berisi nilai karakter UTF-8 tidak valid. Anda dapat menentukan tindakan berikut:    
DISABLED  
Tidak melakukan penanganan karakter yang tidak valid.  
GAGAL  
Membatalkan kueri yang mengembalikan data yang berisi nilai UTF-8 yang tidak valid.  
SET\$1TO\$1NULL   
Mengganti nilai UTF-8 yang tidak valid dengan null.  
DROP\$1ROW  
Mengganti setiap nilai di baris dengan null.  
MENGGANTIKAN  
Mengganti karakter yang tidak valid dengan karakter pengganti yang Anda tentukan menggunakan. `replacement_char`  
*'replacement\$1char'=' karakter '*  
Menentukan karakter pengganti untuk digunakan ketika Anda mengatur `invalid_char_handling` ke`REPLACE`.  
'numeric\$1overflow\$1handling'='nilai'  
Menentukan tindakan untuk melakukan ketika data ORC berisi integer (misalnya, BIGINT atau int64) yang lebih besar dari definisi kolom (misalnya, SMALLINT atau int16). Anda dapat menentukan tindakan berikut:    
DISABLED  
Penanganan karakter yang tidak valid dimatikan.  
GAGAL  
Batalkan kueri saat data menyertakan karakter yang tidak valid.  
SET\$1TO\$1NULL  
Setel karakter tidak valid ke null.  
DROP\$1ROW  
Tetapkan setiap nilai di baris ke null.  
*'surplus\$1bytes\$1handling'=' nilai '*  
Menentukan cara menangani data yang dimuat yang melebihi panjang tipe data yang ditentukan untuk kolom yang berisi data VARBYTE. Secara default, Redshift Spectrum menetapkan nilai ke null untuk data yang melebihi lebar kolom.  
Anda dapat menentukan tindakan berikut yang akan dilakukan saat kueri mengembalikan data yang melebihi panjang tipe data:    
SET\$1TO\$1NULL  
Mengganti data yang melebihi lebar kolom dengan null.  
DISABLED  
Tidak melakukan penanganan byte surplus.  
GAGAL  
Membatalkan kueri yang mengembalikan data melebihi lebar kolom.  
DROP\$1ROW  
Jatuhkan semua baris yang berisi data melebihi lebar kolom.  
MEMOTONG  
Menghapus karakter yang melebihi jumlah maksimum karakter yang ditentukan untuk kolom.  
*'surplus\$1char\$1handling'=' nilai '*  
Menentukan cara menangani data yang dimuat yang melebihi panjang tipe data yang ditentukan untuk kolom yang berisi VARCHAR, CHAR, atau data string. Secara default, Redshift Spectrum menetapkan nilai ke null untuk data yang melebihi lebar kolom.  
Anda dapat menentukan tindakan berikut untuk melakukan ketika query mengembalikan data yang melebihi lebar kolom:    
SET\$1TO\$1NULL  
Mengganti data yang melebihi lebar kolom dengan null.  
DISABLED  
Tidak melakukan penanganan karakter surplus.  
GAGAL  
Membatalkan kueri yang mengembalikan data melebihi lebar kolom.  
DROP\$1ROW  
Mengganti setiap nilai di baris dengan null.  
MEMOTONG  
Menghapus karakter yang melebihi jumlah maksimum karakter yang ditentukan untuk kolom.  
'column\$1count\$1mismatch\$1handling'='nilai'  
Mengidentifikasi jika file berisi kurang atau lebih nilai untuk baris daripada jumlah kolom yang ditentukan dalam definisi tabel eksternal. Properti ini hanya tersedia untuk format file teks yang tidak terkompresi. Anda dapat menentukan tindakan berikut:    
DISABLED  
Penanganan ketidakcocokan jumlah kolom dimatikan.  
GAGAL  
Gagal kueri jika ketidakcocokan jumlah kolom terdeteksi.  
SET\$1TO\$1NULL  
Isi nilai yang hilang dengan NULL dan abaikan nilai tambahan di setiap baris.  
DROP\$1ROW  
Jatuhkan semua baris yang berisi kesalahan ketidakcocokan jumlah kolom dari pemindaian.  
*'numRows'=' baris\$1hitungan '*   
Properti yang menetapkan nilai NumRows untuk definisi tabel. Untuk secara eksplisit memperbarui statistik tabel eksternal, atur properti NumRows untuk menunjukkan ukuran tabel. Amazon Redshift tidak menganalisis tabel eksternal untuk menghasilkan statistik tabel yang digunakan pengoptimal kueri untuk menghasilkan paket kueri. Jika statistik tabel tidak ditetapkan untuk tabel eksternal, Amazon Redshift menghasilkan rencana eksekusi kueri berdasarkan asumsi bahwa tabel eksternal adalah tabel yang lebih besar dan tabel lokal adalah tabel yang lebih kecil.  
*'skip.header.line.count'=' line\$1count '*  
Properti yang menetapkan jumlah baris untuk dilewati di awal setiap file sumber.  
'serialization.null.format'=' '  
Properti yang menentukan Spectrum harus mengembalikan `NULL` nilai ketika ada kecocokan persis dengan teks yang disediakan dalam bidang.  
'orc.schema.resolution'='mapping\$1type'  
Properti yang menetapkan jenis pemetaan kolom untuk tabel yang menggunakan format data ORC. Properti ini diabaikan untuk format data lainnya.  
Nilai yang valid untuk jenis pemetaan kolom adalah sebagai berikut:   
+ name 
+ posisi 
Jika properti *orc.schema.resolution* dihilangkan, kolom dipetakan berdasarkan nama secara default. Jika *orc.schema.resolution* disetel ke nilai apa pun selain *'nama' atau 'posisi'**, kolom dipetakan berdasarkan posisi*. Untuk informasi selengkapnya tentang pemetaan kolom, lihat[Memetakan kolom tabel eksternal ke kolom ORC](c-spectrum-external-tables.md#c-spectrum-column-mapping-orc).  
Perintah COPY memetakan ke file data ORC hanya berdasarkan posisi. Properti tabel *orc.schema.resolution* tidak berpengaruh pada perilaku perintah COPY.   
'write.parallel'='on/off'  
Properti yang menetapkan apakah CREATE EXTERNAL TABLE AS harus menulis data secara paralel. Secara default, CREATE EXTERNAL TABLE AS menulis data secara paralel dengan beberapa file, sesuai dengan jumlah irisan dalam cluster. Opsi default aktif. Ketika 'write.parallel' disetel ke off, CREATE EXTERNAL TABLE AS menulis ke satu atau beberapa file data secara serial ke Amazon S3. Properti tabel ini juga berlaku untuk pernyataan INSERT berikutnya ke dalam tabel eksternal yang sama.  
'write.maxfilesize.mb'='ukuran'  
Properti yang menetapkan ukuran maksimum (dalam MB) dari setiap file yang ditulis ke Amazon S3 oleh CREATE EXTERNAL TABLE AS. Ukurannya harus berupa bilangan bulat yang valid antara 5 dan 6200. Ukuran file maksimum default adalah 6.200 MB. Properti tabel ini juga berlaku untuk pernyataan INSERT berikutnya ke dalam tabel eksternal yang sama.  
*'write.kms.key.id'=' nilai '*  
Anda dapat menentukan AWS Key Management Service kunci untuk mengaktifkan Server-Side Encryption (SSE) untuk objek Amazon S3, di mana *nilai* adalah salah satu dari berikut ini:   
+ `auto`untuk menggunakan AWS KMS kunci default yang disimpan di bucket Amazon S3.
+ *kms-key* yang Anda tentukan untuk mengenkripsi data.  
*select\$1statement*  
Pernyataan yang menyisipkan satu atau lebih baris ke dalam tabel eksternal dengan mendefinisikan kueri apa pun. Semua baris yang dihasilkan kueri ditulis ke Amazon S3 dalam format teks atau Parket berdasarkan definisi tabel.

## Contoh
<a name="r_CREATE_EXTERNAL_TABLE_examples_link"></a>

Koleksi contoh tersedia di[Contoh](r_CREATE_EXTERNAL_TABLE_examples.md).

# Catatan penggunaan
<a name="r_CREATE_EXTERNAL_TABLE_usage"></a>

Topik ini berisi catatan penggunaan untuk[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Anda tidak dapat melihat detail untuk tabel Amazon Redshift Spectrum menggunakan sumber daya yang sama dengan yang Anda gunakan untuk tabel Amazon Redshift standar, [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md) [STV\$1TBL\$1PERM](r_STV_TBL_PERM.md) seperti,, PG\$1CLASS, atau information\$1schema. Jika alat intelijen bisnis atau analitik Anda tidak mengenali tabel eksternal Redshift Spectrum, konfigurasikan aplikasi Anda ke kueri [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) dan. [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md)

## BUAT TABEL EKSTERNAL SEBAGAI
<a name="r_CETAS"></a>

Dalam beberapa kasus, Anda mungkin menjalankan perintah CREATE EXTERNAL TABLE AS pada Katalog AWS Glue Data, katalog AWS Lake Formation eksternal, atau metastore Apache Hive. Dalam kasus seperti itu, Anda menggunakan peran AWS Identity and Access Management (IAM) untuk membuat skema eksternal. Peran IAM ini harus memiliki izin baca dan tulis di Amazon S3. 

Jika Anda menggunakan katalog Lake Formation, peran IAM harus memiliki izin untuk membuat tabel di katalog. Dalam hal ini, ia juga harus memiliki izin lokasi danau data pada jalur Amazon S3 target. Peran IAM ini menjadi pemilik AWS Lake Formation tabel baru.

Untuk memastikan bahwa nama file unik, Amazon Redshift menggunakan format berikut untuk nama setiap file yang diunggah ke Amazon S3 secara default.

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

 Contohnya adalah `20200303_004509_810669_1007_0001_part_00.parquet`.

Pertimbangkan hal berikut saat menjalankan perintah CREATE EXTERNAL TABLE AS:
+ Lokasi Amazon S3 harus kosong.
+ Amazon Redshift hanya mendukung format PARQUET dan TEXTFILE saat menggunakan klausa STORADED AS.
+ Anda tidak perlu mendefinisikan daftar definisi kolom. Nama kolom dan tipe data kolom dari tabel eksternal baru diturunkan langsung dari kueri SELECT.
+ Anda tidak perlu menentukan tipe data kolom partisi di klausa PARTITIONED BY. Jika Anda menentukan kunci partisi, nama kolom ini harus ada dalam hasil kueri SELECT. Saat memiliki beberapa kolom partisi, urutannya dalam kueri SELECT tidak masalah. Amazon Redshift menggunakan urutannya yang ditentukan dalam klausa PARTITIONED BY untuk membuat tabel eksternal.
+ Amazon Redshift secara otomatis mempartisi file output ke dalam folder partisi berdasarkan nilai kunci partisi. Secara default, Amazon Redshift menghapus kolom partisi dari file output.
+ Klausa LINES TERMINATED BY 'delimiter' tidak didukung.
+ Klausa ROW FORMAT SERDE 'serde\$1name' tidak didukung.
+ Penggunaan file manifes tidak didukung. Dengan demikian, Anda tidak dapat menentukan klausa LOCATION ke file manifes di Amazon S3.
+ Amazon Redshift secara otomatis memperbarui properti tabel 'NumRows' di akhir perintah.
+ Properti tabel 'compression\$1type' hanya menerima 'none' atau 'snappy' untuk format file PARQUET.
+ Amazon Redshift tidak mengizinkan klausa LIMIT di kueri SELECT luar. Sebagai gantinya, Anda dapat menggunakan klausa LIMIT bersarang.
+ Anda dapat menggunakan STL\$1UNLOAD\$1LOG untuk melacak file yang ditulis ke Amazon S3 oleh setiap operasi CREATE EXTERNAL TABLE AS.

## Izin untuk membuat dan menanyakan tabel eksternal
<a name="r_CREATE_EXTERNAL_TABLE_usage-permissions"></a>

Untuk membuat tabel eksternal, pastikan bahwa Anda adalah pemilik skema eksternal atau superuser. Untuk mentransfer kepemilikan skema eksternal, gunakan[ALTER SCHEMA](r_ALTER_SCHEMA.md). Contoh berikut mengubah pemilik `spectrum_schema` skema menjadi`newowner`.

```
alter schema spectrum_schema owner to newowner;
```

Untuk menjalankan kueri Redshift Spectrum, Anda memerlukan izin berikut:
+ Izin penggunaan pada skema 
+ Izin untuk membuat tabel sementara dalam database saat ini 

Contoh berikut memberikan izin penggunaan pada skema `spectrum_schema` ke grup `spectrumusers` pengguna.

```
grant usage on schema spectrum_schema to group spectrumusers;
```

Contoh berikut memberikan izin sementara pada database `spectrumdb` ke grup `spectrumusers` pengguna. 

```
grant temp on database spectrumdb to group spectrumusers;
```

## Pseudokolom
<a name="r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns"></a>

**Secara default, Amazon Redshift membuat tabel eksternal dengan pseudocolumns \$1path dan \$1size.** Pilih kolom ini untuk melihat jalur ke file data di Amazon S3 dan ukuran file data untuk setiap baris yang dikembalikan oleh kueri. Nama kolom *\$1path* dan *\$1size* harus dibatasi dengan tanda kutip ganda. Klausa *SELECT \$1* tidak mengembalikan pseudocolumns. Anda harus secara eksplisit menyertakan nama kolom *\$1path* dan *\$1size* dalam kueri Anda, seperti yang ditunjukkan contoh berikut.

```
select "$path", "$size"
from spectrum.sales_part
where saledate = '2008-12-01';
```

*Anda dapat menonaktifkan pembuatan pseudocolumns untuk sesi dengan menyetel parameter konfigurasi *spectrum\$1enable\$1pseudo\$1columns* ke false.* 

**penting**  
Memilih *\$1size* atau *\$1path menimbulkan* biaya karena Redshift Spectrum memindai file data di Amazon S3 untuk menentukan ukuran kumpulan hasil. Untuk informasi selengkapnya, lihat [Harga Amazon Redshift](https://aws.amazon.com/redshift/pricing/).

## Mengatur opsi penanganan data
<a name="r_CREATE_EXTERNAL_TABLE_usage-data-handling"></a>

Anda dapat mengatur parameter tabel untuk menentukan penanganan masukan untuk data yang ditanyakan di tabel eksternal, termasuk: 
+ Karakter surplus dalam kolom yang berisi data VARCHAR, CHAR, dan string. Untuk informasi selengkapnya, lihat properti tabel eksternal`surplus_char_handling`.
+ Karakter tidak valid dalam kolom yang berisi data VARCHAR, CHAR, dan string. Untuk informasi selengkapnya, lihat properti tabel eksternal`invalid_char_handling`.
+ Karakter pengganti yang akan digunakan saat Anda menentukan REPLACE untuk properti tabel eksternal`invalid_char_handling`.
+ Cast penanganan overflow dalam kolom yang berisi data integer dan desimal. Untuk informasi selengkapnya, lihat properti tabel eksternal`numeric_overflow_handling`.
+ Surplus\$1bytes\$1handling untuk menentukan penanganan masukan untuk kelebihan byte dalam kolom yang berisi data varbyte. Untuk informasi selengkapnya, lihat properti tabel eksternal`surplus_bytes_handling`.

# Contoh
<a name="r_CREATE_EXTERNAL_TABLE_examples"></a>

Contoh berikut membuat tabel bernama SALES dalam skema eksternal Amazon Redshift bernama. `spectrum` Data ada dalam file teks yang dibatasi tab. Klausa PROPERTI TABLE menetapkan properti NumRows ke 170.000 baris.

Bergantung pada identitas yang Anda gunakan untuk menjalankan CREATE EXTERNAL TABLE, mungkin ada izin IAM yang harus Anda konfigurasi. Sebagai praktik terbaik, kami merekomendasikan untuk melampirkan kebijakan izin ke peran IAM dan kemudian menetapkannya ke pengguna dan grup sesuai kebutuhan. Untuk informasi selengkapnya, lihat [Identitas dan manajemen akses di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html).

```
create external table spectrum.sales(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
saledate date,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales/'
table properties ('numRows'='170000');
```

Contoh berikut membuat tabel yang menggunakan JsonSerDe untuk referensi data dalam format JSON.

```
create external table spectrum.cloudtrail_json (
event_version int,
event_id bigint,
event_time timestamp,
event_type varchar(10),
awsregion varchar(20),
event_name varchar(max),
event_source varchar(max),
requesttime timestamp,
useragent varchar(max),
recipientaccountid bigint)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
'mapping.requesttime' = 'requesttimestamp'
) location 's3://amzn-s3-demo-bucket/json/cloudtrail';
```

Berikut CREATE EXTERNAL TABLE AS contoh menciptakan tabel eksternal nonpartisi. Kemudian ia menulis hasil kueri SELECT sebagai Apache Parquet ke lokasi Amazon S3 target.

```
CREATE EXTERNAL TABLE spectrum.lineitem
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/lineitem/'
AS SELECT * FROM local_lineitem;
```

Contoh berikut membuat tabel eksternal dipartisi dan termasuk kolom partisi dalam query SELECT. 

```
CREATE EXTERNAL TABLE spectrum.partitioned_lineitem
PARTITIONED BY (l_shipdate, l_shipmode)
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/partitioned_lineitem/'
AS SELECT l_orderkey, l_shipmode, l_shipdate, l_partkey FROM local_table;
```

Untuk daftar database yang ada di katalog data eksternal, kueri tampilan [SVV\$1EXTERNAL\$1DATABASES](r_SVV_EXTERNAL_DATABASES.md) sistem. 

```
select eskind,databasename,esoptions from svv_external_databases order by databasename;
```

```
eskind | databasename | esoptions
-------+--------------+----------------------------------------------------------------------------------
     1 | default      | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | sampledb     | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | spectrumdb   | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
```

Untuk melihat detail tabel eksternal, kueri tampilan [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) dan [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) sistem.

Contoh berikut menanyakan tampilan SVV\$1EXTERNAL\$1TABLES.

```
select schemaname, tablename, location from svv_external_tables;
```

```
schemaname | tablename            | location
-----------+----------------------+--------------------------------------------------------
spectrum   | sales                | s3://redshift-downloads/tickit/spectrum/sales
spectrum   | sales_part           | s3://redshift-downloads/tickit/spectrum/sales_partition
```

Contoh berikut menanyakan tampilan SVV\$1EXTERNAL\$1COLUMNS. 

```
select * from svv_external_columns where schemaname like 'spectrum%' and tablename ='sales';
```

```
schemaname | tablename | columnname | external_type | columnnum | part_key
-----------+-----------+------------+---------------+-----------+---------
spectrum   | sales     | salesid    | int           |         1 |        0
spectrum   | sales     | listid     | int           |         2 |        0
spectrum   | sales     | sellerid   | int           |         3 |        0
spectrum   | sales     | buyerid    | int           |         4 |        0
spectrum   | sales     | eventid    | int           |         5 |        0
spectrum   | sales     | saledate   | date          |         6 |        0
spectrum   | sales     | qtysold    | smallint      |         7 |        0
spectrum   | sales     | pricepaid  | decimal(8,2)  |         8 |        0
spectrum   | sales     | commission | decimal(8,2)  |         9 |        0
spectrum   | sales     | saletime   | timestamp     |        10 |        0
```

Untuk melihat partisi tabel, gunakan query berikut.

```
select schemaname, tablename, values, location
from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+-------------------------------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

Contoh berikut mengembalikan ukuran total file data terkait untuk tabel eksternal.

```
select distinct "$path", "$size"
   from spectrum.sales_part;

 $path                                                                    | $size
--------------------------------------------------------------------------+-------
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/ |  1616
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
```

## Contoh partisi
<a name="r_CREATE_EXTERNAL_TABLE_examples-partitioning"></a>

Untuk membuat tabel eksternal yang dipartisi berdasarkan tanggal, jalankan perintah berikut.

```
create external table spectrum.sales_part(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
dateid smallint,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
partitioned by (saledate date)
row format delimited
fields terminated by '|'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales_partition/'
table properties ('numRows'='170000');
```

Untuk menambahkan partisi, jalankan perintah ALTER TABLE berikut.

```
alter table spectrum.sales_part
add if not exists partition (saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-04-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-05-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-06-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-07-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-08-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-09-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-10-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-11-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-12-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12/';
```

Untuk memilih data dari tabel yang dipartisi, jalankan kueri berikut.

```
select top 10 spectrum.sales_part.eventid, sum(spectrum.sales_part.pricepaid)
from spectrum.sales_part, event
where spectrum.sales_part.eventid = event.eventid
  and spectrum.sales_part.pricepaid > 30
  and saledate = '2008-12-01'
group by spectrum.sales_part.eventid
order by 2 desc;
```

```
eventid | sum
--------+---------
    914 | 36173.00
   5478 | 27303.00
   5061 | 26383.00
   4406 | 26252.00
   5324 | 24015.00
   1829 | 23911.00
   3601 | 23616.00
   3665 | 23214.00
   6069 | 22869.00
   5638 | 22551.00
```

Untuk melihat partisi tabel eksternal, kueri tampilan [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md) sistem.

```
select schemaname, tablename, values, location from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+--------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

## Contoh format baris
<a name="r_CREATE_EXTERNAL_TABLE_examples-row-format"></a>

Berikut ini menunjukkan contoh menentukan parameter ROW FORMAT SERDE untuk file data yang disimpan dalam format AVRO.

```
create external table spectrum.sales(salesid int, listid int, sellerid int, buyerid int, eventid int, dateid int, qtysold int, pricepaid decimal(8,2), comment VARCHAR(255))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='{\"namespace\": \"dory.sample\",\"name\": \"dory_avro\",\"type\": \"record\", \"fields\": [{\"name\":\"salesid\", \"type\":\"int\"},
{\"name\":\"listid\", \"type\":\"int\"},
{\"name\":\"sellerid\", \"type\":\"int\"},
{\"name\":\"buyerid\", \"type\":\"int\"},
{\"name\":\"eventid\",\"type\":\"int\"},
{\"name\":\"dateid\",\"type\":\"int\"},
{\"name\":\"qtysold\",\"type\":\"int\"},
{\"name\":\"pricepaid\", \"type\": {\"type\": \"bytes\", \"logicalType\": \"decimal\", \"precision\": 8, \"scale\": 2}}, {\"name\":\"comment\",\"type\":\"string\"}]}')
STORED AS AVRO
location 's3://amzn-s3-demo-bucket/avro/sales' ;
```

Berikut ini menunjukkan contoh menentukan parameter ROW FORMAT SERDE menggunakan. RegEx

```
create external table spectrum.types(
cbigint bigint,
cbigint_null bigint,
cint int,
cint_null int)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ('input.regex'='([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)')
stored as textfile
location 's3://amzn-s3-demo-bucket/regex/types';
```

Berikut ini menunjukkan contoh menentukan parameter ROW FORMAT SERDE menggunakan Grok.

```
create external table spectrum.grok_log(
timestamp varchar(255),
pid varchar(255),
loglevel varchar(255),
progname varchar(255),
message varchar(255))
row format serde 'com.amazonaws.glue.serde.GrokSerDe'
with serdeproperties ('input.format'='[DFEWI], \\[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid:int}\\] *(?<loglevel>:DEBUG|FATAL|ERROR|WARN|INFO) -- +%{DATA:progname}: %{GREEDYDATA:message}')
stored as textfile
location 's3://DOC-EXAMPLE-BUCKET/grok/logs';
```

Berikut ini menunjukkan contoh mendefinisikan log akses server Amazon S3 di bucket S3. Anda dapat menggunakan Redshift Spectrum untuk menanyakan log akses Amazon S3.

```
CREATE EXTERNAL TABLE spectrum.mybucket_s3_logs(
bucketowner varchar(255),
bucket varchar(255),
requestdatetime varchar(2000),
remoteip varchar(255),
requester varchar(255),
requested varchar(255),
operation varchar(255),
key varchar(255),
requesturi_operation varchar(255),
requesturi_key varchar(255),
requesturi_httpprotoversion varchar(255),
httpstatus varchar(255),
errorcode varchar(255),
bytessent bigint,
objectsize bigint,
totaltime varchar(255),
turnaroundtime varchar(255),
referrer varchar(255),
useragent varchar(255),
versionid varchar(255)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \"([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\" (- |[^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*).*$')
LOCATION 's3://amzn-s3-demo-bucket/s3logs’;
```

Berikut ini menunjukkan contoh menentukan parameter ROW FORMAT SERDE untuk data format ION.

```
CREATE EXTERNAL TABLE tbl_name (columns)
ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe'
STORED AS
INPUTFORMAT 'com.amazon.ionhiveserde.formats.IonInputFormat'
OUTPUTFORMAT 'com.amazon.ionhiveserde.formats.IonOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix'
```

## Contoh penanganan data
<a name="r_CREATE_EXTERNAL_TABLE_examples-data-handling"></a>

Contoh berikut mengakses file: [spi\$1global\$1rankings.csv](https://s3.amazonaws.com/redshift-downloads/docs-downloads/spi_global_rankings.csv). Anda dapat mengunggah `spi_global_rankings.csv` file ke bucket Amazon S3 untuk mencoba contoh-contoh ini.

Contoh berikut menciptakan skema eksternal `schema_spectrum_uddh` dan database`spectrum_db_uddh`. Untuk`aws-account-id`, masukkan ID AWS akun Anda dan `role-name` masukkan nama peran Redshift Spectrum Anda.

```
create external schema schema_spectrum_uddh
from data catalog
database 'spectrum_db_uddh'
iam_role 'arn:aws:iam::aws-account-id:role/role-name'
create external database if not exists;
```

Contoh berikut membuat tabel eksternal `soccer_league` dalam skema `schema_spectrum_uddh` eksternal.

```
CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league
(
  league_rank smallint,
  prev_rank   smallint,
  club_name   varchar(15),
  league_name varchar(20),
  league_off  decimal(6,2),
  league_def  decimal(6,2),
  league_spi  decimal(6,2),
  league_nspi integer
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n\l'
stored as textfile
LOCATION 's3://spectrum-uddh/league/'
table properties ('skip.header.line.count'='1');
```

Periksa jumlah baris dalam `soccer_league` tabel.

```
select count(*) from schema_spectrum_uddh.soccer_league;
```

Jumlah baris ditampilkan.

```
count
645
```

Kueri berikut menampilkan 10 klub teratas. Karena klub `Barcelona` memiliki karakter yang tidak valid dalam string, NULL ditampilkan untuk nama tersebut.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

```
league_rank	club_name	league_name			league_nspi
1		Manchester City	Barclays Premier Lea		34595
2		Bayern Munich	German Bundesliga		34151
3		Liverpool	Barclays Premier Lea		33223
4		Chelsea		Barclays Premier Lea		32808
5		Ajax		Dutch Eredivisie		32790
6		Atletico 	Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi		31469
8		NULL	        Spanish Primera Divi            31321
9		RB Leipzig	German Bundesliga		31014
10		Paris Saint-Ger	French Ligue 1			30929
```

Contoh berikut mengubah `soccer_league` tabel untuk menentukan`invalid_char_handling`,`replacement_char`, dan properti tabel `data_cleansing_enabled` eksternal untuk menyisipkan tanda tanya (?) sebagai pengganti karakter yang tidak terduga.

```
alter  table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='REPLACE','replacement_char'='?','data_cleansing_enabled'='true');
```

Contoh berikut menanyakan tabel `soccer_league` untuk tim dengan peringkat dari 1 hingga 10.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Karena properti tabel diubah, hasilnya menunjukkan 10 klub teratas, dengan tanda tanya (?) karakter pengganti di baris kedelapan untuk klub`Barcelona`.

```
league_rank	club_name	league_name		league_nspi
1		Manchester City	Barclays Premier Lea	34595
2		Bayern Munich	German Bundesliga	34151
3		Liverpool	Barclays Premier Lea	33223
4		Chelsea		Barclays Premier Lea	32808
5		Ajax		Dutch Eredivisie	32790
6		Atletico Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi	31469
8		Barcel?na	Spanish Primera Divi	31321
9		RB Leipzig	German Bundesliga	31014
10		Paris Saint-Ger	French Ligue 1		30929
```

Contoh berikut mengubah `soccer_league` tabel untuk menentukan properti tabel `invalid_char_handling` eksternal untuk menjatuhkan baris dengan karakter yang tidak terduga.

```
alter table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='DROP_ROW','data_cleansing_enabled'='true');
```

Contoh berikut menanyakan tabel `soccer_league` untuk tim dengan peringkat dari 1 hingga 10.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Hasilnya menampilkan klub-klub top, tidak termasuk baris kedelapan untuk klub`Barcelona`.

```
league_rank   club_name         league_name            league_nspi
1             Manchester City   Barclays Premier Lea   34595
2             Bayern Munich     German Bundesliga      34151
3             Liverpool         Barclays Premier Lea   33223
4             Chelsea           Barclays Premier Lea   32808
5             Ajax              Dutch Eredivisie       32790
6             Atletico Madrid   Spanish Primera Divi   31517
7             Real Madrid       Spanish Primera Divi   31469
9             RB Leipzig        German Bundesliga      31014
10            Paris Saint-Ger   French Ligue 1         30929
```

# BUAT TAMPILAN EKSTERNAL
<a name="r_CREATE_EXTERNAL_VIEW"></a>

Fitur pratinjau tampilan Katalog Data hanya tersedia di Wilayah berikut.
+ AS Timur (Ohio) (us-east-2)
+ AS Timur (Virginia Utara) (us-east-1)
+ AS Barat (California Utara) (us-west-1)
+ Asia Pacific (Tokyo) (ap-northeast-1)
+ Europe (Ireland) (eu-west-1)
+ Eropa (Stockholm) (eu-north-1)

Membuat tampilan di Katalog Data. Tampilan Katalog Data adalah skema tampilan tunggal yang bekerja dengan mesin SQL lainnya seperti Amazon Athena dan Amazon EMR. Anda dapat menanyakan tampilan dari mesin pilihan Anda. Untuk informasi selengkapnya tentang tampilan Katalog Data, lihat [Membuat tampilan Katalog Data](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Sintaksis
<a name="r_CREATE_EXTERNAL_VIEW-synopsis"></a>

```
CREATE EXTERNAL VIEW schema_name.view_name [ IF NOT EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
AS query_definition;
```

## Parameter
<a name="r_CREATE_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Skema yang dilampirkan ke AWS Glue database Anda, diikuti dengan nama tampilan.

DIJAGA  
Menentukan bahwa perintah CREATE EXTERNAL VIEW hanya harus selesai jika query dalam query\$1definition berhasil diselesaikan.

JIKA TIDAK ADA  
Membuat tampilan jika tampilan belum ada.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notasi skema yang akan digunakan saat membuat tampilan. Anda dapat menentukan untuk menggunakan AWS Glue Data Catalog, database Glue yang Anda buat, atau skema eksternal yang Anda buat. Lihat [MEMBUAT DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) dan [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

 *query\$1definition*   
Definisi kueri SQL yang dijalankan Amazon Redshift untuk mengubah tampilan.

## Contoh
<a name="r_CREATE_EXTERNAL_VIEW-examples"></a>

Contoh berikut membuat tampilan Data Catalog bernama sample\$1schema.glue\$1data\$1catalog\$1view.

```
CREATE EXTERNAL PROTECTED VIEW sample_schema.glue_data_catalog_view IF NOT EXISTS
AS SELECT * FROM sample_database.remote_table "remote-table-name";
```

# CREATE FUNCTION
<a name="r_CREATE_FUNCTION"></a>

Membuat fungsi skalar yang ditentukan pengguna (UDF) baru menggunakan klausa SQL SELECT atau program Python.

Untuk informasi selengkapnya dan contoh tambahan, lihat [Fungsi yang ditentukan pengguna di Amazon Redshift](user-defined-functions.md).

## Hak istimewa yang diperlukan
<a name="r_CREATE_FUNCTION-privileges"></a>

Anda harus memiliki izin dengan salah satu cara berikut untuk menjalankan CREATE OR REPLACE FUNCTION:
+ Untuk CREATE FUNCTION:
  + Superuser dapat menggunakan bahasa tepercaya dan tidak tepercaya untuk membuat fungsi.
  + Pengguna dengan hak istimewa CREATE [OR REPLACE] FUNCTION dapat membuat fungsi dengan bahasa tepercaya.
+ Untuk FUNGSI GANTI:
  + Superuser
  + Pengguna dengan hak istimewa CREATE [OR REPLACE] FUNCTION
  + Pemilik fungsi

## Sintaksis
<a name="r_CREATE_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] FUNCTION f_function_name
( { [py_arg_name  py_arg_data_type |
sql_arg_data_type } [ , ... ] ] )
RETURNS data_type
{ VOLATILE | STABLE | IMMUTABLE }
AS $$
  { python_program | SELECT_clause }
$$ LANGUAGE { plpythonu | sql }
```

## Parameter
<a name="r_CREATE_FUNCTION-parameters"></a>

ATAU GANTI  
Menentukan bahwa jika fungsi dengan nama yang sama dan tipe data argumen masukan, atau *tanda tangan*, karena ini sudah ada, fungsi yang ada diganti. Anda hanya dapat mengganti fungsi dengan fungsi baru yang mendefinisikan kumpulan tipe data yang identik. Anda harus menjadi superuser untuk mengganti fungsi.  
Jika Anda mendefinisikan fungsi dengan nama yang sama dengan fungsi yang ada tetapi tanda tangan yang berbeda, Anda membuat fungsi baru. Dengan kata lain, nama fungsi kelebihan beban. Untuk informasi selengkapnya, lihat [Nama fungsi overloading](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *f\$1function\$1name*   
Nama fungsi. Jika Anda menentukan nama skema (seperti`myschema.myfunction`), fungsi dibuat menggunakan skema yang ditentukan. Jika tidak, fungsi dibuat dalam skema saat ini. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  
Kami menyarankan Anda untuk mengawali semua nama UDF dengan. `f_` Amazon Redshift mencadangkan `f_` awalan untuk nama UDF, jadi dengan menggunakan `f_` awalan, Anda memastikan bahwa nama UDF Anda tidak akan bertentangan dengan nama fungsi SQL bawaan Amazon Redshift yang ada atau yang akan datang. Untuk informasi selengkapnya, lihat [Mencegah konflik penamaan UDF](udf-naming-udfs.md).  
Anda dapat mendefinisikan lebih dari satu fungsi dengan nama fungsi yang sama jika tipe data untuk argumen masukan berbeda. Dengan kata lain, nama fungsi kelebihan beban. Untuk informasi selengkapnya, lihat [Nama fungsi overloading](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Untuk Python UDF, daftar nama argumen masukan dan tipe data. Untuk SQL UDF, daftar tipe data, tanpa nama argumen. Dalam UDF Python, lihat argumen menggunakan nama argumen. Dalam SQL UDF, lihat argumen menggunakan \$11, \$12, dan seterusnya, berdasarkan urutan argumen dalam daftar argumen.   
Untuk SQL UDF, tipe data input dan pengembalian dapat berupa tipe data Amazon Redshift standar apa pun. Untuk UDF Python, tipe data input dan return dapat berupa SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, atau TIMESTAMP. Selain itu, fungsi yang ditentukan pengguna Python (UDFs) mendukung tipe data ANYELEMENT. Ini secara otomatis dikonversi ke tipe data standar berdasarkan tipe data dari argumen terkait yang diberikan saat runtime. Jika beberapa argumen menggunakan ANYELEMENT, mereka semua menyelesaikan ke tipe data yang sama saat runtime, berdasarkan argumen ANYELEMENT pertama dalam daftar. Untuk informasi selengkapnya, lihat [Tipe data Python UDF](udf-data-types.md) dan [Jenis Data](c_Supported_data_types.md).  
Anda dapat menentukan maksimal 32 argumen.

 RETURNS *data\$1type*   
Tipe data dari nilai yang dikembalikan oleh fungsi. Tipe data RETURNS dapat berupa tipe data Amazon Redshift standar apa pun. Selain itu, Python UDFs dapat menggunakan tipe data ANYELEMENT, yang secara otomatis dikonversi ke tipe data standar berdasarkan argumen yang diberikan saat runtime. Jika Anda menentukan ANYELEMENT untuk tipe data kembali, setidaknya satu argumen harus menggunakan ANYELEMENT. Tipe data pengembalian aktual cocok dengan tipe data yang disediakan untuk argumen ANYELEMENT ketika fungsi dipanggil. Untuk informasi selengkapnya, lihat [Tipe data Python UDF](udf-data-types.md).

 VOLATIL \$1 STABIL \$1 TIDAK DAPAT DIUBAH   
Menginformasikan pengoptimal kueri tentang volatilitas fungsi.   
Anda akan mendapatkan optimasi terbaik jika Anda memberi label fungsi Anda dengan kategori volatilitas ketat yang berlaku untuk itu. Namun, jika kategorinya terlalu ketat, ada risiko bahwa pengoptimal akan salah melewatkan beberapa panggilan, yang mengakibatkan set hasil yang salah. Dalam urutan keketatan, dimulai dengan yang paling ketat, kategori volatilitas adalah sebagai berikut:  
+ VOLATIL
+ STABIL
+ ABADI
VOLATIL  
Dengan argumen yang sama, fungsi dapat mengembalikan hasil yang berbeda pada panggilan berturut-turut, bahkan untuk baris dalam satu pernyataan. Pengoptimal kueri tidak dapat membuat asumsi apa pun tentang perilaku fungsi volatile, jadi kueri yang menggunakan fungsi volatile harus mengevaluasi kembali fungsi untuk setiap baris input.  
STABIL  
Dengan argumen yang sama, fungsi dijamin mengembalikan hasil yang sama untuk semua baris yang diproses dalam satu pernyataan. Fungsi ini dapat mengembalikan hasil yang berbeda ketika dipanggil dalam pernyataan yang berbeda. Kategori ini memungkinkan pengoptimal untuk mengoptimalkan beberapa panggilan fungsi dalam satu pernyataan ke satu panggilan untuk pernyataan.   
ABADI  
Mengingat argumen yang sama, fungsi selalu mengembalikan hasil yang sama, selamanya. Saat kueri memanggil `IMMUTABLE` fungsi dengan argumen konstan, pengoptimal mengevaluasi fungsi terlebih dahulu.

AS \$1\$1 *pernyataan* \$1\$1  
 Sebuah konstruksi yang melampirkan pernyataan yang akan dijalankan. Kata kunci literal `AS $$` dan `$$` diperlukan.   
Amazon Redshift mengharuskan Anda untuk melampirkan pernyataan dalam fungsi Anda dengan menggunakan format yang disebut kutipan dolar. Apa pun di dalam kandang dilewatkan persis seperti apa adanya. Anda tidak perlu melarikan diri dari karakter khusus apa pun karena isi string ditulis secara harfiah.   
 Dengan *kutipan dolar,* Anda menggunakan sepasang tanda dolar (\$1\$1) untuk menandakan awal dan akhir pernyataan yang akan dijalankan, seperti yang ditunjukkan pada contoh berikut.   

```
$$ my statement $$
```
 Secara opsional, di antara tanda-tanda dolar di setiap pasangan, Anda dapat menentukan string untuk membantu mengidentifikasi pernyataan tersebut. String yang Anda gunakan harus sama di awal dan akhir pasangan enklosur. String ini peka huruf besar/kecil, dan mengikuti batasan yang sama dengan pengenal yang tidak dikutip kecuali bahwa string ini tidak dapat berisi tanda dolar. Contoh berikut menggunakan string`test`.   

```
$test$ my statement $test$
```
[Untuk informasi lebih lanjut tentang kutipan dolar, lihat “Konstanta String yang dikutip Dolar” di bawah Struktur Leksikal dalam dokumentasi PostgreSQL.](https://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html) 

*python\$1program*   
Sebuah program Python executable valid yang mengembalikan nilai. Pernyataan bahwa Anda meneruskan dengan fungsi harus sesuai dengan persyaratan lekukan seperti yang ditentukan dalam Panduan [Gaya untuk Kode Python di situs web Python](https://www.python.org/dev/peps/pep-0008/#indentation). Untuk informasi selengkapnya, lihat [Dukungan bahasa Python untuk UDFs](udf-python-language-support.md).

*SQL\$1klausul*   
Klausul SQL SELECT.  
Klausa SELECT tidak dapat menyertakan salah satu jenis klausa berikut:  
+ FROM
+ KE DALAM
+ WHERE
+ GROUP BY
+ ORDER BY
+ LIMIT

BAHASA \$1plpythonu \$1 sql\$1   
Untuk Python, tentukan. `plpythonu` Untuk SQL, tentukan`sql`. Anda harus memiliki izin untuk penggunaan pada bahasa untuk SQL atau plpythonu. Untuk informasi selengkapnya, lihat [Keamanan dan izin UDF](udf-security-and-privileges.md).

## Catatan penggunaan
<a name="r_CREATE_FUNCTION-usage-notes"></a>

### Fungsi bersarang
<a name="r_CREATE_FUNCTION-usage-notes-nested-functions"></a>

Anda dapat memanggil fungsi SQL yang ditentukan pengguna (UDF) lain dari dalam SQL UDF. Fungsi bersarang harus ada saat Anda menjalankan perintah CREATE FUNCTION. Amazon Redshift tidak melacak dependensi untuk UDFs, jadi jika Anda menghapus fungsi bersarang, Amazon Redshift tidak mengembalikan kesalahan. Namun, UDF akan gagal jika fungsi bersarang tidak ada. Misalnya, fungsi berikut memanggil `f_sql_greater ` fungsi dalam klausa SELECT.

```
create function f_sql_commission (float, float )
  returns float
stable
as $$
  select f_sql_greater ($1, $2)
$$ language sql;
```

### Keamanan dan hak istimewa UDF
<a name="r_CREATE_FUNCTION-usage-notes-security-and-privileges"></a>

Untuk membuat UDF, Anda harus memiliki izin untuk penggunaan pada bahasa untuk SQL atau plpythonu (Python). Secara default, USAGE ON LANGUAGE SQL diberikan kepada PUBLIK. Namun, Anda harus secara eksplisit memberikan PENGGUNAAN PADA BAHASA PLPYTHONU kepada pengguna atau grup tertentu. 

Untuk mencabut penggunaan SQL, pertama-tama cabut penggunaan dari PUBLIC. Kemudian berikan penggunaan pada SQL hanya untuk pengguna atau grup tertentu yang diizinkan untuk membuat SQL UDFs. Contoh berikut mencabut penggunaan pada SQL dari PUBLIC kemudian memberikan penggunaan ke grup pengguna. `udf_devs`

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```

Untuk menjalankan UDF, Anda harus memiliki izin eksekusi untuk setiap fungsi. Secara default, izin eksekusi untuk new UDFs diberikan kepada PUBLIC. Untuk membatasi penggunaan, cabut izin eksekusi dari PUBLIC untuk fungsi tersebut. Kemudian berikan hak istimewa kepada individu atau kelompok tertentu. 

Contoh berikut mencabut izin eksekusi pada fungsi `f_py_greater` dari PUBLIC kemudian memberikan penggunaan ke grup pengguna. `udf_devs`

```
revoke execute on function f_py_greater(a float, b float) from PUBLIC;
grant execute on function f_py_greater(a float, b float) to group udf_devs;
```

Superuser memiliki semua hak istimewa secara default. 

Untuk informasi selengkapnya, lihat [HIBAH](r_GRANT.md) dan [MENCABUT](r_REVOKE.md).

## Contoh
<a name="r_CREATE_FUNCTION-examples"></a>

### Contoh UDF Python Skalar
<a name="r_CREATE_FUNCTION-python-example"></a>

Contoh berikut menciptakan UDF Python yang membandingkan dua bilangan bulat dan mengembalikan nilai yang lebih besar.

```
create function f_py_greater (a float, b float)
  returns float
stable
as $$
  if a > b:
    return a
  return b
$$ language plpythonu;
```

Contoh berikut menanyakan tabel PENJUALAN dan memanggil `f_py_greater` fungsi baru untuk mengembalikan KOMISI atau 20 persen dari PRICEPAID, mana yang lebih besar.

```
select f_py_greater (commission, pricepaid*0.20) from sales;
```

### Contoh SQL UDF skalar
<a name="r_CREATE_FUNCTION-sql-example"></a>

Contoh berikut menciptakan fungsi yang membandingkan dua angka dan mengembalikan nilai yang lebih besar. 

```
create function f_sql_greater (float, float)
  returns float
stable
as $$
  select case when $1 > $2 then $1
    else $2
  end
$$ language sql;
```

Kueri berikut memanggil `f_sql_greater` fungsi baru untuk menanyakan tabel PENJUALAN dan mengembalikan KOMISI atau 20 persen dari PRICEPAID, mana yang lebih besar.

```
select f_sql_greater (commission, pricepaid*0.20) from sales;
```

# BUAT GRUP
<a name="r_CREATE_GROUP"></a>

Mendefinisikan grup pengguna baru. Hanya superuser yang bisa membuat grup.

## Sintaksis
<a name="r_CREATE_GROUP-synopsis"></a>

```
CREATE GROUP group_name
[ [ WITH ] [ USER username ] [, ...] ]
```

## Parameter
<a name="r_CREATE_GROUP-parameters"></a>

 *group\$1name*   
Nama grup pengguna baru. Nama grup yang dimulai dengan dua garis bawah dicadangkan untuk penggunaan internal Amazon Redshift. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

DENGAN  
Sintaks opsional untuk menunjukkan parameter tambahan untuk CREATE GROUP.

USER  
Tambahkan satu atau lebih pengguna ke grup.

 *username*   
Nama pengguna untuk ditambahkan ke grup.

## Contoh
<a name="r_CREATE_GROUP-examples"></a>

Contoh berikut membuat grup pengguna bernama ADMIN\$1GROUP dengan dua pengguna, dan. ADMIN1 ADMIN2

```
create group admin_group with user admin1, admin2;
```

# BUAT PENYEDIA IDENTITAS
<a name="r_CREATE_IDENTITY_PROVIDER"></a>

Mendefinisikan penyedia identitas baru. Hanya pengguna super yang dapat membuat penyedia identitas.

## Sintaksis
<a name="r_CREATE_IDENTITY_PROVIDER-synopsis"></a>

```
CREATE IDENTITY PROVIDER identity_provider_name TYPE type_name
NAMESPACE namespace_name
[PARAMETERS parameter_string]
[APPLICATION_ARN arn]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
  ];
```

## Parameter
<a name="r_CREATE_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nama penyedia identitas baru. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

*type\$1name*  
Penyedia identitas untuk berinteraksi dengan. Azure dan saat AWSIDC ini satu-satunya penyedia identitas yang didukung.

*namespace\$1name*  
Namespace. Ini adalah pengidentifikasi singkatan yang unik untuk direktori penyedia identitas.

 *parameter\$1string*   
String yang berisi objek JSON yang diformat dengan benar yang berisi parameter dan nilai yang diperlukan untuk penyedia identitas.

 *arn*   
Nama sumber daya Amazon (ARN) untuk aplikasi yang dikelola Pusat Identitas IAM. Parameter ini hanya berlaku jika tipe penyedia identitas adalah. AWSIDC

 *iam\$1role*   
Peran IAM yang menyediakan izin untuk membuat koneksi ke IAM Identity Center. Parameter ini hanya berlaku jika tipe penyedia identitas adalah. AWSIDC

 *auto\$1create\$1roles*   
Mengaktifkan atau menonaktifkan fitur peran buat otomatis. Jika nilainya BENAR, Amazon Redshift mengaktifkan fitur peran buat otomatis. Jika nilainya SALAH, Amazon Redshift menonaktifkan fitur peran buat otomatis. Jika nilai untuk parameter ini tidak ditentukan, Amazon Redshift menentukan nilai menggunakan logika berikut:   
+  Jika `AUTO_CREATE_ROLES` disediakan tetapi nilainya tidak ditentukan, nilainya disetel ke TRUE. 
+  Jika `AUTO_CREATE_ROLES` tidak disediakan dan penyedia identitas AWSIDC, nilainya disetel ke FALSE. 
+  Jika `AUTO_CREATE_ROLES` tidak disediakan dan penyedia identitasnya adalah Azure, nilainya disetel ke TRUE. 
Untuk memasukkan grup, tentukan`INCLUDE`. Defaultnya kosong, yang berarti sertakan semua grup `AUTO_CREATE_ROLES` jika aktif.  
Untuk mengecualikan grup, tentukan`EXCLUDE`. Defaultnya kosong, yang berarti jangan mengecualikan grup apa pun `AUTO_CREATE_ROLES` jika aktif.

 *filter\$1pattern*   
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama grup. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_CREATE_IDENTITY_PROVIDER.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan.   
*filter\$1pattern mendukung karakter* berikut:  
+  Karakter alfabet huruf besar dan kecil (A-Z dan a-z) 
+  Angka (0-9) 
+  Karakter khusus berikut: 

  ```
  _ % ^ * + ? { } , $
  ```

## Contoh
<a name="r_CREATE_IDENTITY_PROVIDER-examples"></a>

Contoh berikut membuat penyedia identitas bernama *oauth\$1standard*, dengan TYPE *azure, untuk menjalin komunikasi dengan Microsoft Azure* Active Directory (AD).

```
CREATE IDENTITY PROVIDER oauth_standard TYPE azure
NAMESPACE 'aad'
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

Anda dapat menghubungkan aplikasi yang dikelola Pusat Identitas IAM dengan klaster yang sudah ada atau grup kerja Amazon Redshift Serverless. Ini memberi Anda kemampuan untuk mengelola akses ke database Redshift melalui IAM Identity Center. Untuk melakukannya, jalankan perintah SQL seperti contoh berikut. Anda harus menjadi administrator database.

```
CREATE IDENTITY PROVIDER "redshift-idc-app" TYPE AWSIDC
NAMESPACE 'awsidc'
APPLICATION_ARN 'arn:aws:sso::123456789012:application/ssoins-12345f67fe123d4/apl-a0b0a12dc123b1a4'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole';
```

Aplikasi ARN dalam hal ini mengidentifikasi aplikasi yang dikelola untuk terhubung. Anda dapat menemukannya dengan menjalankan`SELECT * FROM SVV_IDENTITY_PROVIDERS;`.

Untuk informasi selengkapnya tentang penggunaan CREATE IDENTITY PROVIDER, termasuk contoh tambahan, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html). Untuk informasi selengkapnya tentang pengaturan koneksi ke IAM Identity Center dari Redshift, lihat [Connect Redshift dengan IAM Identity Center untuk memberikan pengalaman masuk tunggal kepada pengguna](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

# BUAT PUSTAKA
<a name="r_CREATE_LIBRARY"></a>

Menginstal pustaka Python, yang tersedia bagi pengguna untuk digabungkan saat membuat fungsi yang ditentukan pengguna (UDF) dengan perintah. [CREATE FUNCTION](r_CREATE_FUNCTION.md) Ukuran total pustaka yang diinstal pengguna tidak boleh melebihi 100 MB. 

CREATE LIBRARY tidak dapat dijalankan di dalam blok transaksi (BEGIN... END). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

Amazon Redshift mendukung Python versi 2.7. Untuk informasi lebih lanjut, lihat [www.python.org](https://www.python.org/).

Untuk informasi selengkapnya, lihat [Contoh: Mengimpor modul pustaka Python kustom](udf-importing-custom-python-library-modules.md). 

## Hak istimewa yang diperlukan
<a name="r_CREATE_LIBRARY-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE LIBRARY:
+ Superuser
+ Pengguna dengan hak istimewa CREATE LIBRARY atau dengan hak istimewa bahasa yang ditentukan

## Sintaksis
<a name="r_CREATE_LIBRARY-synopsis"></a>

```
CREATE [ OR REPLACE ] LIBRARY library_name LANGUAGE plpythonu
FROM
{ 'https://file_url'
| 's3://bucketname/file_name'
authorization
  [ REGION [AS] 'aws_region']
  IAM_ROLE { default | ‘arn:aws:iam::<Akun AWS-id>:role/<role-name>’ }
}
```

## Parameter
<a name="r_CREATE_LIBRARY-parameters"></a>

ATAU GANTI  
Menentukan bahwa jika perpustakaan dengan nama yang sama dengan yang satu ini sudah ada, perpustakaan yang ada diganti. GANTI komit segera. Jika UDF yang bergantung pada pustaka berjalan secara bersamaan, UDF mungkin gagal atau mengembalikan hasil yang tidak terduga, bahkan jika UDF berjalan dalam transaksi. Anda harus menjadi pemilik atau superuser untuk mengganti perpustakaan.

 *perpustakaan\$1name*   
Nama perpustakaan yang akan diinstal. Anda tidak dapat membuat library yang berisi modul dengan nama yang sama dengan modul Python Standard Library atau modul Python Amazon Redshift yang sudah diinstal sebelumnya. Jika pustaka yang diinstal pengguna yang ada menggunakan paket Python yang sama dengan pustaka yang akan diinstal, Anda harus menghapus pustaka yang ada sebelum menginstal pustaka baru. Untuk informasi selengkapnya, lihat [Dukungan bahasa Python untuk UDFs](udf-python-language-support.md).

BAHASA plpythonu  
bahasa yang digunakan. Python (plpythonu) adalah satu-satunya bahasa yang didukung. Amazon Redshift mendukung Python versi 2.7. Untuk informasi lebih lanjut, lihat [www.python.org](https://www.python.org/).

FROM  
Lokasi file perpustakaan. Anda dapat menentukan bucket Amazon S3 dan nama objek, atau Anda dapat menentukan URL untuk mengunduh file dari situs web publik. Perpustakaan harus dikemas dalam bentuk `.zip` file. Untuk informasi selengkapnya, lihat [Membangun dan Menginstal Modul Python](https://docs.python.org/2/library/distutils.html?highlight=distutils#module-distutils) dalam dokumentasi Python.

 *https://file\$1url*   
URL untuk mengunduh file dari situs web publik. URL dapat berisi hingga tiga pengalihan. Berikut ini adalah contoh URL file.  

```
'https://www.example.com/pylib.zip'
```

 *s3://bucket\$1name/file\$1name*   
Jalur ke objek Amazon S3 tunggal yang berisi file pustaka. Berikut ini adalah contoh jalur objek Amazon S3.  

```
's3://amzn-s3-demo-bucket/my-pylib.zip'
```
Jika Anda menentukan bucket Amazon S3, Anda juga harus memberikan kredensi bagi AWS pengguna yang memiliki izin untuk mengunduh file tersebut.   
 Jika bucket Amazon S3 tidak berada di AWS Wilayah yang sama dengan kluster Amazon Redshift, Anda harus menggunakan opsi REGION untuk menentukan AWS Wilayah tempat data berada. Nilai untuk *aws\$1region* harus cocok dengan AWS Region yang tercantum dalam tabel dalam deskripsi [REGION](copy-parameters-data-source-s3.md#copy-region) parameter untuk perintah COPY.

*otorisasi*   
Klausa yang menunjukkan metode yang digunakan klaster untuk autentikasi dan otorisasi guna mengakses bucket Amazon S3 yang berisi file library. Cluster Anda harus memiliki izin untuk mengakses Amazon S3 dengan tindakan LIST dan GET.  
Sintaks untuk otorisasi sama dengan otorisasi perintah COPY. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md).  

```
IAM_ROLE { default | ‘arn:aws:iam::<Akun AWS-id>:role/<role-name>’
```
 Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE LIBRARY berjalan.  
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Jika Anda menentukan IAM\$1ROLE, Anda tidak dapat menggunakan ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN, atau CREDENTIALS.  
Secara opsional, jika bucket Amazon S3 menggunakan enkripsi sisi server, berikan kunci enkripsi dalam string credentials-args. Jika Anda menggunakan kredensil keamanan sementara, berikan token sementara dalam string *credentials-args*.  
Untuk informasi selengkapnya, lihat [Kredensial keamanan sementara](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

 WILAYAH [AS] *aws\$1region*   
 AWS Wilayah tempat ember Amazon S3 berada. REGION diperlukan saat bucket Amazon S3 tidak berada di AWS Wilayah yang sama dengan cluster Amazon Redshift. Nilai untuk *aws\$1region* harus cocok dengan AWS Region yang tercantum dalam tabel dalam deskripsi [REGION](copy-parameters-data-source-s3.md#copy-region) parameter untuk perintah COPY.  
Secara default, CREATE LIBRARY mengasumsikan bahwa bucket Amazon S3 terletak di Wilayah AWS yang sama dengan cluster Amazon Redshift.

## Contoh
<a name="r_CREATE_LIBRARY-examples"></a>

Dua contoh berikut menginstal modul Python [urlparse](https://docs.python.org/2/library/urlparse.html#module-urlparse), yang dikemas dalam file bernama. `urlparse3-1.0.3.zip` 

Perintah berikut menginstal pustaka UDF bernama `f_urlparse` dari paket yang telah diunggah ke bucket Amazon S3 yang terletak di Wilayah Timur AS.

```
create library f_urlparse
language plpythonu
from 's3://amzn-s3-demo-bucket/urlparse3-1.0.3.zip'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region as 'us-east-1';
```

Contoh berikut menginstal pustaka bernama `f_urlparse` dari file pustaka di situs web.



```
create library f_urlparse
language plpythonu
from 'https://example.com/packages/urlparse3-1.0.3.zip';
```

# BUAT KEBIJAKAN MASKING
<a name="r_CREATE_MASKING_POLICY"></a>

Membuat kebijakan masking data dinamis baru untuk mengaburkan data dari format tertentu. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md).

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat membuat kebijakan masking.

## Sintaksis
<a name="r_CREATE_MASKING_POLICY-synopsis"></a>

```
CREATE MASKING POLICY 
   { policy_name | database_name.policy_name } [IF NOT EXISTS]
   WITH (input_columns)
   USING (masking_expression);
```

## Parameter
<a name="r_CREATE_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan masking. Kebijakan masking tidak dapat memiliki nama yang sama dengan kebijakan masking lain yang sudah ada dalam database.

database\$1name  
Nama database tempat kebijakan akan dibuat. Kebijakan dapat dibuat di database yang terhubung atau di Katalog Izin Federasi Amazon Redshift.

*input\$1kolom*   
Tupel nama kolom dalam format (tipe col1, tipe col2...).  
Nama kolom digunakan sebagai masukan untuk ekspresi masking. Nama kolom tidak harus cocok dengan nama kolom yang disamarkan, tetapi tipe data input dan output harus cocok.

*masking\$1expression*  
Ekspresi SQL digunakan untuk mengubah kolom target. Ini dapat ditulis menggunakan fungsi manipulasi data seperti fungsi manipulasi String, atau dalam hubungannya dengan fungsi yang ditentukan pengguna yang ditulis dalam SQL, Python, atau dengan. AWS Lambda Anda dapat menyertakan tupel ekspresi kolom untuk kebijakan masking yang memiliki beberapa output. Jika Anda menggunakan konstanta sebagai ekspresi masking Anda, Anda harus secara eksplisit mentransmisikannya ke tipe yang cocok dengan tipe input.  
 Anda harus memiliki izin PENGGUNAAN pada fungsi yang ditentukan pengguna yang Anda gunakan dalam ekspresi masking. 

Untuk penggunaan KEBIJAKAN BUAT MASKING di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# BUAT TAMPILAN TERWUJUD
<a name="materialized-view-create-sql-command"></a>

Membuat tampilan terwujud berdasarkan satu atau beberapa tabel Amazon Redshift. Anda juga dapat mendasarkan tampilan terwujud pada tabel eksternal yang dibuat menggunakan Spectrum atau kueri federasi. Untuk informasi tentang Spectrum, lihat[Amazon Redshift Spectrum](c-using-spectrum.md). Untuk informasi tentang kueri federasi, lihat[Menanyakan data dengan kueri gabungan di Amazon Redshift](federated-overview.md).

## Sintaksis
<a name="mv_CREATE_MATERIALIZED_VIEW-synopsis"></a>

```
CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]
[ AUTO REFRESH { YES | NO } ]
AS query
```

## Parameter
<a name="mv_CREATE_MATERIALIZED_VIEW-parameters"></a>

CADANGAN  
Klausa yang menentukan apakah tampilan terwujud harus disertakan dalam snapshot cluster otomatis dan manual.   
Untuk tampilan terwujud yang tidak berisi data penting, tentukan BACKUP NO untuk menghemat waktu pemrosesan saat membuat snapshot dan memulihkan dari snapshot dan untuk mengurangi ruang penyimpanan di Amazon Simple Storage Service. Pengaturan BACKUP NO tidak berpengaruh pada replikasi otomatis data ke node lain di dalam cluster, sehingga tampilan terwujud dengan BACKUP NO ditentukan dipulihkan jika terjadi kegagalan node. Defaultnya adalah BACKUP YA.

 *table\$1attributes*   
Klausa yang menentukan bagaimana data dalam tampilan terwujud didistribusikan, termasuk yang berikut:  
+  Gaya distribusi untuk tampilan terwujud, dalam format`DISTSTYLE { EVEN | ALL | KEY }`. Jika Anda menghilangkan klausa ini, gaya distribusinya adalah. `EVEN` Untuk informasi selengkapnya, lihat [Gaya distribusi](c_choosing_dist_sort.md).
+ Kunci distribusi untuk tampilan terwujud, dalam format`DISTKEY ( distkey_identifier )`. Untuk informasi selengkapnya, lihat [Menunjuk gaya distribusi](t_designating_distribution_styles.md).
+ Kunci sortir untuk tampilan terwujud, dalam format`SORTKEY ( column_name [, ...] )`. Untuk informasi selengkapnya, lihat [Sortir kunci](t_Sorting_data.md).

Sebagai *kueri*  
`SELECT`Pernyataan valid yang mendefinisikan tampilan terwujud dan isinya. Hasil yang ditetapkan dari kueri mendefinisikan kolom dan baris tampilan terwujud. Untuk informasi tentang batasan saat membuat tampilan terwujud, lihat[Batasan](#mv_CREATE_MATERIALIZED_VIEW-limitations).  
Selanjutnya, konstruksi bahasa SQL tertentu yang digunakan dalam kueri menentukan apakah tampilan terwujud dapat disegarkan secara bertahap atau sepenuhnya. Untuk informasi tentang metode penyegaran, lihat[MENYEGARKAN TAMPILAN TERWUJUD](materialized-view-refresh-sql-command.md). Untuk informasi tentang batasan penyegaran tambahan, lihat[Batasan untuk penyegaran inkremental](materialized-view-refresh-sql-command.md#mv_REFRESH_MARTERIALIZED_VIEW_limitations).  
Jika kueri berisi perintah SQL yang tidak mendukung penyegaran tambahan, Amazon Redshift menampilkan pesan yang menunjukkan bahwa tampilan terwujud akan menggunakan penyegaran penuh. Pesan mungkin atau mungkin tidak ditampilkan, tergantung pada aplikasi klien SQL. Periksa `state` kolom [STV\$1MV\$1INFO](r_STV_MV_INFO.md) untuk melihat jenis penyegaran yang digunakan oleh tampilan terwujud.

PENYEGARAN OTOMATIS  
Klausa yang menentukan apakah tampilan terwujud harus disegarkan secara otomatis dengan perubahan terbaru dari tabel dasarnya. Nilai default-nya adalah `NO`. Untuk informasi selengkapnya, lihat [Menyegarkan tampilan yang terwujud](materialized-view-refresh.md).

## Catatan penggunaan
<a name="mv_CREATE_MARTERIALIZED_VIEW_usage"></a>

Untuk membuat tampilan terwujud, Anda harus memiliki hak istimewa berikut:
+ BUAT hak istimewa untuk skema.
+ Hak istimewa SELECT tingkat tabel atau kolom pada tabel dasar untuk membuat tampilan terwujud. Jika Anda memiliki hak istimewa tingkat kolom pada kolom tertentu, Anda dapat membuat tampilan terwujud hanya pada kolom tersebut.

 Anda dapat membuat tampilan terwujud dari cluster datasharing jarak jauh dengan memberikan nama database eksternal di. `mv_name` 

## Penyegaran tambahan untuk tampilan terwujud dalam datashare
<a name="mv_CREATE_MARTERIALIZED_VIEW_datashare"></a>

 Amazon Redshift mendukung penyegaran otomatis dan inkremental untuk tampilan terwujud dalam penyimpanan data konsumen saat tabel dasar dibagikan. Penyegaran tambahan adalah operasi di mana Amazon Redshift mengidentifikasi perubahan pada tabel dasar atau tabel yang terjadi setelah penyegaran sebelumnya dan hanya memperbarui catatan terkait dalam tampilan terwujud. Ini berjalan lebih cepat daripada penyegaran penuh dan meningkatkan kinerja beban kerja. Anda tidak perlu mengubah definisi tampilan terwujud Anda untuk memanfaatkan penyegaran tambahan. 

Ada beberapa batasan yang perlu diperhatikan untuk memanfaatkan penyegaran tambahan dengan tampilan yang terwujud: 
+ Tampilan terwujud harus mereferensikan hanya satu database, baik lokal maupun jarak jauh. 
+ Penyegaran tambahan hanya tersedia pada tampilan baru yang terwujud. Oleh karena itu, Anda harus menghapus tampilan terwujud yang ada dan membuatnya kembali agar penyegaran tambahan terjadi.

Untuk informasi selengkapnya tentang membuat tampilan terwujud dalam database, lihat [Bekerja dengan tampilan di berbagi data Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/datashare-views), yang berisi beberapa contoh kueri.

## Pembaruan DDL ke tampilan terwujud atau tabel dasar
<a name="materialized-view-ddl"></a>

Saat menggunakan tampilan terwujud di Amazon Redshift, ikuti catatan penggunaan ini untuk pembaruan bahasa definisi data (DDL) ke tampilan terwujud atau tabel dasar.
+ Anda dapat menambahkan kolom ke tabel dasar tanpa memengaruhi tampilan terwujud yang mereferensikan tabel dasar.
+ Beberapa operasi dapat meninggalkan tampilan terwujud dalam keadaan yang tidak dapat disegarkan sama sekali. Contohnya adalah operasi seperti mengganti nama atau menjatuhkan kolom, mengubah jenis kolom, dan mengubah nama skema. Pandangan terwujud seperti itu dapat ditanyakan tetapi tidak dapat disegarkan. Dalam hal ini, Anda harus menjatuhkan dan membuat ulang tampilan yang terwujud. 
+ Secara umum, Anda tidak dapat mengubah definisi tampilan terwujud (pernyataan SQL-nya).
+ Anda tidak dapat mengganti nama tampilan yang terwujud. 

## Batasan
<a name="mv_CREATE_MATERIALIZED_VIEW-limitations"></a>

Anda tidak dapat menentukan tampilan terwujud yang mereferensikan atau menyertakan salah satu dari berikut ini:
+ Tampilan standar, atau tabel dan tampilan sistem.
+ Tabel sementara.
+ Fungsi yang ditentukan pengguna.
+ Klausul ORDER BY, LIMIT, atau OFFSET.
+ Referensi pengikatan akhir ke tabel dasar. Dengan kata lain, setiap tabel dasar atau kolom terkait yang direferensikan dalam kueri SQL yang menentukan dari tampilan terwujud harus ada dan harus valid. 
+ Fungsi khusus simpul pemimpin: CURRENT\$1SCHEMA, CURRENT\$1SCHEMAS, HAS\$1DATABASE\$1PRIVILEGE, HAS\$1SCHEMA\$1PRIVILEGE, HAS\$1TABLE\$1PRIVILEGE.
+ Anda tidak dapat menggunakan opsi AUTO REFRESH YES ketika definisi tampilan yang terwujud menyertakan fungsi yang dapat berubah atau skema eksternal. Anda juga tidak dapat menggunakannya saat menentukan tampilan terwujud pada tampilan terwujud lainnya.
+ Anda tidak harus menjalankan secara manual [MENGANALISA](r_ANALYZE.md) pada tampilan yang terwujud. Ini terjadi saat ini hanya melalui ANALISIS OTOMATIS. Untuk informasi selengkapnya, lihat [Menganalisis tabel](t_Analyzing_tables.md).
+ Tabel yang dilindungi RLS atau dilindungi DDM. 
+ Pembuatan tampilan terwujud dari cluster pembagian data jarak jauh tidak mendukung referensi pada tampilan terwujud lainnya, tabel Spektrum, tabel yang ditentukan dalam cluster Redshift yang berbeda dan. UDFs Ini didukung untuk pembuatan tampilan terwujud dari cluster lokal (produser). 

## Contoh
<a name="mv_CREATE_MARTERIALIZED_VIEW_examples"></a>

Contoh berikut menciptakan tampilan terwujud dari tiga tabel dasar yang digabungkan dan digabungkan. Setiap baris mewakili kategori dengan jumlah tiket yang terjual. Saat Anda menanyakan tampilan materialisasi tickets\$1mv, Anda langsung mengakses data yang telah dihitung sebelumnya dalam tampilan materialisasi tickets\$1mv.

```
CREATE MATERIALIZED VIEW tickets_mv AS
    select   catgroup,
    sum(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;
```

Contoh berikut membuat tampilan terwujud mirip dengan contoh sebelumnya dan menggunakan fungsi agregat MAX (). 

```
CREATE MATERIALIZED VIEW tickets_mv_max AS
    select   catgroup,
    max(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;

SELECT name, state FROM STV_MV_INFO;
```

Contoh berikut menggunakan klausa UNION ALL untuk bergabung dengan tabel Amazon `public_sales` Redshift dan tabel Redshift `spectrum.sales` Spectrum untuk membuat tampilan material. `mv_sales_vw` Untuk informasi tentang perintah CREATE EXTERNAL TABLE untuk Amazon Redshift Spectrum, [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) lihat. Tabel eksternal Redshift Spectrum mereferensikan data di Amazon S3.

```
CREATE MATERIALIZED VIEW mv_sales_vw as
select salesid, qtysold, pricepaid, commission, saletime from public.sales
union all
select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
```

Contoh berikut membuat tampilan terwujud `mv_fq` berdasarkan tabel eksternal kueri federasi. Untuk informasi tentang kueri federasi, lihat[BUAT SKEMA EKSTERNAL](r_CREATE_EXTERNAL_SCHEMA.md).

```
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example;

select firstname, lastname from mv_fq;
 firstname | lastname
-----------+----------
 John      | Day
 Jane      | Doe
(2 rows)
```

Contoh berikut menunjukkan definisi tampilan terwujud.

```
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true);

pg_get_viewdef
---------------------------------------------------
create materialized view mv_sales_vw as select a from t;
```

 Contoh berikut menunjukkan cara mengatur AUTO REFRESH dalam definisi tampilan terwujud dan juga menentukan DISTSTYLE. Pertama, buat tabel dasar sederhana. 

```
CREATE TABLE baseball_table (ball int, bat int);
```

Kemudian, buat tampilan yang terwujud.

```
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
```

Sekarang Anda dapat menanyakan tampilan mv\$1baseball yang terwujud. Untuk memeriksa apakah AUTO REFRESH diaktifkan untuk tampilan terwujud, lihat[STV\$1MV\$1INFO](r_STV_MV_INFO.md).

Contoh berikut membuat tampilan terwujud yang mereferensikan tabel sumber di database lain. Ini mengasumsikan bahwa database yang berisi tabel sumber, Database\$1A, berada di cluster atau workgroup yang sama dengan tampilan terwujud Anda, yang Anda buat di Database\$1b. (Anda dapat mengganti database Anda sendiri untuk sampel.) *Pertama, buat tabel di Database\$1a disebut *kota*, dengan kolom nama kota.* Jadikan tipe data kolom sebagai VARCHAR. *Setelah Anda membuat tabel sumber, jalankan perintah berikut di Database\$1b untuk membuat tampilan terwujud yang sumbernya adalah tabel kota Anda.* Pastikan untuk menentukan database dan skema tabel sumber dalam klausa FROM:

```
CREATE MATERIALIZED VIEW cities_mv AS
SELECT  cityname
FROM    database_A.public.cities;
```

Kueri tampilan terwujud yang Anda buat. Kueri mengambil catatan yang sumber aslinya adalah tabel *kota* di Database\$1a:

```
select * from cities_mv;
```

Ketika Anda menjalankan pernyataan SELECT, *cities\$1mv* mengembalikan catatan. Rekaman disegarkan dari tabel sumber hanya ketika pernyataan REFRESH dijalankan. Juga, perhatikan bahwa Anda tidak dapat memperbarui catatan secara langsung dalam tampilan terwujud. Untuk informasi tentang menyegarkan data dalam tampilan terwujud, lihat. [MENYEGARKAN TAMPILAN TERWUJUD](materialized-view-refresh-sql-command.md)

Untuk detail tentang ikhtisar tampilan terwujud dan perintah SQL yang digunakan untuk menyegarkan dan menghapus tampilan terwujud, lihat topik berikut:
+ [Tampilan terwujud di Amazon Redshift](materialized-view-overview.md)
+ [MENYEGARKAN TAMPILAN TERWUJUD](materialized-view-refresh-sql-command.md)
+ [JATUHKAN TAMPILAN TERWUJUD](materialized-view-drop-sql-command.md)

# BUAT MODEL
<a name="r_CREATE_MODEL"></a>

**Topics**
+ [Prasyarat](#r_create_model_prereqs)
+ [Hak istimewa yang diperlukan](#r_simple_create_model-privileges)
+ [Pengendalian biaya](#r_create_model_cost)
+ [MODEL CREATE penuh](#r_full_create_model)
+ [Parameter](#r_create_model_parameters)
+ [Catatan penggunaan](r_create_model_usage_notes.md)
+ [Kasus penggunaan](r_create_model_use_cases.md)

## Prasyarat
<a name="r_create_model_prereqs"></a>

Sebelum Anda menggunakan pernyataan CREATE MODEL, lengkapi prasyarat di. [Penyiapan klaster untuk menggunakan Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup) Berikut ini adalah ringkasan prasyarat tingkat tinggi.
+ Buat klaster Amazon Redshift dengan AWS Management Console atau AWS Command Line Interface (CLI AWS ).
+ Lampirkan kebijakan AWS Identity and Access Management (IAM) saat membuat cluster.
+ Untuk memungkinkan Amazon Redshift dan SageMaker AI untuk mengambil peran untuk berinteraksi dengan layanan lain, tambahkan kebijakan kepercayaan yang sesuai ke peran IAM.

Untuk detail tentang peran IAM, kebijakan kepercayaan, dan prasyarat lainnya, lihat. [Penyiapan klaster untuk menggunakan Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup)

Berikut ini, Anda dapat menemukan kasus penggunaan yang berbeda untuk pernyataan CREATE MODEL.
+ [Model Buat Sederhana](r_create_model_use_cases.md#r_simple_create_model)
+ [BUAT MODEL dengan panduan pengguna](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [BUAT XGBoost model dengan AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model)
+ [Bawa model Anda sendiri (BYOM) - inferensi lokal](r_create_model_use_cases.md#r_byom_create_model)
+ [Bawa model Anda sendiri (BYOM) - inferensi jarak jauh](r_create_model_use_cases.md#r_byom_create_model_remote)
+ [BUAT MODEL dengan K-MEANS](r_create_model_use_cases.md#r_k-means_create_model)
+ [MODEL CREATE penuh](#r_full_create_model)

## Hak istimewa yang diperlukan
<a name="r_simple_create_model-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE MODEL:
+ Superuser
+ Pengguna dengan hak istimewa CREATE MODEL
+ Peran dengan hak istimewa GRANT CREATE MODEL

## Pengendalian biaya
<a name="r_create_model_cost"></a>

 Amazon Redshift MLmenggunakan sumber daya kluster yang ada untuk membuat model prediksi, sehingga Anda tidak perlu membayar biaya tambahan. Namun, Anda mungkin memiliki biaya tambahan jika Anda perlu mengubah ukuran cluster Anda atau ingin melatih model Anda. Amazon Redshift MLmenggunakan Amazon SageMaker AI untuk melatih model, yang memang memiliki biaya terkait tambahan. Ada beberapa cara untuk mengontrol biaya tambahan, seperti membatasi jumlah waktu maksimum yang dapat diambil pelatihan atau dengan membatasi jumlah contoh pelatihan yang digunakan untuk melatih model Anda. Untuk informasi selengkapnya, lihat [Biaya untuk menggunakan Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/cost.html) Ml. 

## MODEL CREATE penuh
<a name="r_full_create_model"></a>

Berikut ini merangkum opsi dasar dari sintaks CREATE MODEL lengkap.

### Sintaks CREATE MODEL penuh
<a name="r_auto_off-create-model-synposis"></a>

Berikut ini adalah sintaks lengkap dari pernyataan CREATE MODEL.

**penting**  
Saat membuat model menggunakan pernyataan CREATE MODEL, ikuti urutan kata kunci dalam sintaks berikut.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement )  | 'job_name' }
[ TARGET column_name ]
FUNCTION function_name [ ( data_type [, ...] ) ] 
[ RETURNS data_type ] 
  -- supported only for BYOM
[ SAGEMAKER 'endpoint_name'[:'model_name']] 
  -- supported only for BYOM remote inference
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[ AUTO ON / OFF ]
  -- default is AUTO ON
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER | KMEANS | FORECAST } ]
  -- not required for non AUTO OFF case, default is the list of all supported types
  -- required for AUTO OFF
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
  -- not supported when AUTO OFF
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' |
             'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'|
             'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge',
             'multi:softmax' | 'RMSE' | 'WAPE' | 'MAPE' | 'MASE' | 'AverageWeightedQuantileLoss' ) ]
  -- for AUTO ON: first 5 are valid
  -- for AUTO OFF: 6-13 are valid
  -- for FORECAST: 14-18 are valid
[ PREPROCESSORS 'string' ]
  -- required for AUTO OFF, when it has to be 'none'
  -- optional for AUTO ON
[ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ]
  -- support XGBoost hyperparameters, except OBJECTIVE
  -- required and only allowed for AUTO OFF
  -- default NUM_ROUND is 100
  -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF)
 [ SETTINGS (
   S3_BUCKET 'amzn-s3-demo-bucket',  |
    -- required
  TAGS 'string', |
    -- optional
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional, defualt is on.
  MAX_CELLS integer, |
    -- optional, default is 1,000,000
  MAX_RUNTIME integer (, ...) |
    -- optional, default is 5400 (1.5 hours)
  HORIZON integer, |
    -- required if creating a forecast model
  FREQUENCY integer, |
    -- required if creating a forecast model
  PERCENTILES string, |
    -- optional if creating a forecast model
  MAX_BATCH_ROWS integer -- optional for BYOM remote inference
    ) ]
```

## Parameter
<a name="r_create_model_parameters"></a>

nama\$1model  
Nama modul. Nama model dalam skema harus unik.

*DARI \$1*table\$1name* \$1 (*select\$1query) \$1 'job\$1name*'\$1*  
Table\$1name atau query yang menentukan data pelatihan. Mereka dapat berupa tabel yang ada di sistem, atau kueri SELECT yang kompatibel dengan Amazon RedShift yang diapit dengan tanda kurung, yaitu (). Setidaknya harus ada dua kolom dalam hasil kueri. 

TARGET *kolom\$1name*  
Nama kolom yang menjadi target prediksi. Kolom harus ada dalam klausa FROM. 

FUNGSI *function\$1name* (*data\$1type* [,...])  
Nama fungsi yang akan dibuat dan tipe data dari argumen input. Anda dapat memberikan nama skema skema dalam database Anda, bukan nama fungsi.

RETURNS *data\$1type*  
Tipe data yang akan dikembalikan dari fungsi model. Tipe `SUPER` data yang dikembalikan hanya berlaku untuk BYOM dengan inferensi jarak jauh.

*SAGEMAKER '*endpoint\$1name' [:' model\$1name* ']*  
Nama titik akhir Amazon SageMaker AI. Jika nama titik akhir menunjuk ke titik akhir multimodel, tambahkan nama model yang akan digunakan. Titik akhir harus di-host Wilayah AWS sama dengan cluster Amazon Redshift.

<account-id><role-name>IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '\$1  
 Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE MODEL berjalan. Atau, Anda dapat menentukan ARN dari peran IAM untuk menggunakan peran itu.

[OTOMATIS MENYALA/MATI]  
 Mengaktifkan atau menonaktifkan CREATE MODEL penemuan otomatis preprocessor, algoritma, dan pemilihan hyper-parameter. Menentukan saat membuat model Forecast menunjukkan penggunaan AutoPredictor, di mana Amazon Forecast menerapkan kombinasi algoritma yang optimal untuk setiap deret waktu dalam kumpulan data Anda. 

 *MODEL\$1TYPE \$1XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1 KMEANS \$1 PRAKIRAAN\$1*   
(Opsional) Menentukan jenis model. Anda dapat menentukan apakah Anda ingin melatih model jenis model tertentu, seperti, multilayer perceptron (MLP) XGBoost, KMEANS, atau Linear Learner, yang semuanya merupakan algoritme yang didukung Amazon AI Autopilot. SageMaker Jika Anda tidak menentukan parameter, maka semua jenis model yang didukung dicari selama pelatihan untuk model terbaik. Anda juga dapat membuat model perkiraan di Redshift MLuntuk membuat perkiraan deret waktu yang akurat.

 *PROBLEM\$1TYPE (REGRESI \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION)*   
(Opsional) Menentukan jenis masalah. Jika Anda mengetahui jenis masalahnya, Anda dapat membatasi Amazon Redshift hanya untuk mencari model terbaik dari jenis model tertentu. Jika Anda tidak menentukan parameter ini, jenis masalah ditemukan selama pelatihan, berdasarkan data Anda.

TUJUAN ('MSE' \$1 'Akurasi' \$1 'F1' \$1 'F1Makro' \$1 'AUC' \$1 'reg:squarederror' \$1 'reg:squaredlogerror' \$1 'reg:logistic' \$1 'reg:pseudohubererror' \$1 'reg:tweedie' \$1 'binary:logistic' \$1 'binary:hinge' \$1 'multi:soft' max' \$1 'RMSE' \$1 'WAPE' \$1 'PETA' \$1 'MASE' \$1 '') AverageWeightedQuantileLoss  
(Opsional) Menentukan nama metrik objektif yang digunakan untuk mengukur kualitas prediktif dari sistem pembelajaran mesin. Metrik ini dioptimalkan selama pelatihan untuk memberikan perkiraan terbaik untuk nilai parameter model dari data. Jika Anda tidak menentukan metrik secara eksplisit, perilaku defaultnya adalah menggunakan MSE: untuk regresi secara otomatis, F1: untuk klasifikasi biner, Akurasi: untuk klasifikasi multiclass. Untuk informasi selengkapnya tentang tujuan, lihat [MLJobObjektif Otomatis](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) di [parameter tugas Referensi dan Pembelajaran](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters) *Amazon SageMaker AI API* dalam dokumentasi XGBOOST. Nilai RMSE, WAPE, MAPE, MASE, dan hanya berlaku untuk model AverageWeightedQuantileLoss Forecast. Untuk informasi selengkapnya, lihat operasi API [CreateAutoPredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric).

 *PREPROCESSORS 'string'*   
(Opsional) Menentukan kombinasi tertentu dari preprocessors untuk set tertentu kolom. Formatnya adalah daftar ColumnSets, dan transformasi yang sesuai untuk diterapkan ke setiap set kolom. Amazon Redshift menerapkan semua transformator dalam daftar transformator tertentu ke semua kolom yang sesuai. ColumnSet Misalnya, untuk menerapkan OneHotEncoder dengan Imputer ke kolom t1 dan t2, gunakan perintah contoh berikut.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
  {"ColumnSet": [
      "t1",
      "t2"
    ],
    "Transformers": [
      "OneHotEncoder",
      "Imputer"
    ]
  },
  {"ColumnSet": [
      "t3"
    ],
    "Transformers": [
      "OneHotEncoder"
    ]
  },
  {"ColumnSet": [
      "temp"
    ],
    "Transformers": [
      "Imputer",
      "NumericPassthrough"
    ]
  }
]'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket'
)
```

HYPERPARAMETERS \$1DEFAULT \$1 DEFAULT KECUALI (kunci 'nilai' (,..))\$1  
Menentukan apakah XGBoost parameter default digunakan atau diganti oleh nilai-nilai yang ditentukan pengguna. Nilai harus diapit dengan tanda kutip tunggal. Berikut ini adalah contoh parameter untuk XGBoost dan defaultnya.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_CREATE_MODEL.html)

PENGATURAN (S3\$1BUCKET *'amzn-s3-demo-bucket', \$1 TAG 'string', \$1 KMS\$1KEY\$1ID '*kms\$1string', \$1 S3\$1GARBAGE\$1COLLECT aktif/mati, \$1 MAX\$1CELLS *integer, \$1 MAX\$1RUNTIME (,...), \$1 bilangan bulat HORIZON, \$1 FREQUENCY forecast\$1frequency, \$1 Persentil array string*)  
Klausa S3\$1BUCKET menentukan lokasi Amazon S3 yang digunakan untuk menyimpan hasil antara.  
(Opsional) Parameter TAGS adalah daftar pasangan nilai kunci yang dipisahkan koma yang dapat Anda gunakan untuk menandai sumber daya yang dibuat di Amazon SageMaker AI; dan Amazon Forecast. Tag membantu Anda mengatur sumber daya dan mengalokasikan biaya. Nilai dalam pasangan adalah opsional, sehingga Anda dapat membuat tag dengan menggunakan format `key=value` atau hanya dengan membuat kunci. Untuk informasi selengkapnya tentang tag di Amazon Redshift, lihat Ringkasan [penandaan](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-tagging.html).  
(Opsional) KMS\$1KEY\$1ID menentukan apakah Amazon Redshift menggunakan enkripsi sisi server dengan kunci untuk melindungi data saat istirahat. AWS KMS Data dalam perjalanan dilindungi dengan Secure Sockets Layer (SSL).   
(Opsional) S3\$1GARBAGE\$1COLLECT \$1ON \$1 OFF\$1 menentukan apakah Amazon Redshift melakukan pengumpulan sampah pada kumpulan data yang dihasilkan yang digunakan untuk melatih model dan model. Jika disetel ke OFF, kumpulan data yang dihasilkan digunakan untuk melatih model dan model tetap di Amazon S3 dan dapat digunakan untuk tujuan lain. Jika disetel ke ON, Amazon Redshift menghapus artefak di Amazon S3 setelah pelatihan selesai. Defaultnya adalah ON.  
(Opsional) MAX\$1CELLS menentukan jumlah sel dalam data pelatihan. Nilai ini adalah produk dari jumlah catatan (dalam kueri atau tabel pelatihan) dikalikan jumlah kolom. Default adalah 1.000.000.  
(Opsional) MAX\$1RUNTIME menentukan jumlah maksimum waktu untuk melatih. Pekerjaan pelatihan sering selesai lebih cepat tergantung pada ukuran dataset. Ini menentukan jumlah waktu maksimum yang harus diambil pelatihan. Defaultnya adalah 5.400 (90 menit).  
HORIZON menentukan jumlah maksimum prediksi model perkiraan dapat kembali. Setelah model dilatih, Anda tidak dapat mengubah bilangan bulat ini. Parameter ini diperlukan jika melatih model perkiraan.  
FREKUENSI menentukan seberapa terperinci dalam satuan waktu yang Anda inginkan prakiraannya. Pilihan yang tersedia adalah`Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Parameter ini diperlukan jika melatih model perkiraan.  
(Opsional) PERCENTILES adalah string yang dibatasi koma yang menentukan jenis perkiraan yang digunakan untuk melatih prediktor. Jenis Forecast dapat berupa kuantil dari 0,01 hingga 0,99, dengan penambahan 0,01 atau lebih tinggi. Anda juga dapat menentukan perkiraan rata-rata dengan mean. Anda dapat menentukan maksimal lima jenis perkiraan.

 *MAX\$1BATCH\$1ROWS bilangan bulat*   
(Opsional) Jumlah maksimum baris yang dikirimkan Amazon Redshift dalam satu permintaan batch untuk satu pemanggilan SageMaker AI. Ini hanya didukung untuk BYOM dengan inferensi jarak jauh. Nilai minimum parameter ini adalah 1. Nilai maksimumnya adalah`INT_MAX`, atau 2.147.483.647. Parameter ini diperlukan hanya ketika kedua input dan tipe data yang dikembalikan adalah *SUPER*. Nilai defaultnya adalah`INT_MAX`, atau 2.147,483.647. 

# Catatan penggunaan
<a name="r_create_model_usage_notes"></a>

Saat menggunakan CREATE MODEL, pertimbangkan hal berikut:
+ Pernyataan CREATE MODEL beroperasi dalam mode asinkron dan kembali setelah ekspor data pelatihan ke Amazon S3. Langkah-langkah pelatihan yang tersisa di Amazon SageMaker AI terjadi di latar belakang. Saat pelatihan sedang berlangsung, fungsi inferensi yang sesuai terlihat tetapi tidak dapat dijalankan. Anda dapat meminta [STV\$1ML\$1MODEL\$1INFO](r_STV_ML_MODEL_INFO.md) untuk melihat status pelatihan. 
+ Pelatihan dapat berjalan hingga 90 menit di latar belakang, secara default dalam model Otomatis dan dapat diperpanjang. Untuk membatalkan pelatihan, cukup jalankan [MODEL DROP](r_DROP_MODEL.md) perintah.
+ Cluster Amazon Redshift yang Anda gunakan untuk membuat model dan bucket Amazon S3 yang digunakan untuk mementaskan data pelatihan dan artefak model harus berada di Wilayah yang sama. AWS 
+ Selama pelatihan model, Amazon Redshift dan SageMaker AI menyimpan artefak perantara di bucket Amazon S3 yang Anda sediakan. Secara default, Amazon Redshift melakukan pengumpulan sampah di akhir operasi CREATE MODEL. Amazon Redshift menghapus objek tersebut dari Amazon S3. Untuk mempertahankan artefak tersebut di Amazon S3, setel opsi S3\$1GARBAGE COLLECT OFF.
+ Anda harus menggunakan setidaknya 500 baris dalam data pelatihan yang disediakan dalam klausa FROM.
+ Anda hanya dapat menentukan hingga 256 kolom fitur (input) di klausa FROM \$1table\$1name \$1 (select\$1query)\$1 saat menggunakan pernyataan CREATE MODEL.
+ Untuk AUTO ON, jenis kolom yang dapat Anda gunakan sebagai set pelatihan adalah SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, BOOLEAN, CHAR, VARCHAR, DATE, TIME, TIMETZ, TIMESTAMP, dan TIMESTAMPTZ. Untuk AUTO OFF, jenis kolom yang dapat Anda gunakan sebagai set pelatihan adalah SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, dan BOOLEAN.
+ Anda tidak dapat menggunakan DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, GEOMETRY, GEOGRAPHY, HLLSKETCH, SUPER, atau VARBYTE sebagai jenis kolom target.
+ Untuk meningkatkan akurasi model, lakukan salah satu hal berikut:
  + Tambahkan sebanyak mungkin kolom yang relevan dalam perintah CREATE MODEL saat Anda menentukan data pelatihan di klausa FROM.
  + Gunakan nilai yang lebih besar untuk MAX\$1RUNTIME dan MAX\$1CELLS. Nilai yang lebih besar untuk parameter ini meningkatkan biaya pelatihan model.
+ Eksekusi pernyataan CREATE MODEL kembali segera setelah data pelatihan dihitung dan diekspor ke bucket Amazon S3. Setelah titik itu, Anda dapat memeriksa status pelatihan menggunakan perintah SHOW MODEL. Ketika model yang dilatih di latar belakang gagal, Anda dapat memeriksa kesalahan menggunakan SHOW MODEL. Anda tidak dapat mencoba lagi model yang gagal. Gunakan DROP MODEL untuk menghapus model yang gagal dan membuat ulang model baru. Untuk informasi selengkapnya tentang SHOW MODEL, lihat[MODEL PERTUNJUKAN](r_SHOW_MODEL.md).
+ BYOM lokal mendukung jenis model yang sama yang didukung Amazon Redshift MLuntuk kasus non-BYOM. Amazon Redshift mendukung polos XGBoost (menggunakan XGBoost versi 1.0 atau yang lebih baru), model KMEANS tanpa preprosesor, dan model XGBOOST/MLP/Linear Learner yang dilatih oleh Amazon AI Autopilot. SageMaker Ini mendukung yang terakhir dengan preprosesor yang ditentukan Autopilot yang juga didukung oleh Amazon AI Neo. SageMaker 
+ Jika klaster Amazon Redshift Anda telah meningkatkan perutean yang diaktifkan untuk cloud pribadi virtual (VPC) Anda, pastikan untuk membuat titik akhir VPC Amazon S3 dan titik akhir AI VPC untuk SageMaker VPC tempat klaster Anda berada. Melakukan hal ini memungkinkan lalu lintas berjalan melalui VPC Anda di antara layanan ini selama CREATE MODEL. Untuk informasi selengkapnya, lihat [SageMaker AI Clarify Job Amazon VPC Subnet dan Grup Keamanan](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-vpc.html#clarify-vpc-job).

# Kasus penggunaan
<a name="r_create_model_use_cases"></a>

Kasus penggunaan berikut menunjukkan cara menggunakan CREATE MODEL sesuai dengan kebutuhan Anda.

## Model Buat Sederhana
<a name="r_simple_create_model"></a>

Berikut ini merangkum opsi dasar dari sintaks CREATE MODEL.

### Sintaks CREATE MODEL sederhana
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### Parameter CREATE MODEL sederhana
<a name="r_simple-create-model-parameters"></a>

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

DARI \$1*table\$1name* \$1 (*select\$1query*)\$1  
Table\$1name atau query yang menentukan data pelatihan. Mereka dapat berupa tabel yang ada di sistem, atau kueri SELECT yang kompatibel dengan Amazon RedShift yang diapit dengan tanda kurung, yaitu (). Setidaknya harus ada dua kolom dalam hasil kueri. 

TARGET *kolom\$1name*  
Nama kolom yang menjadi target prediksi. Kolom harus ada dalam klausa FROM. 

FUNGSI *prediction\$1function\$1name*   
Nilai yang menentukan nama fungsi machine learning Amazon Redshift yang akan dihasilkan oleh CREATE MODEL dan digunakan untuk membuat prediksi menggunakan model ini. Fungsi ini dibuat dalam skema yang sama dengan objek model dan dapat kelebihan beban.  
Pembelajaran mesin Amazon Redshift mendukung model, seperti model Xtreme Gradient Boosted tree (XGBoost) untuk regresi dan klasifikasi.

<account-id><role-name>IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '\$1  
 Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREAT MODEL berjalan. Atau, Anda dapat menentukan ARN dari peran IAM untuk menggunakan peran itu.

 **S3\$1BUCKET 'amzn-s3-demo-ember'**   
Nama bucket Amazon S3 yang sebelumnya Anda buat digunakan untuk berbagi data pelatihan dan artefak antara Amazon Redshift dan AI. SageMaker Amazon Redshift membuat subfolder di bucket ini sebelum membongkar data pelatihan. Saat pelatihan selesai, Amazon Redshift menghapus subfolder yang dibuat dan isinya. 

bilangan bulat MAX\$1CELLS   
Jumlah maksimum sel untuk diekspor dari klausa FROM. Default adalah 1.000.000.   
Jumlah sel adalah produk dari jumlah baris dalam data pelatihan (diproduksi oleh tabel klausa FROM atau kueri) dikalikan jumlah kolom. Jika jumlah sel dalam data pelatihan lebih dari yang ditentukan oleh parameter max\$1cells, CREATE MODEL menurunkan data pelatihan klausa FROM untuk mengurangi ukuran set pelatihan di bawah MAX\$1CELLS. Mengizinkan kumpulan data pelatihan yang lebih besar dapat menghasilkan akurasi yang lebih tinggi tetapi juga dapat berarti model membutuhkan waktu lebih lama untuk dilatih dan harganya lebih mahal.  
Untuk informasi tentang biaya penggunaan Amazon Redshift, lihat. [Biaya untuk menggunakan Amazon Redshift ML](cost.md)  
Untuk informasi selengkapnya tentang biaya yang terkait dengan berbagai nomor sel dan detail uji coba gratis, lihat [harga Amazon Redshift](https://aws.amazon.com/redshift/pricing).

## BUAT MODEL dengan panduan pengguna
<a name="r_user_guidance_create_model"></a>

Berikut ini, Anda dapat menemukan deskripsi opsi untuk CREATE MODEL selain opsi yang dijelaskan dalam[Model Buat Sederhana](#r_simple_create_model).

Secara default, CREATE MODEL mencari kombinasi terbaik dari preprocessing dan model untuk dataset spesifik Anda. Anda mungkin ingin kontrol tambahan atau memperkenalkan pengetahuan domain tambahan (seperti jenis masalah atau tujuan) atas model Anda. Dalam skenario churn pelanggan, jika hasil “pelanggan tidak aktif” jarang terjadi, maka tujuan F1 sering lebih disukai daripada tujuan akurasi. Karena model akurasi tinggi mungkin memprediksi “pelanggan aktif” sepanjang waktu, ini menghasilkan akurasi tinggi tetapi nilai bisnis kecil. Untuk informasi tentang tujuan F1, lihat [MLJobTujuan Otomatis](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) di *Referensi API Amazon SageMaker AI*.

Kemudian CREATE MODEL mengikuti saran Anda pada aspek yang ditentukan, seperti tujuan. Pada saat yang sama, CREATE MODEL secara otomatis menemukan preprocessors terbaik dan hyperparameter terbaik. 

### BUAT MODEL dengan sintaks panduan pengguna
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL menawarkan lebih banyak fleksibilitas pada aspek yang dapat Anda tentukan dan aspek-aspek yang ditemukan Amazon Redshift secara otomatis.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### BUAT MODEL dengan parameter panduan pengguna
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\$1TYPE \$1XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER\$1*   
(Opsional) Menentukan jenis model. Anda dapat menentukan apakah Anda ingin melatih model jenis model tertentu, seperti, multilayer perceptron (MLP) XGBoost, atau Linear Learner, yang semuanya merupakan algoritme yang didukung Amazon AI Autopilot. SageMaker Jika Anda tidak menentukan parameter, maka semua jenis model yang didukung dicari selama pelatihan untuk model terbaik.

 *PROBLEM\$1TYPE (REGRESI \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION)*   
(Opsional) Menentukan jenis masalah. Jika Anda mengetahui jenis masalahnya, Anda dapat membatasi Amazon Redshift hanya untuk mencari model terbaik dari jenis model tertentu. Jika Anda tidak menentukan parameter ini, jenis masalah ditemukan selama pelatihan, berdasarkan data Anda.

TUJUAN ('MSE' \$1 'Akurasi' \$1 'F1' \$1 'F1Makro' \$1 'AUC')  
(Opsional) Menentukan nama metrik objektif yang digunakan untuk mengukur kualitas prediktif dari sistem pembelajaran mesin. Metrik ini dioptimalkan selama pelatihan untuk memberikan perkiraan terbaik untuk nilai parameter model dari data. Jika Anda tidak menentukan metrik secara eksplisit, perilaku defaultnya adalah menggunakan MSE: untuk regresi secara otomatis, F1: untuk klasifikasi biner, Akurasi: untuk klasifikasi multiclass. Untuk informasi selengkapnya tentang tujuan, lihat [MLJobTujuan Otomatis](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) di *Referensi Amazon SageMaker AI API*.

bilangan bulat MAX\$1CELLS   
(Opsional) Menentukan jumlah sel dalam data pelatihan. Nilai ini adalah produk dari jumlah catatan (dalam kueri atau tabel pelatihan) dikalikan jumlah kolom. Default adalah 1.000.000.

Bilangan bulat MAX\$1RUNTIME   
(Opsional) Menentukan jumlah maksimum waktu untuk berlatih. Pekerjaan pelatihan sering selesai lebih cepat tergantung pada ukuran dataset. Ini menentukan jumlah waktu maksimum yang harus diambil pelatihan. Defaultnya adalah 5.400 (90 menit).

S3\$1GARBAGE\$1COLLECT \$1AKTIF \$1 MATI\$1  
(Opsional) Menentukan apakah Amazon Redshift melakukan pengumpulan sampah pada kumpulan data yang dihasilkan yang digunakan untuk melatih model dan model. Jika disetel ke OFF, kumpulan data yang dihasilkan digunakan untuk melatih model dan model tetap di Amazon S3 dan dapat digunakan untuk tujuan lain. Jika disetel ke ON, Amazon Redshift menghapus artefak di Amazon S3 setelah pelatihan selesai. Defaultnya adalah ON.

KMS\$1KEY\$1ID 'kms\$1key\$1id'  
(Opsional) Menentukan apakah Amazon Redshift menggunakan enkripsi sisi server dengan kunci untuk melindungi data saat AWS KMS istirahat. Data dalam perjalanan dilindungi dengan Secure Sockets Layer (SSL). 

 *PREPROCESSORS 'string'*   
(Opsional) Menentukan kombinasi tertentu dari preprocessors untuk set tertentu kolom. Formatnya adalah daftar ColumnSets, dan transformasi yang sesuai untuk diterapkan ke setiap set kolom. Amazon Redshift menerapkan semua transformator dalam daftar transformator tertentu ke semua kolom yang sesuai. ColumnSet Misalnya, untuk menerapkan OneHotEncoder dengan Imputer ke kolom t1 dan t2, gunakan perintah contoh berikut.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
{"ColumnSet": [
    "t1",
    "t2"
  ],
  "Transformers": [
    "OneHotEncoder",
    "Imputer"
  ]
},
{"ColumnSet": [
    "t3"
  ],
  "Transformers": [
    "OneHotEncoder"
  ]
},
{"ColumnSet": [
    "temp"
  ],
  "Transformers": [
    "Imputer",
    "NumericPassthrough"
  ]
}
]'
SETTINGS (
S3_BUCKET 'amzn-s3-demo-bucket'
)
```

Amazon Redshift mendukung transformator berikut:
+ OneHotEncoder — Biasanya digunakan untuk menyandikan nilai diskrit menjadi vektor biner dengan satu nilai bukan nol. Trafo ini cocok untuk banyak model pembelajaran mesin. 
+ OrdinalEncoder — Mengkodekan nilai diskrit menjadi bilangan bulat tunggal. Trafo ini cocok untuk model machine learning tertentu, seperti MLP dan Linear Learner. 
+ NumericPassthrough — Melewati input apa adanya ke dalam model.
+ Imputer - Mengisi nilai yang hilang dan bukan nilai angka (NaN).
+ ImputerWithIndicator — Mengisi nilai yang hilang dan nilai NaN. Trafo ini juga menciptakan indikator apakah ada nilai yang hilang dan terisi.
+ Normalizer — Menormalkan nilai, yang dapat meningkatkan kinerja banyak algoritma pembelajaran mesin.
+ DateTimeVectorizer — Membuat embedding vektor, mewakili kolom tipe data datetime yang dapat digunakan dalam model pembelajaran mesin.
+ PCA — Memproyeksikan data ke ruang dimensi yang lebih rendah untuk mengurangi jumlah fitur sambil menyimpan informasi sebanyak mungkin.
+ StandardScaler — Standarisasi fitur dengan menghapus mean dan penskalaan ke varians unit. 
+ MinMax — Mengubah fitur dengan menskalakan setiap fitur ke rentang tertentu.

Amazon Redshift ML menyimpan trafo terlatih, dan secara otomatis menerapkannya sebagai bagian dari kueri prediksi. Anda tidak perlu menentukannya saat membuat prediksi dari model Anda. 

## BUAT XGBoost model dengan AUTO OFF
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL umumnya memiliki tujuan yang berbeda dari CREATE MODEL default.

Sebagai pengguna tingkat lanjut yang sudah mengetahui jenis model yang Anda inginkan dan hyperparameters untuk digunakan saat melatih model ini, Anda dapat menggunakan CREATE MODEL with AUTO OFF untuk mematikan penemuan otomatis CREATE MODEL dari preprocessors dan hyperparameters. Untuk melakukannya, Anda secara eksplisit menentukan jenis model. XGBoost saat ini satu-satunya jenis model yang didukung saat AUTO disetel ke OFF. Anda dapat menentukan hyperparameters. Amazon Redshift menggunakan nilai default untuk setiap hyperparameter yang Anda tentukan. 

### BUAT XGBoost model dengan sintaks AUTO OFF
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### BUAT XGBoost model dengan parameter AUTO OFF
<a name="r_auto_off-create-model-parameters"></a>

 *MATI OTOMATIS*   
Menonaktifkan CREATE MODEL penemuan otomatis preprocessor, algoritma, dan pemilihan hyper-parameter.

MODEL\$1TYPE XGBOOST  
Menentukan untuk menggunakan XGBOOST untuk melatih model. 

TUJUAN str  
Menentukan tujuan yang diakui oleh algoritma. Amazon Redshift mendukung reg:squarederror, reg:squaredlogerror, reg:logistic, reg:pseudohubererror, reg:tweedie, binary:logistic, binary:engsel, multi:softmax. Untuk informasi selengkapnya tentang tujuan ini, lihat [Mempelajari parameter tugas](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters) dalam XGBoost dokumentasi.

HYPERPARAMETERS \$1DEFAULT \$1 DEFAULT KECUALI (kunci 'nilai' (,..))\$1  
Menentukan apakah XGBoost parameter default digunakan atau diganti oleh nilai-nilai yang ditentukan pengguna. Nilai harus diapit dengan tanda kutip tunggal. Berikut ini adalah contoh parameter untuk XGBoost dan defaultnya.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_create_model_use_cases.html)

Contoh berikut menyiapkan data untuk XGBoost.

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

Contoh berikut membuat XGBoost model dengan opsi lanjutan tertentu, seperti MODEL\$1TYPE, OBJECTIVE, dan PREPROCESSORS.

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

Contoh berikut menggunakan query inferensi untuk memprediksi umur ikan dengan angka rekor lebih besar dari 2500. Ini menggunakan fungsi ml\$1fn\$1abalone\$1xgboost\$1multi\$1predict\$1age dibuat dari perintah di atas. 

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## Bawa model Anda sendiri (BYOM) - inferensi lokal
<a name="r_byom_create_model"></a>

Amazon Redshift MLmendukung penggunaan bring your own model (BYOM) untuk inferensi lokal.

Berikut ini merangkum opsi untuk sintaks CREATE MODEL untuk BYOM. Anda dapat menggunakan model yang dilatih di luar Amazon Redshift dengan Amazon SageMaker AI untuk inferensi dalam database secara lokal di Amazon Redshift.

### BUAT SINTAKS MODEL untuk inferensi lokal
<a name="r_local-create-model"></a>

Berikut ini menjelaskan sintaks CREATE MODEL untuk inferensi lokal.

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift saat ini hanya mendukung model Pretrained XGBoost, MLP, dan Linear Learner untuk BYOM. Anda dapat mengimpor SageMaker AI Autopilot dan model yang dilatih langsung di Amazon SageMaker AI untuk inferensi lokal menggunakan jalur ini. 

#### BUAT parameter MODEL untuk inferensi lokal
<a name="r_local-create-model-parameters"></a>

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

DARI (*'job\$1name' \$1 '**s3\$1path')*  
*Job\$1name menggunakan nama* pekerjaan Amazon SageMaker AI sebagai input. Nama pekerjaan dapat berupa nama pekerjaan pelatihan Amazon SageMaker AI atau nama pekerjaan Amazon SageMaker AI Autopilot. Pekerjaan harus dibuat di AWS akun yang sama yang memiliki cluster Amazon Redshift. Untuk menemukan nama pekerjaan, luncurkan Amazon SageMaker AI. Di menu tarik-turun **Pelatihan**, pilih Pekerjaan **Pelatihan**.  
The *'s3\$1path'* menentukan lokasi S3 dari file artefak model.tar.gz yang akan digunakan saat membuat model.

FUNGSI *function\$1name* (*data\$1type* [,...])  
Nama fungsi yang akan dibuat dan tipe data dari argumen input. Anda dapat memberikan nama skema.

RETURNS *data\$1type*  
Tipe data dari nilai yang dikembalikan oleh fungsi.

<account-id><role-name>IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '\$1  
 Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE MODEL berjalan.  
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. 

*PENGATURAN (S3\$1BUCKET *'amzn-s3-demo-bucket', \$1 KMS\$1KEY\$1ID 'kms\$1string*')*  
Klausa S3\$1BUCKET menentukan lokasi Amazon S3 yang digunakan untuk menyimpan hasil antara.  
(Opsional) Klausa KMS\$1KEY\$1ID menentukan apakah Amazon Redshift menggunakan enkripsi sisi server dengan kunci untuk melindungi data saat istirahat. AWS KMS Data dalam perjalanan dilindungi dengan Secure Sockets Layer (SSL).  
Untuk informasi selengkapnya, lihat [BUAT MODEL dengan panduan pengguna](#r_user_guidance_create_model).

#### BUAT MODEL untuk contoh inferensi lokal
<a name="r_local-create-model-example"></a>

Contoh berikut membuat model yang sebelumnya telah dilatih di Amazon SageMaker AI, di luar Amazon Redshift. Karena tipe model didukung oleh Amazon Redshift MLuntuk inferensi lokal, CREATE MODEL berikut membuat fungsi yang dapat digunakan secara lokal di Amazon Redshift. Anda dapat memberikan nama pekerjaan pelatihan SageMaker AI.

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

Setelah model dibuat, Anda dapat menggunakan fungsi *customer\$1churn\$1predict* dengan tipe argumen yang ditentukan untuk membuat prediksi.

## Bawa model Anda sendiri (BYOM) - inferensi jarak jauh
<a name="r_byom_create_model_remote"></a>

Amazon Redshift MLjuga mendukung penggunaan bring your own model (BYOM) untuk inferensi jarak jauh.

Berikut ini merangkum opsi untuk sintaks CREATE MODEL untuk BYOM.

### BUAT SINTAKS MODEL untuk inferensi jarak jauh
<a name="r_remote-create-model"></a>

Berikut ini menjelaskan sintaks CREATE MODEL untuk inferensi jarak jauh.

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### BUAT parameter MODEL untuk inferensi jarak jauh
<a name="r_remote-create-model-parameters"></a>

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

FUNGSI *fn\$1name* ([*data\$1type*] [,...])  
Nama fungsi dan tipe data dari argumen input. Lihat [Tipe data](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) untuk semua tipe data yang didukung. `Geography`,`geometry`, dan `hllsketch` tidak didukung.   
Anda juga dapat memberikan nama fungsi di dalam skema menggunakan notasi dua bagian, seperti. `myschema.myfunction`

RETURNS *data\$1type*  
Tipe data dari nilai yang dikembalikan oleh fungsi. Lihat [Tipe data](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) untuk semua tipe data yang didukung. `Geography`,`geometry`, dan `hllsketch` tidak didukung. 

*SAGEMAKER *'endpoint\$1name' [: 'model\$1name']**   
Nama titik akhir Amazon SageMaker AI. Jika nama titik akhir menunjuk ke titik akhir multimodel, tambahkan nama model yang akan digunakan. Titik akhir harus di-host di AWS Wilayah yang sama dan Akun AWS sebagai cluster Amazon Redshift. Untuk menemukan titik akhir Anda, luncurkan Amazon SageMaker AI. **Di menu tarik-turun **Inferensi**, pilih Endpoints.**

<account-id><role-name>IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '\$1  
 Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREATE MODEL berjalan. Atau, Anda dapat menentukan ARN dari peran IAM untuk menggunakan peran itu.

*MAX\$1BATCH\$1ROWS bilangan bulat*  
Jumlah maksimum baris yang dikirimkan Amazon Redshift dalam satu permintaan batch untuk satu pemanggilan SageMaker AI. Ini hanya didukung untuk BYOM dengan inferensi jarak jauh. Jumlah sebenarnya dari baris dalam batch juga tergantung pada ukuran input, tetapi kurang dari atau sama dengan nilai ini. Nilai minimum parameter ini adalah 1. Nilai maksimumnya adalah`INT_MAX`, atau 2.147.483.647. Parameter ini diperlukan hanya ketika input dan tipe data yang dikembalikan`SUPER`. Nilai defaultnya adalah`INT_MAX`, atau 2.147,483.647. 

Saat model diterapkan ke titik akhir SageMaker AI, SageMaker AI membuat informasi model di Amazon Redshift. Kemudian melakukan inferensi melalui fungsi eksternal. Anda dapat menggunakan perintah SHOW MODEL untuk melihat informasi model di cluster Amazon Redshift Anda.

#### BUAT MODEL untuk catatan penggunaan inferensi jarak jauh
<a name="r_remote-create-model-usage-notes"></a>

Sebelum menggunakan CREATE MODEL untuk inferensi jarak jauh, pertimbangkan hal berikut:
+ Titik akhir harus di-host oleh AWS akun yang sama yang memiliki cluster Amazon Redshift.
+ Pastikan titik akhir Amazon SageMaker AI memiliki sumber daya yang cukup untuk mengakomodasi panggilan inferensi dari Amazon Redshift atau titik akhir SageMaker Amazon AI dapat diskalakan secara otomatis.
+ Jika Anda tidak menggunakan tipe `SUPER` data sebagai input, model hanya menerima input dalam format nilai yang dipisahkan koma (CSV) yang sesuai dengan jenis konten di AI. `text/CSV` SageMaker 
+ Jika Anda tidak menggunakan tipe `SUPER` data sebagai input, output model adalah nilai tunggal dari tipe yang ditentukan saat Anda membuat fungsi. Outputnya dalam format nilai dipisahkan koma (CSV) melalui jenis `text/CSV` konten dalam AI. SageMaker `VARCHAR`tipe data tidak dapat dalam tanda kutip dan tidak dapat berisi baris baru, dan setiap output harus dalam baris baru.
+ Model menerima nol sebagai string kosong.
+ Ketika tipe data masukan`SUPER`, hanya satu argumen input yang didukung. 
+ Ketika tipe data input adalah`SUPER`, tipe data yang dikembalikan juga harus`SUPER`. 
+ MAX\$1BATCH\$1ROWS diperlukan ketika tipe data input dan yang dikembalikan adalah SUPER. 
+ Ketika tipe data input adalah tipe konten dari `SUPER` pemanggilan titik akhir adalah `application/json` ketika MAX\$1BATCH\$1ROWS adalah atau dalam semua kasus lainnya. `1` `application/jsonlines` 
+ Ketika tipe data yang dikembalikan adalah tipe terima dari `SUPER` pemanggilan titik akhir adalah `application/json` ketika MAX\$1BATCH\$1ROWS adalah atau dalam semua kasus lainnya. `1` `application/jsonlines` 

##### BUAT MODEL untuk contoh inferensi jarak jauh
<a name="r_remote-create-model-example"></a>

Contoh berikut membuat model yang menggunakan titik akhir SageMaker AI untuk membuat prediksi. Pastikan bahwa endpoint berjalan untuk membuat prediksi dan menentukan namanya dalam perintah CREATE MODEL.

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 Contoh berikut membuat BYOM dengan inferensi jarak jauh dengan model model bahasa besar (LLM). LLMs di-host di Amazon SageMaker AI Jumpstart menerima dan mengembalikan jenis `application/json` konten dan mereka mendukung satu JSON per pemanggilan. Masukan dan tipe data yang dikembalikan harus `SUPER` dan MAX\$1BATCH\$1ROWS harus disetel ke 1. 

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## BUAT MODEL dengan K-MEANS
<a name="r_k-means_create_model"></a>

Amazon Redshift mendukung algoritma K-Means yang mengelompokkan data yang tidak diberi label. Algoritma ini memecahkan masalah pengelompokan di mana Anda ingin menemukan pengelompokan dalam data. Data yang tidak diklasifikasikan dikelompokkan dan dipartisi berdasarkan persamaan dan perbedaannya. 

### BUAT MODEL dengan sintaks K-MEANS
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### BUAT MODEL dengan parameter K-MEANS
<a name="r_k-means-create-model-parameters"></a>

 *MATI OTOMATIS*   
Menonaktifkan CREATE MODEL penemuan otomatis preprocessor, algoritma, dan pemilihan hyper-parameter.

MODEL\$1TYPE KMEANS  
Menentukan untuk menggunakan KMEANS untuk melatih model. 

PREPROCESSORS 'string'  
Menentukan kombinasi tertentu dari preprocessors untuk set tertentu kolom. Formatnya adalah daftar ColumnSets, dan transformasi yang sesuai untuk diterapkan ke setiap set kolom. Amazon Redshift mendukung 3 preprosesor K-Means, yaitu StandardScaler,, dan. MinMax NumericPassthrough Jika Anda tidak ingin menerapkan pra-pemrosesan apa pun untuk K-Means, pilih NumericPassthrough secara eksplisit sebagai transformator. Untuk informasi selengkapnya tentang trafo yang didukung, lihat. [BUAT MODEL dengan parameter panduan pengguna](#r_user_guidance-create-model-parameters)  
Algoritma K-Means menggunakan jarak Euclidean untuk menghitung kesamaan. Preprocessing data memastikan bahwa fitur model tetap pada skala yang sama dan menghasilkan hasil yang andal.

HYPERPARAMETER DEFAULT KECUALI (K 'val' [,...])  
Menentukan apakah parameter K-Means digunakan. Anda harus menentukan `K` parameter saat menggunakan algoritma K-Means. Untuk informasi selengkapnya, lihat [K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html) di Panduan Pengembang *Amazon SageMaker AI*

Contoh berikut menyiapkan data untuk K-Means.

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## BUAT MODEL dengan Forecast
<a name="r_forecast_model"></a>

Model Forecast di Redshift ML menggunakan Amazon Forecast untuk membuat perkiraan deret waktu yang akurat. Melakukannya memungkinkan Anda menggunakan data historis selama periode waktu tertentu untuk membuat prediksi tentang peristiwa masa depan. Kasus penggunaan umum Amazon Forecast termasuk menggunakan data produk ritel untuk memutuskan cara menentukan harga inventaris, membuat data kuantitas untuk memprediksi berapa banyak satu item yang akan dipesan, dan data lalu lintas web untuk memperkirakan berapa banyak lalu lintas yang mungkin diterima server web. 

 [Batas kuota dari Amazon Forecast diberlakukan dalam model perkiraan](https://docs.aws.amazon.com/forecast/latest/dg/limits.html) Amazon Redshift. Misalnya, jumlah perkiraan maksimum adalah 100, tetapi dapat disesuaikan. Menjatuhkan model perkiraan tidak secara otomatis menghapus sumber daya terkait di Amazon Forecast. Jika Anda menghapus kluster Redshift, semua model terkait juga akan dihapus. 

Perhatikan bahwa model Forecast saat ini hanya tersedia di Wilayah berikut:
+ AS Timur (Ohio) (us-east-2)
+ US East (N. Virginia) (us-east-1)
+ US West (Oregon) (us-west-2)
+ Asia Pacific (Mumbai) (ap-south-1)
+ Asia Pacific (Seoul) (ap-northeast-2)
+ Asia Pasifik (Singapura) (ap-southeast-1)
+ Asia Pacific (Sydney) (ap-southeast-2)
+ Asia Pacific (Tokyo) (ap-northeast-1)
+ Eropa (Frankfurt) (eu-central-1)
+ Eropa (Irlandia) (eu-west-1)

### BUAT MODEL dengan sintaks Forecast
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### BUAT MODEL dengan parameter Forecast
<a name="r_forecast_model-parameters"></a>

 *forecast\$1model\$1name*   
Nama modul. Nama model harus unik.

DARI \$1table\$1name \$1 (select\$1query)\$1  
Table\$1name atau query yang menentukan data pelatihan. Ini bisa berupa tabel yang ada di sistem, atau kueri SELECT yang kompatibel dengan Amazon Redshift yang dilampirkan dengan tanda kurung. Hasil tabel atau kueri harus memiliki setidaknya tiga kolom: (1) kolom varchar yang menentukan nama deret waktu. Setiap kumpulan data dapat memiliki beberapa deret waktu; (2) kolom datetime; dan (3) kolom target untuk diprediksi. Kolom target ini harus berupa int atau float. Jika Anda menyediakan kumpulan data yang memiliki lebih dari tiga kolom, Amazon Redshift mengasumsikan bahwa semua kolom tambahan adalah bagian dari deret waktu terkait. Perhatikan bahwa deret waktu terkait harus bertipe int atau float. Untuk informasi selengkapnya tentang deret waktu terkait, lihat [Menggunakan Kumpulan Data Deret Waktu Terkait](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html).

TARGET kolom\$1name  
Nama kolom yang menjadi target prediksi. Kolom harus ada dalam klausa FROM.

<account-id><role-name>IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '\$1  
Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah CREAT MODEL berjalan. Atau, Anda dapat menentukan ARN dari peran IAM untuk menggunakan peran itu. 

OTOMATIS PADA  
Menghidupkan CREATE MODEL penemuan otomatis algoritma dan pemilihan hyper-parameter. Menentukan saat membuat model Forecast menunjukkan untuk menggunakan Forecast AutoPredictor, di mana Amazon Forecast menerapkan kombinasi algoritma yang optimal untuk setiap deret waktu dalam kumpulan data Anda.

MODEL\$1TYPE PERKIRAAN  
Menentukan untuk menggunakan FORECAST untuk melatih model.

S3\$1BUCKET 'amzn-s3-demo-ember'  
Nama bucket Amazon Simple Storage Service yang sebelumnya Anda buat dan digunakan untuk berbagi data pelatihan dan artefak antara Amazon Redshift dan Amazon Forecast. Amazon Redshift membuat subfolder di bucket ini sebelum membongkar data pelatihan. Saat pelatihan selesai, Amazon Redshift menghapus subfolder yang dibuat dan isinya.

Bilangan bulat HORIZON  
Jumlah prediksi maksimum yang dapat dikembalikan oleh model perkiraan. Setelah model dilatih, Anda tidak dapat mengubah bilangan bulat ini.

FREKUENSI forecast\$1frequency  
Menentukan seberapa granular Anda ingin prakiraan menjadi. Pilihan yang tersedia adalah`Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Diperlukan jika Anda melatih model perkiraan.

String PERSENTIL  
String yang dibatasi koma yang menentukan jenis perkiraan yang digunakan untuk melatih prediktor. Jenis Forecast dapat berupa kuantil dari 0,01 hingga 0,99, dengan kenaikan 0,01 atau lebih tinggi. Anda juga dapat menentukan perkiraan rata-rata dengan mean. Anda dapat menentukan maksimal lima jenis perkiraan.

Contoh berikut menunjukkan cara membuat model perkiraan sederhana.

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

Setelah Anda membuat model perkiraan, Anda dapat membuat tabel baru dengan data prediksi.

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

Anda kemudian dapat menanyakan tabel baru untuk mendapatkan prediksi.

```
SELECT * FROM forecast_model_results
```

# BUAT PROSEDUR
<a name="r_CREATE_PROCEDURE"></a>

Membuat prosedur tersimpan baru atau menggantikan prosedur yang ada untuk database saat ini.

Untuk informasi selengkapnya dan contoh tambahan, lihat [Membuat prosedur tersimpan di Amazon Redshift](stored-procedure-overview.md).

## Hak istimewa yang diperlukan
<a name="r_CREATE_PROCEDURE-privileges"></a>

Anda harus memiliki izin dengan salah satu cara berikut untuk menjalankan CREATE OR REPLACE PROCEDURE:
+ Untuk CREATE PROCEDURE:
  + Superuser
  + Pengguna dengan hak istimewa CREATE dan USE pada skema tempat prosedur tersimpan dibuat
+ Untuk PROSEDUR PENGGANTIAN:
  + Superuser
  + Pemilik prosedur

## Sintaksis
<a name="r_CREATE_PROCEDURE-synopsis"></a>

```
CREATE [ OR REPLACE ] PROCEDURE sp_procedure_name  
  ( [ [ argname ] [ argmode ] argtype [, ...] ] )
[ NONATOMIC ]
AS $$
  procedure_body
$$ LANGUAGE plpgsql
[ { SECURITY INVOKER | SECURITY DEFINER } ]
[ SET configuration_parameter { TO value | = value } ]
```

## Parameter
<a name="r_CREATE_PROCEDURE-parameters"></a>

 ATAU GANTI   
Klausa yang menentukan bahwa jika prosedur dengan nama yang sama dan tipe data argumen masukan, atau tanda tangan, seperti yang sudah ada, prosedur yang ada diganti. Anda hanya dapat mengganti prosedur dengan prosedur baru yang mendefinisikan kumpulan tipe data yang identik.   
Jika Anda menentukan prosedur dengan nama yang sama dengan prosedur yang ada, tetapi tanda tangan yang berbeda, Anda membuat prosedur baru. Dengan kata lain, nama prosedur kelebihan beban. Untuk informasi selengkapnya, lihat [Nama prosedur overloading](stored-procedure-naming.md#stored-procedure-overloading-name). 

 *sp\$1prosedur\$1name*   
Nama prosedurnya. Jika Anda menentukan nama skema (seperti**myschema.myprocedure**), prosedur dibuat dalam skema yang ditentukan. Jika tidak, prosedur dibuat dalam skema saat ini. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).   
Kami menyarankan Anda mengawali semua nama prosedur yang disimpan dengan`sp_`. Amazon Redshift mencadangkan `sp_` awalan untuk nama prosedur yang disimpan. Dengan menggunakan `sp_` awalan, Anda memastikan bahwa nama prosedur tersimpan tidak bertentangan dengan nama prosedur atau fungsi tersimpan bawaan Amazon Redshift yang ada atau yang akan datang. Untuk informasi selengkapnya, lihat [Penamaan prosedur tersimpan](stored-procedure-naming.md).  
Anda dapat menentukan lebih dari satu prosedur dengan nama yang sama jika tipe data untuk argumen input, atau tanda tangan, berbeda. Dengan kata lain, dalam hal ini nama prosedur kelebihan beban. Untuk informasi selengkapnya, lihat [Nama prosedur overloading](stored-procedure-naming.md#stored-procedure-overloading-name)

*[argname] [argmode] argtype*   
Daftar nama argumen, mode argumen, dan tipe data. Hanya tipe data yang diperlukan. Nama dan mode bersifat opsional dan posisinya dapat dialihkan.  
Mode argumen bisa IN, OUT, atau INOUT. Defaultnya adalah IN.  
Anda dapat menggunakan argumen OUT dan INOUT untuk mengembalikan satu atau lebih nilai dari panggilan prosedur. Ketika ada argumen OUT atau INOUT, panggilan prosedur mengembalikan satu baris hasil yang berisi *n* kolom, di mana *n* adalah jumlah total argumen OUT atau INOUT.  
Argumen INOUT adalah argumen input dan output pada saat yang bersamaan. *Argumen masukan mencakup argumen* IN dan INOUT, dan *argumen keluaran mencakup argumen* OUT dan INOUT.  
Argumen OUT tidak ditentukan sebagai bagian dari pernyataan CALL. Tentukan argumen INOUT dalam pernyataan CALL prosedur yang disimpan. Argumen INOUT dapat berguna saat meneruskan dan mengembalikan nilai dari panggilan bersarang, dan juga saat mengembalikan a. `refcursor` Untuk informasi lebih lanjut tentang `refcursor` jenis, lihat[Cursors](c_PLpgSQL-statements.md#r_PLpgSQL-cursors).  
Tipe data argumen dapat berupa tipe data Amazon Redshift standar apa pun. Selain itu, tipe data argumen dapat`refcursor`.  
Anda dapat menentukan maksimum 32 argumen masukan dan 32 argumen keluaran. 

AS \$1\$1 *processre\$1body \$1\$1*   
Sebuah konstruksi yang mencakup prosedur yang akan dijalankan. Kata kunci literal AS \$1\$1 dan \$1\$1 diperlukan.  
Amazon Redshift mengharuskan Anda untuk melampirkan pernyataan dalam prosedur Anda dengan menggunakan format yang disebut kutipan dolar. Apa pun di dalam kandang dilewatkan persis seperti apa adanya. Anda tidak perlu melarikan diri dari karakter khusus apa pun karena isi string ditulis secara harfiah.  
Dengan *kutipan dolar,* Anda menggunakan sepasang tanda dolar (\$1\$1) untuk menandakan awal dan akhir pernyataan yang akan dijalankan, seperti yang ditunjukkan pada contoh berikut.  

```
$$ my statement $$
```
Secara opsional, di antara tanda-tanda dolar di setiap pasangan, Anda dapat menentukan string untuk membantu mengidentifikasi pernyataan tersebut. String yang Anda gunakan harus sama di awal dan akhir pasangan enklosur. String ini peka huruf besar/kecil, dan mengikuti batasan yang sama dengan pengenal yang tidak dikutip kecuali bahwa string ini tidak dapat berisi tanda dolar. Contoh berikut menggunakan tes string.  

```
$test$ my statement $test$
```
Sintaks ini juga berguna untuk kutipan dolar bersarang. [Untuk informasi lebih lanjut tentang kutipan dolar, lihat “Konstanta String yang dikutip Dolar” di bawah Struktur Leksikal dalam dokumentasi PostgreSQL.](https://www.postgresql.org/docs/9.0/sql-syntax-lexical.html)

 *prosedur\$1body*   
Satu set PL/pgSQL pernyataan yang valid. PL/pgSQL pernyataan menambah perintah SQL dengan konstruksi prosedural, termasuk perulangan dan ekspresi kondisional, untuk mengontrol aliran logis. Sebagian besar perintah SQL dapat digunakan dalam badan prosedur, termasuk bahasa modifikasi data (DHTML) seperti COPY, UNLOAD dan INSERT, dan bahasa definisi data (DDL) seperti CREATE TABLE. Untuk informasi selengkapnya, lihat [Referensi bahasa PL/PGSQL](c_pl_pgSQL_reference.md). 

BAHASA *plpgsql*  
Nilai bahasa. Tentukan `plpgsql`. Anda harus memiliki izin untuk penggunaan bahasa untuk digunakan`plpgsql`. Untuk informasi selengkapnya, lihat [HIBAH](r_GRANT.md). 

NONATOMIK  
Menciptakan prosedur tersimpan dalam modus transaksi nonatomik. Mode NONATOMIC secara otomatis melakukan pernyataan di dalam prosedur. Selain itu, ketika kesalahan terjadi di dalam prosedur NONATOMIC, kesalahan tidak dilemparkan kembali jika ditangani oleh blok pengecualian. Untuk informasi selengkapnya, lihat [Mengelola transaksi](stored-procedure-transaction-management.md) dan [MENAIKKAN](c_PLpgSQL-statements.md#r_PLpgSQL-messages-errors).  
Saat Anda mendefinisikan prosedur tersimpan sebagai`NONATOMIC`, pertimbangkan hal berikut:  
+ Saat Anda melakukan panggilan prosedur tersimpan, semua prosedur harus dibuat dalam mode transaksi yang sama.
+ `SECURITY DEFINER`Opsi dan `SET configuration_parameter` opsi tidak didukung saat membuat prosedur dalam mode NONATOMIC.
+ Setiap kursor yang dibuka (secara eksplisit atau implisit) ditutup secara otomatis ketika komit implisit diproses. Oleh karena itu, Anda harus membuka transaksi eksplisit sebelum memulai kursor loop untuk memastikan bahwa SQL apa pun dalam iterasi loop tidak secara implisit berkomitmen.

SECURITY INVOKER \$1 SECURITY DEFINER  
`SECURITY DEFINER`Opsi ini tidak didukung ketika `NONATOMIC` ditentukan.  
Mode keamanan untuk prosedur menentukan hak akses prosedur saat runtime. Prosedur harus memiliki izin untuk mengakses objek database yang mendasarinya.   
Untuk mode SECURITY INVOKER, prosedur menggunakan hak istimewa pengguna yang memanggil prosedur. Pengguna harus memiliki izin eksplisit pada objek database yang mendasarinya. Defaultnya adalah SECURITY INVOKER.  
Untuk mode SECURITY DEFINER, prosedur menggunakan hak istimewa pemilik prosedur. Pemilik prosedur didefinisikan sebagai pengguna yang memiliki prosedur pada waktu berjalan, belum tentu pengguna yang awalnya mendefinisikan prosedur. Pengguna yang memanggil prosedur memerlukan hak istimewa eksekusi pada prosedur, tetapi tidak memerlukan hak istimewa apa pun pada objek yang mendasarinya. 

SET configuration\$1parameter \$1TO nilai \$1 = nilai\$1  
Opsi ini tidak didukung saat `NONATOMIC` ditentukan.  
Klausa SET menyebabkan yang ditentukan diatur `configuration_parameter` ke nilai yang ditentukan saat prosedur dimasukkan. Klausul ini kemudian mengembalikan `configuration_parameter` ke nilai sebelumnya ketika prosedur keluar. 

## Catatan penggunaan
<a name="r_CREATE_PROCEDURE-usage"></a>

Jika prosedur tersimpan dibuat menggunakan opsi SECURITY DEFINER, saat menjalankan fungsi CURRENT\$1USER dari dalam prosedur tersimpan, Amazon Redshift mengembalikan nama pengguna pemilik prosedur yang disimpan.

## Contoh
<a name="r_CREATE_PROCEDURE-examples"></a>

**catatan**  
Jika saat menjalankan contoh ini Anda menemukan kesalahan yang mirip dengan:  

```
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
```
Lihat [Ikhtisar prosedur tersimpan di Amazon Redshift](stored-procedure-create.md). 

Contoh berikut membuat prosedur dengan dua parameter input.

```
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar(20))
AS $$
DECLARE
  min_val int;
BEGIN
  DROP TABLE IF EXISTS tmp_tbl;
  CREATE TEMP TABLE tmp_tbl(id int);
  INSERT INTO tmp_tbl values (f1),(10001),(10002);
  SELECT min_val MIN(id) FROM tmp_tbl;
  RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql;
```

**catatan**  
 Saat Anda menulis prosedur tersimpan, kami merekomendasikan praktik terbaik untuk mengamankan nilai sensitif:   
 Jangan membuat kode keras informasi sensitif apa pun dalam logika prosedur yang disimpan. Misalnya, jangan tetapkan kata sandi pengguna dalam pernyataan CREATE USER di badan prosedur yang disimpan. Ini menimbulkan risiko keamanan, karena nilai hard-code dapat dicatat sebagai metadata skema dalam tabel katalog. Sebagai gantinya, berikan nilai sensitif, seperti kata sandi, sebagai argumen ke prosedur yang disimpan, melalui parameter.   
Untuk informasi selengkapnya tentang prosedur tersimpan, lihat [MEMBUAT PROSEDUR](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html) dan [Membuat prosedur tersimpan di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html). Untuk informasi selengkapnya tentang tabel katalog, lihat [Tabel katalog sistem](https://docs.aws.amazon.com/redshift/latest/dg/c_intro_catalog_views.html).

Contoh berikut membuat prosedur dengan satu parameter IN, satu parameter OUT, dan satu parameter INOUT.

```
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
  loop_var int;
BEGIN
  IF f1 is null OR f2 is null THEN
    RAISE EXCEPTION 'input cannot be null';
  END IF;
  DROP TABLE if exists my_etl;
  CREATE TEMP TABLE my_etl(a int, b varchar);
    FOR loop_var IN 1..f1 LOOP
        insert into my_etl values (loop_var, f2);
        f2 := f2 || '+' || f2;
    END LOOP;
  SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
```

Contoh berikut membuat prosedur yang menggunakan `SECURITY DEFINER` parameter. Prosedur ini berjalan menggunakan hak istimewa pengguna yang memiliki prosedur.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_definer()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
```

Contoh berikut membuat prosedur yang menggunakan `SECURITY INVOKER` parameter. Prosedur ini berjalan menggunakan hak istimewa pengguna yang menjalankan prosedur.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_invoker()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
```

# BUAT KEBIJAKAN RLS
<a name="r_CREATE_RLS_POLICY"></a>

Membuat kebijakan keamanan tingkat baris baru untuk menyediakan akses terperinci ke objek database.

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat membuat kebijakan.

## Sintaksis
<a name="r_CREATE_RLS_POLICY-synopsis"></a>

```
CREATE RLS POLICY { policy_name | database_name.policy_name }
[ WITH (column_name data_type [, ...]) [ [AS] relation_alias ] ]
USING ( using_predicate_exp )
```

## Parameter
<a name="r_CREATE_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan .

database\$1name  
Nama database tempat kebijakan akan dibuat. Kebijakan dapat dibuat pada database yang terhubung atau pada database yang mendukung izin gabungan Amazon Redshift.

DENGAN (*column\$1name data\$1type* [,...] )   
Menentukan *column\$1name dan *data\$1type** direferensikan ke kolom tabel yang kebijakan dilampirkan.   
Anda dapat menghilangkan klausa WITH hanya jika kebijakan RLS tidak mereferensikan kolom tabel yang dilampirkan kebijakan tersebut.

AS *hubungan\$1alias*  
Menentukan alias opsional untuk tabel yang kebijakan RLS akan dilampirkan.

MENGGUNAKAN (*menggunakan\$1predicate\$1exp*)  
Menentukan filter yang diterapkan ke klausa WHERE dari query. Amazon Redshift menerapkan predikat kebijakan sebelum predikat pengguna tingkat kueri. Misalnya, **current\$1user = ‘joe’ and price > 10** membatasi Joe untuk hanya melihat catatan dengan harga lebih dari \$110.

Untuk penggunaan KEBIJAKAN BUAT RLS di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Catatan penggunaan
<a name="r_CREATE_RLS_POLICY-usage"></a>

Saat bekerja dengan pernyataan CREATE RLS POLICY, amati hal berikut:
+ Amazon Redshift mendukung filter yang dapat menjadi bagian dari klausa WHERE dari kueri.
+ Semua kebijakan yang dilampirkan ke tabel harus dibuat dengan alias tabel yang sama.
+ Anda harus menggunakan pernyataan GRANT dan REVOKE untuk secara eksplisit memberikan dan mencabut izin SELECT ke kebijakan RLS yang mereferensikan tabel pencarian. Tabel pencarian adalah objek tabel yang digunakan di dalam definisi kebijakan. Untuk informasi selengkapnya, lihat [HIBAH](r_GRANT.md) dan [MENCABUT](r_REVOKE.md). 
+ Keamanan tingkat baris Amazon Redshift tidak mendukung jenis objek berikut di dalam definisi kebijakan: tabel katalog, relasi lintas basis data, tabel eksternal, tampilan reguler, tampilan pengikatan akhir, tabel dengan kebijakan RLS diaktifkan, dan tabel sementara.

## Contoh
<a name="r_CREATE_RLS_POLICY-examples"></a>

Contoh berikut membuat kebijakan RLS yang disebut policy\$1concerts. Kebijakan ini berlaku untuk kolom VARCHAR (10) yang disebut catgroup dan menyetel filter USING agar hanya menampilkan baris yang memiliki nilai catgroup. `'Concerts'`

```
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'Concerts');
```

Untuk end-to-end contoh penggunaan kebijakan RLS, lihat[Contoh keamanan tingkat baris end-to-end](t_rls-example.md).

# CREATE ROLE
<a name="r_CREATE_ROLE"></a>

Membuat peran kustom baru yang merupakan kumpulan izin. Untuk daftar peran yang ditentukan sistem Amazon Redshift, lihat. [Peran yang ditentukan sistem Amazon Redshift](r_roles-default.md) Kueri [SVV\$1ROLE](r_SVV_ROLES.md) untuk melihat peran yang saat ini dibuat di klaster atau grup kerja Anda.

Ada kuota jumlah peran yang dapat dibuat. Untuk informasi selengkapnya, lihat [Kuota dan batasan di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dalam *Panduan Manajemen Amazon Redshift*.

## Izin yang diperlukan
<a name="r_CREATE_ROLE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE ROLE.
+ Superuser
+ Pengguna dengan hak istimewa CREATE ROLE

## Sintaksis
<a name="r_CREATE_ROLE-synopsis"></a>

```
CREATE ROLE role_name
[ EXTERNALID external_id ]
```

## Parameter
<a name="r_CREATE_ROLE-parameters"></a>

*role\$1name*  
Nama peran. Nama peran harus unik dan tidak bisa sama dengan nama pengguna mana pun. Nama peran tidak bisa menjadi kata yang dicadangkan.  
Pengguna super atau pengguna biasa dengan hak istimewa CREATE ROLE dapat membuat peran. Pengguna yang bukan pengguna super tetapi telah diberikan PENGGUNAAN untuk peran DENGAN OPSI GRANT dan hak istimewa ALTER dapat memberikan peran ini kepada siapa pun.

*EXTERNALID external\$1id*  
Pengidentifikasi untuk peran, yang terkait dengan penyedia identitas. Untuk informasi selengkapnya, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Contoh
<a name="r_CREATE_ROLE-examples"></a>

Contoh berikut menciptakan peran`sample_role1`.

```
CREATE ROLE sample_role1;
```

Contoh berikut membuat peran`sample_role1`, dengan ID eksternal yang terkait dengan penyedia identitas.

```
CREATE ROLE sample_role1 EXTERNALID "ABC123";
```

# BUAT SKEMA
<a name="r_CREATE_SCHEMA"></a>

Mendefinisikan skema baru untuk database saat ini.

## Hak istimewa yang diperlukan
<a name="r_CREATE_SCHEMA-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE SCHEMA:
+ Superuser
+ Pengguna dengan hak istimewa CREATE SCHEMA

## Sintaksis
<a name="r_CREATE_SCHEMA-synopsis"></a>

```
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ]
           [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ]

CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
```

## Parameter
<a name="r_CREATE_SCHEMA-parameters"></a>

 JIKA TIDAK ADA   
Klausa yang menunjukkan bahwa jika skema yang ditentukan sudah ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa skema itu ada, daripada berakhir dengan kesalahan.  
Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika CREATE SCHEMA mencoba membuat skema yang sudah ada.

 *schema\$1name*   
Nama skema baru. Nama skema tidak bisa. `PUBLIC` Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  
Daftar skema dalam parameter [search\$1path](r_search_path.md) konfigurasi menentukan prioritas objek bernama identik ketika mereka direferensikan tanpa nama skema.

OTORISASI   
Klausul yang memberikan kepemilikan kepada pengguna tertentu.

 *username*   
Nama pemilik skema.

 *schema\$1element*   
Definisi untuk satu atau lebih objek yang akan dibuat dalam skema.

KUOTA  
Jumlah maksimum ruang disk yang dapat digunakan skema yang ditentukan. Ruang ini adalah penggunaan disk kolektif. Ini mencakup semua tabel permanen, tampilan terwujud di bawah skema yang ditentukan, dan salinan duplikat dari semua tabel dengan distribusi SEMUA pada setiap node komputasi. Kuota skema tidak memperhitungkan tabel sementara yang dibuat sebagai bagian dari namespace atau skema sementara.   
Untuk melihat kuota skema yang dikonfigurasi, lihat. [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md)  
Untuk melihat catatan di mana kuota skema terlampaui, lihat. [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md)  
Amazon Redshift mengonversi nilai yang dipilih menjadi megabyte. Gigabytes adalah unit pengukuran default ketika Anda tidak menentukan nilai.  
Anda harus menjadi superuser database untuk mengatur dan mengubah kuota skema. Pengguna yang bukan pengguna super tetapi memiliki izin CREATE SCHEMA dapat membuat skema dengan kuota yang ditentukan. Ketika Anda membuat skema tanpa menentukan kuota, skema memiliki kuota tak terbatas. Saat Anda menetapkan kuota di bawah nilai saat ini yang digunakan oleh skema, Amazon Redshift tidak mengizinkan konsumsi lebih lanjut hingga Anda mengosongkan ruang disk. Pernyataan DELETE menghapus data dari tabel dan ruang disk dibebaskan hanya ketika VACUUM berjalan.   
Amazon Redshift memeriksa setiap transaksi untuk pelanggaran kuota sebelum melakukan transaksi. Amazon Redshift memeriksa ukuran (ruang disk yang digunakan oleh semua tabel dalam skema) dari setiap skema yang dimodifikasi terhadap kuota yang ditetapkan. Karena pemeriksaan pelanggaran kuota terjadi pada akhir transaksi, batas ukuran dapat melebihi kuota sementara dalam transaksi sebelum dilakukan. Ketika transaksi melebihi kuota, Amazon Redshift menghentikan transaksi, melarang konsumsi berikutnya, dan mengembalikan semua perubahan hingga Anda mengosongkan ruang disk. Karena VACUUM latar belakang dan pembersihan internal, ada kemungkinan bahwa skema tidak penuh pada saat Anda memeriksa skema setelah transaksi dibatalkan.   
Sebagai pengecualian, Amazon Redshift mengabaikan pelanggaran kuota dan melakukan transaksi dalam kasus-kasus tertentu. Amazon Redshift melakukan ini untuk transaksi yang hanya terdiri dari satu atau beberapa pernyataan berikut di mana tidak ada pernyataan konsumsi INSERT atau COPY dalam transaksi yang sama:  
+ DELETE
+ MEMOTONG
+ VAKUM
+ MEJA DROP
+ ALTER TABLE APPEND hanya saat memindahkan data dari skema lengkap ke skema non-penuh lainnya

 *TAK TERBATAS*   
Amazon Redshift tidak membatasi pertumbuhan ukuran total skema.

## Batas
<a name="r_CREATE_SCHEMA-limit"></a>

Amazon Redshift memberlakukan batasan berikut untuk skema.
+ Ada maksimum 9900 skema per database.

## Contoh
<a name="r_CREATE_SCHEMA-examples"></a>

Contoh berikut membuat skema bernama US\$1SALES dan memberikan kepemilikan kepada pengguna DWUSER.

```
create schema us_sales authorization dwuser;
```

Contoh berikut membuat skema bernama US\$1SALES, memberikan kepemilikan kepada pengguna DWUSER, dan menetapkan kuota ke 50 GB.

```
create schema us_sales authorization dwuser QUOTA 50 GB;
```

Untuk melihat skema baru, kueri tabel katalog PG\$1NAMESPACE seperti yang ditunjukkan berikut.

```
select nspname as schema, usename as owner
from pg_namespace, pg_user
where pg_namespace.nspowner = pg_user.usesysid
and pg_user.usename ='dwuser';

   schema |  owner
----------+----------
 us_sales | dwuser
(1 row)
```

Contoh berikut membuat skema US\$1SALES, atau tidak melakukan apa-apa dan mengembalikan pesan jika sudah ada.

```
create schema if not exists us_sales;
```

# CREATE TABLE
<a name="r_CREATE_TABLE_NEW"></a>

Membuat tabel baru dalam database saat ini. Anda menentukan daftar kolom, yang masing-masing menyimpan data dari jenis yang berbeda. Pemilik tabel adalah penerbit perintah CREATE TABLE.

## Hak istimewa yang diperlukan
<a name="r_CREATE_TABLE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE TABLE:
+ Superuser
+ Pengguna dengan hak istimewa CREATE TABLE

## Sintaksis
<a name="r_CREATE_TABLE_NEW-synopsis"></a>

```
CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE
[ IF NOT EXISTS ] table_name
( { column_name data_type [column_attributes] [ column_constraints ]
  | table_constraints
  | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] }
  [, ... ]  )
[ BACKUP { YES | NO } ]
[table_attributes]

where column_attributes are:
  [ DEFAULT default_expr ]
  [ IDENTITY ( seed, step ) ]
  [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ]
  [ ENCODE encoding ]
  [ DISTKEY ]
  [ SORTKEY ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]

and column_constraints are:
  [ { NOT NULL | NULL } ]
  [ { UNIQUE  |  PRIMARY KEY } ]
  [ REFERENCES reftable [ ( refcolumn ) ] ]

and table_constraints  are:
  [ UNIQUE ( column_name [, ... ] ) ]
  [ PRIMARY KEY ( column_name [, ... ] )  ]
  [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]


and table_attributes are:
  [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ]
  [ DISTKEY ( column_name ) ]
  [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) |  [ SORTKEY AUTO ] ]
  [ ENCODE AUTO ]
```

## Parameter
<a name="r_CREATE_TABLE_NEW-parameters"></a>

LOKAL   
Tidak wajib. Meskipun kata kunci ini diterima dalam pernyataan, kata kunci ini tidak berpengaruh di Amazon Redshift.

SEMENTARA \$1 TEMP   
Kata kunci yang membuat tabel sementara yang hanya terlihat dalam sesi saat ini. Tabel secara otomatis dijatuhkan pada akhir sesi di mana ia dibuat. Tabel sementara dapat memiliki nama yang sama dengan tabel permanen. Tabel sementara dibuat dalam skema khusus sesi yang terpisah. (Anda tidak dapat menentukan nama untuk skema ini.) Skema sementara ini menjadi skema pertama di jalur pencarian, sehingga tabel sementara lebih diutamakan daripada tabel permanen kecuali Anda memenuhi syarat nama tabel dengan nama skema untuk mengakses tabel permanen. Untuk informasi lebih lanjut tentang skema dan prioritas, lihat. [search\$1path](r_search_path.md)  
Secara default, pengguna database memiliki izin untuk membuat tabel sementara dengan keanggotaan otomatis mereka di grup PUBLIC. Untuk menolak hak istimewa ini kepada pengguna, cabut hak istimewa TEMP dari grup PUBLIC, dan kemudian secara eksplisit memberikan hak istimewa TEMP hanya kepada pengguna atau grup pengguna tertentu.

JIKA TIDAK ADA  
Klausa yang menunjukkan bahwa jika tabel yang ditentukan sudah ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa tabel itu ada, daripada berhenti dengan kesalahan. Perhatikan bahwa tabel yang ada mungkin tidak seperti yang akan dibuat; hanya nama tabel yang dibandingkan.  
Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika CREATE TABLE mencoba membuat tabel yang sudah ada.

 *table\$1name*   
Nama tabel yang akan dibuat.  
Jika Anda menentukan nama tabel yang dimulai dengan '\$1 ', tabel dibuat sebagai tabel sementara. Berikut ini adalah contohnya:  

```
create table #newtable (id int);
```
Anda juga mereferensikan tabel dengan '\$1 '. Contoh:   

```
select * from #newtable;
```
Panjang maksimum untuk nama tabel adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Anda dapat menggunakan karakter multibyte UTF-8 hingga maksimal empat byte. Amazon Redshift memberlakukan kuota jumlah tabel per cluster menurut jenis node, termasuk tabel sementara yang ditentukan pengguna dan tabel sementara yang dibuat oleh Amazon Redshift selama pemrosesan kueri atau pemeliharaan sistem. Secara opsional, nama tabel dapat dikualifikasikan dengan database dan nama skema. Dalam contoh berikut, nama database adalah`tickit`, nama skema`public`, dan nama tabel adalah`test`.   

```
create table tickit.public.test (c1 int);
```
Jika database atau skema tidak ada, tabel tidak dibuat, dan pernyataan mengembalikan kesalahan. Anda tidak dapat membuat tabel atau tampilan dalam database sistem`template0`,, `template1``padb_harvest`, atau`sys:internal`.  
Jika nama skema diberikan, tabel baru dibuat dalam skema itu (dengan asumsi pencipta memiliki akses ke skema). Nama tabel harus menjadi nama unik untuk skema itu. Jika tidak ada skema yang ditentukan, tabel dibuat dengan menggunakan skema database saat ini. Jika Anda membuat tabel sementara, Anda tidak dapat menentukan nama skema, karena tabel sementara ada dalam skema khusus.  
Beberapa tabel sementara dengan nama yang sama dapat ada pada saat yang sama dalam database yang sama jika mereka dibuat dalam sesi terpisah karena tabel ditetapkan ke skema yang berbeda. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

 *column\$1name*   
Nama kolom yang akan dibuat di tabel baru. Panjang maksimum untuk nama kolom adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Anda dapat menggunakan karakter multibyte UTF-8 hingga maksimal empat byte. Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  
Jika Anda membuat “tabel lebar”, berhati-hatilah agar daftar kolom Anda tidak melebihi batas lebar baris untuk hasil perantara selama pemuatan dan pemrosesan kueri. Untuk informasi selengkapnya, lihat [Catatan penggunaan](#r_CREATE_TABLE_usage).

 *data\$1type*   
Tipe data kolom yang sedang dibuat. Untuk kolom CHAR dan VARCHAR, Anda dapat menggunakan kata kunci MAX alih-alih mendeklarasikan panjang maksimum. MAX menetapkan panjang maksimum untuk 4.096 byte untuk CHAR atau 65535 byte untuk VARCHAR. Ukuran maksimum objek GEOMETRI adalah 1.048.447 byte.  
Untuk informasi tentang tipe data yang didukung Amazon Redshift, lihat. [Jenis Data](c_Supported_data_types.md)

DEFAULT\$1EXPR *DEFAULT*   <a name="create-table-default"></a>
Klausul yang menetapkan nilai data default untuk kolom. Tipe data *default\$1expr* harus cocok dengan tipe data kolom. Nilai DEFAULT harus berupa ekspresi bebas variabel. Subkueri, referensi silang ke kolom lain dalam tabel saat ini, dan fungsi yang ditentukan pengguna tidak diperbolehkan.  
Ekspresi *default\$1expr* digunakan dalam setiap operasi INSERT yang tidak menentukan nilai untuk kolom. Jika tidak ada nilai default yang ditentukan, nilai default untuk kolom adalah null.  
*Jika operasi COPY dengan daftar kolom yang ditentukan menghilangkan kolom yang memiliki nilai DEFAULT, perintah COPY menyisipkan nilai default\$1expr.*

IDENTITAS (*benih*, *langkah*)   <a name="identity-clause"></a>
Klausul yang menentukan bahwa kolom adalah kolom IDENTITAS. Kolom IDENTITAS berisi nilai autogenerated unik. Tipe data untuk kolom IDENTITY harus berupa INT atau BIGINT.   
Saat Anda menambahkan baris menggunakan `INSERT INTO [tablename] VALUES()` pernyataan `INSERT` atau, nilai-nilai ini dimulai dengan nilai yang ditentukan sebagai *benih* dan kenaikan dengan nomor yang ditentukan sebagai *langkah*.   
Saat Anda memuat tabel menggunakan `COPY` pernyataan `INSERT INTO [tablename] SELECT * FROM` atau, data dimuat secara paralel dan didistribusikan ke irisan simpul. Untuk memastikan bahwa nilai identitasnya unik, Amazon Redshift melewatkan sejumlah nilai saat membuat nilai identitas. Nilai identitas unik, tetapi urutannya mungkin tidak cocok dengan urutan dalam file sumber. 

DIHASILKAN SECARA DEFAULT SEBAGAI IDENTITAS (*seed*, *step*)   <a name="identity-generated-bydefault-clause"></a>
Klausul yang menentukan bahwa kolom adalah kolom IDENTITAS default dan memungkinkan Anda untuk secara otomatis menetapkan nilai unik ke kolom. Tipe data untuk kolom IDENTITY harus berupa INT atau BIGINT. Saat Anda menambahkan baris tanpa nilai, nilai-nilai ini dimulai dengan nilai yang ditentukan sebagai *benih* dan kenaikan dengan nomor yang ditentukan sebagai *langkah*. Untuk informasi tentang bagaimana nilai dihasilkan, lihat[IDENTITY](#identity-clause).  
Juga, selama INSERT, UPDATE, atau COPY Anda dapat memberikan nilai tanpa EXPLICIT\$1IDS. Amazon Redshift menggunakan nilai tersebut untuk menyisipkan ke kolom identitas alih-alih menggunakan nilai yang dihasilkan sistem. Nilai dapat berupa duplikat, nilai kurang dari benih, atau nilai antara nilai langkah. Amazon Redshift tidak memeriksa keunikan nilai di kolom. Memberikan nilai tidak memengaruhi nilai yang dihasilkan sistem berikutnya.  
Jika Anda memerlukan keunikan di kolom, jangan tambahkan nilai duplikat. Sebagai gantinya, tambahkan nilai unik yang kurang dari benih atau di antara nilai langkah.
Perlu diingat hal berikut tentang kolom identitas default:   
+ Kolom identitas default BUKAN NULL. NULL tidak dapat dimasukkan.
+ Untuk menyisipkan nilai yang dihasilkan ke kolom identitas default, gunakan kata kunci`DEFAULT`. 

  ```
  INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  ```
+ Mengesampingkan nilai kolom identitas default tidak memengaruhi nilai yang dihasilkan berikutnya. 
+ Anda tidak dapat menambahkan kolom identitas default dengan pernyataan ALTER TABLE ADD COLUMN. 
+ Anda dapat menambahkan kolom identitas default dengan pernyataan ALTER TABLE APPEND. 

*PENGKODEAN PENGKODEAN*   
Pengkodean kompresi untuk kolom. ENCODE AUTO adalah default untuk tabel. Amazon Redshift secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel. Jika Anda menentukan pengkodean kompresi untuk kolom apa pun dalam tabel, tabel tidak lagi diatur ke ENCODE AUTO. Amazon Redshift tidak lagi secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel. Anda dapat menentukan opsi ENCODE AUTO untuk tabel untuk mengaktifkan Amazon Redshift untuk secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel.  
  
Amazon Redshift secara otomatis menetapkan pengkodean kompresi awal ke kolom yang tidak Anda tentukan pengkodean kompresi sebagai berikut:  
+ Semua kolom dalam tabel sementara diberi kompresi RAW secara default.
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, PRESISI GANDA, GEOMETRI, atau GEOGRAFI diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64
+ Kolom yang didefinisikan sebagai CHAR, VARCHAR, atau VARBYTE diberi kompresi LZO.
Jika Anda tidak ingin kolom dikompresi, tentukan secara eksplisit pengkodean RAW.
 [compression encodings](c_Compression_encodings.md#compression-encoding-list) berikut didukung:  
+ AZ64
+ BYTEDIKTUS
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (tanpa kompresi)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD

DISTKEY  
Kata kunci yang menentukan bahwa kolom adalah kunci distribusi untuk tabel. Hanya satu kolom dalam tabel yang dapat menjadi kunci distribusi. Anda dapat menggunakan kata kunci DISTKEY setelah nama kolom atau sebagai bagian dari definisi tabel dengan menggunakan sintaks DISTKEY (*column\$1name*). Salah satu metode memiliki efek yang sama. Untuk informasi selengkapnya, lihat parameter DISTSTYLE nanti dalam topik ini.  
Tipe data kolom kunci distribusi dapat berupa: BOOLEAN, NYATA, PRESISI GANDA, SMALLINT, INTEGER, BIGINT, DECIMAL, TANGGAL, WAKTU, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ, CHAR, atau VARCHAR.

SORTKEY  
Kata kunci yang menentukan bahwa kolom adalah kunci sort untuk tabel. Saat data dimuat ke dalam tabel, data diurutkan berdasarkan satu atau beberapa kolom yang ditetapkan sebagai kunci pengurutan. Anda dapat menggunakan kata kunci SORTKEY setelah nama kolom untuk menentukan kunci pengurutan kolom tunggal, atau Anda dapat menentukan satu atau beberapa kolom sebagai kolom kunci sortir untuk tabel dengan menggunakan sintaks SORTKEY (*column\$1name* [,...]). Hanya kunci sortir majemuk yang dibuat dengan sintaks ini.  
Anda dapat menentukan maksimum 400 kolom SORTKEY per tabel.  
Tipe data dari kolom kunci sortir dapat berupa: BOOLEAN, NYATA, PRESISI GANDA, SMALLINT, INTEGER, BIGINT, DECIMAL, TANGGAL, WAKTU, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ, CHAR, atau VARCHAR.

MENYUSUN \$1CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI\$1  
Klausa yang menentukan apakah pencarian string atau perbandingan pada kolom peka huruf besar/kecil atau tidak peka huruf besar/kecil. Nilai defaultnya sama dengan konfigurasi sensitivitas kasus saat ini dari database.  
COLLATE hanya didukung pada tipe data berbasis string, termasuk nilai CHAR, VARCHAR, dan string dalam kolom SUPER. Untuk detail tentang kueri data SUPER yang tidak peka huruf besar/kecil, lihat. [Kueri case-insensitive](query-super.md#case-insensitive-super-queries)  
Untuk menemukan informasi pemeriksaan database, gunakan perintah berikut:  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE dan CS dapat dipertukarkan dan menghasilkan hasil yang sama. Demikian pula, CASE\$1INSENSITIVE dan CI dapat dipertukarkan dan menghasilkan hasil yang sama.

TIDAK NULL \$1 NULL   
NOT NULL menentukan bahwa kolom tidak diperbolehkan untuk berisi nilai-nilai null. NULL, default, menentukan bahwa kolom menerima nilai null. Kolom IDENTITAS dinyatakan BUKAN NULL secara default.

UNIK  
Kata kunci yang menentukan bahwa kolom hanya dapat berisi nilai-nilai unik. Perilaku kendala tabel unik sama dengan batasan kolom, dengan kemampuan tambahan untuk menjangkau beberapa kolom. Untuk menentukan batasan tabel unik, gunakan sintaks UNIQUE (*column\$1name* [,...]).  
Kendala unik bersifat informasi dan tidak ditegakkan oleh sistem.

KUNCI UTAMA  
Kata kunci yang menentukan bahwa kolom adalah kunci utama untuk tabel. Hanya satu kolom yang dapat didefinisikan sebagai kunci utama dengan menggunakan definisi kolom. Untuk menentukan batasan tabel dengan kunci primer multi-kolom, gunakan sintaks PRIMARY KEY (*column\$1name* [,...]).  
Mengidentifikasi kolom sebagai kunci utama menyediakan metadata tentang desain skema. Kunci utama menyiratkan bahwa tabel lain dapat mengandalkan kumpulan kolom ini sebagai pengidentifikasi unik untuk baris. Satu kunci primer dapat ditentukan untuk tabel, apakah sebagai kendala kolom atau kendala tabel. Kendala kunci primer harus memberi nama satu set kolom yang berbeda dari kumpulan kolom lain yang dinamai oleh batasan unik yang ditentukan untuk tabel yang sama.  
Kolom KUNCI PRIMARY juga didefinisikan sebagai NOT NULL.  
Kendala kunci primer hanya bersifat informasi. Mereka tidak ditegakkan oleh sistem, tetapi mereka digunakan oleh perencana.

Referensi *reftable* [(*refcolumn*)]  
Klausul yang menentukan batasan kunci asing, yang menyiratkan bahwa kolom harus berisi hanya nilai yang cocok dengan nilai dalam kolom referensi dari beberapa baris tabel referensi. Kolom yang direferensikan harus berupa kolom kendala kunci unik atau primer dalam tabel yang direferensikan.   
 Kendala kunci asing hanya bersifat informasi. Mereka tidak ditegakkan oleh sistem, tetapi mereka digunakan oleh perencana. 

SUKA *parent\$1table* [\$1TERMASUK \$1 TIDAK TERMASUK\$1 DEFAULT]   <a name="create-table-like"></a>
Klausa yang menentukan tabel yang ada dari mana tabel baru secara otomatis menyalin nama kolom, tipe data, dan batasan NOT NULL. Tabel baru dan tabel induk dipisahkan, dan setiap perubahan yang dibuat pada tabel induk tidak diterapkan ke tabel baru. Ekspresi default untuk definisi kolom yang disalin disalin hanya jika INCLUDED DEFAULTS ditentukan. Perilaku default adalah untuk mengecualikan ekspresi default, sehingga semua kolom tabel baru memiliki default null.   
Tabel yang dibuat dengan opsi LIKE tidak mewarisi kendala kunci primer dan asing. Gaya distribusi, kunci pengurutan, BACKUP, dan properti NULL diwarisi oleh tabel LIKE, tetapi Anda tidak dapat secara eksplisit mengaturnya di CREATE TABLE... Pernyataan SEPERTI.

CADANGAN \$1YA \$1 TIDAK\$1   <a name="create-table-backup"></a>
Klausa yang menentukan apakah tabel harus disertakan dalam snapshot cluster otomatis dan manual.   
Untuk tabel, seperti tabel pementasan, yang tidak berisi data penting, tentukan BACKUP NO untuk menghemat waktu pemrosesan saat membuat snapshot dan memulihkan dari snapshot dan untuk mengurangi ruang penyimpanan di Amazon Simple Storage Service. Pengaturan BACKUP NO tidak berpengaruh pada replikasi otomatis data ke node lain di dalam cluster, sehingga tabel dengan BACKUP NO ditentukan dipulihkan jika terjadi kegagalan node. Defaultnya adalah BACKUP YA.  
Tabel tanpa cadangan tidak didukung untuk klaster yang RA3 disediakan dan grup kerja Amazon Redshift Tanpa Server. Tabel yang ditandai sebagai no-backup di RA3 cluster atau grup kerja tanpa server diperlakukan sebagai tabel permanen yang akan selalu dicadangkan saat mengambil snapshot, dan selalu dipulihkan saat memulihkan dari snapshot. Untuk menghindari biaya snapshot untuk tabel tanpa cadangan, potong sebelum mengambil snapshot.

DISTSTYLE \$1OTOMATIS \$1 GENAP \$1 KUNCI \$1 SEMUA\$1  
Kata kunci yang mendefinisikan gaya distribusi data untuk seluruh tabel. Amazon Redshift mendistribusikan baris tabel ke node komputasi sesuai dengan gaya distribusi yang ditentukan untuk tabel. Defaultnya adalah AUTO.  
Gaya distribusi yang Anda pilih untuk tabel mempengaruhi kinerja keseluruhan database Anda. Untuk informasi selengkapnya, lihat [Distribusi data untuk optimasi kueri](t_Distributing_data.md). Gaya distribusi yang mungkin adalah sebagai berikut:  
+ AUTO: Amazon Redshift menetapkan gaya distribusi optimal berdasarkan data tabel. Misalnya, jika gaya distribusi AUTO ditentukan, Amazon Redshift awalnya menetapkan gaya distribusi ALL ke tabel kecil. Saat tabel bertambah besar, Amazon Redshift mungkin mengubah gaya distribusi menjadi KEY, memilih kunci utama (atau kolom kunci primer komposit) sebagai DISTKEY. Jika tabel tumbuh lebih besar dan tidak ada kolom yang cocok untuk menjadi DISTKEY, Amazon Redshift mengubah gaya distribusi menjadi EVEN. Perubahan gaya distribusi terjadi di latar belakang dengan dampak minimal pada kueri pengguna. 

  Untuk melihat gaya distribusi yang diterapkan ke tabel, kueri tabel katalog sistem PG\$1CLASS. Untuk informasi selengkapnya, lihat [Melihat gaya distribusi](viewing-distribution-styles.md). 
+ BAHKAN: Data dalam tabel tersebar merata di seluruh node dalam cluster dalam distribusi round-robin. Baris IDs digunakan untuk menentukan distribusi, dan kira-kira jumlah baris yang sama didistribusikan ke setiap node. 
+ KUNCI: Data didistribusikan oleh nilai-nilai di kolom DISTKEY. Saat Anda mengatur kolom gabungan dari tabel gabungan sebagai kunci distribusi, baris penggabungan dari kedua tabel ditempatkan pada node komputasi. Saat data dikumpulkan, pengoptimal dapat melakukan penggabungan dengan lebih efisien. Jika Anda menentukan KUNCI DISTYLE, Anda harus memberi nama kolom DISTKEY, baik untuk tabel atau sebagai bagian dari definisi kolom. Untuk informasi selengkapnya, lihat parameter DISTKEY sebelumnya dalam topik ini.
+  ALL: Salinan seluruh tabel didistribusikan ke setiap node. Gaya distribusi ini memastikan bahwa semua baris yang diperlukan untuk gabungan apa pun tersedia di setiap node, tetapi ini mengalikan persyaratan penyimpanan dan meningkatkan waktu pemuatan dan pemeliharaan untuk tabel. Distribusi ALL dapat meningkatkan waktu eksekusi bila digunakan dengan tabel dimensi tertentu di mana distribusi KEY tidak sesuai, tetapi peningkatan kinerja harus dipertimbangkan terhadap biaya pemeliharaan. 

DISTKEY (*column\$1name*)  
Kendala yang menentukan kolom yang akan digunakan sebagai kunci distribusi untuk tabel. Anda dapat menggunakan kata kunci DISTKEY setelah nama kolom atau sebagai bagian dari definisi tabel, dengan menggunakan sintaks DISTKEY (*column\$1name*). Salah satu metode memiliki efek yang sama. Untuk informasi selengkapnya, lihat parameter DISTSTYLE sebelumnya dalam topik ini.

[SENYAWA \$1 DISISIPKAN] SORTKEY (*column\$1name* [,...]) \$1 [SORTKEY AUTO]  
Menentukan satu atau lebih kunci sortir untuk tabel. Saat data dimuat ke dalam tabel, data diurutkan berdasarkan kolom yang ditetapkan sebagai kunci pengurutan. Anda dapat menggunakan kata kunci SORTKEY setelah nama kolom untuk menentukan kunci pengurutan kolom tunggal, atau Anda dapat menentukan satu atau beberapa kolom sebagai kolom kunci sortir untuk tabel dengan menggunakan sintaks. `SORTKEY (column_name [ , ... ] )`   
Anda dapat secara opsional menentukan gaya pengurutan COMPOUND atau INTERLEAVED. Jika Anda menentukan SORTKEY dengan kolom defaultnya adalah COMPOUND. Untuk informasi selengkapnya, lihat [Sortir kunci](t_Sorting_data.md).  
Jika Anda tidak menentukan opsi kunci pengurutan apa pun, defaultnya adalah AUTO.  
Anda dapat menentukan maksimum 400 kolom COMPOUND SORTKEY atau 8 kolom SORTKEY INTERLEAVED per tabel.     
MOBIL  
Menentukan bahwa Amazon Redshift menetapkan kunci pengurutan optimal berdasarkan data tabel. Misalnya, jika kunci pengurutan AUTO ditentukan, Amazon Redshift awalnya tidak menetapkan kunci pengurutan ke tabel. Jika Amazon Redshift menentukan bahwa kunci pengurutan akan meningkatkan kinerja kueri, Amazon Redshift mungkin mengubah kunci pengurutan tabel Anda. Penyortiran tabel yang sebenarnya dilakukan dengan pengurutan tabel otomatis. Untuk informasi selengkapnya, lihat [Penyortiran tabel otomatis](t_Reclaiming_storage_space202.md#automatic-table-sort).   
Amazon Redshift tidak mengubah tabel yang memiliki kunci pengurutan atau distribusi yang ada. Dengan satu pengecualian, jika tabel memiliki kunci distribusi yang belum pernah digunakan dalam JOIN, maka kuncinya mungkin berubah jika Amazon Redshift menentukan ada kunci yang lebih baik.   
Untuk melihat kunci pengurutan tabel, kueri tampilan katalog sistem SVV\$1TABLE\$1INFO. Untuk informasi selengkapnya, lihat [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Untuk melihat rekomendasi Amazon Redshift Advisor untuk tabel, kueri tampilan katalog sistem SVV\$1ALTER\$1TABLE\$1REKOMENDASIONS. Untuk informasi selengkapnya, lihat [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Untuk melihat tindakan yang diambil oleh Amazon Redshift, kueri tampilan katalog sistem SVL\$1AUTO\$1WORKER\$1ACTION. Untuk informasi selengkapnya, lihat [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md).   
SENYAWA  
Menentukan bahwa data diurutkan menggunakan kunci majemuk yang terdiri dari semua kolom yang terdaftar, dalam urutan mereka terdaftar. Kunci sortir majemuk paling berguna ketika kueri memindai baris sesuai dengan urutan kolom pengurutan. Manfaat kinerja penyortiran dengan kunci majemuk berkurang ketika kueri bergantung pada kolom pengurutan sekunder. Anda dapat menentukan maksimum 400 kolom COMPOUND SORTKEY per tabel.   
DISISIPKAN  
Menentukan bahwa data diurutkan menggunakan kunci sortir disisipkan. Maksimal delapan kolom dapat ditentukan untuk kunci sortir yang disisipkan.   
Pengurutan yang disisipkan memberikan bobot yang sama untuk setiap kolom, atau subset kolom, dalam kunci pengurutan, sehingga kueri tidak bergantung pada urutan kolom dalam kunci pengurutan. Saat kueri menggunakan satu atau beberapa kolom pengurutan sekunder, penyortiran interleaved secara signifikan meningkatkan kinerja kueri. Penyortiran interleaved membawa biaya overhead yang kecil untuk operasi pemuatan data dan penyedotan debu.   
Jangan gunakan kunci sortir interleaved pada kolom dengan atribut yang meningkat secara monoton, seperti kolom identitas, tanggal, atau stempel waktu.

MENYANDIKAN OTOMATIS   
Mengaktifkan Amazon Redshift untuk secara otomatis menyesuaikan jenis pengkodean untuk semua kolom dalam tabel untuk mengoptimalkan kinerja kueri. ENCODE AUTO mempertahankan jenis encode awal yang Anda tentukan dalam membuat tabel. Kemudian, jika Amazon Redshift menentukan bahwa jenis pengkodean baru dapat meningkatkan kinerja kueri, Amazon Redshift dapat mengubah jenis pengkodean kolom tabel. ENCODE AUTO adalah default jika Anda tidak menentukan jenis pengkodean pada kolom apa pun dalam tabel.

UNIK (*column\$1name* [,...])  
Kendala yang menentukan bahwa sekelompok satu atau lebih kolom tabel hanya dapat berisi nilai unik. Perilaku kendala tabel unik sama dengan batasan kolom, dengan kemampuan tambahan untuk menjangkau beberapa kolom. Dalam konteks batasan unik, nilai null tidak dianggap sama. Setiap batasan tabel unik harus memberi nama satu set kolom yang berbeda dari kumpulan kolom yang dinamai oleh kendala kunci unik atau primer lainnya yang ditentukan untuk tabel.   
 Kendala unik bersifat informasi dan tidak ditegakkan oleh sistem. 

KUNCI UTAMA (*column\$1name* [,...])  
Kendala yang menentukan bahwa kolom atau sejumlah kolom tabel hanya dapat berisi nilai non-null yang unik (nonduplikat). Mengidentifikasi satu set kolom sebagai kunci utama juga menyediakan metadata tentang desain skema. Kunci utama menyiratkan bahwa tabel lain dapat mengandalkan kumpulan kolom ini sebagai pengidentifikasi unik untuk baris. Satu kunci primer dapat ditentukan untuk tabel, apakah sebagai kendala kolom tunggal atau kendala tabel. Kendala kunci primer harus memberi nama satu set kolom yang berbeda dari kumpulan kolom lain yang dinamai oleh batasan unik yang ditentukan untuk tabel yang sama.   
 Kendala kunci primer hanya bersifat informasi. Mereka tidak ditegakkan oleh sistem, tetapi mereka digunakan oleh perencana. 

*KUNCI ASING (*column\$1name* [,...]) REFERENSI *reftable [(refcolumn*)]*   
Kendala yang menentukan batasan kunci asing, yang mengharuskan sekelompok satu atau lebih kolom tabel baru hanya harus berisi nilai yang cocok dengan nilai dalam kolom atau kolom referensi dari beberapa baris tabel referensi. Jika *refcolumn* dihilangkan, kunci utama *reftable* digunakan. Kolom yang direferensikan harus berupa kolom dari kendala kunci unik atau primer dalam tabel yang direferensikan.  
Kendala kunci asing hanya bersifat informasi. Mereka tidak ditegakkan oleh sistem, tetapi mereka digunakan oleh perencana.

## Catatan penggunaan
<a name="r_CREATE_TABLE_usage"></a>

Keunikan, kunci utama, dan kendala kunci asing hanya bersifat informasi; *mereka tidak diberlakukan oleh Amazon Redshift* saat Anda mengisi tabel. Misalnya, jika Anda menyisipkan data ke dalam tabel dengan dependensi, sisipan dapat berhasil bahkan jika itu melanggar batasan. Meskipun demikian, kunci utama dan kunci asing digunakan sebagai petunjuk perencanaan dan mereka harus dinyatakan jika proses ETL Anda atau beberapa proses lain dalam aplikasi Anda menegakkan integritasnya. Untuk informasi tentang cara menjatuhkan tabel dengan dependensi, lihat. [MEJA DROP](r_DROP_TABLE.md)

### Batas dan kuota
<a name="r_CREATE_TABLE_usage-limits"></a>

Pertimbangkan batasan berikut saat Anda membuat tabel.
+ Ada batas untuk jumlah maksimum tabel dalam cluster dengan tipe node. Untuk informasi selengkapnya, lihat [Batas](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dalam Panduan *Manajemen Pergeseran Merah Amazon*. 
+ Jumlah maksimum karakter untuk nama tabel adalah 127. 
+ Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600. 
+ Jumlah maksimum kolom SORTKEY yang dapat Anda tentukan dalam satu tabel adalah 400. 

### Ringkasan pengaturan tingkat kolom dan pengaturan tingkat tabel
<a name="r_CREATE_TABLE_usage-summary_of_settings"></a>

 Beberapa atribut dan pengaturan dapat diatur pada tingkat kolom atau di tingkat tabel. Dalam beberapa kasus, pengaturan atribut atau kendala pada tingkat kolom atau di tingkat tabel memiliki efek yang sama. Dalam kasus lain, mereka menghasilkan hasil yang berbeda. 

 Daftar berikut merangkum pengaturan tingkat kolom dan tingkat tabel: 

DISTKEY  
Tidak ada perbedaan efek apakah diatur pada tingkat kolom atau di tingkat tabel.   
Jika DISTKEY diatur, baik di tingkat kolom atau di tingkat tabel, DISTSTYLE harus diatur ke KEY atau tidak diatur sama sekali. DISTSTYLE hanya dapat diatur di tingkat tabel. 

SORTKEY  
Jika diatur pada tingkat kolom, SORTKEY harus berupa kolom tunggal. Jika SORTKEY diatur pada tingkat tabel, satu atau lebih kolom dapat membentuk senyawa atau kunci sortir komposit yang disisipkan. 

COLLATE CASE\$1SENSITIVE \$1 MENYUSUN CASE\$1INSENSITIVE  
Amazon Redshift tidak mendukung perubahan konfigurasi sensitivitas huruf besar untuk kolom. Saat Anda menambahkan kolom baru ke tabel, Amazon Redshift menggunakan nilai default untuk sensitivitas huruf besar/kecil. Amazon Redshift tidak mendukung kata kunci COLLATE saat menambahkan kolom baru.  
Untuk informasi tentang cara membuat database menggunakan pemeriksaan database, lihat. [BUAT BASIS DATA](r_CREATE_DATABASE.md)  
Untuk informasi tentang fungsi COLLATE, lihat[Fungsi COLLATE](r_COLLATE.md).

UNIK  
Pada tingkat kolom, satu atau lebih kunci dapat diatur ke UNIK; kendala UNIK berlaku untuk setiap kolom secara individual. Jika UNIQUE diatur pada tingkat tabel, satu atau lebih kolom dapat membuat batasan UNIQUE komposit. 

KUNCI UTAMA  
Jika diatur pada tingkat kolom, PRIMARY KEY harus berupa kolom tunggal. Jika PRIMARY KEY diatur pada tingkat tabel, satu atau lebih kolom dapat membentuk kunci primer komposit. 

KUNCI ASING  
Tidak ada perbedaan dalam efek apakah FOREIGN KEY diatur pada tingkat kolom atau di tingkat tabel. Pada tingkat kolom, sintaksnya hanya dapat dikembalikan [`REFERENCES`*(*refcolumn**)]. 

### Distribusi data yang masuk
<a name="r_CREATE_TABLE_usage-distribution-of-incoming-data"></a>

Ketika skema distribusi hash dari data yang masuk cocok dengan tabel target, tidak ada distribusi fisik data yang sebenarnya diperlukan ketika data dimuat. Misalnya, jika kunci distribusi diatur untuk tabel baru dan data dimasukkan dari tabel lain yang didistribusikan pada kolom kunci yang sama, data dimuat di tempat, menggunakan node dan irisan yang sama. Namun, jika tabel sumber dan target disetel ke distribusi EVEN, data didistribusikan kembali ke dalam tabel target.

### Tabel lebar
<a name="r_CREATE_TABLE_usage-wide-tables"></a>

Anda mungkin dapat membuat tabel yang sangat lebar tetapi tidak dapat melakukan pemrosesan kueri, seperti pernyataan INSERT atau SELECT, di atas meja. Lebar maksimum tabel dengan kolom lebar tetap, seperti CHAR, adalah 64KB - 1 (atau 65535 byte). Jika tabel menyertakan kolom VARCHAR, tabel dapat memiliki lebar deklarasi yang lebih besar tanpa mengembalikan kesalahan karena kolom VARCHARS tidak menyumbangkan lebar deklarasi penuhnya ke batas pemrosesan kueri yang dihitung. Batas pemrosesan kueri yang efektif dengan kolom VARCHAR akan bervariasi berdasarkan sejumlah faktor.

Jika tabel terlalu lebar untuk memasukkan atau memilih, Anda menerima kesalahan berikut.

```
ERROR:  8001
DETAIL:  The combined length of columns processed in the SQL statement
exceeded the query-processing limit of 65535 characters (pid:7627)
```

## Contoh
<a name="r_CREATE_TABLE_usage-examples"></a>

Untuk contoh yang menunjukkan cara menggunakan perintah CREATE TABLE, lihat [Contoh](r_CREATE_TABLE_examples.md) topiknya.

# Contoh
<a name="r_CREATE_TABLE_examples"></a>

Contoh berikut menunjukkan berbagai atribut kolom dan tabel dalam pernyataan Amazon Redshift CREATE TABLE. Untuk informasi selengkapnya tentang CREATE TABLE, termasuk definisi parameter, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

Banyak contoh menggunakan tabel dan data dari kumpulan data sampel *TICKIT*. Untuk informasi selengkapnya, lihat [Contoh database](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

 Anda dapat mengawali nama tabel dengan nama database dan nama skema dalam perintah CREATE TABLE. Misalnya,`dev_database.public.sales`. Nama database harus berupa database yang terhubung dengan Anda. Setiap upaya untuk membuat objek database di database lain gagal dengan dan kesalahan operasi tidak valid.

## Buat tabel dengan kunci distribusi, kunci sortir majemuk, dan kompresi
<a name="r_CREATE_TABLE_examples-create-a-table-with-distribution-key"></a>

Contoh berikut membuat tabel PENJUALAN dalam database TICKIT dengan kompresi didefinisikan untuk beberapa kolom. LISTID dideklarasikan sebagai kunci distribusi, dan LISTID dan SELLERID dideklarasikan sebagai kunci sortir majemuk multicolumn. Kendala kunci primer dan kunci asing juga ditentukan untuk tabel. Sebelum membuat tabel dalam contoh, Anda mungkin perlu menambahkan batasan UNIK ke setiap kolom yang direferensikan oleh kunci asing, jika batasan tidak ada.

```
create table sales(
salesid integer not null,
listid integer not null,
sellerid integer not null,
buyerid integer not null,
eventid integer not null encode mostly16,
dateid smallint not null,
qtysold smallint not null encode mostly8,
pricepaid decimal(8,2) encode delta32k,
commission decimal(8,2) encode delta32k,
saletime timestamp,
primary key(salesid),
foreign key(listid) references listing(listid),
foreign key(sellerid) references users(userid),
foreign key(buyerid) references users(userid),
foreign key(dateid) references date(dateid))
distkey(listid)
compound sortkey(listid,sellerid);
```

Hasilnya mengikuti:

```
schemaname | tablename | column     | type                        | encoding | distkey | sortkey | notnull
-----------+-----------+------------+-----------------------------+----------+---------+---------+--------
public     | sales     | salesid    | integer                     | lzo      | false   |       0 | true
public     | sales     | listid     | integer                     | none     | true    |       1 | true
public     | sales     | sellerid   | integer                     | none     | false   |       2 | true
public     | sales     | buyerid    | integer                     | lzo      | false   |       0 | true
public     | sales     | eventid    | integer                     | mostly16 | false   |       0 | true
public     | sales     | dateid     | smallint                    | lzo      | false   |       0 | true
public     | sales     | qtysold    | smallint                    | mostly8  | false   |       0 | true
public     | sales     | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | commission | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

Contoh berikut membuat tabel t1 dengan kolom col1 case-insensitive.

```
create table T1 (
  col1 Varchar(20) collate case_insensitive
 );
            
insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');
```

Kueri tabel:

```
select * from T1 where col1 = 'John';
   
col1
------
 john
 JOHN
(2 rows)
```

## Buat tabel menggunakan kunci sortir yang disisipkan
<a name="CREATE_TABLE_NEW-create-a-table-using-interleaved-sortkey"></a>

Contoh berikut membuat tabel CUSTOMER dengan kunci sort interleaved.

```
create table customer_interleaved (
  c_custkey     	integer        not null,
  c_name        	varchar(25)    not null,
  c_address     	varchar(25)    not null,
  c_city        	varchar(10)    not null,
  c_nation      	varchar(15)    not null,
  c_region      	varchar(12)    not null,
  c_phone       	varchar(15)    not null,
  c_mktsegment      varchar(10)    not null)
diststyle all
interleaved sortkey (c_custkey, c_city, c_mktsegment);
```

## Buat tabel menggunakan IF NOT EXISTS
<a name="CREATE_TABLE_NEW-create-a-table-using-if-not-exists"></a>

 Contoh berikut membuat tabel CITIES, atau tidak melakukan apa-apa dan mengembalikan pesan jika sudah ada:

```
create table if not exists cities(
cityid integer not null,
city varchar(100) not null,
state char(2) not null);
```

## Buat tabel dengan distribusi SEMUA
<a name="CREATE_TABLE_NEW-create-a-table-with-all-distribution"></a>

 Contoh berikut membuat tabel VENUE dengan distribusi ALL. 

```
create table venue(
venueid smallint not null,
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid))
diststyle all;
```

## Buat Tabel dengan distribusi EVEN
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-even-distribution"></a>

Contoh berikut membuat tabel yang disebut MYEVENT dengan tiga kolom. 

```
create table myevent(
eventid int,
eventname varchar(200),
eventcity varchar(30))
diststyle even;
```

Tabel didistribusikan secara merata dan tidak diurutkan. Tabel tidak memiliki kolom DISTKEY atau SORTKEY yang dinyatakan. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'myevent';
            
  column   |          type          | encoding | distkey | sortkey
-----------+------------------------+----------+---------+---------
 eventid   | integer                | lzo      | f       |       0
 eventname | character varying(200) | lzo      | f       |       0
 eventcity | character varying(30)  | lzo      | f       |       0
(3 rows)
```

## Buat tabel sementara yang SEPERTI tabel lain
<a name="r_CREATE_TABLE_NEW-create-a-temporary-table-that-is-like-another-table"></a>

Contoh berikut membuat tabel sementara yang disebut TEMPEVENT, yang mewarisi kolomnya dari tabel EVENT. 

```
create temp table tempevent(like event); 
```

Tabel ini juga mewarisi atribut DISTKEY dan SORTKEY dari tabel induknya: 

```
select "column", type, encoding, distkey, sortkey
 from pg_table_def where tablename = 'tempevent';

  column   |            type             | encoding | distkey | sortkey
-----------+-----------------------------+----------+---------+---------
 eventid   | integer                     | none     | t       |       1
 venueid   | smallint                    | none     | f       |       0
 catid     | smallint                    | none     | f       |       0
 dateid    | smallint                    | none     | f       |       0
 eventname | character varying(200)      | lzo      | f       |       0
 starttime | timestamp without time zone | bytedict | f       |       0
(6 rows)
```

## Buat tabel dengan kolom IDENTITY
<a name="r_CREATE_TABLE_NEW-create-a-table-with-an-identity-column"></a>

Contoh berikut membuat tabel bernama VENUE\$1IDENT, yang memiliki kolom IDENTITY bernama VENUEID. Kolom ini dimulai dengan 0 dan bertambah 1 untuk setiap catatan. VENUEID juga dinyatakan sebagai kunci utama tabel. 

```
create table venue_ident(venueid bigint identity(0, 1),
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid));
```

## Buat tabel dengan kolom IDENTITAS default
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-identity-column"></a>

Contoh berikut membuat tabel bernama`t1`. Tabel ini memiliki kolom IDENTITY bernama `hist_id` dan kolom IDENTITY default bernama`base_id`. 

```
CREATE TABLE t1(
  hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */
  base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */
  business_key varchar(10) ,
  some_field varchar(10)
);
```

Memasukkan baris ke dalam tabel menunjukkan bahwa keduanya `hist_id` dan `base_id` nilai dihasilkan. 

```
INSERT INTO T1 (business_key, some_field) values ('A','MM');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
```

Memasukkan baris kedua menunjukkan bahwa nilai default untuk `base_id` dihasilkan.

```
INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
```

Menyisipkan baris ketiga menunjukkan bahwa nilai untuk `base_id` tidak perlu unik.

```
INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
```

```
SELECT * FROM t1;
            
 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
       3 |       2 | B            | MNNN
```

## Buat tabel dengan nilai kolom DEFAULT
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-column-values"></a>

Contoh berikut membuat tabel CATEGORYDEF yang mendeklarasikan nilai default untuk setiap kolom: 

```
create table categorydef(
catid smallint not null default 0,
catgroup varchar(10) default 'Special',
catname varchar(10) default 'Other',
catdesc varchar(50) default 'Special events',
primary key(catid));
            
insert into categorydef values(default,default,default,default);
```

```
select * from categorydef;
            
 catid | catgroup | catname |    catdesc
-------+----------+---------+----------------
     0 | Special  | Other   | Special events
(1 row)
```

## Opsi DISTYLE, DISTKEY, dan SORTKEY
<a name="r_CREATE_TABLE_NEW-diststyle-distkey-and-sortkey-options"></a>

Contoh berikut menunjukkan cara kerja opsi DISTKEY, SORTKEY, dan DISTSTYLE. Dalam contoh ini, COL1 adalah kunci distribusi; oleh karena itu, gaya distribusi harus diatur ke KEY atau tidak diatur. Secara default, tabel tidak memiliki kunci pengurutan sehingga tidak diurutkan: 

```
create table t1(col1 int distkey, col2 int) diststyle key;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't1';

column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | az64     | t       | 0
col2   | integer | az64     | f       | 0
```

Dalam contoh berikut, kolom yang sama didefinisikan sebagai kunci distribusi dan kunci sortir. Sekali lagi, gaya distribusi harus diatur ke KEY atau tidak diatur. 

```
create table t2(col1 int distkey sortkey, col2 int);
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't2';
            
column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | none     | t       | 1
col2   | integer | az64     | f       | 0
```

Dalam contoh berikut, tidak ada kolom yang ditetapkan sebagai kunci distribusi, COL2 ditetapkan sebagai kunci sortir, dan gaya distribusi diatur ke SEMUA: 

```
create table t3(col1 int, col2 int sortkey) diststyle all;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't3';
            
Column |  Type   | Encoding | DistKey | SortKey
-------+---------+----------+---------+--------
col1   | integer | az64     | f       | 0
col2   | integer | none     | f       | 1
```

Dalam contoh berikut, gaya distribusi diatur ke EVEN dan tidak ada kunci pengurutan didefinisikan secara eksplisit; oleh karena itu tabel didistribusikan secara merata tetapi tidak diurutkan. 

```
create table t4(col1 int, col2 int) diststyle even;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't4';
            
             column |  type   |encoding | distkey | sortkey
--------+---------+---------+---------+--------
col1    | integer | az64    | f       | 0
col2    | integer | az64    | f       | 0
```

## Buat tabel dengan opsi ENCODE AUTO
<a name="r_CREATE_TABLE_NEW-create-a-table-with-encode-option"></a>

Contoh berikut membuat tabel `t1` dengan pengkodean kompresi otomatis. ENCODE AUTO adalah default untuk tabel ketika Anda tidak menentukan jenis pengkodean untuk kolom apa pun.

```
create table t1(c0 int, c1 varchar);
```

Contoh berikut membuat tabel `t2` dengan pengkodean kompresi otomatis dengan menentukan ENCODE AUTO.

```
create table t2(c0 int, c1 varchar) encode auto;
```

Contoh berikut membuat tabel `t3` dengan pengkodean kompresi otomatis dengan menentukan ENCODE AUTO. Kolom `c0` didefinisikan dengan jenis pengkodean awal DELTA. Amazon Redshift dapat mengubah pengkodean jika pengkodean lain memberikan kinerja kueri yang lebih baik.

```
create table t3(c0 int encode delta, c1 varchar) encode auto;
```

Contoh berikut membuat tabel `t4` dengan pengkodean kompresi otomatis dengan menentukan ENCODE AUTO. Kolom `c0` didefinisikan dengan pengkodean awal DELTA, dan kolom `c1` didefinisikan dengan pengkodean awal LZO. Amazon Redshift dapat mengubah pengkodean ini jika pengkodean lain memberikan kinerja kueri yang lebih baik.

```
create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;
```

# CREATE TABLE AS
<a name="r_CREATE_TABLE_AS"></a>

**Topics**
+ [Sintaksis](#r_CREATE_TABLE_AS-synopsis)
+ [Parameter](#r_CREATE_TABLE_AS-parameters)
+ [Catatan penggunaan CTAS](r_CTAS_usage_notes.md)
+ [Contoh CTAS](r_CTAS_examples.md)

Membuat tabel baru berdasarkan query. Pemilik tabel ini adalah pengguna yang mengeluarkan perintah.

Tabel baru dimuat dengan data yang ditentukan oleh kueri dalam perintah. Kolom tabel memiliki nama dan tipe data yang terkait dengan kolom keluaran kueri. Perintah CREATE TABLE AS (CTAS) membuat tabel baru dan mengevaluasi kueri untuk memuat tabel baru.

## Sintaksis
<a name="r_CREATE_TABLE_AS-synopsis"></a>

```
CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ]
TABLE table_name
[ ( column_name [, ... ] ) ]
[ BACKUP { YES | NO } ]
[ table_attributes ]
AS query

where table_attributes are:
[ DISTSTYLE { AUTO | EVEN | ALL | KEY } ]
[ DISTKEY( distkey_identifier ) ]
[ [ COMPOUND | INTERLEAVED ] SORTKEY( column_name [, ...] ) ]
```

## Parameter
<a name="r_CREATE_TABLE_AS-parameters"></a>

LOKAL   
Meskipun kata kunci opsional ini diterima dalam pernyataan, itu tidak berpengaruh di Amazon Redshift.

SEMENTARA \$1 TEMP   
Membuat tabel sementara. Tabel sementara secara otomatis dijatuhkan di akhir sesi di mana ia dibuat.

 *table\$1name*   
Nama tabel untuk dibuat.  
Jika Anda menentukan nama tabel yang dimulai dengan '\$1 ', tabel dibuat sebagai tabel sementara. Contoh:  

```
create table #newtable (id) as select * from oldtable;
```
Panjang nama tabel maksimum adalah 127 byte; nama yang lebih panjang dipotong menjadi 127 byte. Amazon Redshift memberlakukan kuota jumlah tabel per cluster menurut jenis node. Nama tabel dapat dikualifikasikan dengan database dan nama skema, seperti yang ditunjukkan tabel berikut.  

```
create table tickit.public.test (c1) as select * from oldtable;
```
Dalam contoh ini, `tickit` adalah nama database dan `public` merupakan nama skema. Jika database atau skema tidak ada, pernyataan mengembalikan kesalahan.  
Jika nama skema diberikan, tabel baru dibuat dalam skema itu (dengan asumsi pencipta memiliki akses ke skema). Nama tabel harus menjadi nama unik untuk skema itu. Jika tidak ada skema yang ditentukan, tabel dibuat menggunakan skema database saat ini. Jika Anda membuat tabel sementara, Anda tidak dapat menentukan nama skema, karena tabel sementara ada dalam skema khusus.  
Beberapa tabel sementara dengan nama yang sama diizinkan untuk ada pada saat yang sama dalam database yang sama jika mereka dibuat dalam sesi terpisah. Tabel ini ditugaskan ke skema yang berbeda.

 *column\$1name*   
Nama kolom di tabel baru. Jika tidak ada nama kolom yang disediakan, nama kolom diambil dari nama kolom keluaran kueri. Nama kolom default digunakan untuk ekspresi. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

CADANGAN \$1YA \$1 TIDAK\$1   
Klausa yang menentukan apakah tabel harus disertakan dalam snapshot cluster otomatis dan manual.   
Untuk tabel, seperti tabel pementasan, yang tidak berisi data penting, tentukan BACKUP NO untuk menghemat waktu pemrosesan saat membuat snapshot dan memulihkan dari snapshot dan untuk mengurangi ruang penyimpanan di Amazon Simple Storage Service. Pengaturan BACKUP NO tidak berpengaruh pada replikasi otomatis data ke node lain di dalam cluster, sehingga tabel dengan BACKUP NO ditentukan dipulihkan jika terjadi kegagalan node. Defaultnya adalah BACKUP YA.  
Tabel tanpa cadangan tidak didukung untuk klaster yang RA3 disediakan dan grup kerja Amazon Redshift Tanpa Server. Tabel yang ditandai sebagai no-backup di RA3 cluster atau grup kerja tanpa server diperlakukan sebagai tabel permanen yang akan selalu dicadangkan saat mengambil snapshot, dan selalu dipulihkan saat memulihkan dari snapshot. Untuk menghindari biaya snapshot untuk tabel tanpa cadangan, potong sebelum mengambil snapshot.

DISTSTYLE \$1OTOMATIS \$1 GENAP \$1 KUNCI \$1 SEMUA\$1  
Kata kunci yang mendefinisikan gaya distribusi data untuk seluruh tabel. Amazon Redshift mendistribusikan baris tabel ke node komputasi sesuai dengan gaya distribusi yang ditentukan untuk tabel. Defaultnya adalah DISTSTYLE AUTO.  
Gaya distribusi yang Anda pilih untuk tabel mempengaruhi kinerja keseluruhan database Anda. Untuk informasi selengkapnya, lihat [Distribusi data untuk optimasi kueri](t_Distributing_data.md).  
+ AUTO: Amazon Redshift menetapkan gaya distribusi optimal berdasarkan data tabel. Untuk melihat gaya distribusi yang diterapkan ke tabel, kueri tabel katalog sistem PG\$1CLASS. Untuk informasi selengkapnya, lihat [Melihat gaya distribusi](viewing-distribution-styles.md). 
+ BAHKAN: Data dalam tabel tersebar merata di seluruh node dalam cluster dalam distribusi round-robin. Baris IDs digunakan untuk menentukan distribusi, dan kira-kira jumlah baris yang sama didistribusikan ke setiap node. Ini adalah metode distribusi default.
+ KUNCI: Data didistribusikan oleh nilai-nilai di kolom DISTKEY. Saat Anda mengatur kolom gabungan dari tabel gabungan sebagai kunci distribusi, baris penggabungan dari kedua tabel ditempatkan pada node komputasi. Saat data dikumpulkan, pengoptimal dapat melakukan penggabungan dengan lebih efisien. Jika Anda menentukan KUNCI DISTYLE, Anda harus memberi nama kolom DISTKEY.
+  ALL: Salinan seluruh tabel didistribusikan ke setiap node. Gaya distribusi ini memastikan bahwa semua baris yang diperlukan untuk gabungan apa pun tersedia di setiap node, tetapi ini mengalikan persyaratan penyimpanan dan meningkatkan waktu pemuatan dan pemeliharaan untuk tabel. Distribusi ALL dapat meningkatkan waktu eksekusi bila digunakan dengan tabel dimensi tertentu di mana distribusi KEY tidak sesuai, tetapi peningkatan kinerja harus dipertimbangkan terhadap biaya pemeliharaan. 

DISTKEY (*kolom*)  
Menentukan nama kolom atau nomor posisi untuk kunci distribusi. Gunakan nama yang ditentukan dalam daftar kolom opsional untuk tabel atau daftar pilih kueri. Atau, gunakan nomor posisi, di mana kolom pertama yang dipilih adalah 1, yang kedua adalah 2, dan seterusnya. Hanya satu kolom dalam tabel yang dapat menjadi kunci distribusi:  
+ Jika Anda mendeklarasikan kolom sebagai kolom DISTKEY, DISTSTYLE harus disetel ke KEY atau tidak disetel sama sekali.
+ Jika Anda tidak mendeklarasikan kolom DISTKEY, Anda dapat mengatur DISTYLE ke EVEN.
+ Jika Anda tidak menentukan DISTKEY atau DISTYLE, CTAS menentukan gaya distribusi untuk tabel baru berdasarkan rencana kueri untuk klausa SELECT. Untuk informasi selengkapnya, lihat [Warisan atribut kolom dan tabel](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).
Anda dapat menentukan kolom yang sama dengan kunci distribusi dan kunci pengurutan; pendekatan ini cenderung mempercepat bergabung ketika kolom yang dimaksud adalah kolom gabungan dalam kueri.

[SENYAWA \$1 DISISIPKAN] SORTKEY (*column\$1name* [,...])  
Menentukan satu atau lebih kunci sortir untuk tabel. Saat data dimuat ke dalam tabel, data diurutkan berdasarkan kolom yang ditetapkan sebagai kunci pengurutan.   
Anda dapat secara opsional menentukan gaya pengurutan COMPOUND atau INTERLEAVED. Defaultnya adalah COMPOUND. Untuk informasi selengkapnya, lihat [Sortir kunci](t_Sorting_data.md).  
Anda dapat menentukan maksimum 400 kolom COMPOUND SORTKEY atau 8 kolom SORTKEY INTERLEAVED per tabel.   
Jika Anda tidak menentukan SORTKEY, CTAS menentukan kunci pengurutan untuk tabel baru berdasarkan rencana kueri untuk klausa SELECT. Untuk informasi selengkapnya, lihat [Warisan atribut kolom dan tabel](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).    
SENYAWA  
Menentukan bahwa data diurutkan menggunakan kunci majemuk yang terdiri dari semua kolom yang terdaftar, dalam urutan mereka terdaftar. Kunci sortir majemuk paling berguna ketika kueri memindai baris sesuai dengan urutan kolom pengurutan. Manfaat kinerja penyortiran dengan kunci majemuk berkurang ketika kueri bergantung pada kolom pengurutan sekunder. Anda dapat menentukan maksimum 400 kolom COMPOUND SORTKEY per tabel.   
DISISIPKAN  
Menentukan bahwa data diurutkan menggunakan kunci sortir disisipkan. Maksimal delapan kolom dapat ditentukan untuk kunci sortir yang disisipkan.   
Pengurutan yang disisipkan memberikan bobot yang sama untuk setiap kolom, atau subset kolom, dalam kunci pengurutan, sehingga kueri tidak bergantung pada urutan kolom dalam kunci pengurutan. Saat kueri menggunakan satu atau beberapa kolom pengurutan sekunder, penyortiran interleaved secara signifikan meningkatkan kinerja kueri. Penyortiran interleaved membawa biaya overhead yang kecil untuk operasi pemuatan data dan penyedotan debu. 

Sebagai *kueri*   
Setiap kueri (pernyataan SELECT) yang didukung Amazon Redshift.

# Catatan penggunaan CTAS
<a name="r_CTAS_usage_notes"></a>

## Batas
<a name="r_CTAS_usage_notes-limits"></a>

Amazon Redshift memberlakukan kuota jumlah tabel per cluster menurut jenis node. 

Jumlah maksimum karakter untuk nama tabel adalah 127. 

Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600. 

## Warisan atribut kolom dan tabel
<a name="r_CTAS_usage_notes-inheritance-of-column-and-table-attributes"></a>

Tabel CREATE TABLE AS (CTAS) tidak mewarisi batasan, kolom identitas, nilai kolom default, atau kunci utama dari tabel tempat mereka dibuat. 

Anda tidak dapat menentukan pengkodean kompresi kolom untuk tabel CTAS. Amazon Redshift secara otomatis menetapkan pengkodean kompresi sebagai berikut:
+ Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, PRESISI GANDA, GEOMETRI, atau GEOGRAFI diberi kompresi RAW.
+ Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64 
+ Kolom yang didefinisikan sebagai CHAR, VARCHAR, atau VARBYTE diberi kompresi LZO.

Untuk informasi selengkapnya, lihat [Pengkodean kompresi](c_Compression_encodings.md) dan [Jenis Data](c_Supported_data_types.md). 

Untuk secara eksplisit menetapkan pengkodean kolom, gunakan. [CREATE TABLE](r_CREATE_TABLE_NEW.md)

CTAS menentukan gaya distribusi dan kunci pengurutan untuk tabel baru berdasarkan rencana kueri untuk klausa SELECT. 

Untuk kueri kompleks, seperti kueri yang menyertakan gabungan, agregasi, klausa urutan demi klausa, atau klausa batas, CTAS berusaha sebaik mungkin untuk memilih gaya distribusi optimal dan kunci pengurutan berdasarkan rencana kueri. 

**catatan**  
Untuk kinerja terbaik dengan kumpulan data besar atau kueri kompleks, kami merekomendasikan pengujian menggunakan kumpulan data tipikal.

Anda sering dapat memprediksi kunci distribusi dan kunci sortir mana yang dipilih CTAS dengan memeriksa rencana kueri untuk melihat kolom mana, jika ada, yang dipilih pengoptimal kueri untuk menyortir dan mendistribusikan data. Jika node atas dari rencana kueri adalah pemindaian berurutan sederhana dari satu tabel (XN Seq Scan), maka CTAS umumnya menggunakan gaya distribusi tabel sumber dan kunci pengurutan. Jika node teratas dari rencana kueri adalah pemindaian sekuensial lainnya (seperti XN Limit, XN Sort, XN HashAggregate, dan sebagainya), CTAS melakukan upaya terbaik untuk memilih gaya distribusi optimal dan kunci sortir berdasarkan rencana kueri.

Misalnya, Anda membuat lima tabel menggunakan jenis klausa SELECT berikut:
+ Pernyataan pilih sederhana 
+ Klausul batas 
+ Pesanan dengan klausa menggunakan LISTID 
+ Pesanan dengan klausa menggunakan QTYSOLD 
+ Fungsi agregat SUM dengan klausa grup demi klausa.

Contoh berikut menunjukkan rencana query untuk setiap pernyataan CTAS.

```
explain create table sales1_simple as select listid, dateid, qtysold from sales;
                           QUERY PLAN
----------------------------------------------------------------
 XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(1 row)


explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100;
                              QUERY PLAN
----------------------------------------------------------------------
 XN Limit  (cost=0.00..1.00 rows=100 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)


explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: listid
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: qtysold
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid;
                              QUERY PLAN
----------------------------------------------------------------------
 XN HashAggregate  (cost=3017.98..3226.75 rows=83509 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)
```

Untuk melihat kunci distribusi dan kunci sortir untuk setiap tabel, kueri tabel katalog sistem PG\$1TABLE\$1DEF, seperti yang ditunjukkan berikut. 

```
select * from pg_table_def where tablename like 'sales%';

      tablename       |   column   | distkey | sortkey
----------------------+------------+---------+---------
 sales                | salesid    | f       |       0
 sales                | listid     | t       |       0
 sales                | sellerid   | f       |       0
 sales                | buyerid    | f       |       0
 sales                | eventid    | f       |       0
 sales                | dateid     | f       |       1
 sales                | qtysold    | f       |       0
 sales                | pricepaid  | f       |       0
 sales                | commission | f       |       0
 sales                | saletime   | f       |       0
 sales1_simple        | listid     | t       |       0
 sales1_simple        | dateid     | f       |       1
 sales1_simple        | qtysold    | f       |       0
 sales2_limit         | listid     | f       |       0
 sales2_limit         | dateid     | f       |       0
 sales2_limit         | qtysold    | f       |       0
 sales3_orderbylistid | listid     | t       |       1
 sales3_orderbylistid | dateid     | f       |       0
 sales3_orderbylistid | qtysold    | f       |       0
 sales4_orderbyqty    | listid     | t       |       0
 sales4_orderbyqty    | dateid     | f       |       0
 sales4_orderbyqty    | qtysold    | f       |       1
 sales5_groupby       | listid     | f       |       0
 sales5_groupby       | dateid     | f       |       0
 sales5_groupby       | sum        | f       |       0
```

Tabel berikut merangkum hasilnya. Untuk kesederhanaan, kami menghilangkan detail biaya, baris, dan lebar dari rencana penjelasan.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_CTAS_usage_notes.html)

Anda dapat secara eksplisit menentukan gaya distribusi dan kunci sortir dalam pernyataan CTAS. Misalnya, pernyataan berikut membuat tabel menggunakan distribusi EVEN dan menentukan SALESID sebagai kunci pengurutan.

```
create table sales_disteven
diststyle even
sortkey (salesid)
as
select eventid, venueid, dateid, eventname
from event;
```

## Pengkodean kompresi
<a name="r_CTAS_usage_notes_encoding"></a>

ENCODE AUTO digunakan sebagai default untuk tabel. Amazon Redshift secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel.

## Distribusi data yang masuk
<a name="r_CTAS_usage_notes-distribution-of-incoming-data"></a>

Ketika skema distribusi hash dari data yang masuk cocok dengan tabel target, tidak ada distribusi fisik data yang sebenarnya diperlukan ketika data dimuat. Misalnya, jika kunci distribusi diatur untuk tabel baru dan data dimasukkan dari tabel lain yang didistribusikan pada kolom kunci yang sama, data dimuat di tempat, menggunakan node dan irisan yang sama. Namun, jika tabel sumber dan target disetel ke distribusi EVEN, data didistribusikan kembali ke dalam tabel target. 

## Operasi ANALISIS otomatis
<a name="r_CTAS_usage_notes-automatic-analyze-operations"></a>

Amazon Redshift secara otomatis menganalisis tabel yang Anda buat dengan perintah CTAS. Anda tidak perlu menjalankan perintah ANALYZE pada tabel ini saat pertama kali dibuat. Jika Anda memodifikasinya, Anda harus menganalisisnya dengan cara yang sama seperti tabel lainnya. 

# Contoh CTAS
<a name="r_CTAS_examples"></a>

Contoh berikut membuat tabel bernama EVENT\$1BACKUP untuk tabel EVENT:

```
create table event_backup as select * from event;
```

Tabel yang dihasilkan mewarisi distribusi dan mengurutkan kunci dari tabel EVENT. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'event_backup';

column    | type                        | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+--------
catid     | smallint                    | none     | false   |       0
dateid    | smallint                    | none     | false   |       1
eventid   | integer                     | none     | true    |       0
eventname | character varying(200)      | none     | false   |       0
starttime | timestamp without time zone | none     | false   |       0
venueid   | smallint                    | none     | false   |       0
```

Perintah berikut membuat tabel baru yang disebut EVENTDISTSORT dengan memilih empat kolom dari tabel EVENT. Tabel baru didistribusikan oleh EVENTID dan diurutkan berdasarkan EVENTID dan DATEID: 

```
create table eventdistsort
distkey (1)
sortkey (1,3)
as
select eventid, venueid, dateid, eventname
from event;
```

Hasilnya adalah sebagai berikut:

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistsort';

column   |          type          | encoding | distkey | sortkey
---------+------------------------+----------+---------+-------
eventid   | integer               | none     | t       | 1
venueid   | smallint              | none     | f       | 0
dateid    | smallint              | none     | f       | 2
eventname | character varying(200)| none     | f       | 0
```

Anda dapat membuat tabel yang persis sama dengan menggunakan nama kolom untuk distribusi dan kunci pengurutan. Contoh:

```
create table eventdistsort1
distkey (eventid)
sortkey (eventid, dateid)
as
select eventid, venueid, dateid, eventname
from event;
```

Pernyataan berikut menerapkan distribusi genap ke tabel tetapi tidak mendefinisikan kunci pengurutan eksplisit. 

```
create table eventdisteven
diststyle even
as
select eventid, venueid, dateid, eventname
from event;
```

Tabel tidak mewarisi kunci pengurutan dari tabel EVENT (EVENTID) karena distribusi EVEN ditentukan untuk tabel baru. Tabel baru tidak memiliki kunci pengurutan dan tidak ada kunci distribusi. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdisteven';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+---------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 0
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

Pernyataan berikut menerapkan distribusi genap dan mendefinisikan kunci pengurutan: 

```
create table eventdistevensort diststyle even sortkey (venueid)
as select eventid, venueid, dateid, eventname from event;
```

 Tabel yang dihasilkan memiliki kunci pengurutan tetapi tidak ada kunci distribusi. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistevensort';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+-------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 1
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

Pernyataan berikut mendistribusikan ulang tabel EVENT pada kolom kunci yang berbeda dari data yang masuk, yang diurutkan pada kolom EVENTID, dan mendefinisikan tidak ada kolom SORTKEY; oleh karena itu tabel tidak diurutkan. 

```
create table venuedistevent distkey(venueid)
as select * from event;
```

Hasilnya adalah sebagai berikut: 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'venuedistevent';

 column   |            type             | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+-------
eventid   | integer                     | none     | f       | 0
venueid   | smallint                    | none     | t       | 0
catid     | smallint                    | none     | f       | 0
dateid    | smallint                    | none     | f       | 0
eventname | character varying(200)      | none     | f       | 0
starttime | timestamp without time zone | none     | f       | 0
```

# BUAT TEMPLATE
<a name="r_CREATE_TEMPLATE"></a>

Membuat template yang dapat digunakan kembali untuk perintah Amazon Redshift seperti. [MENYONTEK](r_COPY.md) Template menyimpan parameter yang umum digunakan yang dapat direferensikan di beberapa eksekusi perintah, meningkatkan konsistensi dan mengurangi spesifikasi parameter manual.

Template menghilangkan kebutuhan untuk berulang kali menentukan parameter pemformatan yang sama di beberapa operasi, sementara jalur sumber, tabel target, dan otorisasi dapat bervariasi antar operasi.

## Hak istimewa yang diperlukan
<a name="r_CREATE_TEMPLATE-privileges"></a>

Untuk membuat template, Anda harus memiliki salah satu dari berikut ini:
+ Hak istimewa pengguna super
+ BUAT izin pada skema tempat Anda ingin membuat templat, atau BUAT izin cakupan pada skema di database tempat Anda ingin membuat templat

## Sintaksis
<a name="r_CREATE_TEMPLATE-synopsis"></a>

```
CREATE [ OR REPLACE ] TEMPLATE [database_name.][schema_name.]template_name
FOR COPY [ AS ]
[ [ FORMAT ] [ AS ] data_format ]
[ parameter [ argument ] [ , ... ] ];
```

## Parameter
<a name="r_CREATE_TEMPLATE-parameters"></a>

 *ATAU GANTI*   
Jika template dengan nama yang sama sudah ada dalam database dan skema yang ditentukan, template yang ada diganti. Anda hanya dapat mengganti template dengan template baru yang mendefinisikan jenis operasi yang sama, misalnya, COPY. Anda harus memiliki hak istimewa yang diperlukan untuk mengganti template.

*database\$1name*  
(Opsional) Nama database tempat template akan dibuat. Jika tidak ditentukan, template dibuat dalam database saat ini.  
Jika database atau skema tidak ada, template tidak dibuat, dan pernyataan mengembalikan kesalahan. Anda tidak dapat membuat template dalam database sistem`template0`,, `template1``padb_harvest`, atau`sys:internal`.

*schema\$1name*  
(Opsional) Nama skema tempat template akan dibuat. Jika tidak ditentukan, template dibuat dalam skema saat ini.  
Jika nama skema diberikan, template baru dibuat dalam skema itu (dengan asumsi pencipta memiliki akses ke skema). Nama template harus menjadi nama unik untuk skema itu.

*template\$1name*  
Nama template yang akan dibuat. Secara opsional, nama template dapat dikualifikasikan dengan database dan nama skema. Dalam contoh berikut, nama database adalah`demo_database`, nama skema`demo_schema`, dan nama template adalah`test`. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).  

```
CREATE TEMPLATE demo_database.demo_schema.test FOR COPY AS CSV;
```

MENYONTEK  
Menentukan jenis perintah Redshift yang template dibuat. Saat ini, hanya perintah COPY yang didukung.

[[FORMAT] [AS] *data\$1format*]   
Ini adalah parameter opsional. Ini menentukan format data untuk operasi COPY.

[*parameter* [argumen]]  
Parameter apa pun yang valid untuk perintah pergeseran merah yang ditentukan.  
Misalnya, template untuk perintah COPY dapat mencakup:  
+ [Parameter format data](copy-parameters-data-format.md)
+ [Parameter kompresi file](copy-parameters-file-compression.md)
+ [Parameter konversi data](copy-parameters-data-conversion.md)
+ [Operasi pemuatan data](copy-parameters-data-load.md)
Untuk daftar lengkap parameter yang didukung, lihat [MENYONTEK](r_COPY.md) perintah.

### Catatan penggunaan
<a name="create_template-usage-notes"></a>
+ Secara default, semua pengguna memiliki hak CREATE dan USE pada skema PUBLIC. Untuk melarang pengguna membuat objek dalam skema PUBLIK database, gunakan perintah REVOKE untuk menghapus hak istimewa itu.
+ Ketika parameter ada di template dan perintah, parameter perintah diutamakan.
+ Template adalah objek database dan mengikuti aturan penamaan dan izin objek Redshift standar. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).
+ Template tidak dapat berisi spesifikasi file manifes untuk [MENYONTEK](r_COPY.md) perintah.

### Batasan
<a name="create_template-limitations"></a>
+ Setidaknya satu parameter harus ditentukan saat membuat template.
+ Parameter yang dikecualikan — Parameter khusus perintah seperti jalur sumber, tabel target, kredensyal otorisasi, dan spesifikasi file manifes tidak dapat disertakan dalam templat. Parameter ini harus ditentukan dalam perintah yang sebenarnya.
+ Template maksimum per cluster - Anda dapat membuat maksimal 1.000 template per cluster. Batas ini berlaku untuk jumlah total template di semua database dan skema di cluster.
+ Referensi lintas basis data — Template tidak dapat direferensikan di seluruh database.
+ Berbagi data — Template tidak dapat dimasukkan dalam pembagian data. Template harus dibuat secara terpisah di setiap cluster di mana mereka dibutuhkan.

## Contoh
<a name="r_CREATE_TEMPLATE-examples"></a>

Contoh berikut membuat template untuk perintah COPY 

```
CREATE TEMPLATE test_schema.demo_template
FOR COPY
AS
FORMAT JSON 'auto'
NULL AS ''
MAXERROR 100;
```

Gunakan [TAMPILKAN TEMPLATE](r_SHOW_TEMPLATE.md) untuk mendapatkan definisi template:

```
SHOW TEMPLATE test_schema.demo_template;
CREATE OR REPLACE TEMPLATE dev.test_schema.demo_template FOR COPY AS FORMAT AS JSON 'auto' NULL '' MAXERROR 100;
```

 Kueri tampilan [SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md) sistem untuk mendapatkan detail lebih lanjut tentang template. 

```
SELECT * FROM SYS_REDSHIFT_TEMPLATE;

database_name | schema_name | template_name | template_type |        create_time         |     last_modified_time     | owner_id | last_modified_by | template_parameters 
---------------+-------------+---------------+---------------+----------------------------+----------------------------+----------+------------------+---------------------
 dev           | test_schema | demo_template |             1 | 2025-12-17 20:06:01.944171 | 2025-12-17 20:06:01.944171 |        1 |                1 | {
    "JSON": "auto",
    "MAXERROR": 100,
    "NULL": ""
}
```

# BUAT PENGGUNA
<a name="r_CREATE_USER"></a>

Menciptakan pengguna database baru. Pengguna database dapat mengambil data, menjalankan perintah, dan melakukan tindakan lain dalam database, tergantung pada hak istimewa dan peran mereka. Anda harus menjadi superuser database untuk menjalankan perintah ini.

## Hak istimewa yang diperlukan
<a name="r_CREATE_USER-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk CREATE USER:
+ Superuser
+ Pengguna dengan hak istimewa CREATE USER

## Sintaksis
<a name="r_CREATE_USER-synopsis"></a>

```
CREATE USER name [ WITH ]
PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ option [ ... ] ]

where option can be:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| IN GROUP groupname [, ... ]
| VALID UNTIL 'abstime'
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit
| EXTERNALID external_id
```

## Parameter
<a name="r_CREATE_USER-parameters"></a>

 *name*   
Nama pengguna yang akan dibuat. Nama pengguna tidak dapat `PUBLIC`. Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md).

DENGAN  
Kata kunci opsional. WITH diabaikan oleh Amazon Redshift

PASSWORD \$1'*password*' \$1 '*md5hash' \$1 'sha256hash**' \$1 NONAKTIFKAN*\$1  
Mengatur kata sandi pengguna.   
Secara default, pengguna dapat mengubah kata sandi mereka sendiri, kecuali kata sandi dinonaktifkan. Untuk menonaktifkan kata sandi pengguna, tentukan NONAKTIFKAN. Ketika kata sandi pengguna dinonaktifkan, kata sandi dihapus dari sistem dan pengguna dapat masuk hanya menggunakan kredensyal pengguna sementara AWS Identity and Access Management (IAM). Untuk informasi selengkapnya, lihat [Menggunakan Autentikasi IAM untuk Menghasilkan Kredensial Pengguna Database](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Hanya superuser yang dapat mengaktifkan atau menonaktifkan kata sandi. Anda tidak dapat menonaktifkan kata sandi pengguna super. Untuk mengaktifkan kata sandi, jalankan [ALTER USER](r_ALTER_USER.md) dan tentukan kata sandi.  
Anda dapat menentukan kata sandi dalam teks yang jelas, sebagai string MD5 hash, atau sebagai string SHA256 hash.   
 Saat meluncurkan klaster baru menggunakan Konsol Manajemen AWS, AWS CLI, atau Amazon Redshift API, Anda harus menyediakan kata sandi teks yang jelas untuk pengguna database awal. Anda dapat mengubah kata sandi nanti dengan menggunakan[ALTER USER](r_ALTER_USER.md). 
Untuk teks yang jelas, kata sandi harus memenuhi batasan berikut:  
+ Panjangnya harus 8 hingga 64 karakter.
+ Ini harus berisi setidaknya satu huruf besar, satu huruf kecil, dan satu angka.
+ Ini dapat menggunakan karakter ASCII apa pun dengan kode ASCII 33—126, kecuali '(tanda kutip tunggal), "(tanda kutip ganda),\$1,/, atau @.
Sebagai alternatif yang lebih aman untuk meneruskan parameter kata sandi CREATE USER sebagai teks yang jelas, Anda dapat menentukan MD5 hash string yang menyertakan kata sandi dan nama pengguna.   
Saat Anda menentukan string MD5 hash, perintah CREATE USER memeriksa string MD5 hash yang valid, tetapi tidak memvalidasi bagian kata sandi dari string. Dalam hal ini dimungkinkan untuk membuat kata sandi, seperti string kosong, yang tidak dapat Anda gunakan untuk masuk ke database.
Untuk menentukan kata MD5 sandi, ikuti langkah-langkah ini:   

1. Gabungkan kata sandi dan nama pengguna. 

   Misalnya, untuk kata sandi `ez` dan pengguna`user1`, string gabungan adalah. `ezuser1` 

1. Ubah string gabungan menjadi string hash 32 MD5 karakter. Anda dapat menggunakan MD5 utilitas apa pun untuk membuat string hash. Contoh berikut menggunakan Amazon Redshift [MD5 fungsi](r_MD5.md) dan operator penggabungan (\$1\$1) untuk mengembalikan string -hash 32-karakter. MD5 

   ```
   select md5('ez' || 'user1');
                           
   md5
   --------------------------------
   153c434b4b77c89e6b94f12c5393af5b
   ```

1. *Gabungkan '`md5`' di depan string MD5 hash dan berikan string gabungan sebagai argumen md5hash.*

   ```
   create user user1 password 'md5153c434b4b77c89e6b94f12c5393af5b';
   ```

1. Masuk ke database menggunakan kredensyal masuk. 

   Untuk contoh ini, masuk seperti `user1` kata sandi`ez`. 
Alternatif aman lainnya adalah menentukan hash SHA-256 dari string kata sandi; atau Anda dapat memberikan intisari SHA-256 yang valid dan garam 256-bit yang digunakan untuk membuat intisari.  
+ Digest — Output dari fungsi hashing.
+ Garam — Data yang dihasilkan secara acak yang dikombinasikan dengan kata sandi untuk membantu mengurangi pola dalam output fungsi hashing.

```
'sha256|Mypassword'
```

```
'sha256|digest|256-bit-salt'
```
Dalam contoh berikut, Amazon Redshift menghasilkan dan mengelola garam.   

```
CREATE USER admin PASSWORD 'sha256|Mypassword1';
```
Dalam contoh berikut, intisari SHA-256 yang valid dan garam 256-bit yang digunakan untuk membuat intisari disediakan.  
Untuk menentukan kata sandi dan hash dengan garam Anda sendiri, ikuti langkah-langkah ini:  

1. Buat garam 256-bit. Anda dapat memperoleh garam dengan menggunakan generator string heksadesimal apa pun untuk menghasilkan string sepanjang 64 karakter. Untuk contoh ini, garamnya`c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6`. 

1.  Gunakan fungsi FROM\$1HEX untuk mengonversi garam Anda menjadi biner. Ini karena SHA2 fungsinya membutuhkan representasi biner dari garam. Lihat pernyataan berikut. 

   ```
   SELECT FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6');
   ```

1.  Gunakan fungsi CONCAT untuk menambahkan garam Anda ke kata sandi Anda. Untuk contoh ini, kata sandinya adalah`Mypassword1`. Lihat pernyataan berikut. 

   ```
   SELECT CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6'));
   ```

1. Gunakan SHA2 fungsi untuk membuat intisari dari kata sandi dan kombinasi garam Anda. Lihat pernyataan berikut.

   ```
   SELECT SHA2(CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6')), 0);
   ```

1.  Menggunakan intisari dan garam dari langkah sebelumnya, buat pengguna. Lihat pernyataan berikut. 

   ```
   CREATE USER admin PASSWORD 'sha256|821708135fcc42eb3afda85286dee0ed15c2c461d000291609f77eb113073ec2|c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6';
   ```

1. Masuk ke database menggunakan kredensyal masuk.

    Untuk contoh ini, masuk seperti `admin` kata sandi`Mypassword1`.
Jika Anda menetapkan kata sandi dalam teks biasa tanpa menentukan fungsi hashing, maka MD5 intisari dibuat menggunakan nama pengguna sebagai garam. 

CREATEDB \$1 NOCREATEDB   
Opsi CREATEDB memungkinkan pengguna baru untuk membuat database. Defaultnya adalah NOCREATEDB.

CREATEUSER \$1 NOCREATEUSER   
Opsi CREATEUSER menciptakan superuser dengan semua hak istimewa database, termasuk CREATE USER. Defaultnya adalah NOCREATEUSER. Untuk informasi selengkapnya, lihat [Pengguna super](r_superusers.md).

AKSES SYSLOG \$1TERBATAS \$1 TIDAK DIBATASI\$1  <a name="create-user-syslog-access"></a>
Klausa yang menentukan tingkat akses yang dimiliki pengguna ke tabel dan tampilan sistem Amazon Redshift.   
Pengguna biasa yang memiliki izin SYSLOG ACCESS RESTRICTED hanya dapat melihat baris yang dihasilkan oleh pengguna tersebut dalam tabel dan tampilan sistem yang terlihat pengguna. Defaultnya dibatasi.   
Pengguna biasa yang memiliki izin SYSLOG ACCESS UNRESTRICTED dapat melihat semua baris dalam tabel dan tampilan sistem yang terlihat pengguna, termasuk baris yang dihasilkan oleh pengguna lain. UNRESTRICTED tidak memberikan akses pengguna reguler ke tabel yang terlihat oleh pengguna super. Hanya pengguna super yang dapat melihat tabel yang terlihat oleh pengguna super.   
Memberikan pengguna akses tak terbatas ke tabel sistem memberikan visibilitas pengguna ke data yang dihasilkan oleh pengguna lain. Misalnya, STL\$1QUERY dan STL\$1QUERYTEXT berisi teks lengkap pernyataan INSERT, UPDATE, dan DELETE, yang mungkin berisi data sensitif buatan pengguna. 
Semua baris di SVV\$1TRANSACTIONS dapat dilihat oleh semua pengguna.   
Untuk informasi selengkapnya, lihat [Visibilitas data dalam tabel dan tampilan sistem](cm_chap_system-tables.md#c_visibility-of-data).

DI GROUP nama *grup*   
Menentukan nama grup yang ada yang dimiliki pengguna. Beberapa nama grup dapat dicantumkan.

VALID SAMPAI *abstime*   
Opsi VALID UNTIL menetapkan waktu absolut setelah kata sandi pengguna tidak lagi valid. Secara default kata sandi tidak memiliki batas waktu.

BATAS KONEKSI \$1*limit* \$1 UNLIMITED\$1   
Jumlah maksimum koneksi database pengguna diizinkan untuk membuka secara bersamaan. Batas tidak diberlakukan untuk pengguna super. Gunakan kata kunci UNLIMITED untuk memungkinkan jumlah maksimum koneksi bersamaan. Batas jumlah koneksi untuk setiap database mungkin juga berlaku. Untuk informasi selengkapnya, lihat [BUAT BASIS DATA](r_CREATE_DATABASE.md). Defaultnya adalah UNLIMITED. Untuk melihat koneksi saat ini, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem.  
Jika batas koneksi pengguna dan database berlaku, slot koneksi yang tidak digunakan harus tersedia yang berada dalam kedua batas saat pengguna mencoba untuk terhubung.

*Batas TIMEOUT SESI*  
Waktu maksimum dalam hitungan detik sesi tetap tidak aktif atau menganggur. Kisarannya adalah 60 detik (satu menit) hingga 1.728.000 detik (20 hari). Jika tidak ada batas waktu sesi yang ditetapkan untuk pengguna, pengaturan cluster berlaku. Untuk informasi selengkapnya, lihat [Kuota dan batas di Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) Redshift di Panduan Manajemen *Pergeseran Merah Amazon*.  
Saat Anda mengatur batas waktu sesi, itu hanya diterapkan ke sesi baru.  
Untuk melihat informasi tentang sesi pengguna aktif, termasuk waktu mulai, nama pengguna, dan batas waktu sesi, kueri tampilan [STV\$1SESSION](r_STV_SESSIONS.md) sistem. Untuk melihat informasi tentang riwayat sesi pengguna, kueri tampilan. [STL\$1SESSION](r_STL_SESSIONS.md) Untuk mengambil informasi tentang pengguna database, termasuk nilai session-timeout, kueri tampilan. [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)

*EXTERNALID external\$1id*  
Pengidentifikasi untuk pengguna, yang terkait dengan penyedia identitas. Pengguna harus menonaktifkan kata sandi mereka. Untuk informasi selengkapnya, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

### Catatan penggunaan
<a name="create_user-usage-notes"></a>

Secara default, semua pengguna memiliki hak CREATE dan USE pada skema PUBLIC. Untuk melarang pengguna membuat objek dalam skema PUBLIK database, gunakan perintah REVOKE untuk menghapus hak istimewa itu.

Saat menggunakan autentikasi IAM untuk membuat kredensyal pengguna basis data, Anda mungkin ingin membuat superuser yang hanya dapat masuk menggunakan kredensyal sementara. Anda tidak dapat menonaktifkan kata sandi pengguna super, tetapi Anda dapat membuat kata sandi yang tidak dikenal menggunakan string MD5 hash yang dibuat secara acak.

```
create user iam_superuser password 'md5A1234567890123456780123456789012' createuser;
```

Kasus nama *pengguna* yang dilampirkan dalam tanda kutip ganda selalu dipertahankan terlepas dari pengaturan opsi `enable_case_sensitive_identifier` konfigurasi. Untuk informasi selengkapnya, lihat [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md).

## Contoh
<a name="r_CREATE_USER-examples"></a>

Perintah berikut membuat pengguna bernama dbuser, dengan kata sandi “ABCD1234", hak istimewa pembuatan database, dan batas koneksi 30.

```
create user dbuser with password 'abcD1234' createdb connection limit 30;
```

 Kueri tabel katalog PG\$1USER\$1INFO untuk melihat detail tentang pengguna database. 

```
select * from pg_user_info;
         
 usename   | usesysid | usecreatedb | usesuper | usecatupd | passwd   | valuntil | useconfig | useconnlimit
-----------+----------+-------------+----------+-----------+----------+----------+-----------+-------------
 rdsdb     |        1 | true        | true     | true      | ******** | infinity |           |
 adminuser |      100 | true        | true     | false     | ******** |          |           | UNLIMITED
 dbuser    |      102 | true        | false    | false     | ******** |          |           | 30
```

Dalam contoh berikut, kata sandi akun berlaku hingga 10 Juni 2017.

```
create user dbuser with password 'abcD1234' valid until '2017-06-10';
```

 Contoh berikut membuat pengguna dengan password case-sensitive yang berisi karakter khusus.

```
create user newman with password '@AbC4321!';
```

 Untuk menggunakan garis miring terbalik ('\$1') di MD5 kata sandi Anda, hindari garis miring terbalik dengan garis miring terbalik di string sumber Anda. Contoh berikut membuat pengguna bernama `slashpass` dengan garis miring terbalik tunggal ('`\`') sebagai kata sandi. 

```
select md5('\\'||'slashpass');
         
md5
--------------------------------
0c983d1a624280812631c5389e60d48c
```

Buat pengguna dengan kata sandi md5.

```
create user slashpass password 'md50c983d1a624280812631c5389e60d48c';
```

Contoh berikut membuat pengguna bernama `dbuser` dengan batas waktu siaga disetel ke 120 detik.

```
CREATE USER dbuser password 'abcD1234' SESSION TIMEOUT 120;
```

Contoh berikut membuat pengguna bernama `bob`. Namespace adalah. `myco_aad` Ini hanya sampel. Untuk menjalankan perintah dengan sukses, Anda harus memiliki penyedia identitas terdaftar. Untuk informasi selengkapnya, lihat [Federasi penyedia identitas asli (iDP) untuk Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

```
CREATE USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

# CREATE VIEW
<a name="r_CREATE_VIEW"></a>

Membuat tampilan dalam database. Tampilan tidak terwujud secara fisik; kueri yang mendefinisikan tampilan dijalankan setiap kali tampilan direferensikan dalam kueri. Untuk membuat tampilan dengan tabel eksternal, sertakan klausa WITH NO SCHEMA BINDING.

Untuk membuat tampilan standar, Anda memerlukan akses ke tabel yang mendasarinya, atau ke tampilan yang mendasarinya. Untuk menanyakan tampilan standar, Anda memerlukan izin pilih untuk tampilan itu sendiri, tetapi Anda tidak memerlukan izin pilih untuk tabel yang mendasarinya. Jika Anda membuat tampilan yang mereferensikan tabel atau tampilan dalam skema lain, atau jika Anda membuat tampilan yang mereferensikan tampilan terwujud, Anda memerlukan izin penggunaan. Untuk menanyakan tampilan pengikatan terlambat, Anda memerlukan izin pilih untuk tampilan pengikatan akhir itu sendiri. Anda juga harus memastikan pemilik tampilan pengikatan akhir memiliki izin pilih untuk objek yang direferensikan (tabel, tampilan, atau fungsi yang ditentukan pengguna). Untuk informasi selengkapnya tentang tampilan yang mengikat akhir, lihat. [Catatan penggunaan](#r_CREATE_VIEW_usage_notes)

## Izin yang diperlukan
<a name="r_CREATE_VIEW-privileges"></a>

Untuk menggunakan CREATE VIEW, salah satu izin berikut diperlukan.
+ Untuk membuat tampilan menggunakan CREATE [OR REPLACE] VIEW:
  + Superuser
  + Pengguna dengan izin CREATE [REPLACE] VIEW
+ Untuk mengganti tampilan yang ada menggunakan CREATE OR REPLACE VIEW:
  + Superuser
  + Pengguna dengan izin CREATE [OR REPLACE] VIEW
  + Lihat pemilik

Jika pengguna ingin mengakses tampilan yang menggabungkan fungsi yang ditentukan pengguna, pengguna harus memiliki izin EXECUTE pada fungsi tersebut.

## Sintaksis
<a name="r_CREATE_VIEW-synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query
[ WITH NO SCHEMA BINDING ]
```

## Parameter
<a name="r_CREATE_VIEW-parameters"></a>

ATAU GANTI   
Jika tampilan dengan nama yang sama sudah ada, tampilan diganti. Anda hanya dapat mengganti tampilan dengan kueri baru yang menghasilkan kumpulan kolom yang identik, menggunakan nama kolom dan tipe data yang sama. BUAT ATAU GANTI TAMPILAN mengunci tampilan untuk membaca dan menulis sampai operasi selesai.  
Ketika tampilan diganti, properti lainnya seperti kepemilikan dan hak istimewa yang diberikan dipertahankan. 

 *name*   
Nama tampilan. Jika nama skema diberikan (seperti`myschema.myview`) tampilan dibuat menggunakan skema yang ditentukan. Jika tidak, tampilan dibuat dalam skema saat ini. Nama tampilan harus berbeda dari nama tampilan atau tabel lain dalam skema yang sama.   
Jika Anda menentukan nama tampilan yang dimulai dengan '\$1 ', tampilan dibuat sebagai tampilan sementara yang hanya terlihat di sesi saat ini.  
Untuk informasi selengkapnya tentang nama yang valid, lihat[Nama dan pengidentifikasi](r_names.md). Anda tidak dapat membuat tabel atau tampilan di database sistem template0, template1, padb\$1harvest, atau sys:internal.

 *column\$1name*   
Daftar opsional nama yang akan digunakan untuk kolom dalam tampilan. Jika tidak ada nama kolom yang diberikan, nama kolom berasal dari kueri. Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tampilan adalah 1.600.

 *query*   
Sebuah query (dalam bentuk pernyataan SELECT) yang mengevaluasi ke tabel. Tabel ini mendefinisikan kolom dan baris dalam tampilan. 

 TANPA PENGIKATAN SKEMA   
Klausa yang menentukan bahwa tampilan tidak terikat pada objek database yang mendasarinya, seperti tabel dan fungsi yang ditentukan pengguna. Akibatnya, tidak ada ketergantungan antara tampilan dan objek yang direferensikannya. Anda dapat membuat tampilan bahkan jika objek yang direferensikan tidak ada. Karena tidak ada ketergantungan, Anda dapat menjatuhkan atau mengubah objek yang direferensikan tanpa mempengaruhi tampilan. Amazon Redshift tidak memeriksa dependensi sampai tampilan ditanyakan. Ekspresi tabel umum rekursif (RCTe) tidak didukung dengan tampilan pengikatan akhir. Untuk melihat detail tentang tampilan pengikatan akhir, jalankan fungsi. [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md)  
Bila Anda menyertakan klausa WITH NO SCHEMA BINDING, tabel dan tampilan yang direferensikan dalam pernyataan SELECT harus memenuhi syarat dengan nama skema. Skema harus ada ketika tampilan dibuat, bahkan jika tabel referensi tidak ada. Misalnya, pernyataan berikut mengembalikan kesalahan.   

```
create view myevent as select eventname from event
with no schema binding;
```
Pernyataan berikut berjalan dengan sukses.  

```
create view myevent as select eventname from public.event
with no schema binding;
```

**catatan**  
Anda tidak dapat memperbarui, menyisipkan, atau menghapus dari tampilan. 

## Catatan penggunaan
<a name="r_CREATE_VIEW_usage_notes"></a>



### Tampilan pengikatan akhir
<a name="r_CREATE_VIEW_late-binding-views"></a>

Tampilan pengikatan akhir tidak memeriksa objek basis data yang mendasarinya, seperti tabel dan tampilan lainnya, hingga tampilan ditanyakan. Akibatnya, Anda dapat mengubah atau menjatuhkan objek yang mendasarinya tanpa menjatuhkan dan membuat ulang tampilan. Jika Anda menjatuhkan objek yang mendasarinya, kueri ke tampilan pengikatan akhir akan gagal. Jika kueri ke kolom referensi tampilan pengikatan akhir di objek dasar yang tidak ada, kueri akan gagal. 

 Jika Anda menjatuhkan dan kemudian membuat ulang tabel atau tampilan dasar tampilan yang mengikat akhir, objek baru dibuat dengan izin akses default. Anda mungkin perlu memberikan izin ke objek yang mendasarinya bagi pengguna yang akan menanyakan tampilan. 

Untuk membuat tampilan pengikatan akhir, sertakan klausa WITH NO SCHEMA BINDING. Contoh berikut membuat tampilan tanpa skema mengikat. 

```
create view event_vw as select * from public.event
with no schema binding;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | eventname     | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

Contoh berikut menunjukkan bahwa Anda dapat mengubah tabel yang mendasari tanpa membuat tampilan. 

```
alter table event rename column eventname to title;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | title         | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

Anda dapat mereferensikan tabel eksternal Amazon Redshift Spectrum hanya dalam tampilan pengikatan akhir. Salah satu aplikasi tampilan pengikatan akhir adalah untuk menanyakan tabel Amazon Redshift dan Redshift Spectrum. Misalnya, Anda dapat menggunakan [MEMBONGKAR](r_UNLOAD.md) perintah untuk mengarsipkan data lama ke Amazon S3. Kemudian, buat tabel eksternal Redshift Spectrum yang mereferensikan data di Amazon S3 dan buat tampilan yang menanyakan kedua tabel. Contoh berikut menggunakan klausa UNION ALL untuk bergabung dengan tabel Amazon `SALES` Redshift dan tabel Redshift Spectrum. `SPECTRUM.SALES`

```
create view sales_vw as
select * from public.sales
union all
select * from spectrum.sales
with no schema binding;
```

Untuk informasi selengkapnya tentang membuat tabel eksternal Redshift Spectrum, termasuk `SPECTRUM.SALES` tabel, lihat. [Memulai dengan Amazon Redshift Spectrum](c-getting-started-using-spectrum.md)

**penting**  
Saat Anda membuat tampilan standar dari tampilan pengikatan akhir, definisi tampilan standar berisi definisi tampilan pengikatan akhir pada saat tampilan standar dibuat, termasuk pemilik tampilan pengikatan akhir. Jika Anda membuat perubahan pada tampilan pengikatan akhir yang mendasarinya, perubahan tersebut tidak akan digunakan dalam tampilan standar sampai Anda membuat ulang tampilan standar. Oleh karena itu, ketika tampilan standar ditanyakan, tampilan akan selalu menggunakan definisi tampilan pengikatan akhir dan pemilik tampilan pengikatan akhir untuk pemeriksaan izin pada saat pembuatan tampilan standar tersebut.

Untuk memperbarui tampilan standar untuk merujuk ke definisi terbaru dari tampilan pengikatan akhir, jalankan CREATE OR REPLACE VIEW dengan definisi tampilan awal yang Anda gunakan untuk membuat tampilan standar.

Lihat contoh berikut untuk membuat tampilan standar dari tampilan pengikatan akhir.

```
create view sales_vw_lbv as 
select * from public.sales 
with no schema binding;

show view sales_vw_lbv;
                            Show View DDL statement
--------------------------------------------------------------------------------
 create view sales_vw_lbv as select * from public.sales with no schema binding;
(1 row)

create view sales_vw as 
select * from sales_vw_lbv;

show view sales_vw;
                                               Show View DDL statement
---------------------------------------------------------------------------------------------------------------------
 SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv;
(1 row)
```

Perhatikan bahwa tampilan pengikatan akhir seperti yang ditunjukkan dalam pernyataan DDL untuk tampilan standar ditentukan saat tampilan standar dibuat, dan tidak akan diperbarui dengan perubahan apa pun yang Anda buat pada tampilan pengikatan akhir sesudahnya.

## Contoh
<a name="r_CREATE_VIEW-examples"></a>

Contoh perintah menggunakan satu set sampel objek dan data yang disebut database *TICKIT*. Untuk informasi selengkapnya, lihat [Contoh database](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

Perintah berikut menciptakan tampilan yang disebut *myevent* dari tabel bernama EVENT. 

```
create view myevent as select eventname from event
where eventname = 'LeAnn Rimes';
```

Perintah berikut menciptakan tampilan yang disebut *myuser* dari tabel yang disebut USERS. 

```
create view myuser as select lastname from users;
```

Perintah berikut membuat atau menggantikan tampilan yang disebut *myuser* dari tabel yang disebut USERS. 

```
create or replace view myuser as select lastname from users;
```

Contoh berikut membuat tampilan tanpa skema mengikat. 

```
create view myevent as select eventname from public.event
with no schema binding;
```

# DEALOKASI
<a name="r_DEALLOCATE"></a>

Menalokasikan pernyataan yang disiapkan. 

## Sintaksis
<a name="r_DEALLOCATE-synopsis"></a>

```
DEALLOCATE [PREPARE] plan_name
```

## Parameter
<a name="r_DEALLOCATE-parameters"></a>

MEMPERSIAPKAN   
Kata kunci ini opsional dan diabaikan. 

 *plan\$1nama*   
Nama pernyataan yang disiapkan untuk dialokasikan. 

## Catatan Penggunaan
<a name="r_DEALLOCATE_usage_notes"></a>

DEALLOCATE digunakan untuk mengalokasikan pernyataan SQL yang disiapkan sebelumnya. Jika Anda tidak secara eksplisit mengalokasikan pernyataan yang disiapkan, itu dialokasikan ketika sesi saat ini berakhir. Untuk informasi lebih lanjut tentang pernyataan yang disiapkan, lihat[MEMPERSIAPKAN](r_PREPARE.md).

## Lihat Juga
<a name="r_DEALLOCATE-see-also"></a>

 [EXECUTE](r_EXECUTE.md), [MEMPERSIAPKAN](r_PREPARE.md) 

# MENYATAKAN
<a name="declare"></a>

Mendefinisikan kursor baru. Gunakan kursor untuk mengambil beberapa baris sekaligus dari kumpulan hasil kueri yang lebih besar. 

Ketika baris pertama kursor diambil, seluruh set hasil diwujudkan pada node pemimpin, dalam memori atau pada disk, jika diperlukan. Karena potensi dampak kinerja negatif dari penggunaan kursor dengan set hasil yang besar, sebaiknya gunakan pendekatan alternatif bila memungkinkan. Untuk informasi selengkapnya, lihat [Pertimbangan kinerja saat menggunakan kursor](#declare-performance).

Anda harus mendeklarasikan kursor dalam blok transaksi. Hanya satu kursor pada satu waktu yang dapat dibuka per sesi. 

Untuk informasi lebih lanjut, lihat[AMBIL](fetch.md),[TUTUP](close.md).

## Sintaksis
<a name="declare-synopsis"></a>

```
DECLARE cursor_name CURSOR FOR query
```

## Parameter
<a name="declare-parameters"></a>

*nama kursor*   
Nama kursor baru. 

 *query*   
Pernyataan SELECT yang mengisi kursor.

## DEKLARASIKAN catatan penggunaan KURSOR
<a name="declare-usage"></a>

Jika aplikasi klien Anda menggunakan koneksi ODBC dan kueri Anda membuat kumpulan hasil yang terlalu besar untuk dimasukkan ke dalam memori, Anda dapat mengalirkan hasil yang disetel ke aplikasi klien Anda dengan menggunakan kursor. Saat Anda menggunakan kursor, seluruh kumpulan hasil diwujudkan pada node pemimpin, dan kemudian klien Anda dapat mengambil hasilnya secara bertahap. 

**catatan**  
Untuk mengaktifkan kursor di ODBC untuk Microsoft Windows, aktifkan opsi **Use Declare/Fetch di ODBC DSN yang Anda gunakan** untuk Amazon Redshift. Sebaiknya atur ukuran cache ODBC, menggunakan bidang **Ukuran Cache** di dialog opsi DSN ODBC, menjadi 4.000 atau lebih besar pada cluster multi-node untuk meminimalkan perjalanan pulang pergi. Pada cluster simpul tunggal, atur Ukuran Cache menjadi 1.000.

Karena potensi dampak kinerja negatif dari penggunaan kursor, sebaiknya gunakan pendekatan alternatif bila memungkinkan. Untuk informasi selengkapnya, lihat [Pertimbangan kinerja saat menggunakan kursor](#declare-performance).

Kursor Amazon Redshift didukung dengan batasan berikut:
+ Hanya satu kursor pada satu waktu yang dapat dibuka per sesi. 
+ Kursor harus digunakan dalam transaksi (BEGIN... END). 
+ Ukuran set hasil kumulatif maksimum untuk semua kursor dibatasi berdasarkan jenis node cluster. Jika Anda memerlukan set hasil yang lebih besar, Anda dapat mengubah ukuran ke konfigurasi node XL atau 8XL.

  Untuk informasi selengkapnya, lihat [Kendala kursor](#declare-constraints). 

## Kendala kursor
<a name="declare-constraints"></a>

Ketika baris pertama kursor diambil, seluruh set hasil diwujudkan pada node pemimpin. Jika set hasil tidak sesuai dengan memori, itu ditulis ke disk sesuai kebutuhan. Untuk melindungi integritas node pemimpin, Amazon Redshift memberlakukan batasan pada ukuran semua set hasil kursor, berdasarkan tipe node cluster.

Tabel berikut menunjukkan total ukuran set hasil maksimum untuk setiap jenis node cluster. Ukuran set hasil maksimum dalam megabyte.


| Tipe simpul | Hasil maksimal set per cluster (MB) | 
| --- | --- | 
|   DC2 Largebeberapa node   | 192.000 | 
|   DC2 Largesimpul tunggal   | 8.000 | 
|   DC2 8XL beberapa node   | 3.200.000 | 
|   RA3 16XL beberapa node   | 14.400.000 | 
|   RA3 4XL beberapa node   | 3.200.000 | 
|   RA3 XLPLUS beberapa node   | 1.000.000 | 
|   RA3 XLPLUS simpul tunggal   | 64.000 | 
|   RA3 Banyak node BESAR   | 240.000 | 
|   RA3 Node tunggal BESAR   | 8.000 | 
| Amazon Redshift Tanpa Server | 150.000 | 

Untuk melihat konfigurasi kursor aktif untuk sebuah cluster, kueri tabel [STV\$1CURSOR\$1CONFIGURATION](r_STV_CURSOR_CONFIGURATION.md) sistem sebagai superuser. Untuk melihat status kursor aktif, kueri tabel [STV\$1ACTIVE\$1KURSOR](r_STV_ACTIVE_CURSORS.md) sistem. Hanya baris untuk kursor pengguna sendiri yang terlihat oleh pengguna, tetapi superuser dapat melihat semua kursor.

## Pertimbangan kinerja saat menggunakan kursor
<a name="declare-performance"></a>

Karena kursor mewujudkan seluruh hasil yang ditetapkan pada node pemimpin sebelum mulai mengembalikan hasil ke klien, menggunakan kursor dengan set hasil yang sangat besar dapat berdampak negatif pada kinerja. Kami sangat menyarankan agar tidak menggunakan kursor dengan set hasil yang sangat besar. Dalam beberapa kasus, seperti ketika aplikasi Anda menggunakan koneksi ODBC, kursor mungkin satu-satunya solusi yang layak. Jika memungkinkan, kami sarankan menggunakan alternatif ini:
+ Gunakan [MEMBONGKAR](r_UNLOAD.md) untuk mengekspor meja besar. Saat Anda menggunakan UNLOAD, node komputasi bekerja secara paralel untuk mentransfer data langsung ke file data di Amazon Simple Storage Service. Untuk informasi selengkapnya, lihat [Membongkar data di Amazon Redshift](c_unloading_data.md). 
+ Tetapkan parameter ukuran pengambilan JDBC di aplikasi klien Anda. Jika Anda menggunakan koneksi JDBC dan Anda mengalami out-of-memory kesalahan sisi klien, Anda dapat mengaktifkan klien Anda untuk mengambil set hasil dalam batch yang lebih kecil dengan mengatur parameter ukuran pengambilan JDBC. Untuk informasi selengkapnya, lihat [Mengatur parameter ukuran pengambilan JDBC](set-the-JDBC-fetch-size-parameter.md). 

## DEKLARASIKAN contoh KURSOR
<a name="declare-example"></a>

Contoh berikut mendeklarasikan kursor bernama LOLLAPALOOZA untuk memilih informasi penjualan untuk acara Lollapalooza, dan kemudian mengambil baris dari set hasil menggunakan kursor:

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

Contoh berikut mengulang refkursor dengan semua hasil dari tabel:

```
CREATE TABLE tbl_1 (a int, b int);
INSERT INTO tbl_1 values (1, 2),(3, 4);

CREATE OR REPLACE PROCEDURE sp_cursor_loop() AS $$
DECLARE
    target record;
    curs1 cursor for select * from tbl_1;
BEGIN
    OPEN curs1;
    LOOP
        fetch curs1 into target;
        exit when not found;
        RAISE INFO 'a %', target.a;
    END LOOP;
    CLOSE curs1;
END;
$$ LANGUAGE plpgsql;

CALL sp_cursor_loop();
         
SELECT message 
   from svl_stored_proc_messages 
   where querytxt like 'CALL sp_cursor_loop()%';
         
  message
----------
      a 1
      a 3
```

# DELETE
<a name="r_DELETE"></a>

Menghapus baris dari tabel.

**catatan**  
Ukuran maksimum untuk satu pernyataan SQL adalah 16 MB.

## Sintaksis
<a name="r_DELETE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

## Parameter
<a name="r_DELETE-parameters"></a>

DENGAN klausa  
Klausa opsional yang menentukan satu atau lebih. *common-table-expressions* Lihat [DENGAN klausa](r_WITH_clause.md). 

FROM  
Kata kunci FROM adalah opsional, kecuali ketika klausa USING ditentukan. Pernyataan `delete from event;` dan `delete event;` operasi setara yang menghapus semua baris dari tabel EVENT.  
Untuk menghapus semua baris dari tabel, [MEMOTONG](r_TRUNCATE.md) tabel. TRUNCATE jauh lebih efisien daripada DELETE dan tidak memerlukan VACUUM dan ANALYSIS. Namun, ketahuilah bahwa TRUNCATE melakukan transaksi di mana ia dijalankan.

 *table\$1name*   
Meja sementara atau persisten. Hanya pemilik tabel atau pengguna dengan hak istimewa DELETE pada tabel yang dapat menghapus baris dari tabel.  
Pertimbangkan untuk menggunakan perintah TRUNCATE untuk operasi penghapusan cepat tanpa kualifikasi pada tabel besar; lihat. [MEMOTONG](r_TRUNCATE.md)  
Setelah menghapus sejumlah besar baris dari tabel:  
+ Vakum meja untuk merebut kembali ruang penyimpanan dan mengurutkan ulang baris.
+ Analisis tabel untuk memperbarui statistik untuk perencana kueri.

 *materialized\$1view\$1name*   
Pandangan yang terwujud. Pernyataan DELETE bekerja pada tampilan terwujud yang digunakan untuk[Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md). Hanya pemilik tampilan terwujud atau pengguna dengan hak istimewa DELETE pada tampilan terwujud yang dapat menghapus baris darinya.  
Anda tidak dapat menjalankan DELETE pada tampilan terwujud untuk streaming konsumsi dengan kebijakan keamanan tingkat baris (RLS) yang tidak memiliki izin IGNORE RLS yang diberikan kepada pengguna. Ada pengecualian untuk ini: Jika pengguna yang melakukan DELETE memiliki IGNORE RLS diberikan, itu berjalan dengan sukses. Untuk informasi selengkapnya, lihat [Kepemilikan dan pengelolaan kebijakan RLS](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html).

MENGGUNAKAN *table\$1name*,...  
Kata kunci USING digunakan untuk memperkenalkan daftar tabel ketika tabel tambahan direferensikan dalam kondisi klausa WHERE. Misalnya, pernyataan berikut menghapus semua baris dari tabel EVENT yang memenuhi kondisi gabungan di atas tabel EVENT dan PENJUALAN. Tabel PENJUALAN harus secara eksplisit disebutkan dalam daftar FROM:  

```
delete from event using sales where event.eventid=sales.eventid;
```
Jika Anda mengulangi nama tabel target dalam klausa USING, operasi DELETE menjalankan self-join. Anda dapat menggunakan subquery di klausa WHERE alih-alih sintaks USING sebagai cara alternatif untuk menulis kueri yang sama.

*Kondisi* DIMANA   
Klausa opsional yang membatasi penghapusan baris ke baris yang cocok dengan kondisi. Misalnya, kondisi dapat berupa pembatasan pada kolom, kondisi gabungan, atau kondisi berdasarkan hasil kueri. Kueri dapat mereferensikan tabel selain target perintah DELETE. Contoh:  

```
delete from t1
where col1 in(select col2 from t2);
```
Jika tidak ada kondisi yang ditentukan, semua baris dalam tabel akan dihapus.

## Catatan penggunaan
<a name="r_DELETE-usage"></a>
+ Operasi DELETE menyimpan kunci eksklusif saat dijalankan di Amazon Redshift streaming tampilan terwujud yang terhubung ke salah satu dari berikut ini:
  +  Aliran data Amazon Kinesis 
  +  Topik Amazon Managed Streaming for Apache Kafka 
  +  Aliran eksternal yang didukung, seperti topik Confluent Cloud Kafka 

  Untuk informasi selengkapnya, lihat [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md).

## Contoh
<a name="r_DELETE-examples"></a>

Hapus semua baris dari tabel CATEGORY:

```
delete from category;
```

Hapus baris dengan nilai CATID antara 0 dan 9 dari tabel KATEGORI:

```
delete from category
where catid between 0 and 9;
```

Hapus baris dari tabel LISTING yang nilai SELLERIDnya tidak ada di tabel PENJUALAN:

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

Dua kueri berikut menghapus satu baris dari tabel CATEGORY, berdasarkan gabungan ke tabel EVENT dan pembatasan tambahan pada kolom CATID:

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

Kueri berikut menghapus semua baris dari tampilan `mv_cities` terwujud. Nama tampilan terwujud dalam contoh ini adalah contoh:

```
delete from mv_cities;
```

# DESC DATASHARE
<a name="r_DESC_DATASHARE"></a>

Menampilkan daftar objek database dalam datashare yang ditambahkan ke dalamnya menggunakan ALTER DATASHARE. Amazon Redshift menampilkan nama, database, skema, dan jenis tabel, tampilan, dan fungsi. 

Informasi tambahan tentang objek datashare dapat ditemukan dengan menggunakan tampilan sistem. [Untuk informasi selengkapnya, lihat [SVV\$1DATASHARE\$1OBJECTS dan SVV\$1DATASHARES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARE_OBJECTS.html).](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARES.html)

## Sintaksis
<a name="r_DESC_DATASHARE-synopsis"></a>

```
DESC DATASHARE datashare_name [ OF [ ACCOUNT account_id ] NAMESPACE namespace_guid ]
```

## Parameter
<a name="r_DESC_DATASHARE-parameters"></a>

 *datashare\$1name*   
Nama datashare. 

*NAMESPACE namespace\$1guid*   
Nilai yang menentukan namespace yang digunakan datashare. Saat Anda menjalankan DESC DATAHSARE sebagai administrator cluster konsumen, tentukan parameter NAMESPACE untuk melihat datashares masuk.

ACCOUNT *account\$1id*  
Nilai yang menentukan akun yang dimiliki datashare.

## Catatan Penggunaan
<a name="r_DESC_DATASHARE-usage"></a>

Sebagai administrator akun konsumen, saat Anda menjalankan DESC DATASHARE untuk melihat datashares masuk dalam akun, tentukan opsi NAMESPACE. AWS Saat Anda menjalankan DESC DATASHARE untuk melihat datashares masuk di seluruh AWS akun, tentukan opsi ACCOUNT dan NAMESPACE.

## Contoh
<a name="r_DESC_DATASHARE-examples"></a>

Contoh berikut menampilkan informasi untuk datashares keluar pada cluster produsen.

```
DESC DATASHARE salesshare;

producer_account |          producer_namespace           | share_type  | share_name   | object_type |        object_name           |  include_new
-----------------+---------------------------------------+-------------+--------------+-------------+------------------------------+--------------
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | TABLE       | public.tickit_sales_redshift |
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | SCHEMA      | public                       |   t
```

Contoh berikut menampilkan informasi untuk datashares masuk pada cluster konsumen.

```
DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

 producer_account |          producer_namespace          | share_type | share_name | object_type |         object_name          |  include_new
------------------+--------------------------------------+------------+------------+-------------+------------------------------+--------------
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift |
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                       |
(2 rows)
```

# PENYEDIA IDENTITAS DESC
<a name="r_DESC_IDENTITY_PROVIDER"></a>

Menampilkan informasi tentang penyedia identitas. Hanya superuser yang bisa menggambarkan penyedia identitas.

## Sintaksis
<a name="r_DESC_IDENTITY_PROVIDER-synopsis"></a>

```
DESC IDENTITY PROVIDER identity_provider_name
```

## Parameter
<a name="r_DESC_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nama penyedia identitas.

## Contoh
<a name="r_DESC_IDENTITY_PROVIDER-examples"></a>

Contoh berikut menampilkan informasi tentang penyedia identitas.

```
DESC IDENTITY PROVIDER azure_idp;
```

Keluaran sampel.

```
  uid   |   name    | type  |              instanceid              | namespc |                                                                                                                                                 params                                                                                                                                                  | enabled
--------+-----------+-------+--------------------------------------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------
 126692 | azure_idp | azure | e40d4bb2-7670-44ae-bfb8-5db013221d73 | aad     | {"issuer":"https://login.microsoftonline.com/e40d4bb2-7670-44ae-bfb8-5db013221d73/v2.0", "client_id":"871c010f-5e61-4fb1-83ac-98610a7e9110", "client_secret":'', "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift", "https://analysis.windows.net/powerbi/connector/AWSRDS"]} | t
(1 row)
```

# KEBIJAKAN PELEPASAN MASKING
<a name="r_DETACH_MASKING_POLICY"></a>

Melepaskan kebijakan masking data dinamis yang sudah terpasang dari kolom. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md).

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat melepaskan kebijakan masking.

## Sintaksis
<a name="r_DETACH_MASKING_POLICY-synopsis"></a>

```
DETACH MASKING POLICY
{
  policy_name ON table_name
  | database_name.policy_name ON database_name.schema_name.table_name
}
( output_column_names )
FROM { user_name | ROLE role_name | PUBLIC };
```

## Parameter
<a name="r_DETACH_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan masking untuk melepaskan.

database\$1name  
Nama database tempat kebijakan dan relasi dibuat. Kebijakan dan relasi harus berada pada database yang sama. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

schema\$1name  
Nama skema yang dimiliki relasi.

 *table\$1name*   
Nama tabel untuk melepaskan kebijakan masking dari.

*output\$1column\$1names*   
Nama-nama kolom tempat kebijakan masking dilampirkan.

*user\$1name*   
Nama pengguna yang dilampirkan kebijakan masking.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu pernyataan DETACH MASKING POLICY.

*role\$1name*   
Nama peran yang dilampirkan kebijakan masking.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu pernyataan DETACH MASKING POLICY.

*PUBLIK*   
Menunjukkan bahwa kebijakan dilampirkan ke semua pengguna dalam tabel.  
Anda hanya dapat menyetel salah satu user\$1name, role\$1name, dan PUBLIC dalam satu pernyataan DETACH MASKING POLICY.

Untuk penggunaan KEBIJAKAN PELEPASAN MASKING di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift.

# KEBIJAKAN DETACH RLS
<a name="r_DETACH_RLS_POLICY"></a>

Lepaskan kebijakan keamanan tingkat baris pada tabel dari satu atau beberapa pengguna atau peran.

Pengguna super dan pengguna atau peran yang memiliki `sys:secadmin` peran dapat melepaskan kebijakan.

## Sintaksis
<a name="r_DETACH_RLS_POLICY-synopsis"></a>

```
DETACH RLS POLICY
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
FROM { user_name | ROLE role_name | PUBLIC } [, ...];
```

## Parameter
<a name="r_DETACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan .

database\$1name  
Nama database tempat kebijakan dan relasi dibuat. Kebijakan dan relasi harus berada pada database yang sama. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

schema\$1name  
Nama skema yang dimiliki relasi.

table\$1name  
Hubungan yang dilampirkan oleh kebijakan keamanan tingkat baris.

DARI \$1*user\$1name* \$1 *ROLE role\$1name* \$1 PUBLIK\$1 [,...]  
Menentukan apakah kebijakan terlepas dari satu atau beberapa pengguna atau peran tertentu. 

Untuk penggunaan KEBIJAKAN DETACH RLS di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift.

## Catatan penggunaan
<a name="r_DETACH_RLS_POLICY-usage"></a>

Saat bekerja dengan pernyataan KEBIJAKAN RLS DETACH, amati hal berikut:
+ Anda dapat melepaskan kebijakan dari relasi, pengguna, peran, atau publik.

## Contoh
<a name="r_DETACH_RLS_POLICY-examples"></a>

Contoh berikut melepaskan kebijakan di atas meja dari peran.

```
DETACH RLS POLICY policy_concerts ON tickit_category_redshift FROM ROLE analyst, ROLE dbadmin;
```

# DROP DATABASE
<a name="r_DROP_DATABASE"></a>

Mengedrop basis data. 

Anda tidak dapat menjalankan DROP DATABASE dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

## Sintaksis
<a name="r_DROP_DATABASE-synopsis"></a>

```
DROP DATABASE database_name [ FORCE ]
```

## Parameter
<a name="r_DROP_DATABASE-parameters"></a>

 *database\$1name*   
Nama database yang akan dijatuhkan. Anda tidak dapat menghapus database dev, padb\$1harvest, template0, template1, atau sys:internal, dan Anda tidak dapat menjatuhkan database saat ini.  
Untuk menjatuhkan database eksternal, jatuhkan skema eksternal. Untuk informasi selengkapnya, lihat [DROP SCHEMA](r_DROP_SCHEMA.md).

 KEKUATAN   
Saat Anda menentukan FORCE, DROP DATABASE mencoba untuk mengakhiri koneksi aktif sebelum menjatuhkan database. Jika semua koneksi aktif berhasil berakhir dalam batas waktu, penurunan berlanjut. Jika tidak semua koneksi berakhir, perintah akan menimbulkan kesalahan.

## Catatan penggunaan DATABASE DROP
<a name="r_DROP_DATABASE_usage"></a>

Saat menggunakan pernyataan DROP DATABASE, pertimbangkan hal berikut:
+ Secara umum, kami menyarankan agar Anda tidak menjatuhkan database yang berisi AWS Data Exchange datashare menggunakan pernyataan DROP DATABASE. Jika Anda melakukannya, Akun AWS yang memiliki akses ke datashare kehilangan akses. Melakukan jenis perubahan ini dapat melanggar persyaratan produk data di. AWS Data Exchange

  Contoh berikut menunjukkan kesalahan ketika database yang berisi AWS Data Exchange datashare dijatuhkan.

  ```
  DROP DATABASE test_db;
  ERROR:   Drop of database test_db that contains ADX-managed datashare(s) requires session variable datashare_break_glass_session_var to be set to value 'ce8d280c10ad41'
  ```

  Untuk memungkinkan menjatuhkan database, atur variabel berikut dan jalankan pernyataan DROP DATABASE lagi.

  ```
  SET datashare_break_glass_session_var to 'ce8d280c10ad41';
  ```

  ```
  DROP DATABASE test_db;
  ```

  Dalam hal ini, Amazon Redshift menghasilkan nilai satu kali acak untuk mengatur variabel sesi untuk memungkinkan DROP DATABASE untuk database yang berisi datashare. AWS Data Exchange 

## Contoh
<a name="r_DROP_DATABASE-examples"></a>

Contoh berikut menjatuhkan database bernama TICKIT\$1TEST: 

```
drop database tickit_test;
```

# JATUHKAN DATASHARE
<a name="r_DROP_DATASHARE"></a>

Menjatuhkan datashare. Perintah ini tidak dapat dibalik.

Hanya superuser atau pemilik datashare yang dapat menjatuhkan datashare.

## Hak istimewa yang diperlukan
<a name="r_DROP_DATASHARE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROP DATASHARE:
+ Superuser
+ Pengguna dengan hak istimewa DROP DATASHARE
+ Pemilik Datashare

## Sintaksis
<a name="r_DROP_DATASHARE-synopsis"></a>

```
DROP DATASHARE datashare_name;
```

## Parameter
<a name="r_DROP_DATASHARE-parameters"></a>

 *datashare\$1name*   
Nama datashare yang akan dihapus.

## Catatan penggunaan DROP DATASHARE
<a name="r_DROP_DATASHARE_usage"></a>

Saat menggunakan pernyataan DROP DATASHARE, pertimbangkan hal berikut:
+ Secara umum, kami menyarankan agar Anda tidak menjatuhkan AWS Data Exchange datashare menggunakan pernyataan DROP DATASHARE. Jika Anda melakukannya, Akun AWS yang memiliki akses ke datashare kehilangan akses. Melakukan jenis perubahan ini dapat melanggar persyaratan produk data di. AWS Data Exchange

  Contoh berikut menunjukkan kesalahan ketika AWS Data Exchange datashare dijatuhkan.

  ```
  DROP DATASHARE salesshare;
  ERROR:  Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
  ```

  Untuk memungkinkan menjatuhkan AWS Data Exchange datashare, atur variabel berikut dan jalankan pernyataan DROP DATASHARE lagi.

  ```
  SET datashare_break_glass_session_var to '620c871f890c49';
  ```

  ```
  DROP DATASHARE salesshare;
  ```

  Dalam hal ini, Amazon Redshift menghasilkan nilai satu kali acak untuk mengatur variabel sesi untuk memungkinkan DROP DATASHARE untuk datashare. AWS Data Exchange 

## Contoh
<a name="r_DROP_DATASHARE-examples"></a>

Contoh berikut menjatuhkan datashare bernama. `salesshare`

```
DROP DATASHARE salesshare;
```

# JATUHKAN TAMPILAN EKSTERNAL
<a name="r_DROP_EXTERNAL_VIEW"></a>

Menjatuhkan tampilan eksternal dari database. Menjatuhkan tampilan eksternal menghapusnya dari semua mesin SQL yang terkait dengan tampilan, seperti Amazon Athena dan Amazon EMR Spark. Perintah ini tidak dapat dibalik. Untuk informasi selengkapnya tentang tampilan Katalog Data, lihat [AWS Glue Data Catalog tampilan](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Sintaksis
<a name="r_DROP_EXTERNAL_VIEW-synopsis"></a>

```
DROP EXTERNAL VIEW schema_name.view_name [ IF EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
```

## Parameter
<a name="r_DROP_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Skema yang dilampirkan ke AWS Glue database Anda, diikuti dengan nama tampilan.

JIKA ADA  
Jatuhkan tampilan hanya jika ada.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notasi skema yang akan digunakan saat menjatuhkan tampilan. Anda dapat menentukan untuk menggunakan AWS Glue Data Catalog, database Glue yang Anda buat, atau skema eksternal yang Anda buat. Lihat [MEMBUAT DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) dan [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) untuk informasi selengkapnya.

 *query\$1definition*   
Definisi kueri SQL yang dijalankan Amazon Redshift untuk mengubah tampilan.

## Contoh
<a name="r_DROP_EXTERNAL_VIEW-examples"></a>

Contoh berikut menjatuhkan tampilan Data Catalog bernama sample\$1schema.glue\$1data\$1catalog\$1view.

```
DROP EXTERNAL VIEW sample_schema.glue_data_catalog_view IF EXISTS
```

# FUNGSI DROP
<a name="r_DROP_FUNCTION"></a>

Menghapus fungsi yang ditentukan pengguna (UDF) dari database. Tanda tangan fungsi, atau daftar tipe data argumen, harus ditentukan karena beberapa fungsi dapat eksis dengan nama yang sama tetapi tanda tangan yang berbeda. Anda tidak dapat menghapus fungsi bawaan Amazon Redshift.

Perintah ini tidak dapat dibalik.

## Hak istimewa yang diperlukan
<a name="r_DROP_FUNCTION-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk FUNGSI DROP:
+ Superuser
+ Pengguna dengan hak istimewa DROP FUNCTION
+ Pemilik fungsi

## Sintaksis
<a name="r_DROP_FUNCTION-synopsis"></a>

```
DROP FUNCTION name
( [arg_name] arg_type   [, ...] )
[ CASCADE | RESTRICT ]
```

## Parameter
<a name="r_DROP_FUNCTION-parameters"></a>

 *name*   
Nama fungsi yang akan dihapus.

 *arg\$1nama*   
Nama argumen masukan. DROP FUNCTION mengabaikan nama argumen, karena hanya tipe data argumen yang diperlukan untuk menentukan identitas fungsi.

 *arg\$1type*   
Tipe data dari argumen masukan. Anda dapat menyediakan daftar yang dipisahkan koma dengan maksimum 32 tipe data.

 RIAM   
Kata kunci yang menentukan untuk secara otomatis menjatuhkan objek yang bergantung pada fungsi, seperti tampilan.   
Untuk membuat tampilan yang tidak bergantung pada fungsi, sertakan klausa WITH NO SCHEMA BINDING dalam definisi tampilan. Untuk informasi selengkapnya, lihat [CREATE VIEW](r_CREATE_VIEW.md).

 MEMBATASI   
Kata kunci yang menentukan bahwa jika ada objek yang bergantung pada fungsi, jangan jatuhkan fungsi dan kembalikan pesan. Tindakan ini adalah default.

## Contoh
<a name="r_DROP_FUNCTION-examples"></a>

Contoh berikut menjatuhkan fungsi bernama`f_sqrt`:

```
drop function f_sqrt(int);
```

Untuk menghapus fungsi yang memiliki dependensi, gunakan opsi CASCADE, seperti yang ditunjukkan pada contoh berikut:

```
drop function f_sqrt(int)cascade;
```

# GRUP DROP
<a name="r_DROP_GROUP"></a>

Menghapus grup pengguna. Perintah ini tidak dapat dibalik. Perintah ini tidak menghapus pengguna individu dalam grup.

Lihat DROP USER untuk menghapus pengguna individual.

## Sintaksis
<a name="r_DROP_GROUP-synopsis"></a>

```
DROP GROUP name
```

## Parameter
<a name="r_DROP_GROUP-parameter"></a>

 *name*   
Nama grup pengguna yang akan dihapus.

## Contoh
<a name="r_DROP_GROUP-example"></a>

Contoh berikut menghapus grup `guests` pengguna:

```
DROP GROUP guests;
```

Anda tidak dapat menjatuhkan grup jika grup memiliki hak istimewa pada suatu objek. Jika Anda mencoba untuk menghapus grup seperti itu, Anda akan menerima kesalahan berikut.

```
ERROR: group "guests" can't be dropped because the group has a privilege on some object
```

Jika grup memiliki hak istimewa untuk suatu objek, Anda harus mencabut hak istimewa sebelum menjatuhkan grup. Untuk menemukan objek yang `guests` grup memiliki hak istimewa, gunakan contoh berikut. [Untuk informasi selengkapnya tentang tampilan metadata yang digunakan dalam contoh, lihat SVV\$1RELATION\$1PRIVILEGES.](https://docs.aws.amazon.com//redshift/latest/dg/r_SVV_RELATION_PRIVILEGES.html)

```
SELECT DISTINCT namespace_name, relation_name, identity_name, identity_type 
FROM svv_relation_privileges
WHERE identity_type='group' AND identity_name='guests';

+----------------+---------------+---------------+---------------+
| namespace_name | relation_name | identity_name | identity_type |
+----------------+---------------+---------------+---------------+
| public         | table1        | guests        | group         |
+----------------+---------------+---------------+---------------+
| public         | table2        | guests        | group         |
+----------------+---------------+---------------+---------------+
```

Contoh berikut mencabut semua hak istimewa pada semua tabel dalam `public` skema dari grup `guests` pengguna, dan kemudian menjatuhkan grup.

```
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM GROUP guests;
DROP GROUP guests;
```

# JATUHKAN PENYEDIA IDENTITAS
<a name="r_DROP_IDENTITY_PROVIDER"></a>

Menghapus penyedia identitas. Perintah ini tidak dapat dibalik. Hanya pengguna super yang dapat menjatuhkan penyedia identitas.

## Sintaksis
<a name="r_DROP_IDENTITY_PROVIDER-synopsis"></a>

```
DROP IDENTITY PROVIDER identity_provider_name [ CASCADE ]
```

## Parameter
<a name="r_DROP_IDENTITY_PROVIDER-parameter"></a>

 *identity\$1provider\$1name*   
Nama penyedia identitas yang akan dihapus.

 RIAM   
Menghapus pengguna dan peran yang dilampirkan ke penyedia identitas, saat dihapus.

## Contoh
<a name="r_DROP_IDENTITY_PROVIDER-example"></a>

Contoh berikut menghapus penyedia identitas *oauth\$1provider*.

```
DROP IDENTITY PROVIDER oauth_provider;
```

Jika Anda menjatuhkan penyedia identitas, beberapa pengguna mungkin tidak dapat masuk atau menggunakan alat klien yang dikonfigurasi untuk menggunakan penyedia identitas.

# DROP PERPUSTAKAAN
<a name="r_DROP_LIBRARY"></a>

Menghapus pustaka Python kustom dari database. Hanya pemilik perpustakaan atau pengguna super yang dapat menjatuhkan perpustakaan. 

DROP LIBRARY tidak dapat dijalankan di dalam blok transaksi (BEGIN... END). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

Perintah ini tidak dapat dibalik. Perintah DROP LIBRARY melakukan segera. Jika UDF yang bergantung pada pustaka berjalan secara bersamaan, UDF mungkin gagal, bahkan jika UDF berjalan dalam transaksi.

Untuk informasi selengkapnya, lihat [BUAT PUSTAKA](r_CREATE_LIBRARY.md). 

## Hak istimewa yang diperlukan
<a name="r_DROP_LIBRARY-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROPLIBRARY:
+ Superuser
+ Pengguna dengan hak istimewa DROP LIBRARY
+ Pemilik perpustakaan

## Sintaksis
<a name="r_DROP_LIBRARY-synopsis"></a>

```
DROP LIBRARY library_name
```

## Parameter
<a name="r_DROP_LIBRARY-parameters"></a>

 *perpustakaan\$1name*   
Nama perpustakaan.

# KEBIJAKAN DROP MASKING
<a name="r_DROP_MASKING_POLICY"></a>

Menjatuhkan kebijakan penyembunyian data dinamis dari semua database. Anda tidak dapat menghapus kebijakan masking yang masih melekat pada satu atau beberapa tabel. Untuk informasi selengkapnya tentang masking data dinamis, lihat[Penutupan data dinamis](t_ddm.md).

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat menghapus kebijakan masking.

## Sintaksis
<a name="r_DROP_MASKING_POLICY-synopsis"></a>

```
DROP MASKING POLICY { policy_name | database_name.policy_name };
```

## Parameter
<a name="r_DROP_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nama kebijakan masking untuk dijatuhkan.

database\$1name  
Nama database dari mana kebijakan yang akan dihapus. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

Untuk penggunaan KEBIJAKAN DROP MASKING di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# MODEL DROP
<a name="r_DROP_MODEL"></a>

Menghapus model dari database. Hanya pemilik model atau superuser yang bisa menjatuhkan model. 

DROP MODEL juga menghapus semua fungsi prediksi terkait yang berasal dari model ini, semua artefak Amazon Redshift yang terkait dengan model, dan semua data Amazon S3 yang terkait dengan model. Sementara model masih dilatih di Amazon SageMaker AI, DROP MODEL akan membatalkan operasi tersebut.

Perintah ini tidak dapat dibalik. Perintah DROP MODEL segera dilakukan.

## Izin yang diperlukan
<a name="r_DROP_MODEL-privileges"></a>

Berikut ini adalah izin yang diperlukan untuk DROP MODEL:
+ Superuser
+ Pengguna dengan izin DROP MODEL
+ Pemilik model
+ Pemilik skema

## Sintaksis
<a name="r_DROP_MODEL-synopsis"></a>

```
DROP MODEL [ IF EXISTS ] model_name
```

## Parameter
<a name="r_DROP_MODEL-parameters"></a>

 *JIKA ADA*   
Klausa yang menunjukkan bahwa jika skema yang ditentukan sudah ada, perintah seharusnya tidak membuat perubahan dan mengembalikan pesan bahwa skema itu ada.

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

## Contoh
<a name="r_DROP_MODEL-examples"></a>

Contoh berikut menjatuhkan model demo\$1ml.customer\$1churn.

```
DROP MODEL demo_ml.customer_churn
```

# JATUHKAN TAMPILAN TERWUJUD
<a name="materialized-view-drop-sql-command"></a>

Menghapus tampilan yang terwujud.

Untuk informasi lebih lanjut tentang tampilan terwujud, lihat[Tampilan terwujud di Amazon Redshift](materialized-view-overview.md).

## Sintaksis
<a name="mv_DROP_MATERIALIZED_VIEW-synopsis"></a>

```
DROP MATERIALIZED VIEW [ IF EXISTS ] mv_name [, ... ] [ CASCADE | RESTRICT ]
```

## Parameter
<a name="mv_DROP_MATERIALIZED_VIEW-parameters"></a>

JIKA ADA  
Sebuah klausa yang menentukan untuk memeriksa apakah tampilan terwujud bernama ada. Jika tampilan terwujud tidak ada, maka `DROP MATERIALIZED VIEW` perintah mengembalikan pesan kesalahan. Klausa ini berguna saat membuat skrip, agar skrip tidak gagal jika Anda menghapus tampilan terwujud yang tidak ada.

*mv\$1nama*  
Nama tampilan terwujud yang akan dijatuhkan.

RIAM  
Klausa yang menunjukkan untuk secara otomatis menjatuhkan objek yang bergantung pada tampilan terwujud, seperti tampilan lainnya.

MEMBATASI  
Klausa yang menunjukkan untuk tidak menjatuhkan tampilan terwujud jika ada objek yang bergantung padanya. Ini adalah opsi default.

## Catatan Penggunaan
<a name="mv_DROP_MATERIALIZED_VIEW-usage"></a>

Hanya pemilik tampilan terwujud yang dapat digunakan `DROP MATERIALIZED VIEW` pada tampilan itu. Superuser atau pengguna yang secara khusus telah diberikan hak istimewa DROP dapat menjadi pengecualian untuk ini.

Saat Anda menulis pernyataan drop untuk tampilan terwujud dan tampilan dengan nama yang cocok ada, itu menghasilkan kesalahan yang menginstruksikan Anda untuk menggunakan DROP VIEW. Kesalahan terjadi bahkan dalam kasus di mana Anda menggunakan`DROP MATERIALIZED VIEW IF EXISTS`.

## Contoh
<a name="mv_DROP_MATERIALIZED_VIEW-examples"></a>

Contoh berikut menjatuhkan tampilan `tickets_mv` terwujud.

```
DROP MATERIALIZED VIEW tickets_mv;
```

# PROSEDUR DROP
<a name="r_DROP_PROCEDURE"></a>

Menjatuhkan prosedur. Untuk menghentikan prosedur, baik nama prosedur dan tipe data argumen masukan (tanda tangan), diperlukan. Secara opsional, Anda dapat menyertakan tipe data argumen lengkap, termasuk argumen OUT. Untuk menemukan tanda tangan untuk suatu prosedur, gunakan [TAMPILKAN PROSEDUR](r_SHOW_PROCEDURE.md) perintah. Untuk informasi selengkapnya tentang tanda tangan prosedur, lihat. [PG\$1PROC\$1INFO](r_PG_PROC_INFO.md)

## Hak istimewa yang diperlukan
<a name="r_DROP_PROCEDURE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk PROSEDUR DROP:
+ Superuser
+ Pengguna dengan hak istimewa DROP PROCEDURE
+ Pemilik prosedur

## Sintaksis
<a name="r_DROP_PROCEDURE-synopsis"></a>

```
DROP PROCEDURE sp_name ( [ [ argname ] [ argmode ] argtype [, ...] ] )
```

## Parameter
<a name="r_DROP_PROCEDURE-parameters"></a>

 *sp\$1nama*   
Nama prosedur yang akan dihapus. 

 *argname*   
Nama argumen masukan. DROP PROCEDURE mengabaikan nama argumen, karena hanya tipe data argumen yang diperlukan untuk menentukan identitas prosedur. 

 *argmode*   
Modus argumen, yang bisa IN, OUT, atau INOUT. Argumen OUT bersifat opsional karena tidak digunakan untuk mengidentifikasi prosedur yang disimpan. 

 *argtype*   
Tipe data dari argumen masukan. Untuk daftar tipe data yang didukung, lihat[Jenis Data](c_Supported_data_types.md). 

## Contoh
<a name="r_DROP_PROCEDURE-examples"></a>

Contoh berikut menjatuhkan prosedur tersimpan bernama`quarterly_revenue`.

```
DROP PROCEDURE quarterly_revenue(volume INOUT bigint, at_price IN numeric,result OUT int);
```

# KEBIJAKAN DROP RLS
<a name="r_DROP_RLS_POLICY"></a>

Menjatuhkan kebijakan keamanan tingkat baris untuk semua tabel di semua database.

Pengguna super dan pengguna atau peran yang memiliki peran sys:secadmin dapat menghapus kebijakan.

## Sintaksis
<a name="r_DROP_RLS_POLICY-synopsis"></a>

```
DROP RLS POLICY [ IF EXISTS ] 
{ policy_name | database_name.policy_name }
[ CASCADE | RESTRICT ]
```

## Parameter
<a name="r_DROP_RLS_POLICY-parameters"></a>

 *JIKA ADA*   
Klausa yang menunjukkan apakah kebijakan yang ditentukan sudah ada.

 *policy\$1name*   
Nama kebijakan .

database\$1name  
Nama database dari mana kebijakan yang akan dihapus. Basis data dapat berupa database yang terhubung atau database yang mendukung izin federasi Amazon Redshift.

 *KASKADE*   
Klausa yang menunjukkan untuk secara otomatis melepaskan kebijakan dari semua tabel terlampir sebelum membatalkan kebijakan.

 *MEMBATASI*   
Klausa yang menunjukkan untuk tidak membatalkan kebijakan ketika dilampirkan ke beberapa tabel. Ini adalah opsi default.

Untuk penggunaan KEBIJAKAN DROP RLS di Katalog Izin Federasi Amazon Redshift, [lihat Mengelola kontrol akses dengan izin federasi Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Contoh
<a name="r_DROP_RLS_POLICY-examples"></a>

Contoh berikut menjatuhkan kebijakan keamanan tingkat baris.

```
DROP RLS POLICY policy_concerts;
```

# DROP ROLE
<a name="r_DROP_ROLE"></a>

Menghapus peran dari database. Hanya pemilik peran yang membuat peran, pengguna dengan opsi WITH ADMIN, atau pengguna super yang dapat menghapus peran.

Anda tidak dapat menghapus peran yang diberikan kepada pengguna atau peran lain yang bergantung pada peran ini.

## Hak istimewa yang diperlukan
<a name="r_DROP_ROLE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROP ROLE:
+ Superuser
+ Pemilik peran yang merupakan pengguna yang membuat peran atau pengguna yang telah diberikan peran dengan hak istimewa WITH ADMIN OPTION.

## Sintaksis
<a name="r_DROP_ROLE-synopsis"></a>

```
DROP ROLE role_name [ FORCE | RESTRICT ] 
```

## Parameter
<a name="r_DROP_ROLE-parameters"></a>

*role\$1name*  
Nama peran.

[KEKUATAN \$1 BATASI]  
Pengaturan default adalah RESTRICT. Amazon Redshift menimbulkan kesalahan saat Anda mencoba menjatuhkan peran yang mewarisi peran lain. Gunakan FORCE untuk menghapus semua penetapan peran, jika ada. 

## Contoh
<a name="r_DROP_ROLE-examples"></a>

Contoh berikut menjatuhkan peran`sample_role`.

```
DROP ROLE sample_role FORCE;
```

Contoh berikut mencoba untuk menghapus peran sample\$1role1 yang telah diberikan kepada pengguna dengan opsi RESTRICT default.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
DROP ROLE sample_role1;
ERROR:  cannot drop this role since it has been granted on a user
```

Agar berhasil menjatuhkan sample\$1role1 yang telah diberikan kepada pengguna, gunakan opsi FORCE.

```
DROP ROLE sample_role1 FORCE;
```

Contoh berikut mencoba untuk menghapus peran sample\$1role2 yang memiliki peran lain yang bergantung padanya dengan opsi RESTRICT default.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO sample_role2;
DROP ROLE sample_role2;
ERROR:  cannot drop this role since it depends on another role
```

Agar berhasil menjatuhkan sample\$1role2 yang memiliki peran lain yang bergantung padanya, gunakan opsi FORCE.

```
DROP ROLE sample_role2 FORCE;
```

# DROP SCHEMA
<a name="r_DROP_SCHEMA"></a>

Menghapus skema. Untuk skema eksternal, Anda juga dapat menghapus database eksternal yang terkait dengan skema. Perintah ini tidak dapat dibalik.

## Hak istimewa yang diperlukan
<a name="r_DROP_SCHEMA-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROP SCHEMA:
+ Superuser
+ Pemilik skema
+ Pengguna dengan hak istimewa DROP SCHEMA

## Sintaksis
<a name="r_DROP_SCHEMA-synopsis"></a>

```
DROP SCHEMA [ IF EXISTS ] name [, ...]
[ DROP EXTERNAL DATABASE ]
[ CASCADE | RESTRICT ]
```

## Parameter
<a name="r_DROP_SCHEMA-parameters"></a>

JIKA ADA  
Klausa yang menunjukkan bahwa jika skema yang ditentukan tidak ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa skema tidak ada, daripada berakhir dengan kesalahan.  
Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika DROP SCHEMA berjalan melawan skema yang tidak ada.

 *name*   
Nama-nama skema untuk dijatuhkan. Anda dapat menentukan beberapa nama skema yang dipisahkan dengan koma.

 JATUHKAN DATABASE EKSTERNAL   
Klausa yang menunjukkan bahwa jika skema eksternal dijatuhkan, jatuhkan database eksternal yang terkait dengan skema eksternal, jika ada. Jika tidak ada database eksternal, perintah mengembalikan pesan yang menyatakan bahwa tidak ada database eksternal. Jika beberapa skema eksternal dijatuhkan, semua database yang terkait dengan skema yang ditentukan akan dihapus.   
Jika database eksternal berisi objek dependen seperti tabel, sertakan opsi CASCADE untuk menjatuhkan objek dependen juga.   
Ketika Anda menjatuhkan database eksternal, database juga dijatuhkan untuk skema eksternal lainnya yang terkait dengan database. Tabel yang didefinisikan dalam skema eksternal lainnya menggunakan database juga dijatuhkan.   
DROP EXTERNAL DATABASE tidak mendukung database eksternal yang disimpan dalam metastore HIVE. 

RIAM  
Kata kunci yang menunjukkan untuk secara otomatis menjatuhkan semua objek dalam skema. Jika DROP EXTERNAL DATABASE ditentukan, semua objek dalam database eksternal juga dijatuhkan.

MEMBATASI  
Kata kunci yang menunjukkan untuk tidak menjatuhkan skema atau database eksternal jika berisi objek apa pun. Tindakan ini adalah default.

## Contoh
<a name="r_DROP_SCHEMA-example"></a>

Contoh berikut menghapus skema bernama S\$1SALES. Contoh ini menggunakan RESTRICT sebagai mekanisme keamanan sehingga skema tidak dihapus jika berisi objek apa pun. Dalam hal ini, Anda perlu menghapus objek skema sebelum menghapus skema.

```
drop schema s_sales restrict;
```

Contoh berikut menghapus skema bernama S\$1SALES dan semua objek yang bergantung pada skema itu.

```
drop schema s_sales cascade;
```

Contoh berikut akan menjatuhkan skema S\$1SALES jika ada, atau tidak melakukan apa-apa dan mengembalikan pesan jika tidak.

```
drop schema if exists s_sales;
```

Contoh berikut menghapus skema eksternal bernama S\$1SPECTRUM dan database eksternal yang terkait dengannya. Contoh ini menggunakan RESTRICT sehingga skema dan database tidak dihapus jika berisi objek apa pun. Dalam hal ini, Anda perlu menghapus objek dependen sebelum menghapus skema dan database.

```
drop schema s_spectrum drop external database restrict;
```

Contoh berikut menghapus beberapa skema dan database eksternal yang terkait dengan mereka, bersama dengan objek dependen. 

```
drop schema s_sales, s_profit, s_revenue drop external database cascade;
```

# MEJA DROP
<a name="r_DROP_TABLE"></a>

Menghapus tabel dari database. 

Jika Anda mencoba mengosongkan tabel baris, tanpa menghapus tabel, gunakan perintah DELETE atau TRUNCATE. 

DROP TABLE menghapus kendala yang ada pada tabel target. Beberapa tabel dapat dihapus dengan satu perintah DROP TABLE. 

DROP TABLE dengan tabel eksternal tidak dapat dijalankan di dalam transaksi (BEGIN... END). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md).

Untuk menemukan contoh di mana hak istimewa DROP diberikan kepada grup, lihat GRANT[Contoh](r_GRANT-examples.md).

## Hak istimewa yang diperlukan
<a name="r_DROP_TABLE-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROP TABLE:
+ Superuser
+ Pengguna dengan hak istimewa DROP TABLE
+ Pemilik tabel dengan hak istimewa USE pada skema

## Sintaksis
<a name="r_DROP_TABLE-synopsis"></a>

```
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
```

## Parameter
<a name="r_DROP_TABLE-parameters"></a>

JIKA ADA  
Klausa yang menunjukkan bahwa jika tabel yang ditentukan tidak ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa tabel tidak ada, daripada berakhir dengan kesalahan.  
Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika DROP TABLE berjalan melawan tabel yang tidak ada.

 *name*   
Nama tabel untuk dijatuhkan. 

RIAM  
Klausa yang menunjukkan untuk secara otomatis menjatuhkan objek yang bergantung pada tabel, seperti tampilan.  
Untuk membuat tampilan yang tidak bergantung pada objek database lainnya, seperti tampilan dan tabel, sertakan klausa WITH NO SCHEMA BINDING dalam definisi tampilan. Untuk informasi selengkapnya, lihat [CREATE VIEW](r_CREATE_VIEW.md).

MEMBATASI   
Klausul yang menunjukkan untuk tidak menjatuhkan tabel jika ada objek yang bergantung padanya. Tindakan ini adalah default.

## Contoh
<a name="r_DROP_TABLE-examples"></a>

 **Menjatuhkan tabel tanpa dependensi** 

Contoh berikut membuat dan menjatuhkan tabel bernama FEEDBACK yang tidak memiliki dependensi: 

```
create table feedback(a int);

drop table feedback;
```

 Jika tabel berisi kolom yang direferensikan oleh tampilan atau tabel lain, Amazon Redshift menampilkan pesan seperti berikut ini. 

```
Invalid operation: cannot drop table feedback because other objects depend on it
```

 **Menjatuhkan dua tabel secara bersamaan** 

Set perintah berikut membuat tabel FEEDBACK dan tabel PEMBELI dan kemudian menjatuhkan kedua tabel dengan satu perintah: 

```
create table feedback(a int);

create table buyers(a int);

drop table feedback, buyers;
```

 **Menjatuhkan tabel dengan ketergantungan** 

Langkah-langkah berikut menunjukkan cara menjatuhkan tabel yang disebut FEEDBACK menggunakan sakelar CASCADE. 

Pertama, buat tabel sederhana yang disebut FEEDBACK menggunakan perintah CREATE TABLE: 

```
create table feedback(a int);
```

 Selanjutnya, gunakan perintah CREATE VIEW untuk membuat tampilan bernama FEEDBACK\$1VIEW yang bergantung pada tabel FEEDBACK: 

```
create view feedback_view as select * from feedback;
```

 Contoh berikut menjatuhkan tabel FEEDBACK dan juga menghapus tampilan FEEDBACK\$1VIEW, karena FEEDBACK\$1VIEW bergantung pada tabel FEEDBACK\$1VIEW: 

```
drop table feedback cascade;
```

 **Melihat dependensi untuk tabel** 

Untuk mengembalikan dependensi untuk tabel Anda, gunakan contoh berikut. Ganti *my\$1schema* dan *my\$1table* dengan skema dan tabel Anda sendiri. 

```
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;
```

Untuk drop *my\$1table* dan dependensinya, gunakan contoh berikut. Contoh ini juga mengembalikan semua dependensi untuk tabel yang telah dijatuhkan.

```
DROP TABLE my_table CASCADE;
         
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;

+------------------+----------------+---------------+--------------+-------------+
| dependent_schema | dependent_view | source_schema | source_table | column_name |
+------------------+----------------+---------------+--------------+-------------+
```

 **Menjatuhkan tabel Menggunakan IF EXISTS** 

Contoh berikut akan menjatuhkan tabel FEEDBACK jika ada, atau tidak melakukan apa-apa dan mengembalikan pesan jika tidak: 

```
drop table if exists feedback;
```

# DROP TEMPLATE
<a name="r_DROP_TEMPLATE"></a>

Menjatuhkan template dari database.

## Hak istimewa yang diperlukan
<a name="r_DROP_TEMPLATE-privileges"></a>

Untuk menjatuhkan template, Anda harus memiliki salah satu dari berikut ini:
+ Hak istimewa pengguna super
+ HAK ISTIMEWA DROP TEMPLATE dan hak istimewa PENGGUNAAN pada skema yang berisi template

## Sintaksis
<a name="r_DROP_TEMPLATE-synopsis"></a>

```
DROP TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameter
<a name="r_DROP_TEMPLATE-parameters"></a>

 *database\$1name*   
(Opsional) Nama database tempat template dibuat. Jika tidak ditentukan, database saat ini digunakan. 

 *schema\$1name*   
(Opsional) Nama skema di mana template dibuat. Jika tidak ditentukan, template dicari di jalur pencarian saat ini. 

 *template\$1name*   
Nama template yang akan dihapus. Dalam contoh berikut, nama database adalah`demo_database`, nama skema`demo_schema`, dan nama template adalah`test`.  

```
DROP TEMPLATE demo_database.demo_schema.test;
```

## Contoh
<a name="r_DROP_TEMPLATE-examples"></a>

Contoh berikut menjatuhkan template test\$1template dari skema saat ini:

```
DROP TEMPLATE test_template;
```

Contoh berikut menjatuhkan template test\$1template dari skema test\$1schema:

```
DROP TEMPLATE test_schema.test_template;
```

# JATUHKAN PENGGUNA
<a name="r_DROP_USER"></a>

Menjatuhkan pengguna dari database. Beberapa pengguna dapat dijatuhkan dengan satu perintah DROP USER. Anda harus menjadi superuser database atau memiliki izin DROP USER untuk menjalankan perintah ini.

## Sintaksis
<a name="r_DROP_USER-synopsis"></a>

```
DROP USER [ IF EXISTS ] name [, ... ]
```

## Parameter
<a name="r_DROP_USER-parameters"></a>

JIKA ADA  
Klausul yang menunjukkan bahwa jika pengguna yang ditentukan tidak ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa pengguna tidak ada, daripada berakhir dengan kesalahan.  
Klausul ini berguna saat membuat skrip, sehingga skrip tidak gagal jika DROP USER berjalan terhadap pengguna yang tidak ada.

 *name*   
Nama pengguna yang akan dihapus. Anda dapat menentukan beberapa pengguna, dengan koma yang memisahkan setiap nama pengguna dari yang berikutnya.

## Catatan penggunaan
<a name="r_DROP_USER-notes"></a>

Anda tidak dapat menjatuhkan nama pengguna `rdsdb` atau pengguna administrator database yang biasanya bernama `awsuser` atau`admin`.

Anda tidak dapat menjatuhkan pengguna jika pengguna memiliki objek database apa pun, seperti skema, database, tabel, atau tampilan, atau jika pengguna memiliki hak istimewa pada database, tabel, kolom, atau grup. Jika Anda mencoba untuk menjatuhkan pengguna tersebut, Anda menerima salah satu kesalahan berikut.

```
ERROR: user "username" can't be dropped because the user owns some object [SQL State=55006]

ERROR: user "username" can't be dropped because the user has a privilege on some object [SQL State=55006]
```

Untuk petunjuk terperinci tentang cara menemukan objek yang dimiliki oleh pengguna database, lihat [Bagaimana cara mengatasi kesalahan “pengguna tidak dapat dihapus” di Amazon Redshift](https://repost.aws/knowledge-center/redshift-user-cannot-be-dropped)? di *Pusat Pengetahuan*.

**catatan**  
Amazon Redshift hanya memeriksa database saat ini sebelum menjatuhkan pengguna. DROP USER tidak mengembalikan kesalahan jika pengguna memiliki objek database atau memiliki hak istimewa pada objek di database lain. Jika Anda menjatuhkan pengguna yang memiliki objek di database lain, pemilik untuk objek tersebut diubah menjadi 'tidak diketahui'. 

Jika pengguna memiliki objek, pertama-tama jatuhkan objek atau ubah kepemilikannya ke pengguna lain sebelum menjatuhkan pengguna asli. Jika pengguna memiliki hak istimewa untuk suatu objek, pertama-tama cabut hak istimewa sebelum menjatuhkan pengguna. Contoh berikut menunjukkan menjatuhkan objek, mengubah kepemilikan, dan mencabut hak istimewa sebelum menjatuhkan pengguna.

```
drop database dwdatabase;
alter schema dw owner to dwadmin;
revoke all on table dwtable from dwuser;
drop user dwuser;
```

## Contoh
<a name="r_DROP_USER-examples"></a>

Contoh berikut menjatuhkan pengguna bernama paulo:

```
drop user paulo;
```

Contoh berikut menjatuhkan dua pengguna, paulo dan martha:

```
drop user paulo, martha;
```

Contoh berikut menjatuhkan paulo pengguna jika ada, atau tidak melakukan apa-apa dan mengembalikan pesan jika tidak:

```
drop user if exists paulo;
```

# TAMPILAN DROP
<a name="r_DROP_VIEW"></a>

Menghapus tampilan dari database. Beberapa tampilan dapat dijatuhkan dengan satu perintah DROP VIEW. Perintah ini tidak dapat dibalik.

## Hak istimewa yang diperlukan
<a name="r_DROP_VIEW-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk DROP VIEW:
+ Superuser
+ Pengguna dengan hak istimewa DROP VIEW
+ Lihat pemilik

## Sintaksis
<a name="r_DROP_VIEW-synopsis"></a>

```
DROP VIEW [ IF EXISTS ] name [, ... ] [ CASCADE | RESTRICT ] 
```

## Parameter
<a name="r_DROP_VIEW-parameters"></a>

JIKA ADA  
Klausa yang menunjukkan bahwa jika tampilan yang ditentukan tidak ada, perintah tidak boleh membuat perubahan dan mengembalikan pesan bahwa tampilan tidak ada, daripada berakhir dengan kesalahan.  
Klausa ini berguna saat membuat skrip, sehingga skrip tidak gagal jika DROP VIEW berjalan terhadap tampilan yang tidak ada.

 *name*   
Nama tampilan yang akan dihapus.

RIAM  
Klausa yang menunjukkan untuk secara otomatis menjatuhkan objek yang bergantung pada tampilan, seperti tampilan lainnya.  
Untuk membuat tampilan yang tidak bergantung pada objek database lainnya, seperti tampilan dan tabel, sertakan klausa WITH NO SCHEMA BINDING dalam definisi tampilan. Untuk informasi selengkapnya, lihat [CREATE VIEW](r_CREATE_VIEW.md).  
Perhatikan bahwa jika Anda menyertakan CASCADE dan jumlah objek database yang dijatuhkan berjalan menjadi sepuluh atau lebih, mungkin klien database Anda tidak akan mencantumkan semua objek yang dijatuhkan dalam hasil ringkasan. Ini biasanya karena alat klien SQL memiliki batasan default pada hasil yang dikembalikan.

MEMBATASI  
Klausa yang menunjukkan untuk tidak menjatuhkan tampilan jika ada objek yang bergantung padanya. Tindakan ini adalah default.

## Contoh
<a name="r_DROP_VIEW-examples"></a>

Contoh berikut menjatuhkan tampilan yang disebut *event*:

```
drop view event;
```

Untuk menghapus tampilan yang memiliki dependensi, gunakan opsi CASCADE. Sebagai contoh, katakanlah kita mulai dengan tabel yang disebut EVENT. Kami kemudian membuat tampilan eventview dari tabel EVENT, menggunakan perintah CREATE VIEW, seperti yang ditunjukkan pada contoh berikut: 

```
create view eventview as
select dateid, eventname, catid
from event where catid = 1;
```

*Sekarang, kita membuat tampilan kedua yang disebut *myeventview*, yang didasarkan pada tampilan eventview pertama:*

```
create view myeventview as
select eventname, catid
from eventview where eventname <> ' ';
```

*Pada titik ini, dua tampilan telah dibuat: *eventview dan myeventview*.*

Tampilan *myeventview* adalah tampilan anak dengan *eventview* sebagai induknya.

Untuk menghapus tampilan *eventview*, perintah yang jelas untuk digunakan adalah sebagai berikut: 

```
drop view eventview;
```

Perhatikan bahwa jika Anda menjalankan perintah ini dalam kasus ini, Anda mendapatkan kesalahan berikut:

```
drop view eventview;
ERROR: can't drop view eventview because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
```

Untuk mengatasinya, jalankan perintah berikut (seperti yang disarankan dalam pesan kesalahan): 

```
drop view eventview cascade;
```

Baik *eventview* dan *myeventview* kini telah berhasil dijatuhkan.

Contoh berikut akan menghapus tampilan *eventview* jika ada, atau tidak melakukan apa-apa dan mengembalikan pesan jika tidak:

```
drop view if exists eventview;
```

# AKHIR
<a name="r_END"></a>

Melakukan transaksi saat ini. Melakukan fungsi yang persis sama dengan perintah COMMIT.

Lihat [COMMIT](r_COMMIT.md) untuk dokumentasi yang lebih rinci.

## Sintaksis
<a name="r_END-synopsis"></a>

```
END [ WORK | TRANSACTION ]
```

## Parameter
<a name="r_END-parameters"></a>

PEKERJAAN  
Kata kunci opsional.

TRANSAKSI  
Kata kunci opsional; KERJA dan TRANSAKSI adalah sinonim.

## Contoh
<a name="r_END-examples"></a>

Contoh berikut semua mengakhiri blok transaksi dan melakukan transaksi:

```
end;
```

```
end work;
```

```
end transaction;
```

Setelah salah satu perintah ini, Amazon Redshift mengakhiri blok transaksi dan melakukan perubahan.

# EXECUTE
<a name="r_EXECUTE"></a>

Menjalankan pernyataan yang disiapkan sebelumnya. 

## Sintaksis
<a name="r_EXECUTE-synopsis"></a>

```
EXECUTE plan_name [ (parameter [, ...]) ]
```

## Parameter
<a name="r_EXECUTE-parameters"></a>

 *plan\$1nama*   
Nama pernyataan yang disiapkan untuk dijalankan. 

 *parameter*   
Nilai aktual dari parameter untuk pernyataan disiapkan. Ini harus berupa ekspresi yang menghasilkan nilai tipe yang kompatibel dengan tipe data yang ditentukan untuk posisi parameter ini dalam perintah PREPARE yang membuat pernyataan yang disiapkan. 

## Catatan penggunaan
<a name="r_EXECUTE_usage_notes"></a>

EXECUTE digunakan untuk menjalankan pernyataan yang disiapkan sebelumnya. Karena pernyataan yang disiapkan hanya ada selama sesi, pernyataan yang disiapkan harus dibuat oleh pernyataan PREPARE yang dijalankan sebelumnya di sesi saat ini. 

Jika pernyataan PREPARE sebelumnya menetapkan beberapa parameter, sekumpulan parameter yang kompatibel harus diteruskan ke pernyataan EXECUTE, atau Amazon Redshift mengembalikan kesalahan. Tidak seperti fungsi, pernyataan yang disiapkan tidak kelebihan beban berdasarkan jenis atau jumlah parameter yang ditentukan; nama pernyataan yang disiapkan harus unik dalam sesi database. 

Ketika perintah EXECUTE dikeluarkan untuk pernyataan yang disiapkan, Amazon Redshift dapat secara opsional merevisi rencana eksekusi kueri (untuk meningkatkan kinerja berdasarkan nilai parameter yang ditentukan) sebelum menjalankan pernyataan yang disiapkan. Selain itu, untuk setiap eksekusi baru dari pernyataan yang disiapkan, Amazon Redshift dapat merevisi rencana eksekusi kueri lagi berdasarkan nilai parameter berbeda yang ditentukan dengan pernyataan EXECUTE. Untuk memeriksa rencana eksekusi kueri yang telah dipilih Amazon Redshift untuk pernyataan EXECUTE yang diberikan, gunakan perintah. [EXPLAIN](r_EXPLAIN.md) 

Untuk contoh dan informasi lebih lanjut tentang pembuatan dan penggunaan pernyataan yang disiapkan, lihat[MEMPERSIAPKAN](r_PREPARE.md). 

## Lihat juga
<a name="r_EXECUTE-see-also"></a>

 [DEALOKASI](r_DEALLOCATE.md), [MEMPERSIAPKAN](r_PREPARE.md) 

# EXPLAIN
<a name="r_EXPLAIN"></a>

Menampilkan rencana eksekusi untuk pernyataan query tanpa menjalankan query. Untuk informasi tentang alur kerja analisis kueri, lihat[Alur kerja analisis kueri](c-query-analysis-process.md).

## Sintaksis
<a name="r_EXPLAIN-synopsis"></a>

```
EXPLAIN [ VERBOSE ] query
```

## Parameter
<a name="r_EXPLAIN-parameters"></a>

BERTELE-TELE   
Menampilkan rencana kueri lengkap, bukan hanya ringkasan.

 *query*   
Pernyataan kueri untuk menjelaskan. Kueri dapat berupa pernyataan SELECT, INSERT, CREATE TABLE AS, UPDATE, atau DELETE.

## Catatan penggunaan
<a name="r_EXPLAIN-usage-notes"></a>

PERFORMA EXPLORE terkadang dipengaruhi oleh waktu yang dibutuhkan untuk membuat tabel sementara. Misalnya, kueri yang menggunakan optimasi subexpression umum memerlukan tabel sementara untuk dibuat dan dianalisis untuk mengembalikan output EXPLOW. Rencana kueri tergantung pada skema dan statistik tabel sementara. Oleh karena itu, perintah EXPLOW untuk jenis kueri ini mungkin membutuhkan waktu lebih lama untuk dijalankan dari yang diharapkan.

Anda dapat menggunakan EXPLORE hanya untuk perintah berikut:
+ SELECT
+ PILIH KE
+ CREATE TABLE AS
+ INSERT
+ UPDATE
+ DELETE

Perintah EXPLOW akan gagal jika Anda menggunakannya untuk perintah SQL lainnya, seperti data definition language (DDL) atau operasi database.

Biaya unit relatif EXPLORE output digunakan oleh Amazon Redshift untuk memilih paket kueri. Amazon Redshift membandingkan ukuran berbagai perkiraan sumber daya untuk menentukan rencana.

## Perencanaan kueri dan langkah-langkah pelaksanaan
<a name="r_EXPLAIN-query-planning-and-execution-steps"></a>

Rencana eksekusi untuk pernyataan kueri Amazon Redshift tertentu memecah eksekusi dan perhitungan kueri menjadi urutan langkah dan operasi tabel terpisah yang akhirnya menghasilkan hasil akhir yang ditetapkan untuk kueri. Untuk informasi tentang perencanaan kueri, lihat[Pemrosesan kueri](c-query-processing.md).

Tabel berikut memberikan ringkasan langkah-langkah yang dapat digunakan Amazon Redshift dalam mengembangkan rencana eksekusi untuk kueri apa pun yang dikirimkan pengguna untuk dieksekusi.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_EXPLAIN.html)

## Menggunakan EXPLOW untuk RLS
<a name="r_EXPLAIN-RLS"></a>

Jika kueri berisi tabel yang tunduk pada kebijakan keamanan tingkat baris (RLS), EXPLOW menampilkan node RLS khusus. SecureScan Amazon Redshift juga mencatat jenis node yang sama ke tabel sistem STL\$1EXPLOW. EXPLOW tidak mengungkapkan predikat RLS yang berlaku untuk dim\$1tbl. Jenis SecureScan node RLS berfungsi sebagai indikator bahwa rencana eksekusi berisi operasi tambahan yang tidak terlihat oleh pengguna saat ini.

Contoh berikut menggambarkan node RLS. SecureScan 

```
EXPLAIN
SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   ->  *XN* *RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)*
         Filter: ((k_dim / 10) > 0)
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Untuk mengaktifkan penyelidikan penuh paket kueri yang tunduk pada RLS, Amazon Redshift menawarkan izin sistem EXPLOW RLS. Pengguna yang telah diberikan izin ini dapat memeriksa paket kueri lengkap yang juga menyertakan predikat RLS. 

Contoh berikut mengilustrasikan Pemindaian Seq tambahan di bawah SecureScan node RLS juga menyertakan predikat kebijakan RLS (k\$1dim > 1).

```
EXPLAIN SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   *->  XN RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)
         Filter: ((k_dim / 10) > 0)*
         ->  *XN* *Seq Scan on fact_tbl rls_table  (cost=0.00..0.06 rows=5 width=8)
               Filter: (k_dim > 1)*
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Sementara izin EXPLORE RLS diberikan kepada pengguna, Amazon Redshift mencatat paket kueri lengkap termasuk predikat RLS dalam tabel sistem STL\$1EXPLANAGE. Kueri yang dijalankan saat izin ini tidak diberikan akan dicatat tanpa internal RLS. Memberi atau menghapus izin EXPLOW RLS tidak akan mengubah apa yang telah dicatat Amazon Redshift ke STL\$1EXPLIGHT untuk kueri sebelumnya.

### AWS Lake Formation-RLS melindungi hubungan Redshift
<a name="r_EXPLAIN_RLS-LF"></a>

Contoh berikut mengilustrasikan SecureScan node LF, yang dapat Anda gunakan untuk melihat hubungan Lake Formation-RLS.

```
EXPLAIN
SELECT *
FROM lf_db.public.t_share
WHERE a > 1;
QUERY PLAN
---------------------------------------------------------------
XN LF SecureScan t_share  (cost=0.00..0.02 rows=2 width=11)
(2 rows)
```

## Contoh
<a name="r_EXPLAIN-examples"></a>

**catatan**  
Untuk contoh ini, output sampel mungkin bervariasi tergantung pada konfigurasi Amazon Redshift.

Contoh berikut mengembalikan rencana query untuk query yang memilih EVENTID, EVENTNAME, VENUEID, dan VENUENAME dari tabel EVENT dan VENUE:

```
explain
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(5 rows)
```

Contoh berikut mengembalikan rencana query untuk query yang sama dengan output verbose:

```
explain verbose
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
{HASHJOIN
:startup_cost 2.52
:total_cost 58653620.93
:plan_rows 8712
:plan_width 43
:best_pathkeys <>
:dist_info DS_DIST_OUTER
:dist_info.dist_keys (
TARGETENTRY
{
VAR
:varno 2
:varattno 1
...

XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(519 rows)
```

Contoh berikut mengembalikan rencana query untuk pernyataan CREATE TABLE AS (CTAS): 

```
explain create table venue_nonulls as
select * from venue
where venueseats is not null;

QUERY PLAN
-----------------------------------------------------------
XN Seq Scan on venue  (cost=0.00..2.02 rows=187 width=45)
Filter: (venueseats IS NOT NULL)
(2 rows)
```

# AMBIL
<a name="fetch"></a>

Mengambil baris menggunakan kursor. Untuk informasi tentang mendeklarasikan kursor, lihat. [MENYATAKAN](declare.md)

FETCH mengambil baris berdasarkan posisi saat ini dalam kursor. Ketika kursor dibuat, itu diposisikan sebelum baris pertama. Setelah FETCH, kursor diposisikan pada baris terakhir yang diambil. Jika FETCH berjalan dari akhir baris yang tersedia, seperti mengikuti FETCH ALL, kursor dibiarkan diposisikan setelah baris terakhir. 

FORWARD 0 mengambil baris saat ini tanpa menggerakkan kursor; yaitu, ia mengambil baris yang paling baru diambil. Jika kursor diposisikan sebelum baris pertama atau setelah baris terakhir, tidak ada baris yang dikembalikan. 

Ketika baris pertama kursor diambil, seluruh set hasil diwujudkan pada node pemimpin, dalam memori atau pada disk, jika diperlukan. Karena potensi dampak kinerja negatif dari penggunaan kursor dengan set hasil yang besar, sebaiknya gunakan pendekatan alternatif bila memungkinkan. Untuk informasi selengkapnya, lihat [Pertimbangan kinerja saat menggunakan kursor](declare.md#declare-performance).

Untuk informasi lebih lanjut, lihat[MENYATAKAN](declare.md),[TUTUP](close.md). 

## Sintaksis
<a name="fetch-synopsis"></a>

```
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
```

## Parameter
<a name="fetch-parameters"></a>

SELANJUTNYA  
Mengambil baris berikutnya. Ini adalah opsi default.

SEMUA  
Mengambil semua baris yang tersisa. (Sama seperti FORWARD ALL.) ALL tidak didukung untuk kluster simpul tunggal.

MAJU [*hitung* \$1 SEMUA]   
Mengambil baris *hitungan* berikutnya, atau semua baris yang tersisa. `FORWARD 0`mengambil baris saat ini. Untuk cluster simpul tunggal, nilai maksimum untuk hitungan adalah. `1000` FORWARD ALL tidak didukung untuk kluster simpul tunggal. 

*kursor*   
Nama kursor baru. 

## Ambil contoh
<a name="fetch-example"></a>

Contoh berikut mendeklarasikan kursor bernama LOLLAPALOOZA untuk memilih informasi penjualan untuk acara Lollapalooza, dan kemudian mengambil baris dari set hasil menggunakan kursor:

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

# HIBAH
<a name="r_GRANT"></a>

Mendefinisikan izin akses untuk pengguna atau peran.

Izin mencakup opsi akses seperti dapat membaca data dalam tabel dan tampilan, menulis data, membuat tabel, dan menjatuhkan tabel. Gunakan perintah ini untuk memberikan izin khusus untuk tabel, database, skema, fungsi, prosedur, bahasa, atau kolom. Untuk mencabut izin dari objek database, gunakan perintah. [MENCABUT](r_REVOKE.md) 

Izin juga mencakup opsi akses produsen datashare berikut:
+  Memberikan akses datashare ke ruang nama dan akun konsumen. 
+  Memberikan izin untuk mengubah datashare dengan menambahkan atau menghapus objek dari datashare. 
+  Memberikan izin untuk berbagi datashare dengan menambahkan atau menghapus namespace konsumen dari datashare. 

Opsi akses konsumen Datashare adalah sebagai berikut:
+ Memberikan pengguna akses penuh ke database yang dibuat dari datashare atau skema eksternal yang mengarah ke database tersebut.
+ Memberikan pengguna izin tingkat objek pada database yang dibuat dari datashare seperti yang Anda bisa untuk objek database lokal. Untuk memberikan tingkat izin ini, Anda harus menggunakan klausa WITH PERMISSIONS saat membuat database dari datashare. Untuk informasi selengkapnya, lihat [BUAT BASIS DATA](r_CREATE_DATABASE.md).

Untuk informasi selengkapnya tentang izin datashare, lihat. [Izin yang dapat Anda berikan kepada datashares](permissions-datashares.md)

Izin juga mencakup Katalog Izin Federasi Amazon Redshift berikut:
+ Memberikan izin tingkat tabel kepada pengguna dan peran.
+ Memberikan izin tingkat kolom berbutir halus pada tabel, tampilan, dan tampilan terwujud.
+ Memberikan izin terbatas kepada pengguna dan peran.
+ Memberikan izin tingkat database di Katalog Izin Federasi Amazon Redshift.

Untuk informasi selengkapnya tentang mengelola izin di Katalog Izin Federasi Amazon Redshift, lihat. [Mengelola kontrol akses di katalog izin federasi Amazon RedshiftHibah/Cabut](federated-permissions-managing-access.md) [Untuk informasi selengkapnya tentang grant/revoke sintaks yang didukung Katalog Izin Federasi Amazon Redshift, lihat Memberikan/Mencabut.](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html#federated-permissions-managing-access-grant-revoke)

Izin juga mencakup hak istimewa CONNECT untuk pengguna AWS IAM Identity Center federasi. Hak istimewa ini memungkinkan administrator untuk mengontrol akses pengguna melalui izin terperinci di setiap grup kerja Amazon Redshift atau cluster tempat Izin Federasi Amazon Redshift diaktifkan. Administrator Amazon Redshift dapat menentukan pengguna atau grup AWS IAM Identity Center federasi mana yang memiliki akses untuk terhubung langsung ke workgroup Amazon Redshift, memberikan kontrol halus atas akses pengguna di setiap workgroup atau cluster. AWS IAM Identity Center 

Anda juga dapat memberikan peran untuk mengelola izin database dan mengontrol apa yang dapat dilakukan pengguna relatif terhadap data Anda. Dengan mendefinisikan peran dan menetapkan peran kepada pengguna, Anda dapat membatasi tindakan yang dapat dilakukan pengguna tersebut, seperti membatasi pengguna hanya pada perintah CREATE TABLE dan INSERT. Untuk informasi selengkapnya tentang perintah CREATE ROLE, lihat[CREATE ROLE](r_CREATE_ROLE.md). Amazon Redshift memiliki beberapa peran yang ditentukan sistem yang juga dapat Anda gunakan untuk memberikan izin khusus kepada pengguna Anda. Untuk informasi selengkapnya, lihat [Peran yang ditentukan sistem Amazon Redshift](r_roles-default.md).

Anda hanya dapat MEMBERIKAN atau MENCABUT izin PENGGUNAAN pada skema eksternal untuk pengguna database dan grup pengguna yang menggunakan sintaks ON SCHEMA. Saat menggunakan ON EXTERNAL SCHEMA with AWS Lake Formation, Anda hanya dapat MEMBERIKAN dan MENCABUT izin ke peran AWS Identity and Access Management (IAM). Untuk daftar izin, lihat sintaksnya.

Untuk prosedur tersimpan, satu-satunya izin yang dapat Anda berikan adalah EXECUTE.

Anda tidak dapat menjalankan GRANT (pada sumber daya eksternal) dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

Untuk melihat izin mana yang telah diberikan pengguna untuk database, gunakan[HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md). Untuk melihat izin mana yang diberikan pengguna untuk skema, gunakan. [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md) Untuk melihat izin yang diberikan pengguna untuk tabel, gunakan[HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md). 

## Sintaksis
<a name="r_GRANT-synopsis"></a>



```
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]             

GRANT { { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE [database_name.][schema_name.]template_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Memberikan izin tingkat kolom untuk tabel
<a name="grant-column-level"></a>

Berikut ini adalah sintaks untuk izin tingkat kolom pada tabel dan tampilan Amazon Redshift.

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }

     TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Memberikan izin ASSUMEROLE
<a name="grant-assumerole-permissions"></a>

Berikut ini adalah sintaks untuk izin ASSUMEROLE yang diberikan kepada pengguna dan grup dengan peran tertentu. Untuk mulai menggunakan hak istimewa ASSUMEROLE, lihat. [Catatan penggunaan untuk memberikan izin ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)

```
GRANT ASSUMEROLE
       ON { 'iam_role' [, ...] | default | ALL }
       TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
       FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
```

### Memberikan izin untuk integrasi Redshift Spectrum dengan Lake Formation
<a name="grant-spectrum-integration-with-lf-syntax"></a>

Berikut ini adalah sintaks untuk integrasi Redshift Spectrum dengan Lake Formation. 

```
GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ]

GRANT { { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
```

### Memberikan izin datashare
<a name="grant-datashare-syntax"></a>

**Izin penyimpanan data sisi produsen**  
Berikut ini adalah sintaks untuk menggunakan GRANT untuk memberikan izin ALTER atau SHARE kepada pengguna atau peran. Pengguna dapat mengubah datashare dengan izin ALTER, atau memberikan penggunaan kepada konsumen dengan izin SHARE. ALTER dan SHARE adalah satu-satunya izin yang dapat Anda berikan pada datashare kepada pengguna dan peran.

```
GRANT { ALTER | SHARE } ON DATASHARE datashare_name
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

Berikut ini adalah sintaks untuk menggunakan GRANT untuk izin penggunaan datashare di Amazon Redshift. Anda memberikan akses ke datashare ke konsumen menggunakan izin PENGGUNAAN. Anda tidak dapat memberikan izin ini kepada pengguna atau grup pengguna. Izin ini juga tidak mendukung OPSI WITH GRANT untuk pernyataan GRANT. Hanya pengguna atau grup pengguna dengan izin SHARE yang sebelumnya diberikan kepada mereka UNTUK datashare yang dapat menjalankan pernyataan GRANT jenis ini.

```
GRANT USAGE
    ON DATASHARE datashare_name
    TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
```

Berikut ini adalah contoh bagaimana memberikan penggunaan datashare ke akun Lake Formation.

```
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Izin penyimpanan data sisi konsumen**  
Berikut ini adalah sintaks untuk izin penggunaan berbagi data GRANT pada database atau skema tertentu yang dibuat dari datashare. 

Izin lebih lanjut yang diperlukan bagi konsumen untuk mengakses database yang dibuat dari datashare bervariasi tergantung pada apakah perintah CREATE DATABASE yang digunakan untuk membuat database dari datashare menggunakan klausa WITH PERMISSIONS atau tidak. Untuk informasi selengkapnya tentang perintah CREATE DATABASE dan klausa WITH PERMISSIONS, lihat. [BUAT BASIS DATA](r_CREATE_DATABASE.md)

**Database dibuat tanpa menggunakan klausa WITH PERMISSIONS**  
Bila Anda memberikan USE pada database yang dibuat dari datashare tanpa klausa WITH PERMISSIONS, Anda tidak perlu memberikan izin secara terpisah pada objek dalam database bersama. Entitas yang diberikan penggunaan pada database yang dibuat dari datashares tanpa klausa WITH PERMISSIONS secara otomatis memiliki akses ke semua objek dalam database.

**Database dibuat menggunakan klausa WITH PERMISSIONS**  
Ketika Anda memberikan USE pada database tempat database bersama dibuat dari datashare dengan klausa WITH PERMISSIONS, identitas sisi konsumen masih harus diberikan izin yang relevan untuk objek database dalam database bersama untuk mengaksesnya, sama seperti Anda akan memberikan izin untuk objek database lokal. Untuk memberikan izin ke objek dalam database yang dibuat dari datashare, gunakan sintaks tiga bagian. `database_name.schema_name.object_name` Untuk memberikan izin ke objek dalam skema eksternal yang menunjuk ke skema bersama dalam database bersama, gunakan sintaks dua bagian. `schema_name.object_name`

```
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
    TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Memberikan izin terbatas
<a name="grant-scoped-syntax"></a>

Izin tercakup memungkinkan Anda memberikan izin kepada pengguna atau peran pada semua objek dari tipe dalam database atau skema. Pengguna dan peran dengan izin cakupan memiliki izin yang ditentukan pada semua objek saat ini dan masa depan dalam database atau skema.

Anda dapat melihat cakupan izin cakupan tingkat database di. [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) Anda dapat melihat cakupan izin cakupan tingkat skema di. [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md)

Untuk informasi selengkapnya tentang izin tercakup, lihat. [Izin tercakup](t_scoped-permissions.md)

Berikut ini adalah sintaks untuk memberikan izin cakupan kepada pengguna dan peran.

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT 
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT USAGE
FOR LANGUAGES IN
{DATABASE db_name}
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]  

GRANT { { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
```

Perhatikan bahwa izin tercakup tidak membedakan antara izin untuk fungsi dan prosedur. Misalnya, pernyataan berikut memberikan `bob` `EXECUTE` izin untuk fungsi dan prosedur dalam skema`Sales_schema`.

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

### Memberikan izin pembelajaran mesin
<a name="grant-model-syntax"></a>

Berikut ini adalah sintaks untuk izin model pembelajaran mesin di Amazon Redshift.

```
GRANT CREATE MODEL
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Memberikan izin peran
<a name="grant-roles"></a>

Berikut ini adalah sintaks untuk memberikan peran di Amazon Redshift.

```
GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]
```

Berikut ini adalah sintaks untuk memberikan izin sistem untuk peran di Amazon Redshift. Perhatikan bahwa Anda hanya dapat memberikan izin untuk peran, bukan pengguna.

```
GRANT
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG | ACCESS SYSTEM TABLE
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE |
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL |
    IGNORE RLS | EXPLAIN RLS | 
    EXPLAIN MASKING }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
TO ROLE role_name [, ...]
```

### Pemberian izin penjelasan untuk kebijakan keamanan
<a name="grant-row-level-security"></a>

Berikut ini adalah sintaks untuk memberikan izin untuk menjelaskan filter kebijakan keamanan kueri dalam rencana EXPLOW. Kebijakan keamanan yang mungkin termasuk kebijakan keamanan tingkat baris dan kebijakan masking data dinamis.

```
GRANT EXPLAIN { RLS | MASKING } TO ROLE rolename 
```

Berikut ini adalah sintaks untuk memberikan izin untuk melewati kebijakan keamanan tingkat baris untuk kueri. Sintaks ini tidak berlaku untuk kebijakan masking data dinamis.

```
GRANT IGNORE RLS TO ROLE rolename 
```

Berikut ini adalah sintaks untuk memberikan izin tabel pencarian ke kebijakan keamanan yang ditentukan. Kebijakan keamanan yang mungkin termasuk kebijakan keamanan tingkat baris dan kebijakan masking data dinamis.

```
GRANT SELECT ON [ TABLE ] table_name [, ...]
TO { RLS | MASKING } POLICY policy_name [, ...]
```

### Memberikan izin koneksi
<a name="grant-connection-permissions"></a>

Berikut ini adalah sintaks untuk memberikan izin bagi pengguna AWS IAM Identity Center federasi (atau grup) untuk terhubung ke workgroup/cluster:

```
GRANT CONNECT [ON WORKGROUP]
TO [USER] <prefix>:<username> | ROLE <prefix>:<rolename> | PUBLIC;
```

## Parameter
<a name="r_GRANT-parameters"></a>

SELECT   <a name="grant-select"></a>
Memberikan izin untuk memilih data dari tabel atau tampilan menggunakan pernyataan SELECT. Izin SELECT juga diperlukan untuk mereferensikan nilai kolom yang ada untuk operasi UPDATE atau DELETE.

INSERT   <a name="grant-insert"></a>
Memberikan izin untuk memuat data ke dalam tabel menggunakan pernyataan INSERT atau pernyataan COPY. 

UPDATE   <a name="grant-update"></a>
Memberikan izin untuk memperbarui kolom tabel menggunakan pernyataan UPDATE. Operasi UPDATE juga memerlukan izin SELECT, karena mereka harus mereferensikan kolom tabel untuk menentukan baris mana yang akan diperbarui, atau untuk menghitung nilai baru untuk kolom.

DELETE  <a name="grant-delete"></a>
Memberikan izin untuk menghapus baris data dari tabel. Operasi DELETE juga memerlukan izin SELECT, karena mereka harus referensi kolom tabel untuk menentukan baris mana yang akan dihapus.

DROP  <a name="grant-drop"></a>
Bergantung pada objek database, memberikan izin berikut kepada pengguna atau peran:   
+  Untuk tabel, DROP memberikan izin untuk menjatuhkan tabel atau tampilan. Untuk informasi selengkapnya, lihat [MEJA DROP](r_DROP_TABLE.md). 
+  Untuk database, DROP memberikan izin untuk menjatuhkan database. Untuk informasi selengkapnya, lihat [DROP DATABASE](r_DROP_DATABASE.md). 
+  Untuk skema, DROP memberikan izin untuk menghapus skema. Untuk informasi selengkapnya, lihat [DROP SCHEMA](r_DROP_SCHEMA.md). 

REFERENSI   <a name="grant-references"></a>
Memberikan izin untuk membuat kendala kunci asing. Anda harus memberikan izin ini pada tabel referensi dan tabel referensi; jika tidak, pengguna tidak dapat membuat kendala. 

ALTER  <a name="grant-alter"></a>
Bergantung pada objek database, memberikan izin berikut kepada pengguna atau grup pengguna:   
+ Untuk tabel, ALTER memberikan izin untuk mengubah tabel atau tampilan. Untuk informasi selengkapnya, lihat [ALTER TABLE](r_ALTER_TABLE.md).
+ Untuk database, ALTER memberikan izin untuk mengubah database. Untuk informasi selengkapnya, lihat [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Untuk skema, ALTER memberikan izin untuk mengubah skema. Untuk informasi selengkapnya, lihat [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ Untuk tabel eksternal, ALTER memberikan izin untuk mengubah tabel AWS Glue Data Catalog yang diaktifkan untuk Lake Formation. Izin ini hanya berlaku saat menggunakan Lake Formation.

TRUNCATE  <a name="grant-truncate"></a>
Memberikan izin untuk memotong tabel. Tanpa izin ini, hanya pemilik meja atau superuser yang dapat memotong tabel. Untuk informasi selengkapnya tentang perintah TRUNCATE, lihat. [MEMOTONG](r_TRUNCATE.md)

SEMUA [HAK ISTIMEWA]   <a name="grant-all"></a>
Memberikan semua izin yang tersedia sekaligus kepada pengguna atau peran yang ditentukan. Kata kunci PRIVILEGES adalah opsional.  
GRANT ALL ON SCHEMA tidak memberikan izin CREATE untuk skema eksternal.  
Anda dapat memberikan izin ALL ke tabel di AWS Glue Data Catalog yang diaktifkan untuk Lake Formation. Dalam hal ini, izin individu (seperti SELECT, ALTER, dan sebagainya) dicatat dalam Katalog Data.   
 Amazon Redshift tidak mendukung izin RULE dan TRIGGER. Untuk informasi selengkapnya, kunjungi [Fitur PostgreSQL yang tidak didukung](c_unsupported-postgresql-features.md). 

ASSUMEROLE  <a name="assumerole"></a>
Memberikan izin untuk menjalankan perintah COPY, UNLOAD, EXTERNAL FUNCTION, dan CREATE MODEL kepada pengguna, peran, atau grup dengan peran tertentu. Pengguna, peran, atau grup mengasumsikan peran tersebut saat menjalankan perintah yang ditentukan. Untuk mulai menggunakan izin ASSUMEROLE, lihat. [Catatan penggunaan untuk memberikan izin ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)

ON [TABLE] *table\$1name*   <a name="grant-on-table"></a>
Memberikan izin yang ditentukan pada tabel atau tampilan. Kata kunci TABLE adalah opsional. Anda dapat membuat daftar beberapa tabel dan tampilan dalam satu pernyataan.

*PADA SEMUA TABEL DALAM SKEMA schema\$1name*   <a name="grant-all-tables"></a>
Memberikan izin yang ditentukan pada semua tabel dan tampilan dalam skema yang direferensikan.

*(*column\$1name* [,...]) DI TABLE table\$1name*   <a name="grant-column-level-privileges"></a>
Memberikan izin yang ditentukan kepada pengguna, grup, atau PUBLIC pada kolom yang ditentukan dari tabel atau tampilan Amazon Redshift.

*(*column\$1list) PADA TABEL EKSTERNAL schema\$1name.table\$1name**   <a name="grant-external-table-column"></a>
Memberikan izin yang ditentukan untuk peran IAM pada kolom yang ditentukan dari tabel Lake Formation dalam skema yang direferensikan.

PADA TABEL EKSTERNAL *schema\$1name.table\$1name*   <a name="grant-external-table"></a>
Memberikan izin yang ditentukan untuk peran IAM pada tabel Lake Formation yang ditentukan dalam skema yang direferensikan.

*PADA SKEMA EKSTERNAL schema\$1name*   <a name="grant-external-schema"></a>
Memberikan izin yang ditentukan ke peran IAM pada skema yang direferensikan.

DI *iam\$1role*   <a name="grant-iam_role"></a>
Memberikan izin yang ditentukan ke peran IAM.

Untuk *nama pengguna*   <a name="grant-to"></a>
Menunjukkan pengguna yang menerima izin.

*KE IAM\$1ROLE iam\$1role*   <a name="grant-to-iam-role"></a>
Menunjukkan peran IAM yang menerima izin.

DENGAN OPSI HIBAH   <a name="grant-with-grant"></a>
Menunjukkan bahwa pengguna yang menerima izin pada gilirannya dapat memberikan izin yang sama kepada orang lain. DENGAN OPSI GRANT tidak dapat diberikan kepada grup atau kepada PUBLIK.

*ROLE role\$1name*   <a name="grant-role"></a>
Memberikan izin untuk peran.

GROUP *group\$1name*   <a name="grant-group"></a>
Memberikan izin ke grup pengguna. Dapat berupa daftar yang dipisahkan koma untuk menentukan beberapa grup pengguna.

UMUM   <a name="grant-public"></a>
Memberikan izin yang ditentukan untuk semua pengguna, termasuk pengguna yang dibuat nanti. PUBLIC mewakili grup yang selalu mencakup semua pengguna. Izin pengguna individu terdiri dari jumlah izin yang diberikan kepada PUBLIK, izin yang diberikan kepada grup mana pun yang dimiliki pengguna, dan izin apa pun yang diberikan kepada pengguna secara individual.  
Pemberian PUBLIK ke TABEL EKSTERNAL Lake Formation menghasilkan pemberian izin kepada kelompok *semua orang* Formasi Danau.

HUBUNGKAN [DI WORKGROUP] KE \$1[USER]<prefix>: <username>\$1 PERAN<prefix>: <rolename>\$1 PUBLIK\$1  
Memberikan izin untuk terhubung ke workgroup atau cluster ke pengguna atau grup AWS IAM Identity Center federasi. Awalan mengidentifikasi penyedia identitas. Ketika diberikan kepada PUBLIC, izin berlaku untuk semua pengguna AWS IAM Identity Center federasi, termasuk pengguna yang dibuat nanti. Izin ini hanya berlaku jika Izin Federasi Amazon Redshift diaktifkan di workgroup atau cluster.

CREATE   <a name="grant-create"></a>
Bergantung pada objek database, memberikan izin berikut kepada pengguna atau grup pengguna:  
+ Untuk database, CREATE memungkinkan pengguna untuk membuat skema dalam database.
+ Untuk skema, CREATE memungkinkan pengguna untuk membuat objek dalam skema. Untuk mengganti nama objek, pengguna harus memiliki izin CREATE dan memiliki objek yang akan diganti namanya.
+ CREATE ON SCHEMA tidak didukung untuk skema eksternal Amazon Redshift Spectrum. Untuk memberikan penggunaan tabel eksternal dalam skema eksternal, berikan SKEMA PENGGUNAAN ON kepada pengguna yang membutuhkan akses. Hanya pemilik skema eksternal atau superuser yang diizinkan untuk membuat tabel eksternal dalam skema eksternal. Untuk mentransfer kepemilikan skema eksternal, gunakan [ALTER SCHEMA](r_ALTER_SCHEMA.md) untuk mengubah pemilik. 

SEMENTARA \$1 TEMP   <a name="grant-temporary"></a>
Memberikan izin untuk membuat tabel sementara dalam database yang ditentukan. Untuk menjalankan kueri Amazon Redshift Spectrum, pengguna database harus memiliki izin untuk membuat tabel sementara dalam database.   
Secara default, pengguna diberikan izin untuk membuat tabel sementara dengan keanggotaan otomatis mereka di grup PUBLIC. Untuk menghapus izin bagi setiap pengguna untuk membuat tabel sementara, cabut izin TEMP dari grup PUBLIC. Kemudian secara eksplisit memberikan izin untuk membuat tabel sementara untuk pengguna atau grup pengguna tertentu.

PADA DATABASE *db\$1name*   <a name="grant-database"></a>
Memberikan izin yang ditentukan pada database.

PEMAKAIAN   <a name="grant-usage"></a>
Memberikan izin PENGGUNAAN pada skema tertentu, yang membuat objek dalam skema tersebut dapat diakses oleh pengguna. Tindakan spesifik pada objek ini harus diberikan secara terpisah (misalnya, izin SELECT atau UPDATE pada tabel) untuk skema Amazon Redshift lokal. Secara default, semua pengguna memiliki izin CREATE dan USE pada skema PUBLIC.   
 Saat Anda memberikan USE ke skema eksternal menggunakan sintaks ON SCHEMA, Anda tidak perlu memberikan tindakan secara terpisah pada objek dalam skema eksternal. Izin katalog yang sesuai mengontrol izin granular pada objek skema eksternal. 

*PADA SKEMA schema\$1name*   <a name="grant-schema"></a>
Memberikan izin yang ditentukan pada skema.  
GRANT CREATE ON SCHEMA dan izin CREATE di GRANT ALL ON SCHEMA tidak didukung untuk skema eksternal Amazon Redshift Spectrum. Untuk memberikan penggunaan tabel eksternal dalam skema eksternal, berikan SKEMA PENGGUNAAN ON kepada pengguna yang membutuhkan akses. Hanya pemilik skema eksternal atau superuser yang diizinkan untuk membuat tabel eksternal dalam skema eksternal. Untuk mentransfer kepemilikan skema eksternal, gunakan [ALTER SCHEMA](r_ALTER_SCHEMA.md) untuk mengubah pemilik. 

*JALANKAN PADA SEMUA FUNGSI DALAM SKEMA schema\$1name*  <a name="grant-all-functions"></a>
Memberikan izin yang ditentukan pada semua fungsi dalam skema yang direferensikan.  
Amazon Redshift tidak mendukung pernyataan GRANT atau REVOKE untuk entri bawaan pg\$1proc yang ditentukan dalam namespace pg\$1catalog. 

JALANKAN PROSEDUR *prosedur\$1name*   <a name="grant-procedure"></a>
Memberikan izin EXECUTE pada prosedur tersimpan tertentu. Karena nama prosedur yang disimpan dapat kelebihan beban, Anda harus menyertakan daftar argumen untuk prosedur tersebut. Untuk informasi selengkapnya, lihat [Penamaan prosedur tersimpan](stored-procedure-naming.md).

*JALANKAN PADA SEMUA PROSEDUR DALAM SKEMA schema\$1name*  <a name="grant-all-procedures"></a>
Memberikan izin yang ditentukan pada semua prosedur yang disimpan dalam skema yang direferensikan.

PENGGUNAAN PADA LANGUAGE *language\$1name*   
Memberikan izin PENGGUNAAN pada suatu bahasa.   
Mulai 1 November 2025, Amazon Redshift tidak akan lagi mendukung pembuatan Python baru. UDFs Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Mulai 1 Juli 2026, Amazon Redshift tidak akan lagi mendukung Python. UDFs Kami menyarankan Anda memigrasikan UDFs Python yang ada ke UDFs Lambda sebelum 1 November 2025. Untuk informasi tentang membuat dan menggunakan Lambda UDFs, lihat. [Lambda Skalar UDFs](udf-creating-a-lambda-sql-udf.md) [Untuk informasi tentang mengonversi UDFs Python yang ada ke UDFs Lambda, lihat posting blog.](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)
Izin PENGGUNAAN PADA BAHASA diperlukan untuk membuat fungsi yang ditentukan pengguna (UDFs) dengan menjalankan perintah. [CREATE FUNCTION](r_CREATE_FUNCTION.md) Untuk informasi selengkapnya, lihat [Keamanan dan izin UDF](udf-security-and-privileges.md).   
Izin PENGGUNAAN PADA BAHASA diperlukan untuk membuat prosedur tersimpan dengan menjalankan [BUAT PROSEDUR](r_CREATE_PROCEDURE.md) perintah. Untuk informasi selengkapnya, lihat [Keamanan dan hak istimewa untuk prosedur tersimpan](stored-procedure-security-and-privileges.md).  
Untuk Python UDFs, gunakan. `plpythonu` Untuk SQL UDFs, gunakan`sql`. Untuk prosedur yang disimpan, gunakan`plpgsql`.

ON COPY JOB *job\$1name*  <a name="on-copy-job"></a>
Memberikan izin yang ditentukan pada pekerjaan penyalinan.

UNTUK \$1SEMUA \$1 SALIN \$1 BONGKAR \$1 FUNGSI EKSTERNAL \$1 BUAT MODEL\$1 [,...]   <a name="grant-for"></a>
Menentukan perintah SQL yang izin diberikan. Anda dapat menentukan SEMUA untuk memberikan izin pada pernyataan COPY, UNLOAD, EXTERNAL FUNCTION, dan CREATE MODEL. Klausul ini hanya berlaku untuk pemberian izin ASSUMEROLE.

MENGUBAH  
Memberikan izin ALTER kepada pengguna untuk menambah atau menghapus objek dari datashare, atau untuk mengatur properti PUBLICACESSIBLE. Untuk informasi selengkapnya, lihat [MENGUBAH DATASHARE](r_ALTER_DATASHARE.md).

BERBAGI  
Memberikan pemrissions kepada pengguna dan grup pengguna untuk menambahkan konsumen data ke datashare. Izin ini diperlukan untuk mengaktifkan konsumen tertentu (akun atau namespace) untuk mengakses datashare dari cluster mereka. Konsumen dapat berupa AWS akun yang sama atau berbeda, dengan namespace cluster yang sama atau berbeda seperti yang ditentukan oleh pengidentifikasi unik global (GUID).

*DI DATASHARE datashare\$1name*   <a name="grant-datashare"></a>
Memberikan izin yang ditentukan pada datashare yang direferensikan. Untuk informasi tentang perincian kontrol akses konsumen, lihat. [Berbagi data di berbagai tingkatan di Amazon Redshift](datashare-overview.md#granularity)

PEMAKAIAN  
Ketika USAGE diberikan ke akun konsumen atau namespace dalam akun yang sama, akun konsumen tertentu atau namespace dalam akun dapat mengakses datashare dan objek datashare dengan cara hanya-baca. 

KE NAMESPACE 'clusternamespace GUID'  
Menunjukkan namespace di akun yang sama di mana konsumen dapat menerima izin yang ditentukan untuk datashare. Ruang nama menggunakan GUID alfanumerik 128-bit.

KE AKUN 'accountnumber' [VIA DATA CATALOG]  
Menunjukkan jumlah akun lain yang konsumennya dapat menerima izin yang ditentukan untuk datashare. Menentukan 'VIA DATA CATALOG' menunjukkan bahwa Anda memberikan penggunaan datashare ke akun Lake Formation. Menghilangkan parameter ini berarti Anda memberikan penggunaan ke akun yang memiliki cluster.

PADA DATABASE *shared\$1database\$1name> [*,...]   <a name="grant-datashare"></a>
Memberikan izin penggunaan yang ditentukan pada database tertentu yang dibuat dalam datashare yang ditentukan.

*PADA SKEMA shared\$1schema*   <a name="grant-datashare"></a>
Memberikan izin yang ditentukan pada skema tertentu yang dibuat dalam datashare yang ditentukan.

UNTUK \$1SKEMA \$1 TABEL \$1 FUNGSI \$1 PROSEDUR \$1 BAHASA \$1 SALINAN PEKERJAAN\$1 DI   
Menentukan objek database untuk memberikan izin untuk. Parameter berikut IN menentukan ruang lingkup izin yang diberikan.

BUAT MODEL  
Memberikan izin CREATE MODEL kepada pengguna atau grup pengguna tertentu.

PADA MODEL *model\$1name*  
Memberikan izin EXECUTE pada model tertentu. 

KATALOG AKSES  
Memberikan izin untuk melihat metadata objek yang relevan yang dapat diakses oleh peran tersebut.

\$1peran\$1 [,...]  
Peran yang akan diberikan kepada peran lain, pengguna, atau PUBLIK.  
PUBLIC mewakili grup yang selalu mencakup semua pengguna. Izin pengguna individu terdiri dari jumlah izin yang diberikan kepada PUBLIK, izin yang diberikan kepada grup mana pun yang dimiliki pengguna, dan izin apa pun yang diberikan kepada pengguna secara individual.

KE \$1\$1*user\$1name* [DENGAN OPSI ADMIN]\$1 \$1 peran\$1 [,...]  
Memberikan peran yang ditentukan kepada pengguna tertentu dengan OPSI WITH ADMIN, peran lain, atau PUBLIC.  
Klausul WITH ADMIN OPTION menyediakan opsi administrasi untuk semua peran yang diberikan kepada semua penerima hibah. 

*JELASKAN \$1RLS \$1 MASKING\$1 UNTUK ROLEName PERAN*  
Memberikan izin untuk menjelaskan filter kebijakan keamanan kueri dalam rencana EXPLOW ke peran. RLS memberikan izin untuk menjelaskan filter kebijakan keamanan tingkat baris. MASKING memberikan izin untuk menjelaskan filter kebijakan penyembunyian data dinamis.

*ABAIKAN RLS KE ROLEName PERAN*   
Memberikan izin untuk melewati kebijakan keamanan tingkat baris untuk kueri ke peran.

*KE \$1RLS \$1 MASKING\$1 POLICY policy\$1name*  
Menunjukkan kebijakan keamanan yang menerima izin. KEBIJAKAN TO RLS menunjukkan kebijakan keamanan tingkat baris. KEBIJAKAN MASKING menunjukkan kebijakan penyembunyian data dinamis.

## Catatan penggunaan
<a name="r_GRANT-usage-notes-link"></a>

Untuk mempelajari lebih lanjut tentang catatan penggunaan untuk GRANT, lihat[Catatan penggunaan](r_GRANT-usage-notes.md).

## Contoh
<a name="r_GRANT-examples-link"></a>

Untuk contoh cara menggunakan GRANT, lihat[Contoh](r_GRANT-examples.md).

# Catatan penggunaan
<a name="r_GRANT-usage-notes"></a>

Untuk memberikan hak istimewa pada suatu objek, Anda harus memenuhi salah satu kriteria berikut:
+ Jadilah pemilik objek.
+ Jadilah superuser.
+ Miliki hak istimewa hibah untuk objek dan hak istimewa itu.

Misalnya, perintah berikut memungkinkan HR pengguna untuk melakukan perintah SELECT pada tabel karyawan dan untuk memberikan dan mencabut hak istimewa yang sama untuk pengguna lain.

```
grant select on table employees to HR with grant option;
```

SDM tidak dapat memberikan hak istimewa untuk operasi apa pun selain SELECT, atau di meja selain karyawan. 

Sebagai contoh lain, perintah berikut memungkinkan HR pengguna untuk melakukan perintah ALTER di meja karyawan dan untuk memberikan dan mencabut hak istimewa yang sama untuk pengguna lain.

```
grant ALTER on table employees to HR with grant option;
```

SDM tidak dapat memberikan hak istimewa untuk operasi apa pun selain ALTER, atau di meja selain karyawan. 

Memiliki hak istimewa yang diberikan pada tampilan tidak berarti memiliki hak istimewa pada tabel yang mendasarinya. Demikian pula, memiliki hak istimewa yang diberikan pada skema tidak berarti memiliki hak istimewa pada tabel dalam skema. Sebagai gantinya, berikan akses ke tabel yang mendasarinya secara eksplisit.

Untuk memberikan hak istimewa ke AWS Lake Formation tabel, peran IAM yang terkait dengan skema eksternal tabel harus memiliki izin untuk memberikan hak istimewa ke tabel eksternal. Contoh berikut membuat skema eksternal dengan peran IAM terkait. `myGrantor` Peran IAM `myGrantor` memiliki izin untuk memberikan izin kepada orang lain. Perintah GRANT menggunakan izin peran IAM `myGrantor` yang terkait dengan skema eksternal untuk memberikan izin ke peran IAM. `myGrantee`

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
grant select
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Jika Anda MEMBERIKAN SEMUA hak istimewa untuk peran IAM, hak istimewa individu diberikan dalam Katalog Data Berkemampuan Lake Formation terkait. Misalnya, BERIKAN SEMUA berikut menghasilkan hak istimewa individu yang diberikan (SELECT, ALTER, DROP, DELETE, dan INSERT) yang ditampilkan di konsol Lake Formation.

```
grant all
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Superuser dapat mengakses semua objek terlepas dari perintah GRANT dan REVOKE yang menetapkan hak istimewa objek.

## Catatan penggunaan untuk kontrol akses tingkat kolom
<a name="r_GRANT-usage-notes-clp"></a>

Catatan penggunaan berikut berlaku untuk hak istimewa tingkat kolom pada tabel dan tampilan Amazon Redshift. Catatan ini menjelaskan tabel; catatan yang sama berlaku untuk tampilan kecuali kita secara eksplisit mencatat pengecualian. 
+ Untuk tabel Amazon Redshift, Anda hanya dapat memberikan hak SELECT dan UPDATE di tingkat kolom. Untuk tampilan Amazon Redshift, Anda hanya dapat memberikan hak istimewa SELECT di tingkat kolom. 
+ Kata kunci ALL adalah sinonim untuk hak istimewa SELECT dan UPDATE yang digabungkan saat digunakan dalam konteks GRANT tingkat kolom pada tabel. 
+ Jika Anda tidak memiliki hak istimewa SELECT pada semua kolom dalam tabel, melakukan operasi SELECT \$1 hanya mengembalikan kolom-kolom yang dapat Anda akses. Saat menggunakan tampilan, operasi SELECT \$1 mencoba mengakses semua kolom dalam tampilan. Jika Anda tidak memiliki izin untuk mengakses semua kolom, kueri ini gagal dengan kesalahan izin ditolak.
+ SELECT \$1 tidak diperluas ke hanya kolom yang dapat diakses dalam kasus berikut:
  + Anda tidak dapat membuat tampilan reguler hanya dengan kolom yang dapat diakses menggunakan SELECT \$1.
  + Anda tidak dapat membuat tampilan terwujud hanya dengan kolom yang dapat diakses menggunakan SELECT \$1.
+ Jika Anda memiliki hak istimewa SELECT atau UPDATE pada tabel atau tampilan dan menambahkan kolom, Anda masih memiliki hak istimewa yang sama pada tabel atau tampilan dan dengan demikian semua kolomnya. 
+ Hanya pemilik tabel atau superuser yang dapat memberikan hak istimewa tingkat kolom. 
+ Klausa WITH GRANT OPTION tidak didukung untuk hak istimewa tingkat kolom.
+ Anda tidak dapat memiliki hak istimewa yang sama di tingkat tabel dan tingkat kolom. Misalnya, pengguna tidak `data_scientist` dapat memiliki hak istimewa SELECT pada tabel `employee` dan hak pilih pada kolom. `employee.department` Pertimbangkan hasil berikut saat memberikan hak istimewa yang sama ke tabel dan kolom di dalam tabel:
  + Jika pengguna memiliki hak istimewa tingkat tabel di atas meja, maka pemberian hak istimewa yang sama di tingkat kolom tidak berpengaruh. 
  + Jika pengguna memiliki hak istimewa tingkat tabel di atas meja, maka mencabut hak istimewa yang sama untuk satu atau beberapa kolom tabel mengembalikan kesalahan. Sebaliknya, cabut hak istimewa di tingkat tabel. 
  + Jika pengguna memiliki hak istimewa tingkat kolom, maka pemberian hak istimewa yang sama di tingkat tabel mengembalikan kesalahan. 
  + Jika pengguna memiliki hak istimewa tingkat kolom, maka mencabut hak istimewa yang sama di tingkat tabel akan mencabut hak istimewa kolom dan tabel untuk semua kolom di atas tabel. 
+ Anda tidak dapat memberikan hak istimewa tingkat kolom pada tampilan yang mengikat akhir.
+ Untuk membuat tampilan terwujud, Anda harus memiliki hak istimewa SELECT tingkat tabel pada tabel dasar. Bahkan jika Anda memiliki hak istimewa tingkat kolom pada kolom tertentu, Anda tidak dapat membuat tampilan terwujud hanya pada kolom tersebut. Namun, Anda dapat memberikan hak istimewa SELECT ke kolom tampilan terwujud, mirip dengan tampilan biasa. 
+ [Untuk mencari hibah hak istimewa tingkat kolom, gunakan tampilan PG\$1ATTRIBUTE\$1INFO.](r_PG_ATTRIBUTE_INFO.md) 

## Catatan penggunaan untuk memberikan izin ASSUMEROLE
<a name="r_GRANT-usage-notes-assumerole"></a>

Catatan penggunaan berikut berlaku untuk pemberian izin ASSUMEROLE di Amazon Redshift. 

Anda menggunakan izin ASSUMEROLE untuk mengontrol izin akses peran IAM untuk pengguna database, peran, atau grup pada perintah seperti COPY, UNLOAD, FUNGSI EKSTERNAL, atau BUAT MODEL. Setelah Anda memberikan izin ASSUMEROLE kepada pengguna, peran, atau grup untuk peran IAM, pengguna, peran, atau grup dapat mengambil peran tersebut saat menjalankan perintah. Izin ASSUMEROLE memungkinkan Anda untuk memberikan akses ke perintah yang sesuai sesuai kebutuhan.

Hanya pengguna super database yang dapat memberikan atau mencabut izin ASSUMEROLE untuk pengguna, peran, dan grup. Superuser selalu mempertahankan izin ASSUMEROLE.

Untuk mengaktifkan penggunaan izin ASSUMEROLE bagi pengguna, peran, dan grup, pengguna super melakukan dua tindakan berikut:
+ Jalankan pernyataan berikut sekali di cluster:

  ```
  revoke assumerole on all from public for all;
  ```
+ Berikan izin ASSUMEROLE kepada pengguna, peran, dan grup untuk perintah yang sesuai.

Anda dapat menentukan rantai peran dalam klausa ON saat memberikan izin ASSUMEROLE. Anda menggunakan koma untuk memisahkan peran dalam rantai peran, misalnya,`Role1,Role2,Role3`. Jika rantai peran ditentukan saat memberikan izin ASSUMEROLE, Anda harus menentukan rantai peran saat melakukan operasi yang diberikan oleh izin ASSUMEROLE. Anda tidak dapat menentukan peran individu dalam rantai peran saat melakukan operasi yang diberikan oleh izin ASSUMEROLE. Misalnya, jika pengguna, peran, atau grup diberikan rantai peran`Role1,Role2,Role3`, Anda tidak dapat menentukan hanya `Role1` untuk melakukan operasi. 

Jika pengguna mencoba melakukan operasi COPY, UNLOAD, EXTERNAL FUNCTION, atau CREATE MODEL dan belum diberikan izin ASSUMEROLE, pesan yang mirip dengan berikut akan muncul.

```
ERROR:  User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY 
```

Untuk mencantumkan pengguna yang telah diberikan akses ke peran dan perintah IAM melalui izin ASSUMEROLE, lihat. [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md) Untuk mencantumkan peran IAM dan izin perintah yang telah diberikan kepada pengguna yang Anda tentukan, lihat. [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md) Untuk mencantumkan pengguna, peran, dan grup yang telah diberikan akses ke peran IAM yang Anda tentukan, lihat[PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md).

## Catatan penggunaan untuk memberikan izin pembelajaran mesin
<a name="r_GRANT-usage-notes-create-model"></a>

Anda tidak dapat secara langsung memberikan atau mencabut izin yang terkait dengan fungsi ML. Fungsi ML milik model ML dan izin dikontrol melalui model. Sebagai gantinya, Anda dapat memberikan izin yang terkait dengan model ML. Contoh berikut menunjukkan bagaimana memberikan izin kepada semua pengguna untuk menjalankan fungsi ML yang terkait dengan model. `customer_churn`

```
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
```

Anda juga dapat memberikan semua izin kepada pengguna untuk model `customer_churn` ML.

```
GRANT ALL on MODEL customer_churn TO ml_user;
```

Pemberian `EXECUTE` izin yang terkait dengan fungsi ML akan gagal jika ada fungsi ML dalam skema, bahkan jika fungsi ML tersebut sudah memiliki `EXECUTE` izin melalui. `GRANT EXECUTE ON MODEL` Sebaiknya gunakan skema terpisah saat menggunakan `CREATE MODEL` perintah untuk menjaga fungsi ML dalam skema terpisah sendiri. Contoh berikut menunjukkan bagaimana melakukannya.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Contoh
<a name="r_GRANT-examples"></a>

 Contoh berikut memberikan hak istimewa SELECT pada tabel PENJUALAN kepada pengguna. `fred` 

```
grant select on table sales to fred;
```

Contoh berikut memberikan hak istimewa SELECT pada semua tabel dalam skema QA\$1TICKIT kepada pengguna. `fred` 

```
grant select on all tables in schema qa_tickit to fred;
```

Contoh berikut memberikan semua hak istimewa skema pada skema QA\$1TICKIT ke grup pengguna QA\$1USERS. Hak istimewa skema adalah CREATE dan USE. PENGGUNAAN memberi pengguna akses ke objek dalam skema, tetapi tidak memberikan hak istimewa seperti INSERT atau SELECT pada objek tersebut. Berikan hak istimewa pada setiap objek secara terpisah.

```
create group qa_users;
grant all on schema qa_tickit to group qa_users;
```

Contoh berikut memberikan semua hak istimewa pada tabel PENJUALAN dalam skema QA\$1TICKIT untuk semua pengguna dalam grup QA\$1USERS.

```
grant all on table qa_tickit.sales to group qa_users;
```

Contoh berikut memberikan semua hak istimewa pada tabel PENJUALAN dalam skema QA\$1TICKIT untuk semua pengguna dalam grup QA\$1USERS dan RO\$1USERS.

```
grant all on table qa_tickit.sales to group qa_users, group ro_users;
```

Contoh berikut memberikan hak istimewa DROP pada tabel PENJUALAN dalam skema QA\$1TICKIT untuk semua pengguna dalam grup QA\$1USERS.

```
grant drop on table qa_tickit.sales to group qa_users;>
```

Urutan perintah berikut menunjukkan bagaimana akses ke skema tidak memberikan hak istimewa pada tabel dalam skema. 

```
create user schema_user in group qa_users password 'Abcd1234';
create schema qa_tickit;
create table qa_tickit.test (col1 int);
grant all on schema qa_tickit to schema_user;

set session authorization schema_user;
select current_user;


current_user
--------------
schema_user
(1 row)


select count(*) from qa_tickit.test;


ERROR: permission denied for relation test [SQL State=42501]


set session authorization dw_user;
grant select on table qa_tickit.test to schema_user;
set session authorization schema_user;
select count(*) from qa_tickit.test;


count
-------
0
(1 row)
```

Urutan perintah berikut menunjukkan bagaimana akses ke tampilan tidak menyiratkan akses ke tabel dasarnya. Pengguna bernama VIEW\$1USER tidak dapat memilih dari tabel DATE, meskipun pengguna ini telah diberikan semua hak istimewa pada VIEW\$1DATE. 

```
create user view_user password 'Abcd1234';
create view view_date as select * from date;
grant all on view_date to view_user;
set session authorization view_user;
select current_user;


current_user
--------------
view_user
(1 row)


select count(*) from view_date;


count
-------
365
(1 row)


select count(*) from date;


ERROR:  permission denied for relation date
```

Contoh berikut memberikan hak istimewa SELECT pada `cust_name` dan `cust_phone` kolom `cust_profile` tabel kepada pengguna. `user1` 

```
grant select(cust_name, cust_phone) on cust_profile to user1;
```

Contoh berikut memberikan hak istimewa SELECT pada `cust_phone` kolom `cust_name` dan hak istimewa UPDATE pada `cust_contact_preference` kolom `cust_profile` tabel ke grup. `sales_group` 

```
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
```

Contoh berikut menunjukkan penggunaan kata kunci ALL untuk memberikan hak SELECT dan UPDATE pada tiga kolom tabel `cust_profile` ke `sales_admin` grup. 

```
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
```

Contoh berikut memberikan hak istimewa SELECT pada `cust_name` kolom `cust_profile_vw` tampilan kepada pengguna. `user2` 

```
grant select(cust_name) on cust_profile_vw to user2;
```

## Contoh pemberian akses ke datashares
<a name="r_GRANT-examples-datashare"></a>

Contoh berikut menunjukkan izin penggunaan berbagi data GRANT pada database atau skema tertentu yang dibuat dari datashare. 

Dalam contoh berikut, admin sisi produsen memberikan izin USAGE pada `salesshare` datashare ke namespace yang ditentukan. 

```
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

Dalam contoh berikut, admin sisi konsumen memberikan izin PENGGUNAAN pada to. `sales_db` `Bob`

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

Dalam contoh berikut, admin sisi konsumen memberikan izin PENGGUNAAN HIBAH pada `sales_schema` skema untuk peran tersebut. `Analyst_role` `sales_schema`adalah skema eksternal yang menunjuk ke sales\$1db.

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

Pada titik ini, `Bob` dan `Analyst_role` dapat mengakses semua objek database di `sales_schema` dan`sales_db`.

Contoh berikut menunjukkan pemberian izin tingkat objek tambahan untuk objek dalam database bersama. Izin tambahan ini hanya diperlukan jika perintah CREATE DATABASE yang digunakan untuk membuat database bersama menggunakan klausa WITH PERMISSIONS. Jika perintah CREATE DATABASE tidak menggunakan WITH PERMISSIONS, pemberian USE pada database bersama memberikan akses penuh ke semua objek dalam database tersebut.

```
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
```

## Contoh pemberian izin cakupan
<a name="r_GRANT-examples-scoped"></a>

Contoh berikut memberikan penggunaan untuk semua skema saat ini dan masa depan dalam `Sales_db` database untuk peran tersebut. `Sales`

```
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
```

Contoh berikut memberikan izin SELECT untuk semua tabel saat ini dan masa depan dalam `Sales_db` database kepada pengguna`alice`, dan juga memberikan `alice` izin untuk memberikan izin cakupan pada `Sales_db` tabel ke pengguna lain.

```
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
```

Contoh berikut memberikan izin EXECUTE untuk fungsi dalam `Sales_schema` skema kepada pengguna. `bob`

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

Contoh berikut memberikan semua izin untuk semua tabel dalam `ShareSchema` skema `ShareDb` database untuk peran. `Sales` Saat menentukan skema, Anda dapat menentukan database skema menggunakan format dua bagian. `database.schema`

```
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
```

Contoh berikut ini sama dengan yang sebelumnya. Anda dapat menentukan database menggunakan `DATABASE` kata kunci alih-alih menggunakan format dua bagian.

```
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
```

## Contoh pemberian hak istimewa ASSUMEROLE
<a name="r_GRANT-examples-assumerole"></a>

Berikut ini adalah contoh pemberian hak istimewa ASSUMEROLE.

Contoh berikut menunjukkan pernyataan REVOKE bahwa superuser berjalan sekali di cluster untuk mengaktifkan penggunaan hak istimewa ASSUMEROLE untuk pengguna dan grup. Kemudian, superuser memberikan hak istimewa ASSUMEROLE kepada pengguna dan grup untuk perintah yang sesuai. Untuk informasi tentang mengaktifkan penggunaan hak istimewa ASSUMEROLE untuk pengguna dan grup, lihat. [Catatan penggunaan untuk memberikan izin ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)

```
revoke assumerole on all from public for all;
```

Contoh berikut memberikan hak istimewa ASSUMEROLE kepada pengguna untuk peran IAM untuk melakukan `reg_user1` operasi COPY. `Redshift-S3-Read` 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read'
to reg_user1 for copy;
```

Contoh berikut memberikan hak istimewa ASSUMEROLE kepada pengguna untuk rantai `RoleA` peran IAM, `reg_user1` untuk melakukan operasi UNLOAD. `RoleB` 

```
grant assumerole
on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB'
to reg_user1
for unload;
```

Berikut ini adalah contoh perintah UNLOAD menggunakan rantai `RoleA` peran IAM,. `RoleB`

```
unload ('select * from venue limit 10')
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

Contoh berikut memberikan hak istimewa ASSUMEROLE kepada pengguna untuk peran IAM `reg_user1` untuk membuat fungsi eksternal. `Redshift-Exfunc` 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc'
to reg_user1 for external function;
```

Contoh berikut memberikan hak istimewa ASSUMEROLE kepada pengguna untuk peran `Redshift-model` IAM `reg_user1` untuk membuat model pembelajaran mesin. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML'
to reg_user1 for create model;
```

## Contoh pemberian hak istimewa PERAN
<a name="r_GRANT-examples-role"></a>

Contoh berikut memberikan sample\$1role1 ke user1.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

Contoh berikut memberikan sample\$1role1 ke user1 dengan OPSI WITH ADMIN, menetapkan sesi saat ini untuk user1, dan user1 memberikan sample\$1role1 ke user2.

```
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION;
SET SESSION AUTHORIZATION user1;
GRANT ROLE sample_role1 TO user2;
```

Contoh berikut memberikan sample\$1role1 ke sample\$1role2.

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

Contoh berikut memberikan sample\$1role2 ke sample\$1role3 dan sample\$1role4. Kemudian mencoba memberikan sample\$1role3 ke sample\$1role1.

```
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2;
ERROR: cannot grant this role, a circular dependency was detected between these roles
```

Contoh berikut memberikan hak istimewa sistem CREATE USER ke sample\$1role1.

```
GRANT CREATE USER TO ROLE sample_role1;
```

Contoh berikut memberikan peran `sys:dba` yang ditentukan sistem ke user1.

```
GRANT ROLE sys:dba TO user1;
```

Contoh berikut mencoba memberikan sample\$1role3 dalam ketergantungan melingkar ke sample\$1role2.

```
CREATE ROLE sample_role3;
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail
ERROR:  cannot grant this role, a circular dependency was detected between these roles
```

# INSERT
<a name="r_INSERT_30"></a>

**Topics**
+ [Sintaksis](#r_INSERT_30-synopsis)
+ [Parameter](#r_INSERT_30-parameters)
+ [Catatan penggunaan](#r_INSERT_30_usage_notes)
+ [Contoh INSERT](c_Examples_of_INSERT_30.md)

Menyisipkan baris baru ke dalam tabel. Anda dapat menyisipkan satu baris dengan sintaks VALUES, beberapa baris dengan sintaks VALUES, atau satu atau lebih baris yang ditentukan oleh hasil kueri (INSERT INTO... SELECT).

**catatan**  
Kami sangat menyarankan Anda untuk menggunakan [MENYONTEK](r_COPY.md) perintah untuk memuat sejumlah besar data. Menggunakan pernyataan INSERT individu untuk mengisi tabel mungkin sangat lambat. Atau, jika data Anda sudah ada di tabel database Amazon Redshift lainnya, gunakan INSERT INTO SELECT atau [CREATE TABLE AS](r_CREATE_TABLE_AS.md) untuk meningkatkan kinerja. Untuk informasi selengkapnya tentang menggunakan perintah COPY untuk memuat tabel, lihat[Memuat data di Amazon Redshift](t_Loading_data.md).

**catatan**  
Ukuran maksimum untuk satu pernyataan SQL adalah 16 MB.

## Sintaksis
<a name="r_INSERT_30-synopsis"></a>

```
INSERT INTO table_name [ ( column [, ...] ) ]
{DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ( { expression | DEFAULT } [, ...] )
[, ...] ] |
query }
```

## Parameter
<a name="r_INSERT_30-parameters"></a>

 *table\$1name*   
Meja sementara atau persisten. Hanya pemilik tabel atau pengguna dengan hak istimewa INSERT di atas meja yang dapat menyisipkan baris. Jika Anda menggunakan klausa *kueri* untuk menyisipkan baris, Anda harus memiliki hak pilih pada tabel yang disebutkan dalam kueri.   
Gunakan INSERT (tabel eksternal) untuk menyisipkan hasil kueri SELECT ke dalam tabel yang ada di katalog eksternal. Untuk informasi selengkapnya, lihat [INSERT (tabel eksternal)](r_INSERT_external_table.md).

 *kolom*   
Anda dapat menyisipkan nilai ke dalam satu atau lebih kolom tabel. Anda dapat mencantumkan nama kolom target dalam urutan apa pun. Jika Anda tidak menentukan daftar kolom, nilai yang akan disisipkan harus sesuai dengan kolom tabel dalam urutan yang dideklarasikan dalam pernyataan CREATE TABLE. Jika jumlah nilai yang akan dimasukkan kurang dari jumlah kolom dalam tabel, kolom *n* pertama dimuat.   
Baik nilai default yang dideklarasikan atau nilai null dimuat ke kolom apa pun yang tidak terdaftar (secara implisit atau eksplisit) dalam pernyataan INSERT. 

DEFAULT VALUES   
Jika kolom dalam tabel diberi nilai default saat tabel dibuat, gunakan kata kunci ini untuk menyisipkan baris yang seluruhnya terdiri dari nilai default. Jika salah satu kolom tidak memiliki nilai default, null dimasukkan ke dalam kolom tersebut. Jika salah satu kolom dinyatakan TIDAK NULL, pernyataan INSERT mengembalikan kesalahan. 

NILAI   
Gunakan kata kunci ini untuk menyisipkan satu atau lebih baris, setiap baris terdiri dari satu atau lebih nilai. Daftar VALUES untuk setiap baris harus sejajar dengan daftar kolom. Untuk menyisipkan beberapa baris, gunakan pembatas koma di antara setiap daftar ekspresi. Jangan ulangi kata kunci VALUES. Semua daftar VALUES untuk pernyataan INSERT beberapa baris harus berisi jumlah nilai yang sama. 

 *ekspresi*   
Nilai tunggal atau ekspresi yang mengevaluasi ke satu nilai. Setiap nilai harus kompatibel dengan tipe data kolom tempat ia dimasukkan. Jika memungkinkan, nilai yang tipe datanya tidak cocok dengan tipe data yang dideklarasikan kolom secara otomatis dikonversi ke tipe data yang kompatibel. Contoh:   
+ Nilai desimal `1.1` dimasukkan ke dalam kolom INT sebagai. `1` 
+ Nilai desimal `100.8976` dimasukkan ke dalam kolom DEC (5,2) sebagai. `100.90` 
Anda dapat secara eksplisit mengonversi nilai ke tipe data yang kompatibel dengan menyertakan sintaks tipe cast dalam ekspresi. Misalnya, jika kolom COL1 dalam tabel T1 adalah kolom CHAR (3):   

```
insert into t1(col1) values('Incomplete'::char(3));
```
Pernyataan ini menyisipkan nilai `Inc` ke dalam kolom.   
Untuk pernyataan INSERT VALUES baris tunggal, Anda dapat menggunakan subquery skalar sebagai ekspresi. Hasil subquery dimasukkan ke dalam kolom yang sesuai.   
Subkueri tidak didukung sebagai ekspresi untuk pernyataan INSERT VALUES beberapa baris. 

DEFAULT   
Gunakan kata kunci ini untuk menyisipkan nilai default untuk kolom, seperti yang didefinisikan ketika tabel dibuat. Jika tidak ada nilai default untuk kolom, null dimasukkan. Anda tidak dapat menyisipkan nilai default ke dalam kolom yang memiliki batasan NOT NULL jika kolom tersebut tidak memiliki nilai default eksplisit yang ditetapkan padanya dalam pernyataan CREATE TABLE. 

 *query*   
Masukkan satu atau lebih baris ke dalam tabel dengan mendefinisikan kueri apa pun. Semua baris yang dihasilkan query dimasukkan ke dalam tabel. Kueri harus mengembalikan daftar kolom yang kompatibel dengan kolom dalam tabel, tetapi nama kolom tidak harus cocok. 

## Catatan penggunaan
<a name="r_INSERT_30_usage_notes"></a>

**catatan**  
Kami sangat menyarankan Anda untuk menggunakan [MENYONTEK](r_COPY.md) perintah untuk memuat sejumlah besar data. Menggunakan pernyataan INSERT individu untuk mengisi tabel mungkin sangat lambat. Atau, jika data Anda sudah ada di tabel database Amazon Redshift lainnya, gunakan INSERT INTO SELECT atau [CREATE TABLE AS](r_CREATE_TABLE_AS.md) untuk meningkatkan kinerja. Untuk informasi selengkapnya tentang menggunakan perintah COPY untuk memuat tabel, lihat[Memuat data di Amazon Redshift](t_Loading_data.md).

Format data untuk nilai yang disisipkan harus sesuai dengan format data yang ditentukan oleh definisi CREATE TABLE. 

 Setelah memasukkan sejumlah besar baris baru ke dalam tabel: 
+ Vakum meja untuk merebut kembali ruang penyimpanan dan mengurutkan ulang baris. 
+ Analisis tabel untuk memperbarui statistik untuk perencana kueri. 

Ketika nilai dimasukkan ke dalam kolom DECIMAL dan mereka melebihi skala yang ditentukan, nilai yang dimuat dibulatkan sesuai kebutuhan. Misalnya, ketika nilai `20.259` dimasukkan ke dalam kolom DECIMAL (8,2), nilai yang disimpan adalah. `20.26` 

Anda dapat menyisipkan ke kolom GENERATED BY DEFAULT AS IDENTITY. Anda dapat memperbarui kolom yang didefinisikan sebagai DIHASILKAN OLEH DEFAULT SEBAGAI IDENTITAS dengan nilai yang Anda berikan. Untuk informasi selengkapnya, lihat [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Contoh INSERT
<a name="c_Examples_of_INSERT_30"></a>

Tabel CATEGORY dalam database TICKIT berisi baris berikut: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
     1 | Sports   | MLB       | Major League Baseball
     2 | Sports   | NHL       | National Hockey League
     3 | Sports   | NFL       | National Football League
     4 | Sports   | NBA       | National Basketball Association
     5 | Sports   | MLS       | Major League Soccer
     6 | Shows    | Musicals  | Musical theatre
     7 | Shows    | Plays     | All non-musical theatre
     8 | Shows    | Opera     | All opera and light opera
     9 | Concerts | Pop       | All rock and pop music concerts
    10 | Concerts | Jazz      | All jazz singers and bands
    11 | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

 Buat tabel CATEGORY\$1STAGE dengan skema serupa dengan tabel CATEGORY tetapi tentukan nilai default untuk kolom: 

```
create table category_stage
(catid smallint default 0,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');
```

Pernyataan INSERT berikut memilih semua baris dari tabel CATEGORY dan menyisipkannya ke dalam tabel CATEGORY\$1STAGE. 

```
insert into category_stage
(select * from category);
```

Tanda kurung di sekitar kueri bersifat opsional.

Perintah ini menyisipkan baris baru ke dalam tabel CATEGORY\$1STAGE dengan nilai yang ditentukan untuk setiap kolom secara berurutan: 

```
insert into category_stage values
(12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
```

Anda juga dapat menyisipkan baris baru yang menggabungkan nilai tertentu dan nilai default: 

```
insert into category_stage values
(13, 'Concerts', 'Other', default);
```

Jalankan kueri berikut untuk mengembalikan baris yang disisipkan: 

```
select * from category_stage
where catid in(12,13) order by 1;

 catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
    12 | Concerts | Comedy  | All stand-up comedy performances
    13 | Concerts | Other   | General
(2 rows)
```

Contoh berikut menunjukkan beberapa pernyataan INSERT VALUES beberapa baris. Contoh pertama menyisipkan nilai CATID tertentu untuk dua baris dan nilai default untuk kolom lain di kedua baris. 

```
insert into category_stage values
(14, default, default, default),
(15, default, default, default);

select * from category_stage where catid in(14,15) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
    14 | General  | General | General
    15 | General  | General | General
(2 rows)
```

Contoh berikutnya menyisipkan tiga baris dengan berbagai kombinasi nilai spesifik dan default: 

```
insert into category_stage values
(default, default, default, default),
(20, default, 'Country', default),
(21, 'Concerts', 'Rock', default);

select * from category_stage where catid in(0,20,21) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
     0 | General  | General | General
    20 | General  | Country | General
    21 | Concerts | Rock    | General
(3 rows)
```

Kumpulan VALUES pertama dalam contoh ini menghasilkan hasil yang sama seperti menentukan NILAI DEFAULT untuk pernyataan INSERT baris tunggal.

Contoh berikut menunjukkan perilaku INSERT ketika tabel memiliki kolom IDENTITY. Pertama, buat versi baru dari tabel CATEGORY, lalu masukkan baris ke dalamnya dari CATEGORY: 

```
create table category_ident
(catid int identity not null,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');


insert into category_ident(catgroup,catname,catdesc)
select catgroup,catname,catdesc from category;
```

Perhatikan bahwa Anda tidak dapat menyisipkan nilai integer tertentu ke dalam kolom CATID IDENTITY. Nilai kolom IDENTITAS dihasilkan secara otomatis.

Contoh berikut menunjukkan bahwa subquery tidak dapat digunakan sebagai ekspresi dalam pernyataan INSERT VALUES beberapa baris: 

```
insert into category(catid) values
((select max(catid)+1 from category)),
((select max(catid)+2 from category));

ERROR: can't use subqueries in multi-row VALUES
```

Contoh berikut menunjukkan insert ke dalam tabel sementara diisi dengan data dari `venue` tabel menggunakan `WITH SELECT` klausa. Untuk informasi selengkapnya tentang tabel `venue`, lihat [Database sampel](c_sampledb.md).

Pertama, buat tabel sementara`#venuetemp`.

```
CREATE TABLE #venuetemp AS SELECT * FROM venue;
```

Buat daftar baris dalam `#venuetemp` tabel.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756	
...
```

Masukkan 10 baris duplikat dalam `#venuetemp` tabel menggunakan `WITH SELECT` klausa.

```
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
```

Buat daftar baris dalam `#venuetemp` tabel.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756
5        Gillette Stadium           Foxborough   MA          68756
...
```

# INSERT (tabel eksternal)
<a name="r_INSERT_external_table"></a>

Menyisipkan hasil kueri SELECT ke dalam tabel eksternal yang ada pada katalog eksternal seperti untuk AWS Glue, AWS Lake Formation, atau metastore Apache Hive. Gunakan peran AWS Identity and Access Management (IAM) yang sama yang digunakan untuk perintah CREATE EXTERNAL SCHEMA untuk berinteraksi dengan katalog eksternal dan Amazon S3.

Untuk tabel yang tidak dipartisi, perintah INSERT (tabel eksternal) menulis data ke lokasi Amazon S3 yang ditentukan dalam tabel, berdasarkan properti tabel dan format file yang ditentukan.

Untuk tabel yang dipartisi, INSERT (tabel eksternal) menulis data ke lokasi Amazon S3 sesuai dengan kunci partisi yang ditentukan dalam tabel. Ini juga secara otomatis mendaftarkan partisi baru di katalog eksternal setelah operasi INSERT selesai.

Anda tidak dapat menjalankan INSERT (tabel eksternal) dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 

## Sintaksis
<a name="r_INSERT_external_table-synopsis"></a>

```
INSERT INTO external_schema.table_name
{ select_statement }
```

## Parameter
<a name="r_INSERT_external_table-parameters"></a>

 *external\$1schema.table\$1name*   
Nama skema eksternal yang ada dan tabel eksternal target untuk dimasukkan ke dalam.

 *select\$1statement*   
Pernyataan yang menyisipkan satu atau lebih baris ke dalam tabel eksternal dengan mendefinisikan kueri apa pun. Semua baris yang dihasilkan kueri ditulis ke Amazon S3 dalam format teks atau Parket berdasarkan definisi tabel. Kueri harus mengembalikan daftar kolom yang kompatibel dengan tipe data kolom di tabel eksternal. Namun, nama kolom tidak harus cocok.

## Catatan penggunaan
<a name="r_INSERT_external_table_usage_notes"></a>

Jumlah kolom dalam kueri SELECT harus sama dengan jumlah kolom data dan kolom partisi. Lokasi dan tipe data dari setiap kolom data harus sesuai dengan tabel eksternal. Lokasi kolom partisi harus berada di akhir kueri SELECT, dalam urutan yang sama mereka didefinisikan dalam perintah CREATE EXTERNAL TABLE. Nama kolom tidak harus cocok.

Dalam beberapa kasus, Anda mungkin ingin menjalankan perintah INSERT (tabel eksternal) pada Katalog AWS Glue Data atau metastore Hive. Dalam hal ini AWS Glue, peran IAM yang digunakan untuk membuat skema eksternal harus memiliki izin baca dan tulis di Amazon S3 dan. AWS Glue Jika Anda menggunakan AWS Lake Formation katalog, peran IAM ini menjadi pemilik tabel Lake Formation yang baru. Peran IAM ini setidaknya harus memiliki izin berikut: 
+ PILIH, INSERT, PERBARUI izin pada tabel eksternal
+ Izin lokasi data di jalur Amazon S3 dari tabel eksternal

Untuk memastikan bahwa nama file unik, Amazon Redshift menggunakan format berikut untuk nama setiap file yang diunggah ke Amazon S3 secara default. 

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

Contohnya adalah `20200303_004509_810669_1007_0001_part_00.parquet`.

Pertimbangkan hal berikut saat menjalankan perintah INSERT (tabel eksternal):
+ Tabel eksternal yang memiliki format selain PARQUET atau TEXTFILE tidak didukung.
+ Perintah ini mendukung properti tabel yang ada seperti 'write.parallel', 'write.maxfilesize.mb', 'compression\$1type', dan 'serialization.null.format'. Untuk memperbarui nilai-nilai tersebut, jalankan perintah ALTER TABLE SET TABLE PROPERTIES.
+ Properti tabel 'NumRows' secara otomatis diperbarui menjelang akhir operasi INSERT. Properti tabel harus didefinisikan atau ditambahkan ke tabel jika tidak dibuat oleh CREATE EXTERNAL TABLE AS operasi.
+ Klausa LIMIT tidak didukung dalam kueri SELECT luar. Sebagai gantinya, gunakan klausa LIMIT bersarang.
+ Anda dapat menggunakan [STL\$1UNLOAD\$1LOG](r_STL_UNLOAD_LOG.md) tabel untuk melacak file yang ditulis ke Amazon S3 oleh setiap operasi INSERT (tabel eksternal).
+ Amazon Redshift hanya mendukung enkripsi standar Amazon S3 untuk INSERT (tabel eksternal).

## INSERT (tabel eksternal) contoh
<a name="c_Examples_of_INSERT_external_table"></a>

Contoh berikut menyisipkan hasil pernyataan SELECT ke dalam tabel eksternal.

```
INSERT INTO spectrum.lineitem
SELECT * FROM local_lineitem;
```

Contoh berikut menyisipkan hasil pernyataan SELECT ke dalam tabel eksternal dipartisi menggunakan partisi statis. Kolom partisi di-hardcode dalam pernyataan SELECT. Kolom partisi harus berada di akhir kueri.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, 'May', 28 FROM local_customer;
```

Contoh berikut menyisipkan hasil pernyataan SELECT ke dalam tabel eksternal dipartisi menggunakan partisi dinamis. Kolom partisi tidak di-hardcode. Data secara otomatis ditambahkan ke folder partisi yang ada, atau ke folder baru jika partisi baru ditambahkan.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, month, day FROM local_customer;
```

# GEMBOK
<a name="r_LOCK"></a>

Membatasi akses ke tabel database. Perintah ini hanya berarti ketika dijalankan di dalam blok transaksi.

Perintah LOCK memperoleh kunci tingkat tabel dalam mode “ACCESS EXCLUSIVE”, menunggu jika perlu untuk setiap kunci yang bertentangan dilepaskan. Mengunci tabel secara eksplisit dengan cara ini menyebabkan membaca dan menulis di atas meja menunggu ketika mereka dicoba dari transaksi atau sesi lain. Kunci tabel eksplisit yang dibuat oleh satu pengguna untuk sementara mencegah pengguna lain memilih data dari tabel itu atau memuat data ke dalamnya. Kunci dilepaskan ketika transaksi yang berisi perintah LOCK selesai.

Kunci tabel yang kurang ketat diperoleh secara implisit oleh perintah yang merujuk ke tabel, seperti operasi tulis. Misalnya, jika pengguna mencoba membaca data dari tabel saat pengguna lain memperbarui tabel, data yang dibaca akan menjadi snapshot dari data yang telah dilakukan. (Dalam beberapa kasus, kueri akan berhenti jika melanggar aturan isolasi serial.) Lihat [Mengelola operasi tulis bersamaan](c_Concurrent_writes.md).

Beberapa operasi DDL, seperti DROP TABLE dan TRUNCATE, membuat kunci eksklusif. Operasi ini mencegah pembacaan data.

Jika terjadi konflik kunci, Amazon Redshift menampilkan pesan kesalahan untuk mengingatkan pengguna yang memulai transaksi dalam konflik. Transaksi yang menerima konflik kunci dihentikan. Setiap kali konflik kunci terjadi, Amazon Redshift menulis entri ke tabel. [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md)

## Sintaksis
<a name="section_r_LOCK-synopsis"></a>

```
LOCK [ TABLE ] table_name [, ...]
```

## Parameter
<a name="parameters"></a>

TABEL   
Kata kunci opsional.

 *table\$1name*   
Nama tabel untuk dikunci. Anda dapat mengunci lebih dari satu tabel dengan menggunakan daftar nama tabel yang dibatasi koma. Anda tidak dapat mengunci tampilan. 

## Contoh
<a name="example2"></a>

```
begin;

lock event, sales;

...
```

# MERGE
<a name="r_MERGE"></a>

Secara kondisional menggabungkan baris dari tabel sumber ke dalam tabel target. Secara tradisional, ini hanya dapat dicapai dengan menggunakan beberapa pernyataan insert, update atau delete secara terpisah. Untuk informasi selengkapnya tentang operasi yang menggabungkan memungkinkan Anda menggabungkan, lihat [UPDATE](https://docs.aws.amazon.com/redshift/latest/dg/r_UPDATE.html), [DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_DELETE.html), dan [INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html).

## Sintaksis
<a name="r_MERGE-synopsis"></a>

```
MERGE INTO target_table 
USING source_table [ [ AS ] alias ] 
ON match_condition 
[ WHEN MATCHED THEN { UPDATE SET col_name = { expr } [,...] | DELETE }
WHEN NOT MATCHED THEN INSERT [ ( col_name [,...] ) ] VALUES ( { expr } [, ...] ) |
REMOVE DUPLICATES ]
```

## Parameter
<a name="r_MERGE-parameters"></a>

 *target\$1table*  
Tabel sementara atau permanen tempat pernyataan MERGE digabungkan.

 *source\$1table*  
*Tabel sementara atau permanen yang memasok baris untuk digabungkan menjadi target\$1table.* *source\$1table juga bisa menjadi tabel* Spectrum. 

 *alias*  
Nama alternatif sementara untuk *source\$1table*.  
Parameter ini bersifat opsional. *Alias sebelumnya dengan AS juga* opsional.

 *match\$1condition*  
*Menentukan predikat yang sama antara kolom tabel sumber dan kolom tabel target yang digunakan untuk menentukan apakah baris di *source\$1table dapat dicocokkan dengan baris di target\$1table*.* Jika kondisi terpenuhi, MERGE menjalankan *matched\$1clause* untuk baris itu. Jika tidak, MERGE menjalankan *not\$1matched\$1clause* untuk baris itu.

SAAT DICOCOKKAN  
 Menentukan tindakan yang akan dijalankan ketika kondisi kecocokan antara baris sumber dan baris target mengevaluasi ke True. Anda dapat menentukan tindakan UPDATE atau tindakan DELETE. 

UPDATE  
 Memperbarui baris yang cocok di *target\$1table*. Hanya nilai dalam *col\$1name* yang Anda tentukan yang diperbarui. 

DELETE  
 *Menghapus baris yang cocok di target\$1table.* 

BILA TIDAK COCOK  
 Menentukan tindakan yang akan dijalankan ketika kondisi kecocokan dievaluasi ke False atau Unknown. Anda hanya dapat menentukan tindakan insert insert untuk klausa ini. 

INSERT  
 **Menyisipkan ke dalam baris *target\$1table* dari *source\$1table yang tidak cocok dengan baris apa pun di target\$1table*, menurut match\$1condition.** Target *col\$1name* dapat dicantumkan dalam urutan apa pun. Jika Anda tidak memberikan nilai *col\$1name*, urutan default adalah semua kolom tabel dalam urutan yang dideklarasikan. 

 *col\$1name*  
Satu atau beberapa nama kolom yang ingin Anda ubah. Jangan sertakan nama tabel saat menentukan kolom target.

 *expr*  
Ekspresi mendefinisikan nilai baru untuk *col\$1name*.

 HAPUS DUPLIKAT  
Menentukan bahwa perintah MERGE berjalan dalam mode disederhanakan. Mode yang disederhanakan memiliki persyaratan sebagai berikut:  
+  *target\$1table* dan *source\$1table* harus memiliki jumlah kolom yang sama, jenis kolom yang kompatibel, dan urutan kolom yang sama. 
+  Hilangkan klausa WHEN dan klausa UPDATE dan INSERT dari perintah MERGE Anda. 
+  Gunakan klausa REMOVE DUPLICATES dalam perintah MERGE Anda. 
Dalam mode yang disederhanakan, MERGE melakukan hal berikut:  
+  *Baris di *target\$1table* yang memiliki kecocokan di *source\$1table* diperbarui agar sesuai dengan nilai di source\$1table.* 
+  *Baris di *source\$1table* yang tidak memiliki kecocokan di *target\$1table disisipkan ke target\$1table*.* 
+  Ketika beberapa baris di *target\$1table* cocok dengan baris yang sama di *source\$1table*, baris duplikat akan dihapus. Amazon Redshift menyimpan satu baris dan memperbaruinya. Baris duplikat yang tidak cocok dengan baris di *source\$1table* tetap tidak berubah. 
Menggunakan REMOVE DUPLICATES memberikan kinerja yang lebih baik daripada menggunakan WHEN MATCHED dan WHEN NOT MATCHED. *Sebaiknya gunakan REMOVE DUPLICATES jika *target\$1table* dan *source\$1table* kompatibel dan Anda tidak perlu mempertahankan baris duplikat di target\$1table.*

## Catatan penggunaan
<a name="r_MERGE_usage_notes"></a>
+ Untuk menjalankan pernyataan MERGE, Anda harus menjadi pemilik *source\$1table dan target\$1table**, atau memiliki izin SELECT untuk tabel* tersebut. Selain itu, Anda harus memiliki izin UPDATE, DELETE, dan INSERT untuk *target\$1table* tergantung pada operasi yang disertakan dalam pernyataan MERGE Anda.
+  *target\$1table* tidak bisa berupa tabel sistem, tabel katalog, atau tabel eksternal. 
+  *source\$1table dan target\$1table* *tidak bisa menjadi tabel* yang sama. 
+  Anda tidak dapat menggunakan klausa WITH dalam pernyataan MERGE. 
+  *Baris di *target\$1table* tidak dapat mencocokkan beberapa baris di source\$1table.* 

  Pertimbangkan contoh berikut:

  ```
  CREATE TABLE target (id INT, name CHAR(10));
  CREATE TABLE source (id INT, name CHAR(10));
  
  INSERT INTO target VALUES (1, 'Bob'), (2, 'John');
  INSERT INTO source VALUES (1, 'Tony'), (1, 'Alice'), (3, 'Bill');
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN DELETE
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  ```

  Dalam kedua pernyataan MERGE, operasi gagal karena ada beberapa baris dalam `source` tabel dengan nilai ID. `1`
+  *match\$1condition* dan *expr* tidak dapat mereferensikan sebagian kolom tipe SUPER. Misalnya, jika objek tipe SUPER Anda adalah array atau struktur, Anda tidak dapat menggunakan elemen individual dari kolom tersebut untuk *match\$1condition* atau *expr*, tetapi Anda dapat menggunakan seluruh kolom. 

  Pertimbangkan contoh berikut:

  ```
  CREATE TABLE IF NOT EXISTS target (key INT, value SUPER);
  CREATE TABLE IF NOT EXISTS source (key INT, value SUPER);
  
  INSERT INTO target VALUES (1, JSON_PARSE('{"key": 88}'));
  INSERT INTO source VALUES (1, ARRAY(1, 'John')), (2, ARRAY(2, 'Bill'));
  
  MERGE INTO target USING source ON target.key = source.key
  WHEN matched THEN UPDATE SET value = source.value[0]
  WHEN NOT matched THEN INSERT VALUES (source.key, source.value[0]);
  ERROR: Partial reference of SUPER column is not supported in MERGE statement.
  ```

  Untuk informasi selengkapnya tentang tipe SUPER, lihat [tipe SUPER](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html).
+ Jika *source\$1table* berukuran besar, mendefinisikan kolom gabungan dari *target\$1table dan *source\$1table** sebagai kunci distribusi dapat meningkatkan kinerja.
+ *Untuk menggunakan klausa HAPUS DUPLIKAT, Anda memerlukan izin SELECT, INSERT, dan DELETE untuk target\$1table.*
+  *source\$1table* dapat berupa tampilan atau subquery. Berikut ini adalah contoh pernyataan MERGE di mana *source\$1table* adalah subquery yang menghapus baris duplikat. 

  ```
  MERGE INTO target
  USING (SELECT id, name FROM source GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```
+ Target tidak dapat menjadi sumber data dari setiap subquery dari pernyataan MERGE yang sama. Misalnya, perintah SQL berikut mengembalikan kesalahan seperti ERROR: Sumber view/subquery dalam pernyataan Merge tidak dapat referensi tabel target. karena referensi subquery `target` bukan. `source`

  ```
  MERGE INTO target
  USING (SELECT id, name FROM target GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```

## Contoh
<a name="sub-examples-merge"></a>

Contoh berikut membuat dua tabel, lalu menjalankan operasi MERGE pada mereka, memperbarui baris yang cocok dalam tabel target dan menyisipkan baris yang tidak cocok. Kemudian menyisipkan nilai lain ke dalam tabel sumber dan menjalankan operasi MERGE lain, kali ini menghapus baris yang cocok dan memasukkan baris baru dari tabel sumber.

Pertama buat dan isi tabel sumber dan target.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (101, 'Bob'), (102, 'John'), (103, 'Susan');
INSERT INTO source VALUES (102, 'Tony'), (103, 'Alice'), (104, 'Bill');

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | John
 103 | Susan
(3 rows)

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
(3 rows)
```

Selanjutnya, gabungkan tabel sumber ke dalam tabel target, perbarui tabel target dengan baris yang cocok dan masukkan baris dari tabel sumber yang tidak cocok.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | Tony
 103 | Alice
 104 | Bill
(4 rows)
```

Perhatikan bahwa baris dengan nilai id 102 dan 103 diperbarui agar sesuai dengan nilai nama dari tabel target. Juga, baris baru dengan nilai id 104 dan nilai nama Bill dimasukkan ke dalam tabel target.

Selanjutnya, masukkan baris baru ke dalam tabel sumber.

```
INSERT INTO source VALUES (105, 'David');

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
 105 | David
(4 rows)
```

Terakhir, jalankan operasi gabungan menghapus baris yang cocok di tabel target, dan menyisipkan baris yang tidak cocok.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 105 | David
(2 rows)
```

Baris dengan nilai id 102, 103, dan 104 dihapus dari tabel target, dan baris baru dengan nilai id 105 dan nilai nama David dimasukkan ke dalam tabel target.

Contoh berikut menunjukkan sintaks sederhana dari perintah MERGE yang menggunakan klausa REMOVE DUPLICATES.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (11, 'Alice'), (23, 'Bill');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
11 | Alice
23 | David
22 | Clarence
(4 rows)
```

*Contoh berikut menunjukkan sintaks sederhana dari perintah MERGE yang menggunakan klausa REMOVE DUPLICATES, menghapus baris duplikat dari *target\$1table jika mereka memiliki baris yang cocok di source\$1table*.*

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (30, 'Daisy'), (11, 'Alice'), (23, 'Bill'), (23, 'Nikki');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
30 | Daisy
11 | Alice
23 | David
22 | Clarence
(5 rows)
```

Setelah MERGE berjalan, hanya ada satu baris dengan nilai ID 23 di *target\$1table*. *Karena tidak ada baris di *source\$1table* dengan nilai ID 30, dua baris duplikat dengan nilai ID 30 tetap berada di target\$1table.*

## Lihat juga
<a name="r_MERGE-see-also"></a>

 [INSERT](r_INSERT_30.md), [UPDATE](r_UPDATE.md), [DELETE](r_DELETE.md) 

# MEMPERSIAPKAN
<a name="r_PREPARE"></a>

Siapkan pernyataan untuk dieksekusi. 

PREPARE membuat pernyataan yang disiapkan. Ketika pernyataan PREPARE dijalankan, pernyataan yang ditentukan (SELECT, INSERT, UPDATE, atau DELETE) diuraikan, ditulis ulang, dan direncanakan. Ketika perintah EXECUTE kemudian dikeluarkan untuk pernyataan yang disiapkan, Amazon Redshift dapat secara opsional merevisi rencana eksekusi kueri (untuk meningkatkan kinerja berdasarkan nilai parameter yang ditentukan) sebelum menjalankan pernyataan yang disiapkan. 

## Sintaksis
<a name="r_PREPARE-synopsis"></a>

```
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
```

## Parameter
<a name="r_PREPARE-parameters"></a>

 *plan\$1nama*   
Nama sewenang-wenang yang diberikan untuk pernyataan yang disiapkan khusus ini. Ini harus unik dalam satu sesi dan kemudian digunakan untuk menjalankan atau mengalokasikan pernyataan yang disiapkan sebelumnya.

 *tipe data*   
Tipe data parameter untuk pernyataan yang disiapkan. Untuk merujuk pada parameter dalam pernyataan yang disiapkan itu sendiri, gunakan \$11, \$12, dan seterusnya, hingga maksimum \$132767.

 *pernyataan*   
Setiap pernyataan SELECT, INSERT, UPDATE, atau DELETE.

## Catatan penggunaan
<a name="r_PREPARE_usage_notes"></a>

Pernyataan yang disiapkan dapat mengambil parameter: nilai yang diganti ke dalam pernyataan saat dijalankan. Untuk memasukkan parameter dalam pernyataan yang disiapkan, berikan daftar tipe data dalam pernyataan PREPARE, dan, dalam pernyataan yang akan disiapkan sendiri, lihat parameter berdasarkan posisi menggunakan notasi \$11, \$12,... Jumlah parameter maksimum adalah 32767. Saat menjalankan pernyataan, tentukan nilai aktual untuk parameter ini dalam pernyataan EXECUTE. Untuk detail selengkapnya, lihat [EXECUTE](r_EXECUTE.md). 

Pernyataan yang disiapkan hanya bertahan selama sesi saat ini. Ketika sesi berakhir, pernyataan yang disiapkan dibuang, sehingga harus dibuat ulang sebelum digunakan lagi. Ini juga berarti bahwa satu pernyataan yang disiapkan tidak dapat digunakan oleh beberapa klien database simultan; Namun, setiap klien dapat membuat pernyataan yang disiapkan sendiri untuk digunakan. Pernyataan yang disiapkan dapat dihapus secara manual menggunakan perintah DEALLOCATE. 

Pernyataan yang disiapkan memiliki keunggulan kinerja terbesar ketika satu sesi digunakan untuk menjalankan sejumlah besar pernyataan serupa. Seperti disebutkan, untuk setiap eksekusi baru dari pernyataan yang disiapkan, Amazon Redshift dapat merevisi rencana eksekusi kueri untuk meningkatkan kinerja berdasarkan nilai parameter yang ditentukan. Untuk memeriksa rencana eksekusi kueri yang telah dipilih Amazon Redshift untuk pernyataan EXECUTE tertentu, gunakan perintah. [EXPLAIN](r_EXPLAIN.md) 

Untuk informasi selengkapnya tentang perencanaan kueri dan statistik yang dikumpulkan oleh Amazon Redshift untuk pengoptimalan kueri, lihat perintah. [MENGANALISA](r_ANALYZE.md) 

## Contoh
<a name="sub-examples-prepare"></a>

Buat tabel sementara, siapkan pernyataan INSERT dan kemudian jalankan:

```
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
```

Siapkan pernyataan SELECT dan kemudian jalankan:

```
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;
```

## Lihat juga
<a name="r_PREPARE-see-also"></a>

 [DEALOKASI](r_DEALLOCATE.md), [EXECUTE](r_EXECUTE.md) 

# MENYEGARKAN TAMPILAN TERWUJUD
<a name="materialized-view-refresh-sql-command"></a>

Menyegarkan tampilan yang terwujud.

Saat Anda membuat tampilan terwujud, isinya mencerminkan keadaan tabel atau tabel database yang mendasarinya pada saat itu. Data dalam tampilan terwujud tetap tidak berubah, bahkan ketika aplikasi membuat perubahan pada data dalam tabel yang mendasarinya.

Untuk memperbarui data dalam tampilan terwujud, Anda dapat menggunakan `REFRESH MATERIALIZED VIEW` pernyataan kapan saja. Saat Anda menggunakan pernyataan ini, Amazon Redshift mengidentifikasi perubahan yang terjadi di tabel dasar atau tabel, lalu menerapkan perubahan tersebut ke tampilan terwujud.

Untuk informasi lebih lanjut tentang tampilan terwujud, lihat[Tampilan terwujud di Amazon Redshift](materialized-view-overview.md).

## Sintaksis
<a name="mv_REFRESH_MATERIALIZED_VIEW-synopsis"></a>

```
REFRESH MATERIALIZED VIEW mv_name [ RESTRICT | CASCADE ]
```

## Parameter
<a name="mv_REFRESH_MATERIALIZED_VIEW-parameters"></a>

*mv\$1nama*  
Nama tampilan terwujud untuk disegarkan.

MEMBATASI  
Kata kunci opsional. Menyegarkan tampilan terwujud yang ditentukan tetapi bukan pandangan materialisasi dependennya. Default jika RESTRICT atau CASCADE tidak ditentukan.

RIAM  
Kata kunci opsional. Menyegarkan tampilan terwujud yang ditentukan dan semua pandangan materialisasi dependennya.

## Catatan penggunaan
<a name="mv_REFRESH_MARTERIALIZED_VIEW_usage"></a>

Hanya pemilik tampilan terwujud yang dapat melakukan `REFRESH MATERIALIZED VIEW` operasi pada tampilan yang terwujud itu. Selanjutnya, pemilik harus memiliki hak istimewa SELECT pada tabel dasar yang mendasarinya agar berhasil dijalankan`REFRESH MATERIALIZED VIEW`. 

`REFRESH MATERIALIZED VIEW`Perintah berjalan sebagai transaksi sendiri. Semantik transaksi Amazon Redshift diikuti untuk menentukan data apa dari tabel dasar yang terlihat oleh `REFRESH` perintah, atau kapan perubahan yang dibuat oleh `REFRESH` perintah dibuat terlihat oleh transaksi lain yang berjalan di Amazon Redshift.
+ Untuk tampilan materialisasi inkremental, `REFRESH MATERIALIZED VIEW` gunakan hanya baris tabel dasar yang sudah di-commit. Oleh karena itu, jika operasi penyegaran berjalan setelah pernyataan bahasa manipulasi data (DML/bahasa manipulasi data) dalam transaksi yang sama, maka perubahan pernyataan DML tersebut tidak terlihat untuk disegarkan. 
+ Untuk penyegaran penuh tampilan terwujud, `REFRESH MATERIALIZED VIEW` lihat semua baris tabel dasar yang terlihat oleh transaksi penyegaran, menurut semantik transaksi Amazon Redshift biasa. 
+ Bergantung pada jenis argumen masukan, Amazon Redshift masih mendukung penyegaran tambahan untuk tampilan terwujud untuk fungsi berikut dengan tipe argumen masukan tertentu: DATE (stempel waktu), DATE\$1PART (tanggal, waktu, interval, time-tz), DATE\$1TRUNC (stempel waktu, interval).
+ Penyegaran tambahan didukung pada tampilan terwujud di mana tabel dasar berada dalam datashare.
+ Penyegaran tampilan terwujud bersama dari kluster pembagian data jarak jauh tidak didukung untuk tampilan terwujud yang berisi referensi ke tampilan terwujud lainnya, tabel Spektrum, tabel yang ditentukan dalam cluster Redshift yang berbeda atau. UDFs Pandangan terwujud seperti itu dapat disegarkan dari cluster lokal (produser).

Beberapa operasi di Amazon Redshift berinteraksi dengan tampilan yang terwujud. Beberapa operasi ini mungkin memaksa `REFRESH MATERIALIZED VIEW` operasi untuk sepenuhnya menghitung ulang tampilan terwujud meskipun kueri yang mendefinisikan tampilan terwujud hanya menggunakan fitur SQL yang memenuhi syarat untuk penyegaran tambahan. Contoh:
+ Operasi vakum latar belakang mungkin diblokir jika tampilan terwujud tidak disegarkan. Setelah periode ambang batas yang ditentukan secara internal, operasi vakum diizinkan untuk berjalan. Ketika operasi vakum ini terjadi, setiap tampilan materialisasi dependen ditandai untuk perhitungan ulang pada penyegaran berikutnya (bahkan jika itu bertahap). Untuk informasi tentang VACUUM, lihat[VAKUM](r_VACUUM_command.md). Untuk informasi selengkapnya tentang peristiwa dan perubahan status, lihat[STL\$1MV\$1STATE](r_STL_MV_STATE.md).
+ Beberapa operasi yang dimulai pengguna pada tabel dasar memaksa tampilan terwujud untuk dihitung ulang sepenuhnya saat operasi REFRESH dijalankan. Contoh operasi tersebut adalah VACUUM yang dipanggil secara manual, pengubahan ukuran klasik, operasi ALTER DISTKEY, operasi ALTER SORTKEY, dan operasi pemotongan. Operasi otomatis dalam beberapa kasus juga dapat menghasilkan tampilan terwujud yang dihitung ulang sepenuhnya saat operasi REFRESH dijalankan berikutnya. Misalnya, operasi penghapusan vakum otomatis dapat menyebabkan perhitungan ulang penuh. Untuk informasi selengkapnya tentang peristiwa dan perubahan status, lihat[STL\$1MV\$1STATE](r_STL_MV_STATE.md). 

## Penyegaran bertingkat
<a name="mv_REFRESH_MATERIALIZED_VIEW_cascading"></a>

Opsi CASCADE menyegarkan tampilan terwujud yang ditentukan dan semua pandangan materialisasi dependennya, dalam urutan ketergantungan: basis MVs berada di REFRESHed depan di MVs atas (urutan topologi). Ini memungkinkan Anda memperbarui kumpulan tampilan terwujud bersarang dalam satu perintah.

Opsi RESTRICT (default jika RESTRICT atau CASCADE tidak ditentukan) hanya menyegarkan tampilan terwujud yang ditentukan.

Saat menggunakan opsi CASCADE, aturan berikut berlaku:
+ Hanya pemilik tampilan terwujud atau superuser yang dapat menjalankan perintah. `REFRESH MATERIALIZED VIEW ... CASCADE`
+ Jika salah satu pandangan terwujud dalam kaskade tidak dapat disegarkan, seluruh operasi kaskade akan berhenti.

Fungsionalitas penyegaran cascading hanya didukung untuk MVs bersarang di atas tampilan lokal dan streaming yang terwujud. Tampilan terwujud dengan jenis sumber lain, seperti Spektrum atau Berbagi Data, tidak didukung dalam mode kaskade. CASCADE mengeksekusi refresh dalam satu transaksi untuk semua bersarang. MVs

## Penyegaran tambahan untuk tampilan terwujud dalam datashare
<a name="mv_REFRESH_MATERIALIZED_VIEW_datashare"></a>

 Amazon Redshift mendukung penyegaran otomatis dan inkremental untuk tampilan terwujud dalam penyimpanan data konsumen saat tabel dasar dibagikan. Penyegaran tambahan adalah operasi di mana Amazon Redshift mengidentifikasi perubahan pada tabel dasar atau tabel yang terjadi setelah penyegaran sebelumnya dan hanya memperbarui catatan terkait dalam tampilan terwujud. Untuk informasi selengkapnya tentang perilaku ini, lihat [MEMBUAT TAMPILAN TERWUJUD](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare). 

## Batasan untuk penyegaran inkremental
<a name="mv_REFRESH_MARTERIALIZED_VIEW_limitations"></a>

Amazon Redshift saat ini tidak mendukung penyegaran tambahan untuk tampilan terwujud yang ditentukan dengan kueri menggunakan salah satu elemen SQL berikut:
+ OUTER JOIN (KANAN, KIRI, atau PENUH).
+ Mengatur operasi: UNION, INTERSECT, KECUALI, MINUS.
+ UNION ALL ketika itu terjadi dalam subquery dan fungsi agregat, atau klausa GROUP BY hadir dalam kueri, atau tampilan terwujud target berisi sortkey.
+ Fungsi agregat: MEDIAN, PERCENTILE\$1CONT, LISTAGG, STDDEV\$1SAMP, STDDEV\$1POP, PERKIRAAN HITUNGAN, PERKIRAAN PERSENTIL, dan fungsi agregat bitwise.
**catatan**  
Fungsi agregat COUNT, SUM, MIN, MAX, dan AVG didukung.
+ Fungsi agregat yang berbeda, seperti DISTINCT COUNT, DISTINCT SUM, dan sebagainya.
+ Fungsi Jendela.
+ Kueri yang menggunakan tabel sementara untuk optimasi kueri, seperti mengoptimalkan subexpressions umum.
+ Subkueri
+ Tabel eksternal yang mereferensikan format berikut dalam kueri yang mendefinisikan tampilan terwujud. 
  +  Danau Delta 
  +  Hudi 

  Penyegaran tambahan didukung untuk tampilan terwujud yang ditentukan menggunakan format selain yang tercantum di atas. Untuk informasi selengkapnya, lihat [Tampilan terwujud pada tabel danau data eksternal di Amazon Redshift SpectrumTampilan terwujud pada tabel danau data eksternal](materialized-view-external-table.md). 
+ Fungsi yang dapat berubah, seperti fungsi tanggal-waktu, RANDOM dan fungsi yang ditentukan pengguna yang tidak stabil.
+ Untuk batasan terkait penyegaran tambahan untuk integrasi nol-ETL, lihat [Pertimbangan saat menggunakan integrasi nol-ETL](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl.reqs-lims.html) dengan Amazon Redshift.
+ Mengakses tabel dari lebih dari satu database.

Untuk informasi selengkapnya tentang batasan tampilan terwujud, termasuk efek operasi latar belakang seperti VACUUM pada operasi penyegaran tampilan terwujud, lihat. [Catatan penggunaan](#mv_REFRESH_MARTERIALIZED_VIEW_usage)

## Contoh
<a name="mv_REFRESH_MARTERIALIZED_VIEW_examples"></a>

Contoh berikut menyegarkan tampilan `tickets_mv` terwujud.

```
REFRESH MATERIALIZED VIEW tickets_mv;
```

Contoh berikut menyegarkan tampilan terwujud dan semua pandangan `products_mv` materialisasi dependennya:

```
REFRESH MATERIALIZED VIEW products_mv CASCADE; 
```

# ATUR ULANG
<a name="r_RESET"></a>

Mengembalikan nilai parameter konfigurasi ke nilai defaultnya.

Anda dapat mengatur ulang satu parameter tertentu atau semua parameter sekaligus. Untuk mengatur parameter ke nilai tertentu, gunakan [SET](r_SET.md) perintah. Untuk menampilkan nilai parameter saat ini, gunakan [MEMPERLIHATKAN](r_SHOW.md) perintah.

## Sintaksis
<a name="r_RESET-synopsis"></a>

```
RESET { parameter_name | ALL }
```

Pernyataan berikut menetapkan nilai variabel konteks sesi ke NULL.

```
RESET { variable_name | ALL }
```

## Parameter
<a name="r_RESET-parameters"></a>

 *parameter\$1name*   
Nama parameter yang akan diatur ulang. Lihat [Memodifikasi konfigurasi server](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings) dokumentasi selengkapnya tentang parameter.

SEMUA   
Menyetel ulang semua parameter runtime, termasuk semua variabel konteks sesi.

*variabel*   
Nama variabel yang akan diatur ulang. Jika nilai RESET adalah variabel konteks sesi, Amazon Redshift menyetelnya ke NULL.

## Contoh
<a name="r_RESET-examples"></a>

Contoh berikut me-reset `query_group` parameter ke nilai defaultnya: 

```
reset query_group;
```

Contoh berikut me-reset semua parameter runtime ke nilai defaultnya. 

```
reset all;
```

Contoh berikut me-reset variabel konteks.

```
RESET app_context.user_id;
```

# MENCABUT
<a name="r_REVOKE"></a>

Menghapus izin akses, seperti izin untuk membuat, menjatuhkan, atau memperbarui tabel, dari pengguna atau peran.

Anda hanya dapat MEMBERIKAN atau MENCABUT izin PENGGUNAAN pada skema eksternal untuk pengguna database dan peran menggunakan sintaks ON SCHEMA. Saat menggunakan ON EXTERNAL SCHEMA with AWS Lake Formation, Anda hanya dapat MEMBERIKAN dan MENCABUT izin ke peran AWS Identity and Access Management (IAM). Untuk daftar izin, lihat sintaksnya.

Untuk prosedur tersimpan, `plpgsql` izin PENGGUNAAN PADA BAHASA diberikan kepada PUBLIK secara default. Izin EXECUTE ON PROCEDURE hanya diberikan kepada pemilik dan pengguna super secara default.

Tentukan dalam perintah REVOKE izin yang ingin Anda hapus. Untuk memberikan izin, gunakan [HIBAH](r_GRANT.md) perintah. 

## Sintaksis
<a name="r_REVOKE-synopsis"></a>

```
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
EXECUTE
    ON FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { EXECUTE } [,...] | ALL [ PRIVILEGES ] }
    ON PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
USAGE
    ON LANGUAGE language_name [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [GRANT OPTION FOR] 
{ { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]    

REVOKE [GRANT OPTION FOR]
{ { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE template_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Mencabut izin tingkat kolom untuk tabel
<a name="revoke-column-level"></a>

Berikut ini adalah sintaks untuk izin tingkat kolom pada tabel dan tampilan Amazon Redshift. 

```
REVOKE { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
     [ RESTRICT ]
```

### Mencabut izin ASSUMEROLE
<a name="revoke-assumerole-permissions"></a>

Berikut ini adalah sintaks untuk mencabut izin ASSUMEROLE dari pengguna dan grup dengan peran tertentu. 

```
REVOKE ASSUMEROLE
    ON { 'iam_role' [, ...]  | default | ALL }
    FROM { user_name | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL }
```

### Mencabut izin untuk Redshift Spectrum untuk Lake Formation
<a name="revoke-spectrum-integration-with-lf-permissions"></a>

Berikut ini adalah sintaks untuk integrasi Redshift Spectrum dengan Lake Formation.

```
REVOKE [ GRANT OPTION FOR ]
{ SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    FROM { IAM_ROLE iam_role } [, ...]

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    FROM { { IAM_ROLE iam_role } [, ...] | PUBLIC }

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    FROM { IAM_ROLE iam_role } [, ...]
```

### Membatalkan izin datashare
<a name="revoke-datashare-permissions"></a>

**Izin penyimpanan data sisi produsen**  
Berikut ini adalah sintaks untuk menggunakan REVOKE untuk menghapus izin ALTER atau SHARE dari pengguna atau peran. Pengguna yang izinnya telah dicabut tidak dapat lagi mengubah datashare, atau memberikan penggunaan kepada konsumen. 

```
REVOKE { ALTER | SHARE } ON DATASHARE datashare_name
 FROM { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

Berikut ini adalah sintaks untuk menggunakan REVOKE untuk menghapus akses konsumen ke datashare.

```
REVOKE USAGE
 ON DATASHARE datashare_name
 FROM NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ] [, ...]
```

Berikut ini adalah contoh pencabutan penggunaan datashare dari akun Lake Formation.

```
REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Izin penyimpanan data sisi konsumen**  
Berikut ini adalah sintaks REVOKE untuk izin penggunaan berbagi data pada database atau skema tertentu yang dibuat dari datashare. Mencabut izin penggunaan dari database yang dibuat dengan klausa WITH PERMISSIONS tidak mencabut izin tambahan yang Anda berikan kepada pengguna atau peran, termasuk izin tingkat objek yang diberikan untuk objek yang mendasarinya. Jika Anda memberikan kembali izin penggunaan kepada pengguna atau peran tersebut, mereka akan mempertahankan semua izin tambahan yang mereka miliki sebelum Anda mencabut penggunaan.

```
REVOKE USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
 FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Membatalkan izin tercakup
<a name="revoke-scoped-permissions"></a>

Izin tercakup memungkinkan Anda memberikan izin kepada pengguna atau peran pada semua objek dari tipe dalam database atau skema. Pengguna dan peran dengan izin cakupan memiliki izin yang ditentukan pada semua objek saat ini dan masa depan dalam database atau skema.

Anda dapat melihat cakupan izin cakupan tingkat database di. [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) Anda dapat melihat cakupan izin cakupan tingkat skema di. [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md)

Untuk informasi selengkapnya tentang izin tercakup, lihat. [Izin tercakup](t_scoped-permissions.md)

Berikut ini adalah sintaks untuk mencabut izin cakupan dari pengguna dan peran. 

```
REVOKE [ GRANT OPTION ] 
{ CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{ SCHEMA schema_name [ DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] USAGE
FOR LANGUAGES IN
DATABASE db_name
FROM { username | ROLE role_name } [, ...]  

REVOKE [GRANT_OPTION] 
{ { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
FROM { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]      

REVOKE [ GRANT OPTION ]
{ {ALTER | DROP  | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]
```

Perhatikan bahwa izin cakupan tidak membedakan antara izin untuk fungsi dan prosedur. Misalnya, pernyataan berikut mencabut `EXECUTE` izin untuk fungsi dan prosedur dari `bob` dalam skema. `Sales_schema` 

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

### Membatalkan izin pembelajaran mesin
<a name="revoke-model-permissions"></a>

Berikut ini adalah sintaks untuk izin model pembelajaran mesin di Amazon Redshift.

```
REVOKE [ GRANT OPTION FOR ]
    CREATE MODEL FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]
```

### Mencabut izin peran
<a name="revoke-roles"></a>

Berikut ini adalah sintaks untuk mencabut izin peran di Amazon Redshift.

```
REVOKE [ ADMIN OPTION FOR ] { ROLE role_name } [, ...] FROM { user_name } [, ...]
```

```
REVOKE { ROLE role_name } [, ...] FROM { ROLE role_name } [, ...]
```

Berikut ini adalah sintaks untuk mencabut izin sistem untuk peran di Amazon Redshift.

```
REVOKE
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG |
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
FROM { ROLE role_name } [, ...]
```

### Mencabut izin untuk kebijakan keamanan
<a name="revoke-role-level"></a>

Berikut ini adalah sintaks untuk mencabut izin untuk menjelaskan filter kebijakan keamanan kueri dalam rencana EXPLOW. Kebijakan keamanan yang mungkin termasuk kebijakan keamanan tingkat baris dan kebijakan masking data dinamis.

```
REVOKE EXPLAIN { RLS | MASKING } FROM ROLE rolename 
```

Berikut ini adalah sintaks untuk mencabut izin untuk melewati kebijakan keamanan tingkat baris untuk kueri. 

```
REVOKE IGNORE RLS FROM ROLE rolename 
```

Berikut ini adalah sintaks untuk mencabut izin SELECT dari kebijakan keamanan yang ditentukan. Kebijakan keamanan yang mungkin termasuk kebijakan keamanan tingkat baris dan kebijakan masking data dinamis.

```
REVOKE SELECT ON [ TABLE ] table_name [, ...]
            FROM { RLS | MASKING } POLICY policy_name [, ...]
```

## Parameter
<a name="r_REVOKE-parameters"></a>

OPSI HIBAH UNTUK   
Mencabut hanya opsi untuk memberikan izin tertentu kepada pengguna lain dan tidak mencabut izin itu sendiri. Anda tidak dapat mencabut OPSI GRANT dari grup atau dari PUBLIK.

SELECT   
Mencabut izin untuk memilih data dari tabel atau tampilan menggunakan pernyataan SELECT.

INSERT   
Mencabut izin untuk memuat data ke dalam tabel menggunakan pernyataan INSERT atau pernyataan COPY. 

UPDATE   
Mencabut izin untuk memperbarui kolom tabel menggunakan pernyataan UPDATE. 

DELETE   
Mencabut izin untuk menghapus baris data dari tabel.

REFERENSI   
Mencabut izin untuk membuat kendala kunci asing. Anda harus mencabut izin ini pada tabel referensi dan tabel referensi.

TRUNCATE  
Mencabut izin untuk memotong tabel. Tanpa izin ini, hanya pemilik meja atau superuser yang dapat memotong tabel. Untuk informasi selengkapnya tentang perintah TRUNCATE, lihat. [MEMOTONG](r_TRUNCATE.md)

SEMUA [HAK ISTIMEWA]   
Mencabut semua izin yang tersedia sekaligus dari pengguna atau grup yang ditentukan. Kata kunci PRIVILEGES adalah opsional.  
 Amazon Redshift tidak mendukung izin RULE dan TRIGGER. Untuk informasi selengkapnya, kunjungi [Fitur PostgreSQL yang tidak didukung](c_unsupported-postgresql-features.md). 

ALTER  
Bergantung pada objek database, mencabut izin berikut dari pengguna atau grup pengguna:   
+ Untuk tabel, ALTER mencabut izin untuk mengubah tabel atau tampilan. Untuk informasi selengkapnya, lihat [ALTER TABLE](r_ALTER_TABLE.md).
+ Untuk database, ALTER mencabut izin untuk mengubah database. Untuk informasi selengkapnya, lihat [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Untuk skema, hibah ALTER mencabut untuk mengubah skema. Untuk informasi selengkapnya, lihat [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ Untuk tabel eksternal, ALTER mencabut izin untuk mengubah tabel AWS Glue Data Catalog yang diaktifkan untuk Lake Formation. Izin ini hanya berlaku saat menggunakan Lake Formation.

DROP  
Bergantung pada objek database, mencabut izin berikut dari pengguna atau peran:  
+  Untuk tabel, DROP mencabut izin untuk menjatuhkan tabel atau tampilan. Untuk informasi selengkapnya, lihat [MEJA DROP](r_DROP_TABLE.md). 
+  Untuk database, DROP mencabut izin untuk menjatuhkan database. Untuk informasi selengkapnya, lihat [DROP DATABASE](r_DROP_DATABASE.md). 
+  Untuk skema, DROP mencabut izin untuk menghapus skema. Untuk informasi selengkapnya, lihat [DROP SCHEMA](r_DROP_SCHEMA.md). 

ASSUMEROLE  <a name="assumerole"></a>
Mencabut izin untuk menjalankan perintah COPY, UNLOAD, EXTERNAL FUNCTION, atau CREATE MODEL dari pengguna, peran, atau grup dengan peran tertentu. 

ON [TABLE] *table\$1name*   
Mencabut izin yang ditentukan pada tabel atau tampilan. Kata kunci TABLE adalah opsional.

*PADA SEMUA TABEL DALAM SKEMA schema\$1name*   
Mencabut izin yang ditentukan pada semua tabel dalam skema yang direferensikan.

*(*column\$1name* [,...]) DI TABLE table\$1name*   <a name="revoke-column-level-privileges"></a>
Mencabut izin yang ditentukan dari pengguna, grup, atau PUBLIC pada kolom yang ditentukan dari tabel atau tampilan Amazon Redshift.

*(*column\$1list) PADA TABEL EKSTERNAL schema\$1name.table\$1name**   <a name="revoke-external-table-column"></a>
Mencabut izin yang ditentukan dari peran IAM pada kolom yang ditentukan dari tabel Lake Formation dalam skema yang direferensikan.

PADA TABEL EKSTERNAL *schema\$1name.table\$1name*   <a name="revoke-external-table"></a>
Mencabut izin yang ditentukan dari peran IAM pada tabel Lake Formation yang ditentukan dalam skema yang direferensikan.

*PADA SKEMA EKSTERNAL schema\$1name*   <a name="revoke-external-schema"></a>
Mencabut izin yang ditentukan dari peran IAM pada skema yang direferensikan.

*DARI IAM\$1ROLE iam\$1role*   <a name="revoke-from-iam-role"></a>
Menunjukkan peran IAM kehilangan izin.

*ROLE role\$1name*   
Mencabut izin dari peran yang ditentukan.

GROUP *group\$1name*   
Mencabut izin dari grup pengguna yang ditentukan.

UMUM   
Mencabut izin yang ditentukan dari semua pengguna. PUBLIC mewakili grup yang selalu mencakup semua pengguna. Izin pengguna individu terdiri dari jumlah izin yang diberikan kepada PUBLIK, izin yang diberikan kepada grup mana pun yang dimiliki pengguna, dan izin apa pun yang diberikan kepada pengguna secara individual.  
*Mencabut PUBLIK dari tabel eksternal Lake Formation menghasilkan pencabutan izin dari kelompok semua orang Lake Formation.*

CREATE   
Bergantung pada objek database, mencabut izin berikut dari pengguna atau grup:  
+ Untuk database, menggunakan klausa CREATE untuk REVOKE mencegah pengguna membuat skema dalam database.
+ Untuk skema, menggunakan klausa CREATE untuk REVOKE mencegah pengguna membuat objek dalam skema. Untuk mengganti nama objek, pengguna harus memiliki izin CREATE dan memiliki objek yang akan diganti namanya. 
Secara default, semua pengguna memiliki izin CREATE dan USE pada skema PUBLIC.

SEMENTARA \$1 TEMP   
Mencabut izin untuk membuat tabel sementara dalam database yang ditentukan.  
Secara default, pengguna diberikan izin untuk membuat tabel sementara dengan keanggotaan otomatis mereka di grup PUBLIC. Untuk menghapus izin bagi setiap pengguna untuk membuat tabel sementara, cabut izin TEMP dari grup PUBLIC dan kemudian secara eksplisit memberikan izin untuk membuat tabel sementara untuk pengguna atau grup pengguna tertentu.

PADA DATABASE *db\$1name*   
Mencabut izin pada database yang ditentukan.

PEMAKAIAN   
Mencabut izin PENGGUNAAN pada objek dalam skema tertentu, yang membuat objek ini tidak dapat diakses oleh pengguna. Tindakan spesifik pada objek ini harus dicabut secara terpisah (seperti izin EXECUTE pada fungsi).  
Secara default, semua pengguna memiliki izin CREATE dan USE pada skema PUBLIC.

*PADA SKEMA schema\$1name*   
Mencabut izin pada skema yang ditentukan. Anda dapat menggunakan izin skema untuk mengontrol pembuatan tabel; izin CREATE untuk database hanya mengontrol pembuatan skema.

MEMBATASI   
Hanya mencabut izin yang diberikan pengguna secara langsung. Ini adalah perilaku default .

JALANKAN PROSEDUR *prosedur\$1name*   
Mencabut izin EXECUTE pada prosedur tersimpan tertentu. Karena nama prosedur yang disimpan dapat kelebihan beban, Anda harus menyertakan daftar argumen untuk prosedur tersebut. Untuk informasi selengkapnya, lihat [Penamaan prosedur tersimpan](stored-procedure-naming.md).

*JALANKAN PADA SEMUA PROSEDUR DI SKEMA procedure RE\$1NAME*   
Mencabut izin yang ditentukan pada semua prosedur dalam skema yang direferensikan.

PENGGUNAAN PADA LANGUAGE *language\$1name*   
Mencabut izin PENGGUNAAN pada suatu bahasa. Untuk fungsi yang ditentukan pengguna Python ()UDFs, gunakan. `plpythonu` Untuk SQL UDFs, gunakan`sql`. Untuk prosedur yang disimpan, gunakan`plpgsql`.   
Untuk membuat UDF, Anda harus memiliki izin untuk penggunaan pada bahasa untuk SQL atau (`plpythonu`Python). Secara default, USAGE ON LANGUAGE SQL diberikan kepada PUBLIC. Namun, Anda harus secara eksplisit memberikan PENGGUNAAN PADA BAHASA PLPYTHONU kepada pengguna atau grup tertentu.   
Untuk mencabut penggunaan SQL, pertama-tama cabut penggunaan dari PUBLIC. Kemudian berikan penggunaan pada SQL hanya untuk pengguna atau grup tertentu yang diizinkan untuk membuat SQL UDFs. Contoh berikut mencabut penggunaan pada SQL dari PUBLIC kemudian memberikan penggunaan ke grup pengguna. `udf_devs`   

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```
Untuk informasi selengkapnya, lihat [Keamanan dan izin UDF](udf-security-and-privileges.md).   
Untuk mencabut penggunaan untuk prosedur tersimpan, pertama-tama cabut penggunaan dari PUBLIC. Kemudian berikan penggunaan `plpgsql` hanya kepada pengguna atau grup tertentu yang diizinkan untuk membuat prosedur tersimpan. Untuk informasi selengkapnya, lihat [Keamanan dan hak istimewa untuk prosedur tersimpan](stored-procedure-security-and-privileges.md). 

ON COPY JOB *job\$1name*  <a name="on-copy-job-revoke"></a>
Mencabut izin yang ditentukan pada pekerjaan penyalinan.

UNTUK \$1SEMUA \$1 SALIN \$1 BONGKAR \$1 FUNGSI EKSTERNAL \$1 BUAT MODEL\$1 [,...]  <a name="revoke-for"></a>
Menentukan perintah SQL yang izinnya dicabut. Anda dapat menentukan SEMUA untuk mencabut izin pada pernyataan COPY, UNLOAD, EXTERNAL FUNCTION, dan CREATE MODEL. Klausul ini hanya berlaku untuk mencabut izin ASSUMEROLE.

MENGUBAH  
Mencabut izin ALTER untuk pengguna atau grup pengguna yang memungkinkan mereka yang tidak memiliki datashare untuk mengubah datashare. Izin ini diperlukan untuk menambah atau menghapus objek dari datashare, atau untuk mengatur properti PUBLICACESSIBLE. Untuk informasi selengkapnya, lihat [MENGUBAH DATASHARE](r_ALTER_DATASHARE.md).

BERBAGI  
Mencabut izin bagi pengguna dan grup pengguna untuk menambahkan konsumen ke datashare. Mencabut izin ini diperlukan untuk menghentikan konsumen tertentu mengakses datashare dari klasternya. 

*DI DATASHARE datashare\$1name*  
Memberikan izin yang ditentukan pada datashare yang direferensikan.

DARI Username  
Menunjukkan pengguna kehilangan izin.

DARI GROUP *group\$1name*  
Menunjukkan grup pengguna kehilangan izin.

DENGAN OPSI HIBAH  
Menunjukkan bahwa pengguna yang kehilangan izin pada gilirannya dapat mencabut izin yang sama untuk orang lain. Anda tidak dapat mencabut WITH GRANT OPTION untuk grup atau untuk PUBLIK. 

PEMAKAIAN  
Ketika USAGE dicabut untuk akun konsumen atau namespace dalam akun yang sama, akun konsumen atau namespace yang ditentukan dalam akun tidak dapat mengakses datashare dan objek datashare dengan cara hanya-baca.   
Mencabut izin PENGGUNAAN akan mencabut akses ke datashare dari konsumen. 

DARI NAMESPACE 'clusternamespace GUID'   
Menunjukkan namespace di akun yang sama yang membuat konsumen kehilangan izin ke datashare. Ruang nama menggunakan pengidentifikasi unik global (GUID) alfanumerik 128-bit.

DARI AKUN 'accountnumber' [VIA DATA CATALOG]  
Menunjukkan nomor akun akun lain yang membuat konsumen kehilangan izin ke datashare. Menentukan 'VIA DATA CATALOG' menunjukkan bahwa Anda mencabut penggunaan datashare dari akun Lake Formation. Menghilangkan nomor akun berarti Anda mencabut dari akun yang memiliki klaster.

PADA DATABASE *shared\$1database\$1name> [*,...]   <a name="revoke-datashare"></a>
Mencabut izin penggunaan yang ditentukan pada database tertentu yang dibuat dalam datashare yang ditentukan. 

*PADA SKEMA shared\$1schema*   <a name="revoke-datashare"></a>
Mencabut izin yang ditentukan pada skema tertentu yang dibuat dalam datashare yang ditentukan.

UNTUK \$1SKEMA \$1 TABEL \$1 FUNGSI \$1 PROSEDUR \$1 BAHASA \$1 SALINAN PEKERJAAN\$1 DI   
Menentukan objek database untuk mencabut izin dari. Parameter berikut IN menentukan ruang lingkup izin yang dicabut.

BUAT MODEL  
Mencabut izin CREATE MODEL untuk membuat model pembelajaran mesin dalam database yang ditentukan.

PADA MODEL *model\$1name*  
Mencabut izin EXECUTE untuk model tertentu. 

KATALOG AKSES  
Mencabut izin untuk melihat metadata objek yang relevan yang dapat diakses oleh peran tersebut.

[OPSI ADMIN UNTUK] \$1peran\$1 [,...]  
Peran yang Anda cabut dari pengguna tertentu yang memiliki OPSI WITH ADMIN.

DARI \$1role\$1 [,...]  
Peran tempat Anda mencabut peran yang ditentukan.

*JELASKAN \$1RLS \$1 MASKING\$1 DARI ROLE rolename*  
Mencabut izin untuk menjelaskan filter kebijakan keamanan kueri dalam rencana EXPLORE dari peran. RLS mencabut izin untuk menjelaskan filter kebijakan keamanan tingkat baris. MASKING mencabut izin untuk menjelaskan filter kebijakan penyamaran data dinamis.

*ABAIKAN RLS DARI ROLEName PERAN*   
Mencabut izin untuk melewati kebijakan keamanan tingkat baris untuk kueri dari peran.

*DARI \$1RLS \$1 MASKING\$1 POLICY policy\$1name*  
Menunjukkan kebijakan keamanan kehilangan izin. KEBIJAKAN TO RLS menunjukkan kebijakan keamanan tingkat baris. KEBIJAKAN MASKING menunjukkan kebijakan penyembunyian data dinamis.

## Catatan penggunaan
<a name="r_REVOKE-usage-notes-link"></a>

Untuk mempelajari lebih lanjut tentang catatan penggunaan untuk REVOKE, lihat. [Catatan penggunaan](r_REVOKE-usage-notes.md)

## Contoh
<a name="r_REVOKE-examples-link"></a>

Untuk contoh cara menggunakan REVOKE, lihat. [Contoh](r_REVOKE-examples.md)

# Catatan penggunaan
<a name="r_REVOKE-usage-notes"></a>

Untuk mencabut hak istimewa dari suatu objek, Anda harus memenuhi salah satu kriteria berikut:
+ Jadilah pemilik objek.
+ Jadilah superuser.
+ Miliki hak istimewa hibah untuk objek dan hak istimewa itu.

  Misalnya, perintah berikut memungkinkan HR pengguna untuk melakukan perintah SELECT pada tabel karyawan dan untuk memberikan dan mencabut hak istimewa yang sama untuk pengguna lain.

  ```
  grant select on table employees to HR with grant option;
  ```

  SDM tidak dapat mencabut hak istimewa untuk operasi apa pun selain SELECT, atau pada tabel selain karyawan. 

Superuser dapat mengakses semua objek terlepas dari perintah GRANT dan REVOKE yang menetapkan hak istimewa objek.

PUBLIC mewakili grup yang selalu mencakup semua pengguna. Secara default semua anggota PUBLIC memiliki hak CREATE dan USE pada skema PUBLIC. Untuk membatasi izin pengguna pada skema PUBLIC, Anda harus terlebih dahulu mencabut semua izin dari PUBLIC pada skema PUBLIK, lalu memberikan hak istimewa kepada pengguna atau grup tertentu. Contoh berikut mengontrol hak istimewa pembuatan tabel dalam skema PUBLIC.

```
revoke create on schema public from public;
```

Untuk mencabut hak istimewa dari tabel Lake Formation, peran IAM yang terkait dengan skema eksternal tabel harus memiliki izin untuk mencabut hak istimewa ke tabel eksternal. Contoh berikut membuat skema eksternal dengan peran IAM terkait. `myGrantor` Peran IAM `myGrantor` memiliki izin untuk mencabut izin dari orang lain. Perintah REVOKE menggunakan izin peran IAM `myGrantor` yang terkait dengan skema eksternal untuk mencabut izin ke peran IAM. `myGrantee`

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
revoke select
on external table mySchema.mytable
from iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

**catatan**  
Jika peran IAM juga memiliki `ALL` izin dalam AWS Glue Data Catalog yang diaktifkan untuk Lake Formation, `ALL` izin tersebut tidak dicabut. Hanya `SELECT` izin yang dicabut. Anda dapat melihat izin Lake Formation di konsol Lake Formation.

## Catatan penggunaan untuk mencabut izin ASSUMEROLE
<a name="r_REVOKE-usage-notes-assumerole"></a>

Catatan penggunaan berikut berlaku untuk mencabut hak istimewa ASSUMEROLE di Amazon Redshift. 

Hanya superuser database yang dapat mencabut hak istimewa ASSUMEROLE untuk pengguna dan grup. Seorang superuser selalu mempertahankan hak istimewa ASSUMEROLE. 

Untuk mengaktifkan penggunaan hak istimewa ASSUMEROLE bagi pengguna dan grup, superuser menjalankan pernyataan berikut sekali di cluster. Sebelum memberikan hak istimewa ASSUMEROLE kepada pengguna dan grup, pengguna super harus menjalankan pernyataan berikut sekali di cluster. 

```
revoke assumerole on all from public for all;
```

## Catatan penggunaan untuk mencabut izin pembelajaran mesin
<a name="r_REVOKE-usage-notes-create-model"></a>

Anda tidak dapat secara langsung memberikan atau mencabut izin yang terkait dengan fungsi ML. Fungsi ML milik model ML dan izin dikontrol melalui model. Sebagai gantinya, Anda dapat mencabut izin yang terkait dengan model ML. Contoh berikut menunjukkan cara mencabut permisison run dari semua pengguna yang terkait dengan model. `customer_churn`

```
REVOKE EXECUTE ON MODEL customer_churn FROM PUBLIC;
```

Anda juga dapat mencabut semua izin dari pengguna untuk model ML. `customer_churn`

```
REVOKE ALL on MODEL customer_churn FROM ml_user;
```

Pemberian atau pencabutan `EXECUTE` izin yang terkait dengan fungsi ML akan gagal jika ada fungsi ML dalam skema, bahkan jika fungsi ML tersebut sudah memiliki izin melalui. `EXECUTE` `GRANT EXECUTE ON MODEL` Sebaiknya gunakan skema terpisah saat menggunakan `CREATE MODEL` perintah untuk menjaga fungsi ML dalam skema terpisah sendiri. Contoh berikut menunjukkan bagaimana melakukannya.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Contoh
<a name="r_REVOKE-examples"></a>

Contoh berikut mencabut hak istimewa INSERT pada tabel PENJUALAN dari grup pengguna TAMU. Perintah ini mencegah anggota GUEST untuk dapat memuat data ke dalam tabel PENJUALAN dengan menggunakan perintah INSERT. 

```
revoke insert on table sales from group guests;
```

Contoh berikut mencabut hak istimewa SELECT pada semua tabel dalam skema QA\$1TICKIT dari pengguna. `fred`

```
revoke select on all tables in schema qa_tickit from fred;
```

Contoh berikut mencabut hak istimewa untuk memilih dari tampilan untuk pengguna. `bobr`

```
revoke select on table eventview from bobr;
```

Contoh berikut mencabut hak istimewa untuk membuat tabel sementara dalam database TICKIT dari semua pengguna.

```
revoke temporary on database tickit from public;
```

Contoh berikut mencabut hak istimewa SELECT pada `cust_name` dan `cust_phone` kolom `cust_profile` tabel dari pengguna. `user1` 

```
revoke select(cust_name, cust_phone) on cust_profile from user1;
```

Contoh berikut mencabut hak istimewa SELECT pada `cust_phone` kolom `cust_name` dan hak istimewa UPDATE pada `cust_contact_preference` kolom `cust_profile` tabel dari grup. `sales_group` 

```
revoke select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile from group sales_group;
```

Contoh berikut menunjukkan penggunaan kata kunci ALL untuk mencabut hak pilih dan UPDATE pada tiga kolom tabel `cust_profile` dari grup. `sales_admin` 

```
revoke ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile from group sales_admin;
```

Contoh berikut mencabut hak istimewa SELECT pada `cust_name` kolom `cust_profile_vw` tampilan dari pengguna. `user2` 

```
revoke select(cust_name) on cust_profile_vw from user2;
```

## Contoh pencabutan izin PENGGUNAAN dari database yang dibuat dari datashares
<a name="r_REVOKE-examples-datashare"></a>

Contoh berikut mencabut akses ke `salesshare` datashare dari dari namespace. `13b8833d-17c6-4f16-8fe4-1a018f5ed00d`

```
REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

Contoh berikut mencabut izin PENGGUNAAN pada `sales_db` from`Bob`.

```
REVOKE USAGE ON DATABASE sales_db FROM Bob;
```

Contoh berikut MENCABUT izin PENGGUNAAN `sales_schema` dari. `Analyst_role`

```
REVOKE USAGE ON SCHEMA sales_schema FROM ROLE Analyst_role;
```

## Contoh pencabutan izin cakupan
<a name="r_REVOKE-examples-scoped"></a>

Contoh berikut mencabut penggunaan untuk semua skema saat ini dan masa depan dalam `Sales_db` database dari peran. `Sales`

```
REVOKE USAGE FOR SCHEMAS IN DATABASE Sales_db FROM ROLE Sales;
```

Contoh berikut mencabut kemampuan untuk memberikan izin SELECT untuk semua tabel saat ini dan masa depan dalam `Sales_db` database dari pengguna`alice`. `alice`mempertahankan akses ke semua tabel di`Sales_db`.

```
REVOKE GRANT OPTION SELECT FOR TABLES IN DATABASE Sales_db FROM alice;
```

Contoh berikut mencabut izin EXECUTE untuk fungsi dalam `Sales_schema` skema dari pengguna. `bob`

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

Contoh berikut mencabut semua izin untuk semua tabel dalam `ShareSchema` skema `ShareDb` database dari peran. `Sales` Saat menentukan skema, Anda juga dapat menentukan database skema menggunakan format dua bagian. `database.schema`

```
REVOKE ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema FROM ROLE Sales;
```

Contoh berikut ini sama dengan yang sebelumnya. Anda dapat menentukan database skema menggunakan `DATABASE` kata kunci alih-alih menggunakan format dua bagian.

```
REVOKE ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb FROM ROLE Sales;
```

## Contoh pencabutan hak istimewa ASSUMEROLE
<a name="r_REVOKE-examples-assumerole"></a>

Berikut ini adalah contoh pencabutan hak istimewa ASSUMEROLE. 

Superuser harus mengaktifkan penggunaan hak istimewa ASSUMEROLE untuk pengguna dan grup dengan menjalankan pernyataan berikut sekali di cluster: 

```
revoke assumerole on all from public for all;
```

Pernyataan berikut mencabut hak istimewa ASSUMEROLE dari pengguna reg\$1user1 pada semua peran untuk semua operasi. 

```
revoke assumerole on all from reg_user1 for all;
```

## Contoh pencabutan hak istimewa PERAN
<a name="r_REVOKE-examples-role"></a>

Contoh berikut mencabut sample\$1role1 dari sample\$1role2.

```
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO ROLE sample_role2;
REVOKE ROLE sample_role1 FROM ROLE sample_role2;
```

Contoh berikut mencabut hak istimewa sistem dari user1.

```
GRANT ROLE sys:DBA TO user1;
REVOKE ROLE sys:DBA FROM user1;
```

Contoh berikut mencabut sample\$1role1 dan sample\$1role2 dari user1.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1, ROLE sample_role2 TO user1;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM user1;
```

Contoh berikut mencabut sample\$1role2 dengan ADMIN OPTION dari user1.

```
GRANT ROLE sample_role2 TO user1 WITH ADMIN OPTION;
REVOKE ADMIN OPTION FOR ROLE sample_role2 FROM user1;
REVOKE ROLE sample_role2 FROM user1;
```

Contoh berikut mencabut sample\$1role1 dan sample\$1role2 dari sample\$1role5.

```
CREATE ROLE sample_role5;
GRANT ROLE sample_role1, ROLE sample_role2 TO ROLE sample_role5;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM ROLE sample_role5;
```

Contoh berikut mencabut hak istimewa sistem CREATE SCHEMA dan DROP SCHEMA ke sample\$1role1.

```
GRANT CREATE SCHEMA, DROP SCHEMA TO ROLE sample_role1;
REVOKE CREATE SCHEMA, DROP SCHEMA FROM ROLE sample_role1;
```

# ROLLBACK
<a name="r_ROLLBACK"></a>

Menghentikan transaksi saat ini dan membuang semua pembaruan yang dilakukan oleh transaksi tersebut.

Perintah ini melakukan fungsi yang sama dengan [MENGGUGURKAN](r_ABORT.md) perintah.

## Sintaksis
<a name="r_ROLLBACK-synopsis"></a>

```
ROLLBACK [ WORK | TRANSACTION ]
```

## Parameter
<a name="r_ROLLBACK-parameters"></a>

PEKERJAAN  
Kata kunci opsional. Kata kunci ini tidak didukung dalam prosedur tersimpan. 

TRANSAKSI  
Kata kunci opsional. KERJA dan TRANSAKSI adalah sinonim. Tidak ada yang didukung dalam prosedur tersimpan. 

Untuk informasi tentang penggunaan ROLLBACK dalam prosedur tersimpan, lihat. [Mengelola transaksi](stored-procedure-transaction-management.md) 

## Contoh
<a name="r_ROLLBACK-example"></a>

Contoh berikut membuat tabel kemudian memulai transaksi di mana data dimasukkan ke dalam tabel. Perintah ROLLBACK kemudian memutar kembali penyisipan data untuk membiarkan tabel kosong.

Perintah berikut membuat tabel contoh yang disebut MOVIE\$1GROSS:

```
create table movie_gross( name varchar(30), gross bigint );
```

Kumpulan perintah berikutnya memulai transaksi yang menyisipkan dua baris data ke dalam tabel:

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Selanjutnya, perintah berikut memilih data dari tabel untuk menunjukkan bahwa itu berhasil dimasukkan:

```
select * from movie_gross;
```

Output perintah menunjukkan bahwa kedua baris berhasil dimasukkan:

```
name           |  gross
-------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Perintah ini sekarang mengembalikan perubahan data ke tempat transaksi dimulai:

```
rollback;
```

Memilih data dari tabel sekarang menunjukkan tabel kosong:

```
select * from movie_gross;

name | gross
------+-------
(0 rows)
```

# SELECT
<a name="r_SELECT_synopsis"></a>

Mengembalikan baris dari tabel, tampilan, dan fungsi yang ditentukan pengguna. 

**catatan**  
Ukuran maksimum untuk satu pernyataan SQL adalah 16 MB.

## Sintaksis
<a name="r_SELECT_synopsis-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

**Topics**
+ [Sintaksis](#r_SELECT_synopsis-synopsis)
+ [DENGAN klausa](r_WITH_clause.md)
+ [PILIH daftar](r_SELECT_list.md)
+ [KECUALIKAN column\$1list](r_EXCLUDE_list.md)
+ [Klausa FROM](r_FROM_clause30.md)
+ [Klausa WHERE](r_WHERE_clause.md)
+ [Klausa GROUP BY](r_GROUP_BY_clause.md)
+ [Klausa HAVING](r_HAVING_clause.md)
+ [Klausul KUALIFIKASI](r_QUALIFY_clause.md)
+ [UNION, INTERSECT, dan KECUALI](r_UNION.md)
+ [Klausa ORDER BY](r_ORDER_BY_clause.md)
+ [CONNECT BY klausa](r_CONNECT_BY_clause.md)
+ [Contoh subquery](r_Subquery_examples.md)
+ [Subquery yang berkorelasi](r_correlated_subqueries.md)

# DENGAN klausa
<a name="r_WITH_clause"></a>

Klausa WITH adalah klausa opsional yang mendahului daftar SELECT dalam kueri. *Klausa WITH mendefinisikan satu atau lebih common\$1table\$1expressions.* Setiap ekspresi tabel umum (CTE) mendefinisikan tabel sementara, yang mirip dengan definisi tampilan. Anda dapat mereferensikan tabel sementara ini di klausa FROM. Mereka hanya digunakan saat kueri milik mereka berjalan. Setiap CTE dalam klausa WITH menentukan nama tabel, daftar opsional nama kolom, dan ekspresi kueri yang mengevaluasi tabel (pernyataan SELECT). Saat Anda mereferensikan nama tabel sementara dalam klausa FROM dari ekspresi kueri yang sama yang mendefinisikannya, CTE bersifat rekursif. 

Dengan subquery klausa adalah cara yang efisien untuk mendefinisikan tabel yang dapat digunakan selama eksekusi query tunggal. Dalam semua kasus, hasil yang sama dapat dicapai dengan menggunakan subquery di bagian utama pernyataan SELECT, tetapi dengan subquery klausa mungkin lebih mudah untuk ditulis dan dibaca. Jika memungkinkan, subkueri klausa WITH yang direferensikan beberapa kali dioptimalkan sebagai subexpressions umum; yaitu, dimungkinkan untuk mengevaluasi subquery WITH sekali dan menggunakan kembali hasilnya. (Perhatikan bahwa subexpressions umum tidak terbatas pada yang didefinisikan dalam klausa WITH.)

## Sintaksis
<a name="r_WITH_clause-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
```

dimana *common\$1table\$1expression* dapat berupa non-rekursif atau rekursif. Berikut ini adalah bentuk non-rekursif: 

```
CTE_table_name [ ( column_name [, ...] ) ] AS ( query )
```

Berikut ini adalah bentuk rekursif *common\$1table\$1expression*:

```
CTE_table_name (column_name [, ...] ) AS ( recursive_query )
```

## Parameter
<a name="r_WITH_clause-parameters"></a>

 REKURSIF   
Kata kunci yang mengidentifikasi kueri sebagai CTE rekursif. Kata kunci ini diperlukan jika *common\$1table\$1expression* yang didefinisikan dalam klausa WITH bersifat rekursif. Anda hanya dapat menentukan kata kunci RECURSIVE sekali, segera mengikuti kata kunci WITH, bahkan ketika klausa WITH berisi beberapa rekursif. CTEs Secara umum, CTE rekursif adalah subquery UNION ALL dengan dua bagian. 

 *common\$1table\$1expression*   
Mendefinisikan tabel sementara yang dapat Anda referensikan di [Klausa FROM](r_FROM_clause30.md) dan hanya digunakan selama eksekusi kueri yang dimilikinya. 

 *CTE\$1TABLE\$1NAME*   
Nama unik untuk tabel sementara yang mendefinisikan hasil subquery klausa WITH. Anda tidak dapat menggunakan nama duplikat dalam satu klausa WITH. Setiap subquery harus diberi nama tabel yang dapat direferensikan di. [Klausa FROM](r_FROM_clause30.md)

 *column\$1name*   
 Daftar nama kolom output untuk subquery klausa WITH, dipisahkan dengan koma. Jumlah nama kolom yang ditentukan harus sama dengan atau kurang dari jumlah kolom yang ditentukan oleh subquery. Untuk CTE yang non-rekursif, klausa *column\$1name* adalah opsional. Untuk CTE rekursif, daftar *column\$1name* diperlukan.

 *query*   
 Kueri SELECT apa pun yang didukung Amazon Redshift. Lihat [SELECT](r_SELECT_synopsis.md). 

 *recursive\$1query*   
Kueri UNION ALL yang terdiri dari dua subquery SELECT:  
+ *Subquery SELECT pertama tidak memiliki referensi rekursif ke CTE\$1TABLE\$1NAME yang sama.* Ia mengembalikan set hasil yang merupakan benih awal rekursi. Bagian ini disebut anggota awal atau anggota benih.
+ Subquery SELECT kedua mereferensikan *CTE\$1TABLE\$1NAME* yang sama dalam klausa FROM. Ini disebut anggota rekursif. *Recursive\$1query* *berisi kondisi WHERE untuk mengakhiri recursive\$1query.* 

## Catatan penggunaan
<a name="r_WITH_clause-usage-notes"></a>

Anda dapat menggunakan klausa WITH dalam pernyataan SQL berikut: 
+ SELECT 
+ PILIH KE DALAM
+ CREATE TABLE AS
+ CREATE VIEW
+ MENYATAKAN
+ EXPLAIN
+ MASUKKAN KE... PILIH 
+ MEMPERSIAPKAN
+ UPDATE (dalam subquery klausa WHERE. Anda tidak dapat mendefinisikan CTE rekursif di subquery. CTE rekursif harus mendahului klausa UPDATE.)
+ DELETE

Jika klausa FROM dari kueri yang berisi klausa WITH tidak mereferensikan salah satu tabel yang ditentukan oleh klausa WITH, klausa WITH diabaikan dan kueri berjalan seperti biasa.

Sebuah tabel yang didefinisikan oleh subquery klausa WITH dapat direferensikan hanya dalam lingkup kueri SELECT bahwa klausa WITH dimulai. Misalnya, Anda dapat mereferensikan tabel tersebut dalam klausa FROM dari subquery dalam daftar SELECT, klausa WHERE, atau HAVING. Anda tidak dapat menggunakan klausa WITH dalam subquery dan mereferensikan tabelnya di klausa FROM dari kueri utama atau subquery lainnya. Pola kueri ini menghasilkan pesan kesalahan formulir `relation table_name doesn't exist` untuk tabel klausa WITH.

Anda tidak dapat menentukan klausa WITH lain di dalam subquery klausa WITH.

Anda tidak dapat meneruskan referensi ke tabel yang ditentukan oleh subkueri klausa WITH. Misalnya, query berikut mengembalikan kesalahan karena referensi forward ke tabel W2 dalam definisi tabel W1: 

```
with w1 as (select * from w2), w2 as (select * from w1)
select * from sales;
ERROR:  relation "w2" does not exist
```

Subquery klausa WITH mungkin tidak terdiri dari pernyataan SELECT INTO; Namun, Anda dapat menggunakan klausa WITH dalam pernyataan SELECT INTO.

## Ekspresi tabel umum rekursif
<a name="r_WITH_clause-recursive-cte"></a>

*Ekspresi tabel umum rekursif (CTE) adalah CTE* yang mereferensikan dirinya sendiri. CTE rekursif berguna dalam kueri data hierarkis, seperti bagan organisasi yang menunjukkan hubungan pelaporan antara karyawan dan manajer. Lihat [Contoh: CTE rekursif](#r_WITH_clause-recursive-cte-example).

Penggunaan umum lainnya adalah tagihan bahan bertingkat, ketika suatu produk terdiri dari banyak komponen dan setiap komponen itu sendiri juga terdiri dari komponen atau subrakitan lain.

Pastikan untuk membatasi kedalaman rekursi dengan menyertakan klausa WHERE di subquery SELECT kedua dari kueri rekursif. Sebagai contoh, lihat [Contoh: CTE rekursif](#r_WITH_clause-recursive-cte-example). Jika tidak, kesalahan dapat terjadi serupa dengan yang berikut:
+ `Recursive CTE out of working buffers.`
+ `Exceeded recursive CTE max rows limit, please add correct CTE termination predicates or change the max_recursion_rows parameter.`

**catatan**  
`max_recursion_rows`adalah parameter yang mengatur jumlah maksimum baris yang dapat dikembalikan oleh CTE rekursif untuk mencegah loop rekursi tak terbatas. Kami merekomendasikan untuk tidak mengubah ini ke nilai yang lebih besar daripada default. Ini mencegah masalah rekursi tak terbatas dalam kueri Anda mengambil ruang berlebihan di cluster Anda.

 Anda dapat menentukan urutan pengurutan dan membatasi hasil CTE rekursif. Anda dapat menyertakan opsi grup demi dan berbeda pada hasil akhir CTE rekursif.

Anda tidak dapat menentukan klausa WITH RECURSIVE di dalam subquery. Anggota *recursive\$1query* tidak dapat menyertakan klausa order by atau limit. 

## Contoh
<a name="r_WITH_clause-examples"></a>

Contoh berikut menunjukkan kasus yang paling sederhana dari query yang berisi klausa WITH. Query WITH bernama VENUECOPY memilih semua baris dari tabel VENUE. Kueri utama pada gilirannya memilih semua baris dari VENUECOPY. Tabel VENUECOPY hanya ada selama durasi kueri ini. 

```
with venuecopy as (select * from venue)
select * from venuecopy order by 1 limit 10;
```

```
 venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |          0
2 | Columbus Crew Stadium      | Columbus        | OH         |          0
3 | RFK Stadium                | Washington      | DC         |          0
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |          0
5 | Gillette Stadium           | Foxborough      | MA         |      68756
6 | New York Giants Stadium    | East Rutherford | NJ         |      80242
7 | BMO Field                  | Toronto         | ON         |          0
8 | The Home Depot Center      | Carson          | CA         |          0
9 | Dick's Sporting Goods Park | Commerce City   | CO         |          0
v     10 | Pizza Hut Park             | Frisco          | TX         |          0
(10 rows)
```

Contoh berikut menunjukkan klausa WITH yang menghasilkan dua tabel, bernama VENUE\$1SALES dan TOP\$1VENUES. Tabel WITH query kedua memilih dari yang pertama. Pada gilirannya, klausa WHERE dari blok kueri utama berisi subquery yang membatasi tabel TOP\$1VENUES. 

```
with venue_sales as
(select venuename, venuecity, sum(pricepaid) as venuename_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
group by venuename, venuecity),

top_venues as
(select venuename
from venue_sales
where venuename_sales > 800000)

select venuename, venuecity, venuestate,
sum(qtysold) as venue_qty,
sum(pricepaid) as venue_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
and venuename in(select venuename from top_venues)
group by venuename, venuecity, venuestate
order by venuename;
```

```
        venuename       |   venuecity   | venuestate | venue_qty | venue_sales
------------------------+---------------+------------+-----------+-------------
August Wilson Theatre   | New York City | NY         |      3187 |  1032156.00
Biltmore Theatre        | New York City | NY         |      2629 |   828981.00
Charles Playhouse       | Boston        | MA         |      2502 |   857031.00
Ethel Barrymore Theatre | New York City | NY         |      2828 |   891172.00
Eugene O'Neill Theatre  | New York City | NY         |      2488 |   828950.00
Greek Theatre           | Los Angeles   | CA         |      2445 |   838918.00
Helen Hayes Theatre     | New York City | NY         |      2948 |   978765.00
Hilton Theatre          | New York City | NY         |      2999 |   885686.00
Imperial Theatre        | New York City | NY         |      2702 |   877993.00
Lunt-Fontanne Theatre   | New York City | NY         |      3326 |  1115182.00
Majestic Theatre        | New York City | NY         |      2549 |   894275.00
Nederlander Theatre     | New York City | NY         |      2934 |   936312.00
Pasadena Playhouse      | Pasadena      | CA         |      2739 |   820435.00
Winter Garden Theatre   | New York City | NY         |      2838 |   939257.00
(14 rows)
```

Dua contoh berikut menunjukkan aturan untuk ruang lingkup referensi tabel berdasarkan subquery klausa WITH. Kueri pertama berjalan, tetapi yang kedua gagal dengan kesalahan yang diharapkan. Kueri pertama memiliki subquery klausa WITH di dalam daftar SELECT dari kueri utama. Tabel yang ditentukan oleh klausa WITH (HOLIDAYS) direferensikan dalam klausa FROM subquery dalam daftar SELECT: 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join date on sales.dateid=date.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

caldate   | daysales | dec25sales
-----------+----------+------------
2008-12-25 | 70402.00 |   70402.00
2008-12-31 | 12678.00 |   70402.00
(2 rows)
```

Kueri kedua gagal karena mencoba mereferensikan tabel HOLIDAYS di kueri utama serta dalam subquery daftar SELECT. Referensi kueri utama berada di luar cakupan. 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join holidays on sales.dateid=holidays.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

ERROR:  relation "holidays" does not exist
```

## Contoh: CTE rekursif
<a name="r_WITH_clause-recursive-cte-example"></a>

Berikut ini adalah contoh CTE rekursif yang mengembalikan karyawan yang melapor secara langsung atau tidak langsung kepada John. Kueri rekursif berisi klausa WHERE untuk membatasi kedalaman rekursi hingga kurang dari 4 level.

```
--create and populate the sample table
  create table employee (
  id int,
  name varchar (20),
  manager_id int
  );
  
  insert into employee(id, name, manager_id)  values
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
  
--run the recursive query
  with recursive john_org(id, name, manager_id, level) as
( select id, name, manager_id, 1 as level
  from employee
  where name = 'John'
  union all
  select e.id, e.name, e.manager_id, level + 1 as next_level
  from employee e, john_org j
  where e.manager_id = j.id and level < 4
  )
 select distinct id, name, manager_id from john_org order by manager_id;
```

Berikut ini adalah hasil dari query.

```
    id        name      manager_id
  ------+-----------+--------------
   101    John           100
   102    Jorge          101
   103    Kwaku          101
   110    Liu            101
   201    Sofía          102
   106    Mateo          102
   110    Nikki          103
   104    Paulo          103
   105    Richard        103
   120    Saanvi         104
   200    Shirley        104
   205    Zhang          104
```

Berikut ini adalah bagan organisasi untuk departemen John.

![\[Diagram bagan organisasi untuk departemen John.\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/images/org-chart.png)


# PILIH daftar
<a name="r_SELECT_list"></a>

**Topics**
+ [Sintaksis](#r_SELECT_list-synopsis)
+ [Parameter](#r_SELECT_list-parameters)
+ [Catatan penggunaan](#r_SELECT_list_usage_notes)
+ [Contoh](#r_SELECT_list-examples)

Daftar SELECT menamai kolom, fungsi, dan ekspresi yang ingin Anda kembalikan dari kueri. Daftar ini mewakili output kueri. 

Untuk informasi selengkapnya tentang fungsi SQL, lihat[Referensi fungsi SQL](c_SQL_functions.md). Untuk informasi selengkapnya tentang ekspresi, lihat[Ekspresi bersyarat](c_conditional_expressions.md).

## Sintaksis
<a name="r_SELECT_list-synopsis"></a>

```
SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
```

## Parameter
<a name="r_SELECT_list-parameters"></a>

*Nomor* TOP   
TOP mengambil integer positif sebagai argumennya, yang mendefinisikan jumlah baris yang dikembalikan ke klien. Perilaku dengan klausa TOP sama dengan perilaku dengan klausa LIMIT. Jumlah baris yang dikembalikan adalah tetap, tetapi himpunan baris tidak. Untuk mengembalikan satu set baris yang konsisten, gunakan TOP atau LIMIT bersama dengan klausa ORDER BY. 

SEMUA   
Kata kunci redundan yang mendefinisikan perilaku default jika Anda tidak menentukan DISTINCT. `SELECT ALL *`berarti sama dengan `SELECT *` (pilih semua baris untuk semua kolom dan pertahankan duplikat). 

DISTINCT   
Opsi yang menghilangkan baris duplikat dari set hasil, berdasarkan nilai yang cocok dalam satu atau beberapa kolom.   
Jika aplikasi Anda mengizinkan kunci asing atau kunci utama yang tidak valid, itu dapat menyebabkan kueri mengembalikan hasil yang salah. Misalnya, kueri SELECT DISTINCT mungkin menampilkan baris duplikat jika kolom kunci primer tidak berisi semua nilai unik. Untuk informasi selengkapnya, lihat [Mendefinisikan batasan tabel](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html).

\$1 (tanda bintang)   
Mengembalikan seluruh isi tabel (semua kolom dan semua baris). 

 *ekspresi*   
Ekspresi yang terbentuk dari satu atau lebih kolom yang ada di tabel yang direferensikan oleh kueri. Ekspresi dapat berisi fungsi SQL. Contoh:   

```
avg(datediff(day, listtime, saletime))
```

AS *column\$1alias*   
Nama sementara untuk kolom yang digunakan dalam set hasil akhir. Kata kunci AS adalah opsional. Contoh:   

```
avg(datediff(day, listtime, saletime)) as avgwait
```
Jika Anda tidak menentukan alias untuk ekspresi yang bukan nama kolom sederhana, set hasil akan menerapkan nama default ke kolom tersebut.   
Alias dikenali tepat setelah didefinisikan dalam daftar target. Anda dapat menggunakan alias dalam ekspresi lain yang ditentukan setelahnya dalam daftar target yang sama. Contoh berikut menggambarkan hal ini.   

```
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
```
Manfaat referensi alias lateral adalah Anda tidak perlu mengulangi ekspresi alias saat membangun ekspresi yang lebih kompleks dalam daftar target yang sama. Saat Amazon Redshift mem-parsing jenis referensi ini, itu hanya sebaris dengan alias yang ditentukan sebelumnya. Jika ada kolom dengan nama yang sama yang didefinisikan dalam `FROM` klausa sebagai ekspresi alias sebelumnya, kolom dalam `FROM` klausa akan diprioritaskan. Misalnya, dalam kueri di atas jika ada kolom bernama 'probabilitas' dalam tabel raw\$1data, 'probabilitas' dalam ekspresi kedua dalam daftar target mengacu pada kolom itu alih-alih nama alias 'probabilitas'. 

## Catatan penggunaan
<a name="r_SELECT_list_usage_notes"></a>

TOP adalah ekstensi SQL; ini memberikan alternatif untuk perilaku LIMIT. Anda tidak dapat menggunakan TOP dan LIMIT dalam kueri yang sama.

## Contoh
<a name="r_SELECT_list-examples"></a>

Contoh berikut mengembalikan 10 baris dari tabel PENJUALAN. Meskipun kueri menggunakan klausa TOP, ia masih mengembalikan sekumpulan baris yang tidak dapat diprediksi karena tidak ada klausa ORDER BY yang ditentukan,

```
select top 10 *
from sales;
```

Kueri berikut secara fungsional setara, tetapi menggunakan klausa LIMIT alih-alih klausa TOP:

```
select *
from sales
limit 10;
```

Contoh berikut mengembalikan 10 baris pertama dari tabel PENJUALAN menggunakan klausa TOP, diurutkan oleh kolom QTYSOLD dalam urutan menurun.

```
select top 10 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
8 |      574
8 |      718
8 |      868
8 |     2663
8 |     3396
8 |     3726
8 |     5250
8 |     6216
(10 rows)
```

Contoh berikut mengembalikan dua nilai QTYSOLD dan SELLERID pertama dari tabel PENJUALAN, diurutkan oleh kolom QTYSOLD:

```
select top 2 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
(2 rows)
```

Contoh berikut menunjukkan daftar kelompok kategori yang berbeda dari tabel CATEGORY:

```
select distinct catgroup from category
order by 1;

catgroup
----------
Concerts
Shows
Sports
(3 rows)

--the same query, run without distinct
select catgroup from category
order by 1;

catgroup
----------
Concerts
Concerts
Concerts
Shows
Shows
Shows
Sports
Sports
Sports
Sports
Sports
(11 rows)
```

Contoh berikut mengembalikan kumpulan angka minggu yang berbeda untuk Desember 2008. Tanpa klausa DISTINCT, pernyataan akan mengembalikan 31 baris, atau satu untuk setiap hari dalam sebulan.

```
select distinct week, month, year
from date
where month='DEC' and year=2008
order by 1, 2, 3;

week | month | year
-----+-------+------
49 | DEC   | 2008
50 | DEC   | 2008
51 | DEC   | 2008
52 | DEC   | 2008
53 | DEC   | 2008
(5 rows)
```



# KECUALIKAN column\$1list
<a name="r_EXCLUDE_list"></a>

EXCLUDE column\$1list menamai kolom yang dikecualikan dari hasil kueri. Menggunakan opsi EXCLUDE sangat membantu ketika hanya sebagian kolom yang perlu dikecualikan dari tabel *lebar*, yang merupakan tabel yang berisi banyak kolom. 

**Topics**
+ [Sintaksis](#r_EXCLUDE_list-synopsis)
+ [Parameter](#r_EXCLUDE_list-parameters)
+ [Contoh](#r_EXCLUDE_list-examples)

## Sintaksis
<a name="r_EXCLUDE_list-synopsis"></a>

```
EXCLUDE column_list
```

## Parameter
<a name="r_EXCLUDE_list-parameters"></a>

 *column\$1list*   
Daftar dipisahkan koma dari satu atau beberapa nama kolom yang ada dalam tabel yang direferensikan oleh kueri. *Column\$1list* secara opsional dapat diapit dalam tanda kurung. Hanya nama kolom yang didukung dalam daftar pengecualian nama kolom, bukan ekspresi (seperti`upper(col1)`) atau tanda bintang (\$1).  

```
column-name, ... | ( column-name, ... )
```
Contoh:   

```
SELECT * EXCLUDE col1, col2 FROM tablea;
```

```
SELECT * EXCLUDE (col1, col2) FROM tablea;
```

## Contoh
<a name="r_EXCLUDE_list-examples"></a>

Contoh berikut menggunakan tabel PENJUALAN yang berisi kolom: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, dan saletime. Untuk informasi selengkapnya tentang tabel PENJUALAN, lihat[Database sampel](c_sampledb.md).

Contoh berikut mengembalikan baris dari tabel PENJUALAN, tetapi tidak termasuk kolom SALETIME.

```
SELECT * EXCLUDE saletime FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

Contoh berikut mengembalikan baris dari tabel PENJUALAN, tetapi tidak termasuk kolom QTYSOLD dan SALETIME.

```
SELECT * EXCLUDE (qtysold, saletime) FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 482        |  72.3	
...
```

Contoh berikut membuat tampilan yang mengembalikan baris dari tabel PENJUALAN, tetapi tidak termasuk kolom SALETIME.

```
CREATE VIEW sales_view AS SELECT * EXCLUDE saletime FROM sales;
SELECT * FROM sales_view;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

Contoh berikut hanya memilih kolom yang tidak dikecualikan ke dalam tabel temp.

```
SELECT * EXCLUDE saletime INTO TEMP temp_sales FROM sales;
SELECT * FROM temp_sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

# Klausa FROM
<a name="r_FROM_clause30"></a>

Klausa FROM dalam kueri mencantumkan referensi tabel (tabel, tampilan, dan subkueri) tempat data dipilih. Jika beberapa referensi tabel terdaftar, tabel harus digabungkan, menggunakan sintaks yang sesuai baik dalam klausa FROM atau klausa WHERE. Jika tidak ada kriteria gabungan yang ditentukan, sistem memproses kueri sebagai cross-join (produk Cartesian). 

**Topics**
+ [Sintaksis](#r_FROM_clause30-synopsis)
+ [Parameter](#r_FROM_clause30-parameters)
+ [Catatan penggunaan](#r_FROM_clause_usage_notes)
+ [Contoh PIVOT dan UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md)
+ [JOIN contoh](r_Join_examples.md)
+ [Contoh UNNEST](r_FROM_clause-unnest-examples.md)

## Sintaksis
<a name="r_FROM_clause30-synopsis"></a>

```
FROM table_reference [, ...]
```

di mana *table\$1reference* adalah salah satu dari berikut ini: 

```
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference  join_type super_expression 
   [ ON join_condition ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
( super_expression.attribute_name ) AS value_alias [ AT index_alias ]
UNNEST ( column_reference )
  [AS] table_alias ( unnested_column_name )
UNNEST ( column_reference ) WITH OFFSET
  [AS] table_alias ( unnested_column_name, [offset_column_name] )
```

*Table\$1alias* opsional dapat digunakan untuk memberikan nama sementara ke tabel dan referensi tabel kompleks dan, jika diinginkan, kolomnya juga, seperti berikut ini: 

```
[ AS ] alias [ ( column_alias [, ...] ) ]
```

## Parameter
<a name="r_FROM_clause30-parameters"></a>

 *dengan\$1subquery\$1table\$1name*   
Sebuah tabel didefinisikan oleh subquery di. [DENGAN klausa](r_WITH_clause.md) 

 *table\$1name*   
Nama tabel atau tampilan. 

 *alias*   
Nama alternatif sementara untuk tabel atau tampilan. Alias harus disediakan untuk tabel yang berasal dari subquery. Dalam referensi tabel lainnya, alias bersifat opsional. Kata kunci AS selalu opsional. Alias tabel menyediakan pintasan yang nyaman untuk mengidentifikasi tabel di bagian lain dari kueri, seperti klausa WHERE. Contoh:   

```
select * from sales s, listing l
where s.listid=l.listid
```

 *column\$1alias*   
Nama alternatif sementara untuk kolom dalam tabel atau tampilan. 

 *subkueri*   
Ekspresi kueri yang mengevaluasi ke tabel. Tabel hanya ada selama durasi kueri dan biasanya diberi nama atau *alias*. Namun, alias tidak diperlukan. Anda juga dapat menentukan nama kolom untuk tabel yang berasal dari subquery. Penamaan alias kolom penting saat Anda ingin menggabungkan hasil subkueri ke tabel lain dan saat Anda ingin memilih atau membatasi kolom tersebut di tempat lain dalam kueri.   
Subquery mungkin berisi klausa ORDER BY, tetapi klausa ini mungkin tidak berpengaruh jika klausa LIMIT atau OFFSET tidak juga ditentukan. 

ALAMI   
Mendefinisikan gabungan yang secara otomatis menggunakan semua pasangan kolom bernama identik dalam dua tabel sebagai kolom bergabung. Tidak diperlukan kondisi gabungan eksplisit. Misalnya, jika tabel CATEGORY dan EVENT keduanya memiliki kolom bernama CATID, gabungan alami dari tabel tersebut adalah gabungan di atas kolom CATID mereka.   
Jika gabungan NATURAL ditentukan tetapi tidak ada pasangan kolom bernama identik yang ada di tabel yang akan digabungkan, kueri default ke cross-join. 

 *join\$1type*   
Tentukan salah satu jenis join berikut:   
+ [BATIN] BERGABUNG 
+ KIRI [LUAR] BERGABUNG 
+ KANAN [LUAR] BERGABUNG 
+ PENUH [LUAR] BERGABUNG 
+ CROSS JOIN 
Cross-join adalah gabungan yang tidak memenuhi syarat; mereka mengembalikan produk Cartesian dari dua tabel.   
Gabungan dalam dan luar adalah gabungan yang memenuhi syarat. Mereka memenuhi syarat baik secara implisit (dalam gabungan alami); dengan sintaks ON atau USING dalam klausa FROM; atau dengan kondisi klausa WHERE.   
Gabungan bagian dalam mengembalikan baris yang cocok saja, berdasarkan kondisi gabungan atau daftar kolom yang bergabung. Gabungan luar mengembalikan semua baris yang akan dikembalikan oleh gabungan dalam yang setara ditambah baris yang tidak cocok dari tabel “kiri”, tabel “kanan”, atau kedua tabel. Tabel kiri adalah tabel yang terdaftar pertama, dan tabel kanan adalah tabel kedua yang terdaftar. Baris yang tidak cocok berisi nilai NULL untuk mengisi celah di kolom output. 

PADA *join\$1condition*   
Jenis spesifikasi gabungan di mana kolom bergabung dinyatakan sebagai kondisi yang mengikuti kata kunci ON. Contoh:   

```
sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
```

MENGGUNAKAN (*join\$1column* [,...])   
Jenis spesifikasi gabungan di mana kolom bergabung tercantum dalam tanda kurung. Jika beberapa kolom bergabung ditentukan, mereka dibatasi oleh koma. Kata kunci USING harus mendahului daftar. Contoh:   

```
sales join listing
using (listid,eventid)
```

POROS  
Memutar output dari baris ke kolom, untuk tujuan mewakili data tabular dalam format yang mudah dibaca. Output direpresentasikan secara horizontal di beberapa kolom. PIVOT mirip dengan kueri GROUP BY dengan agregasi, menggunakan ekspresi agregat untuk menentukan format output. Namun, berbeda dengan GROUP BY, hasilnya dikembalikan dalam kolom, bukan baris.  
Untuk contoh yang menunjukkan cara melakukan kueri dengan PIVOT dan UNPIVOT, lihat. [Contoh PIVOT dan UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md)

UNPIVOT  
*Memutar kolom menjadi baris dengan UNPIVOT* - Operator mengubah kolom hasil, dari tabel input atau hasil kueri, menjadi baris, untuk membuat output lebih mudah dibaca. UNPIVOT menggabungkan data kolom masukannya menjadi dua kolom hasil: kolom nama dan kolom nilai. Kolom nama berisi nama kolom dari input, sebagai entri baris. Kolom nilai berisi nilai-nilai dari kolom masukan, seperti hasil agregasi. Misalnya, jumlah item dalam berbagai kategori.  
*Object unpivoting with UNPIVOT (SUPER)* - Anda dapat melakukan unpivoting objek, di mana *ekspresi adalah ekspresi* SUPER mengacu pada item klausa FROM lainnya. Untuk informasi selengkapnya, lihat [Objek tidak berputar](query-super.md#unpivoting). Ini juga memiliki contoh yang menunjukkan cara menanyakan data semi-terstruktur, seperti data yang diformat JSON.

*super\$1ekspresi*  
Ekspresi SUPER yang valid. Amazon Redshift mengembalikan satu baris untuk setiap nilai dalam atribut yang ditentukan. Untuk informasi selengkapnya tentang tipe data SUPER, lihat[Tipe SUPER](r_SUPER_type.md). Untuk informasi selengkapnya tentang nilai SUPER unnested, lihat. [Kueri yang tidak bersarang](query-super.md#unnest)

*atribut\$1nama*  
Nama atribut dalam ekspresi SUPER.

*index\$1alias*  
Alias untuk indeks yang menandakan posisi nilai dalam ekspresi SUPER.

UNNEST  
Memperluas struktur bersarang, biasanya array SUPER, ke dalam kolom yang berisi elemen unnested. Untuk informasi selengkapnya tentang menghapus data SUPER, lihat. [Meminta data semi-terstruktur](query-super.md) Sebagai contoh, lihat [Contoh UNNEST](r_FROM_clause-unnest-examples.md). 

*unnested\$1column\$1name*  
Nama kolom yang berisi elemen unnested. 

TIDAK BERSARANG... DENGAN OFFSET  
Menambahkan kolom offset ke output unnested, dengan offset mewakili indeks berbasis nol dari setiap elemen dalam array. Varian ini berguna ketika Anda ingin melihat posisi elemen dalam array. Untuk informasi selengkapnya tentang menghapus data SUPER, lihat. [Meminta data semi-terstruktur](query-super.md) Sebagai contoh, lihat [Contoh UNNEST](r_FROM_clause-unnest-examples.md). 

*offset\$1column\$1name*  
Nama kustom untuk kolom offset yang memungkinkan Anda secara eksplisit menentukan bagaimana kolom indeks akan muncul di output. Parameter ini bersifat opsional. Secara default, nama kolom offset adalah`offset_col`. 

## Catatan penggunaan
<a name="r_FROM_clause_usage_notes"></a>

Kolom yang bergabung harus memiliki tipe data yang sebanding. 

Gabungan ALAMI atau MENGGUNAKAN hanya mempertahankan satu dari setiap pasangan kolom penggabungan dalam kumpulan hasil perantara. 

Gabungan dengan sintaks ON mempertahankan kedua kolom yang bergabung dalam kumpulan hasil perantara. 

Lihat juga [DENGAN klausa](r_WITH_clause.md). 

# Contoh PIVOT dan UNPIVOT
<a name="r_FROM_clause-pivot-unpivot-examples"></a>

PIVOT dan UNPIVOT adalah parameter dalam klausa FROM yang memutar output kueri dari baris ke kolom dan kolom ke baris, masing-masing. Mereka mewakili hasil kueri tabel dalam format yang mudah dibaca. Contoh berikut menggunakan data uji dan kueri untuk menunjukkan cara menggunakannya.

Untuk informasi selengkapnya tentang parameter ini dan parameter lainnya, lihat [klausa FROM](https://docs.aws.amazon.com/redshift/latest/dg/r_FROM_clause30.html).

## Contoh PIVOT
<a name="r_FROM_clause-pivot-examples"></a>

Siapkan tabel sampel dan data dan gunakan untuk menjalankan contoh query berikutnya.

```
CREATE TABLE part (
    partname varchar,
    manufacturer varchar,
    quality int,
    price decimal(12, 2)
);

INSERT INTO part VALUES ('prop', 'local parts co', 2, 10.00);
INSERT INTO part VALUES ('prop', 'big parts co', NULL, 9.00);
INSERT INTO part VALUES ('prop', 'small parts co', 1, 12.00);

INSERT INTO part VALUES ('rudder', 'local parts co', 1, 2.50);
INSERT INTO part VALUES ('rudder', 'big parts co', 2, 3.75);
INSERT INTO part VALUES ('rudder', 'small parts co', NULL, 1.90);

INSERT INTO part VALUES ('wing', 'local parts co', NULL, 7.50);
INSERT INTO part VALUES ('wing', 'big parts co', 1, 15.20);
INSERT INTO part VALUES ('wing', 'small parts co', NULL, 11.80);
```

PIVOT aktif `partname` dengan `AVG` agregasi aktif. `price`

```
SELECT *
FROM (SELECT partname, price FROM part) PIVOT (
    AVG(price) FOR partname IN ('prop', 'rudder', 'wing')
);
```

Hasil query dalam output berikut.

```
  prop   |  rudder  |  wing
---------+----------+---------
 10.33   | 2.71     | 11.50
```

Pada contoh sebelumnya, hasilnya diubah menjadi kolom. Contoh berikut menunjukkan `GROUP BY` kueri yang mengembalikan harga rata-rata dalam baris, bukan di kolom.

```
SELECT partname, avg(price)
FROM (SELECT partname, price FROM part)
WHERE partname IN ('prop', 'rudder', 'wing')
GROUP BY partname;
```

Hasil query dalam output berikut.

```
 partname |  avg
----------+-------
 prop     | 10.33
 rudder   |  2.71
 wing     | 11.50
```

`PIVOT`Contoh dengan `manufacturer` sebagai kolom implisit.

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) FOR quality IN (1, 2, NULL)
);
```

Hasil query dalam output berikut.

```
 manufacturer      | 1  | 2  | null
-------------------+----+----+------
 local parts co    | 1  | 1  |  1
 big parts co      | 1  | 1  |  1
 small parts co    | 1  | 0  |  2
```

 Kolom tabel masukan yang tidak direferensikan dalam `PIVOT` definisi ditambahkan secara implisit ke tabel hasil. Ini adalah kasus untuk `manufacturer` kolom pada contoh sebelumnya. Contoh ini juga menunjukkan bahwa `NULL` adalah nilai yang valid untuk `IN` operator. 

`PIVOT`dalam contoh di atas mengembalikan informasi yang sama sebagai query berikut, yang meliputi`GROUP BY`. Perbedaannya adalah bahwa `PIVOT` mengembalikan nilai `0` untuk kolom `2` dan produsen`small parts co`. `GROUP BY`Kueri tidak berisi baris yang sesuai. Dalam kebanyakan kasus, `PIVOT` menyisipkan `NULL` jika baris tidak memiliki data input untuk kolom tertentu. Namun, agregat hitungan tidak kembali `NULL` dan `0` merupakan nilai default.

```
SELECT manufacturer, quality, count(*)
FROM (SELECT quality, manufacturer FROM part)
WHERE quality IN (1, 2) OR quality IS NULL
GROUP BY manufacturer, quality
ORDER BY manufacturer;
```

Hasil query dalam output berikut.

```
 manufacturer        | quality | count
---------------------+---------+-------
 big parts co        |         |     1
 big parts co        |       2 |     1
 big parts co        |       1 |     1
 local parts co      |       2 |     1
 local parts co      |       1 |     1
 local parts co      |         |     1
 small parts co      |       1 |     1
 small parts co      |         |     2
```

 Operator PIVOT menerima alias opsional pada ekspresi agregat dan pada setiap nilai untuk operator. `IN` Gunakan alias untuk menyesuaikan nama kolom. Jika tidak ada alias agregat, hanya alias `IN` daftar yang digunakan. Jika tidak, alias agregat ditambahkan ke nama kolom dengan garis bawah untuk memisahkan nama. 

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) AS count FOR quality IN (1 AS high, 2 AS low, NULL AS na)
);
```

Hasil query dalam output berikut.

```
 manufacturer      | high_count  | low_count | na_count
-------------------+-------------+-----------+----------
 local parts co    |           1 |         1 |        1
 big parts co      |           1 |         1 |        1
 small parts co    |           1 |         0 |        2
```

Siapkan tabel sampel dan data berikut dan gunakan untuk menjalankan contoh query berikutnya. Data tersebut menunjukkan tanggal pemesanan untuk koleksi hotel.

```
CREATE TABLE bookings (
    booking_id int,
    hotel_code char(8),
    booking_date date,
    price decimal(12, 2)
);

INSERT INTO bookings VALUES (1, 'FOREST_L', '02/01/2023', 75.12);
INSERT INTO bookings VALUES (2, 'FOREST_L', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (3, 'FOREST_L', '02/04/2023', 85.54);

INSERT INTO bookings VALUES (4, 'FOREST_L', '02/08/2023', 75.00);
INSERT INTO bookings VALUES (5, 'FOREST_L', '02/11/2023', 75.00);
INSERT INTO bookings VALUES (6, 'FOREST_L', '02/14/2023', 90.00);

INSERT INTO bookings VALUES (7, 'FOREST_L', '02/21/2023', 60.00);
INSERT INTO bookings VALUES (8, 'FOREST_L', '02/22/2023', 85.00);
INSERT INTO bookings VALUES (9, 'FOREST_L', '02/27/2023', 90.00);

INSERT INTO bookings VALUES (10, 'DESERT_S', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (11, 'DESERT_S', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (12, 'DESERT_S', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (13, 'DESERT_S', '02/05/2023', 75.00);
INSERT INTO bookings VALUES (14, 'DESERT_S', '02/06/2023', 34.00);
INSERT INTO bookings VALUES (15, 'DESERT_S', '02/09/2023', 85.00);

INSERT INTO bookings VALUES (16, 'DESERT_S', '02/12/2023', 23.00);
INSERT INTO bookings VALUES (17, 'DESERT_S', '02/13/2023', 76.00);
INSERT INTO bookings VALUES (18, 'DESERT_S', '02/14/2023', 85.00);

INSERT INTO bookings VALUES (19, 'OCEAN_WV', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (20, 'OCEAN_WV', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (21, 'OCEAN_WV', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (22, 'OCEAN_WV', '02/06/2023', 75.00);
INSERT INTO bookings VALUES (23, 'OCEAN_WV', '02/09/2023', 34.00);
INSERT INTO bookings VALUES (24, 'OCEAN_WV', '02/12/2023', 85.00);

INSERT INTO bookings VALUES (25, 'OCEAN_WV', '02/13/2023', 23.00);
INSERT INTO bookings VALUES (26, 'OCEAN_WV', '02/14/2023', 76.00);
INSERT INTO bookings VALUES (27, 'OCEAN_WV', '02/16/2023', 85.00);

INSERT INTO bookings VALUES (28, 'CITY_BLD', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (29, 'CITY_BLD', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (30, 'CITY_BLD', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (31, 'CITY_BLD', '02/12/2023', 75.00);
INSERT INTO bookings VALUES (32, 'CITY_BLD', '02/13/2023', 34.00);
INSERT INTO bookings VALUES (33, 'CITY_BLD', '02/17/2023', 85.00);

INSERT INTO bookings VALUES (34, 'CITY_BLD', '02/22/2023', 23.00);
INSERT INTO bookings VALUES (35, 'CITY_BLD', '02/23/2023', 76.00);
INSERT INTO bookings VALUES (36, 'CITY_BLD', '02/24/2023', 85.00);
```

 Dalam contoh kueri ini, catatan pemesanan dihitung untuk memberikan total untuk setiap minggu. Tanggal akhir untuk setiap minggu menjadi nama kolom.

```
SELECT * FROM
    (SELECT
       booking_id,
       (date_trunc('week', booking_date::date) + '5 days'::interval)::date as enddate,
       hotel_code AS "hotel code"
FROM bookings
) PIVOT (
    count(booking_id) FOR enddate IN ('2023-02-04','2023-02-11','2023-02-18') 
);
```

Hasil query dalam output berikut.

```
 hotel code | 2023-02-04  | 2023-02-11 | 2023-02-18
------------+-------------+------------+----------
 FOREST_L   |           3 |          2 |        1
 DESERT_S   |           4 |          3 |        2
 OCEAN_WV   |           3 |          3 |        3
 CITY_BLD   |           3 |          1 |        2
```

 Amazon Redshift tidak mendukung CROSSTAB untuk berputar di beberapa kolom. Tetapi Anda dapat mengubah data baris ke kolom, dengan cara yang mirip dengan agregasi dengan PIVOT, dengan kueri seperti berikut ini. Ini menggunakan data sampel pemesanan yang sama dengan contoh sebelumnya.

```
SELECT 
  booking_date,
  MAX(CASE WHEN hotel_code = 'FOREST_L' THEN 'forest is booked' ELSE '' END) AS FOREST_L,
  MAX(CASE WHEN hotel_code = 'DESERT_S' THEN 'desert is booked' ELSE '' END) AS DESERT_S,
  MAX(CASE WHEN hotel_code = 'OCEAN_WV' THEN 'ocean is booked' ELSE '' END)  AS OCEAN_WV
FROM bookings
GROUP BY booking_date
ORDER BY booking_date asc;
```

Contoh kueri menghasilkan tanggal pemesanan yang tercantum di sebelah frasa singkat yang menunjukkan hotel mana yang dipesan.

```
 booking_date  | forest_l         | desert_s         | ocean_wv
---------------+------------------+------------------+--------------------
 2023-02-01    | forest is booked | desert is booked |  ocean is booked
 2023-02-02    | forest is booked | desert is booked |  ocean is booked
 2023-02-04    | forest is booked | desert is booked |  ocean is booked
 2023-02-05    |                  | desert is booked |        
 2023-02-06    |                  | desert is booked |
```

Berikut ini adalah catatan penggunaan untuk`PIVOT`:
+ `PIVOT`dapat diterapkan ke tabel, sub-query, dan ekspresi tabel umum ()CTEs. `PIVOT`tidak dapat diterapkan pada `JOIN` ekspresi, rekursif CTEs`PIVOT`, atau `UNPIVOT` ekspresi apa pun. Juga tidak didukung adalah ekspresi `SUPER` unnested dan tabel bersarang Redshift Spectrum.
+  `PIVOT`mendukung fungsi`COUNT`,`SUM`,`MIN`,`MAX`, dan `AVG` agregat. 
+ Ekspresi `PIVOT` agregat harus berupa panggilan dari fungsi agregat yang didukung. Ekspresi kompleks di atas agregat tidak didukung. Argumen agregat tidak dapat berisi referensi ke tabel selain tabel `PIVOT` input. Referensi berkorelasi ke kueri induk juga tidak didukung. Argumen agregat mungkin berisi sub-kueri. Ini dapat dikorelasikan secara internal atau pada tabel `PIVOT` input.
+  Nilai `PIVOT IN` daftar tidak dapat berupa referensi kolom atau sub-kueri. Setiap nilai harus jenis yang kompatibel dengan referensi `FOR` kolom. 
+  Jika nilai `IN` daftar tidak memiliki alias, `PIVOT` menghasilkan nama kolom default. Untuk `IN` nilai konstan seperti 'abc' atau 5 nama kolom default adalah konstanta itu sendiri. Untuk ekspresi kompleks apa pun, nama kolom adalah nama default Amazon Redshift standar seperti. `?column?` 

## Contoh UNPIVOT
<a name="r_FROM_clause-unpivot-examples"></a>

Siapkan data sampel dan gunakan untuk menjalankan contoh berikutnya.

```
CREATE TABLE count_by_color (quality varchar, red int, green int, blue int);

INSERT INTO count_by_color VALUES ('high', 15, 20, 7);
INSERT INTO count_by_color VALUES ('normal', 35, NULL, 40);
INSERT INTO count_by_color VALUES ('low', 10, 23, NULL);
```

`UNPIVOT`pada kolom input merah, hijau, dan biru.

```
SELECT *
FROM (SELECT red, green, blue FROM count_by_color) UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

Hasil query dalam output berikut.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |  23
 blue  |   7
 blue  |  40
```

Secara default, `NULL` nilai di kolom input dilewati dan tidak menghasilkan baris hasil. 

Contoh berikut menunjukkan `UNPIVOT` dengan`INCLUDE NULLS`.

```
SELECT *
FROM (
    SELECT red, green, blue
    FROM count_by_color
) UNPIVOT INCLUDE NULLS (
    cnt FOR color IN (red, green, blue)
);
```

Berikut ini adalah output yang dihasilkan.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |
 green |  23
 blue  |   7
 blue  |  40
 blue  |
```

Jika `INCLUDING NULLS` parameter diatur, nilai `NULL` masukan menghasilkan baris hasil.

`The following query shows UNPIVOT`dengan `quality` sebagai kolom implisit.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

Hasil query dalam output berikut.

```
 quality | color | cnt
---------+-------+-----
 high    | red   |  15
 normal  | red   |  35
 low     | red   |  10
 high    | green |  20
 low     | green |  23
 high    | blue  |   7
 normal  | blue  |  40
```

Kolom tabel input yang tidak direferensikan dalam `UNPIVOT` definisi ditambahkan secara implisit ke tabel hasil. Dalam contoh, ini adalah kasus untuk `quality` kolom.

Contoh berikut menunjukkan `UNPIVOT` dengan alias untuk nilai-nilai dalam `IN` daftar.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
```

Hasil query sebelumnya dalam output berikut.

```
 quality | color | cnt
---------+-------+-----
 high    | r     |  15
 normal  | r     |  35
 low     | r     |  10
 high    | g     |  20
 low     | g     |  23
 high    | b     |   7
 normal  | b     |  40
```

`UNPIVOT`Operator menerima alias opsional pada setiap nilai `IN` daftar. Setiap alias menyediakan kustomisasi data di setiap `value` kolom.

Berikut ini adalah catatan penggunaan untuk`UNPIVOT`.
+ `UNPIVOT`dapat diterapkan ke tabel, sub-query, dan ekspresi tabel umum ()CTEs. `UNPIVOT`tidak dapat diterapkan pada `JOIN` ekspresi, rekursif CTEs`PIVOT`, atau `UNPIVOT` ekspresi apa pun. Juga tidak didukung adalah ekspresi `SUPER` unnested dan tabel bersarang Redshift Spectrum.
+ `UNPIVOT IN`Daftar harus berisi hanya referensi kolom tabel masukan. Kolom `IN` daftar harus memiliki tipe umum yang semuanya kompatibel dengannya. Kolom `UNPIVOT` nilai memiliki tipe umum ini. Kolom `UNPIVOT` nama adalah tipe`VARCHAR`.
+ Jika nilai `IN` daftar tidak memiliki alias, `UNPIVOT` menggunakan nama kolom sebagai nilai default.

# JOIN contoh
<a name="r_Join_examples"></a>

Klausa SQL JOIN digunakan untuk menggabungkan data dari dua atau lebih tabel berdasarkan bidang umum. Hasilnya mungkin atau mungkin tidak berubah tergantung pada metode gabungan yang ditentukan. Untuk informasi selengkapnya tentang sintaks klausa JOIN, lihat. [Parameter](r_FROM_clause30.md#r_FROM_clause30-parameters) 

Contoh berikut menggunakan data dari data `TICKIT` sampel. Untuk informasi selengkapnya tentang skema database, lihat[Database sampel](c_sampledb.md). Untuk mempelajari cara memuat data sampel, lihat [Memuat data](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) di Panduan *Memulai Pergeseran Merah Amazon*.

Kueri berikut adalah gabungan dalam (tanpa kata kunci JOIN) antara tabel LISTING dan tabel PENJUALAN, di mana LISTID dari tabel LISTING adalah antara 1 dan 5. Kueri ini cocok dengan nilai kolom LISTID dalam tabel LISTING (tabel kiri) dan tabel PENJUALAN (tabel kanan). Hasilnya menunjukkan bahwa LISTID 1, 4, dan 5 sesuai dengan kriteria.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing, sales
where listing.listid = sales.listid
and listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Kueri berikut adalah gabungan luar kiri. Gabungan luar kiri dan kanan mempertahankan nilai dari salah satu tabel yang digabungkan ketika tidak ada kecocokan yang ditemukan di tabel lainnya. Tabel kiri dan kanan adalah tabel pertama dan kedua yang tercantum dalam sintaks. Nilai NULL digunakan untuk mengisi “celah” di set hasil. Kueri ini cocok dengan nilai kolom LISTID dalam tabel LISTING (tabel kiri) dan tabel PENJUALAN (tabel kanan). Hasilnya menunjukkan bahwa LISTIDs 2 dan 3 tidak menghasilkan penjualan apa pun.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing left outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Kueri berikut adalah gabungan luar kanan. Kueri ini cocok dengan nilai kolom LISTID dalam tabel LISTING (tabel kiri) dan tabel PENJUALAN (tabel kanan). Hasilnya menunjukkan bahwa LISTIDs 1, 4, dan 5 sesuai dengan kriteria.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing right outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Kueri berikut adalah gabungan penuh. Gabungan penuh mempertahankan nilai dari tabel yang digabungkan ketika tidak ada kecocokan yang ditemukan di tabel lainnya. Tabel kiri dan kanan adalah tabel pertama dan kedua yang tercantum dalam sintaks. Nilai NULL digunakan untuk mengisi “celah” di set hasil. Kueri ini cocok dengan nilai kolom LISTID dalam tabel LISTING (tabel kiri) dan tabel PENJUALAN (tabel kanan). Hasilnya menunjukkan bahwa LISTIDs 2 dan 3 tidak menghasilkan penjualan apa pun.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Kueri berikut adalah gabungan penuh. Kueri ini cocok dengan nilai kolom LISTID dalam tabel LISTING (tabel kiri) dan tabel PENJUALAN (tabel kanan). Hanya baris yang tidak menghasilkan penjualan apa pun (LISTIDs 2 dan 3) yang ada di hasil.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
and (listing.listid IS NULL or sales.listid IS NULL)
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     2 | NULL   | NULL
     3 | NULL   | NULL
```

Contoh berikut adalah gabungan batin dengan klausa ON. Dalam hal ini, baris NULL tidak dikembalikan.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Kueri berikut adalah gabungan silang atau gabungan Cartesian dari tabel LISTING dan tabel PENJUALAN dengan predikat untuk membatasi hasil. Kueri ini cocok dengan nilai kolom LISTID dalam tabel PENJUALAN dan tabel LISTING untuk LISTIDs 1, 2, 3, 4, dan 5 di kedua tabel. Hasilnya menunjukkan bahwa 20 baris cocok dengan kriteria.

```
select sales.listid as sales_listid, listing.listid as listing_listid
from sales cross join listing
where sales.listid between 1 and 5
and listing.listid between 1 and 5
order by 1,2;

sales_listid | listing_listid
-------------+---------------
1            | 1
1            | 2
1            | 3
1            | 4
1            | 5
4            | 1
4            | 2
4            | 3
4            | 4
4            | 5
5            | 1
5            | 1
5            | 2
5            | 2
5            | 3
5            | 3
5            | 4
5            | 4
5            | 5
5            | 5
```

Contoh berikut adalah gabungan alami antara dua tabel. Dalam hal ini, kolom listid, sellerid, eventid, dan dateid memiliki nama dan tipe data yang identik di kedua tabel dan digunakan sebagai kolom gabungan. Hasilnya dibatasi hingga lima baris.

```
select listid, sellerid, eventid, dateid, numtickets
from listing natural join sales
order by 1
limit 5;

listid | sellerid  | eventid | dateid | numtickets
-------+-----------+---------+--------+-----------
113    | 29704     | 4699    | 2075   | 22
115    | 39115     | 3513    | 2062   | 14
116    | 43314     | 8675    | 1910   | 28
118    | 6079      | 1611    | 1862   | 9
163    | 24880     | 8253    | 1888   | 14
```

Contoh berikut adalah gabungan antara dua tabel dengan klausa USING. Dalam hal ini, kolom listid dan eventid digunakan sebagai kolom gabungan. Hasilnya dibatasi hingga lima baris.

```
select listid, listing.sellerid, eventid, listing.dateid, numtickets
from listing join sales
using (listid, eventid)
order by 1
limit 5;

listid | sellerid | eventid | dateid | numtickets
-------+----------+---------+--------+-----------
1      | 36861    | 7872    | 1850   | 10
4      | 8117     | 4337    | 1970   | 8
5      | 1616     | 8647    | 1963   | 4
5      | 1616     | 8647    | 1963   | 4
6      | 47402    | 8240    | 2053   | 18
```

Kueri berikut adalah gabungan batin dari dua subquery dalam klausa FROM. Kueri menemukan jumlah tiket yang terjual dan tidak terjual untuk berbagai kategori acara (konser dan pertunjukan). Subquery klausa FROM adalah subquery *tabel*; mereka dapat mengembalikan beberapa kolom dan baris.

```
select catgroup1, sold, unsold
from
(select catgroup, sum(qtysold) as sold
from category c, event e, sales s
where c.catid = e.catid and e.eventid = s.eventid
group by catgroup) as a(catgroup1, sold)
join
(select catgroup, sum(numtickets)-sum(qtysold) as unsold
from category c, event e, sales s, listing l
where c.catid = e.catid and e.eventid = s.eventid
and s.listid = l.listid
group by catgroup) as b(catgroup2, unsold)

on a.catgroup1 = b.catgroup2
order by 1;

catgroup1 |  sold  | unsold
----------+--------+--------
Concerts  | 195444 |1067199
Shows     | 149905 | 817736
```

# Contoh UNNEST
<a name="r_FROM_clause-unnest-examples"></a>

UNNEST adalah parameter dalam klausa FROM yang memperluas data bersarang ke dalam kolom yang menyimpan elemen data yang tidak bersarang. Untuk informasi tentang data yang tidak bersarang, lihat. [Meminta data semi-terstruktur](query-super.md)

Pernyataan berikut membuat dan mengisi `orders` tabel, yang berisi `products` kolom yang berisi array produk. IDs Contoh di bagian ini menggunakan data sampel dalam tabel ini. 

```
CREATE TABLE orders (
    order_id INT,
    products SUPER
);

-- Populate table
INSERT INTO orders VALUES
(1001, JSON_PARSE('[
        {
            "product_id": "P456",
            "name": "Monitor",
            "price": 299.99,
            "quantity": 1,
            "specs": {
                "size": "27 inch",
                "resolution": "4K"
            }
        }
    ]
')),
(1002, JSON_PARSE('
    [
        {
            "product_id": "P567",
            "name": "USB Cable",
            "price": 9.99,
            "quantity": 3
        },
        {
            "product_id": "P678",
            "name": "Headphones",
            "price": 159.99,
            "quantity": 1,
            "specs": {
                "type": "Wireless",
                "battery_life": "20 hours"
            }
        }
    ]
'));
```

Berikut ini adalah beberapa contoh query unnesting dengan data sampel menggunakan sintaks PartiQL.

## Melepaskan array tanpa kolom OFFSET
<a name="r_FROM_clause-unnest-examples-no-offset"></a>

Kueri berikut menghapus array SUPER di kolom produk, dengan setiap baris mewakili item dari urutan dalam. `order_id`

```
SELECT o.order_id, unnested_products.product
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(3 rows)
```

Kueri berikut menemukan produk paling mahal di setiap pesanan.

```
SELECT o.order_id, MAX(unnested_products.product)
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(2 rows)
```

## Melepaskan array dengan kolom OFFSET implisit
<a name="r_FROM_clause-unnest-examples-implicit-offset"></a>

Kueri berikut menggunakan `UNNEST ... WITH OFFSET` parameter untuk menunjukkan posisi berbasis nol dari setiap produk dalam array urutannya.

```
SELECT o.order_id, up.product, up.offset_col
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);

 order_id |                                                           product                                                           | offset_col 
----------+-----------------------------------------------------------------------------------------------------------------------------+------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |          0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |          0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |          1
(3 rows)
```

Karena pernyataan tidak menentukan alias untuk kolom offset, Amazon Redshift secara default menamainya. `offset_col`

## Melepaskan array dengan kolom OFFSET eksplisit
<a name="r_FROM_clause-unnest-examples-explicit-offset"></a>

Kueri berikut juga menggunakan `UNNEST ... WITH OFFSET` parameter untuk menampilkan produk dalam array pesanan mereka. Perbedaan dalam kueri ini dibandingkan dengan kueri pada contoh sebelumnya adalah bahwa ia secara eksplisit menamai kolom offset dengan alias. `idx`

```
SELECT o.order_id, up.product, up.idx
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);

 order_id |                                                           product                                                           | idx 
----------+-----------------------------------------------------------------------------------------------------------------------------+-----
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |   0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |   0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |   1
(3 rows)
```

# Klausa WHERE
<a name="r_WHERE_clause"></a>

Klausa WHERE berisi kondisi yang menggabungkan tabel atau menerapkan predikat ke kolom dalam tabel. Tabel dapat bergabung dalam dengan menggunakan sintaks yang sesuai baik dalam klausa WHERE atau klausa FROM. Kriteria gabungan luar harus ditentukan dalam klausa FROM. 

## Sintaksis
<a name="r_WHERE_clause-synopsis"></a>

```
[ WHERE condition ]
```

## *ketentuan*
<a name="r_WHERE_clause-synopsis-condition"></a>

Setiap kondisi pencarian dengan hasil Boolean, seperti kondisi gabungan atau predikat pada kolom tabel. Contoh berikut adalah ketentuan gabungan yang valid: 

```
sales.listid=listing.listid
sales.listid<>listing.listid
```

Contoh berikut adalah kondisi yang valid pada kolom dalam tabel: 

```
catgroup like 'S%'
venueseats between 20000 and 50000
eventname in('Jersey Boys','Spamalot')
year=2008
length(catdesc)>25
date_part(month, caldate)=6
```

Kondisi bisa sederhana atau kompleks; untuk kondisi kompleks, Anda dapat menggunakan tanda kurung untuk mengisolasi unit logis. Dalam contoh berikut, kondisi bergabung diapit oleh tanda kurung. 

```
where (category.catid=event.catid) and category.catid in(6,7,8)
```

## Catatan penggunaan
<a name="r_WHERE_clause_usage_notes"></a>

Anda dapat menggunakan alias dalam klausa WHERE untuk referensi ekspresi daftar pilih. 

Anda tidak dapat membatasi hasil fungsi agregat dalam klausa WHERE; gunakan klausa HAVING untuk tujuan ini. 

Kolom yang dibatasi dalam klausa WHERE harus berasal dari referensi tabel dalam klausa FROM. 

## Contoh
<a name="r_SELECT_synopsis-example"></a>

Kueri berikut menggunakan kombinasi batasan klausa WHERE yang berbeda, termasuk kondisi gabungan untuk tabel PENJUALAN dan EVENT, predikat pada kolom EVENTNAME, dan dua predikat pada kolom STARTTIME. 

```
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Hannah Montana'
and date_part(quarter, starttime) in(1,2)
and date_part(year, starttime) = 2008
order by 3 desc, 4, 2, 1 limit 10;

eventname    |      starttime      |   costperticket   | qtysold
----------------+---------------------+-------------------+---------
Hannah Montana | 2008-06-07 14:00:00 |     1706.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |     1658.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       3
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       4
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       1
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       4
(10 rows)
```

# Bagian luar Gaya Oracle bergabung dalam klausa WHERE
<a name="r_WHERE_oracle_outer"></a>

Untuk kompatibilitas Oracle, Amazon Redshift mendukung operator outer-join Oracle (\$1) dalam ketentuan gabungan klausa WHERE. Operator ini dimaksudkan untuk digunakan hanya dalam menentukan kondisi outer-join; jangan mencoba menggunakannya dalam konteks lain. Penggunaan lain dari operator ini secara diam-diam diabaikan dalam banyak kasus. 

Gabungan luar mengembalikan semua baris yang akan dikembalikan oleh gabungan dalam yang setara, ditambah baris yang tidak cocok dari satu atau kedua tabel. Dalam klausa FROM, Anda dapat menentukan gabungan luar kiri, kanan, dan penuh. Dalam klausa WHERE, Anda dapat menentukan gabungan luar kiri dan kanan saja. 

Untuk menggabungkan tabel luar TABLE1 dan TABLE2 dan mengembalikan baris yang tidak cocok dari TABLE1 (gabungan luar kiri), tentukan `TABLE1 LEFT OUTER JOIN TABLE2` dalam klausa FROM atau terapkan operator (\$1) ke semua kolom yang bergabung dari TABLE2 dalam klausa WHERE. Untuk semua baris TABLE1 yang tidak memiliki baris yang cocok TABLE2, hasil kueri berisi nol untuk setiap ekspresi daftar pilih yang berisi kolom dari. TABLE2 

Untuk menghasilkan perilaku yang sama untuk semua baris yang tidak memiliki baris TABLE2 yang cocok TABLE1, tentukan `TABLE1 RIGHT OUTER JOIN TABLE2` dalam klausa FROM atau terapkan operator (\$1) ke semua kolom yang bergabung dari TABLE1 dalam klausa WHERE. 

## Sintaks dasar
<a name="r_WHERE_oracle_outer-basic-syntax"></a>

```
[ WHERE {
[ table1.column1 = table2.column1(+) ]
[ table1.column1(+) = table2.column1 ]
}
```

Kondisi pertama setara dengan: 

```
from table1 left outer join table2
on table1.column1=table2.column1
```

Kondisi kedua setara dengan: 

```
from table1 right outer join table2
on table1.column1=table2.column1
```

**catatan**  
Sintaks yang ditampilkan di sini mencakup kasus sederhana dari equijoin atas satu pasang kolom yang bergabung. Namun, jenis kondisi perbandingan lainnya dan beberapa pasang kolom penggabungan juga valid. 

Misalnya, klausa WHERE berikut mendefinisikan gabungan luar lebih dari dua pasang kolom. Operator (\$1) harus dilampirkan ke tabel yang sama dalam kedua kondisi: 

```
where table1.col1 > table2.col1(+)
and table1.col2 = table2.col2(+)
```

## Catatan penggunaan
<a name="r_WHERE_oracle_outer_usage_notes"></a>

Jika memungkinkan, gunakan sintaks standar FROM klausa OUTER JOIN alih-alih operator (\$1) di klausa WHERE. Kueri yang berisi operator (\$1) tunduk pada aturan berikut: 
+ Anda hanya dapat menggunakan operator (\$1) di klausa WHERE, dan hanya mengacu pada kolom dari tabel atau tampilan. 
+ Anda tidak dapat menerapkan operator (\$1) ke ekspresi. Namun, ekspresi dapat berisi kolom yang menggunakan operator (\$1). Misalnya, kondisi bergabung berikut mengembalikan kesalahan sintaks: 

  ```
  event.eventid*10(+)=category.catid
  ```

  Namun, kondisi bergabung berikut ini valid: 

  ```
  event.eventid(+)*10=category.catid
  ```
+ Anda tidak dapat menggunakan operator (\$1) di blok kueri yang juga berisi sintaks gabungan klausa FROM. 
+ Jika dua tabel digabungkan dalam beberapa kondisi gabungan, Anda harus menggunakan operator (\$1) di semua atau tidak ada kondisi ini. Gabungan dengan gaya sintaks campuran berjalan sebagai gabungan dalam, tanpa peringatan. 
+ Operator (\$1) tidak menghasilkan gabungan luar jika Anda menggabungkan tabel di kueri luar dengan tabel yang dihasilkan dari kueri dalam. 
+ Untuk menggunakan operator (\$1) untuk menggabungkan tabel ke luar ke dirinya sendiri, Anda harus menentukan alias tabel dalam klausa FROM dan mereferensikannya dalam kondisi gabungan: 

  ```
  select count(*)
  from event a, event b
  where a.eventid(+)=b.catid;
  
  count
  -------
  8798
  (1 row)
  ```
+ Anda tidak dapat menggabungkan kondisi gabungan yang berisi operator (\$1) dengan kondisi OR atau kondisi IN. Contoh: 

  ```
  select count(*) from sales, listing
  where sales.listid(+)=listing.listid or sales.salesid=0;
  ERROR:  Outer join operator (+) not allowed in operand of OR or IN.
  ```
+  Dalam klausa WHERE yang menggabungkan lebih dari dua tabel, operator (\$1) hanya dapat diterapkan sekali ke tabel tertentu. Dalam contoh berikut, tabel PENJUALAN tidak dapat direferensikan dengan operator (\$1) dalam dua gabungan berturut-turut. 

  ```
  select count(*) from sales, listing, event
  where sales.listid(+)=listing.listid and sales.dateid(+)=date.dateid;
  ERROR:  A table may be outer joined to at most one other table.
  ```
+  Jika klausa WHERE kondisi outer-join membandingkan kolom dari TABLE2 dengan konstanta, terapkan operator (\$1) ke kolom. Jika Anda tidak menyertakan operator, baris gabungan luar dari TABLE1, yang berisi nol untuk kolom terbatas, akan dihilangkan. Lihat bagian Contoh di bawah ini. 

## Contoh
<a name="r_WHERE_oracle_outer-examples"></a>

Kueri gabungan berikut menentukan gabungan luar kiri tabel SALES dan LISTING di atas kolom LISTID mereka: 

```
select count(*)
from sales, listing
where sales.listid = listing.listid(+);

count
--------
172456
(1 row)
```

Kueri setara berikut menghasilkan hasil yang sama tetapi menggunakan sintaks gabungan klausa FROM: 

```
select count(*)
from sales left outer join listing on sales.listid = listing.listid;

count
--------
172456
(1 row)
```

Tabel PENJUALAN tidak berisi catatan untuk semua listing dalam tabel LISTING karena tidak semua listing menghasilkan penjualan. Kueri berikut menggabungkan bagian luar PENJUALAN dan LISTING dan mengembalikan baris dari LISTING bahkan ketika tabel PENJUALAN melaporkan tidak ada penjualan untuk ID daftar yang diberikan. Kolom PRICE dan COMM, yang berasal dari tabel SALES, berisi nol dalam set hasil untuk baris yang tidak cocok tersebut. 

```
select listing.listid, sum(pricepaid) as price,
sum(commission) as comm
from listing, sales
where sales.listid(+) = listing.listid and listing.listid between 1 and 5
group by 1 order by 1;

listid | price  |  comm
--------+--------+--------
1 | 728.00 | 109.20
2 |        |
3 |        |
4 |  76.00 |  11.40
5 | 525.00 |  78.75
(5 rows)
```

Perhatikan bahwa ketika operator bergabung klausa WHERE digunakan, urutan tabel dalam klausa FROM tidak menjadi masalah. 

Contoh kondisi gabungan luar yang lebih kompleks dalam klausa WHERE adalah kasus di mana kondisi terdiri dari perbandingan antara dua kolom tabel *dan* perbandingan dengan konstanta: 

```
where category.catid=event.catid(+) and eventid(+)=796;
```

Perhatikan bahwa operator (\$1) digunakan di dua tempat: pertama dalam perbandingan kesetaraan antara tabel dan kedua dalam kondisi perbandingan untuk kolom EVENTID. Hasil dari sintaks ini adalah pelestarian baris terluar saat pembatasan EVENTID dievaluasi. Jika Anda menghapus operator (\$1) dari pembatasan EVENTID, kueri memperlakukan pembatasan ini sebagai filter, bukan sebagai bagian dari kondisi outer-join. Pada gilirannya, baris gabungan luar yang berisi nol untuk EVENTID dihilangkan dari kumpulan hasil. 

Berikut adalah kueri lengkap yang menggambarkan perilaku ini: 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid(+)=796;

catname | catgroup | eventid
-----------+----------+---------
Classical | Concerts |
Jazz | Concerts |
MLB | Sports   |
MLS | Sports   |
Musicals | Shows    | 796
NBA | Sports   |
NFL | Sports   |
NHL | Sports   |
Opera | Shows    |
Plays | Shows    |
Pop | Concerts |
(11 rows)
```

Kueri setara menggunakan sintaks klausa FROM adalah sebagai berikut: 

```
select catname, catgroup, eventid
from category left join event
on category.catid=event.catid and eventid=796;
```

Jika Anda menghapus operator kedua (\$1) dari versi klausa WHERE dari kueri ini, ia hanya mengembalikan 1 baris (baris di mana`eventid=796`). 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid=796;

catname | catgroup | eventid
-----------+----------+---------
Musicals | Shows    | 796
(1 row)
```

# Klausa GROUP BY
<a name="r_GROUP_BY_clause"></a>

Klausa GROUP BY mengidentifikasi kolom pengelompokan untuk kueri. Ini digunakan untuk mengelompokkan baris-baris tersebut dalam tabel yang memiliki nilai yang sama di semua kolom yang terdaftar. Urutan di mana kolom terdaftar tidak masalah. Hasilnya adalah menggabungkan setiap set baris yang memiliki nilai umum menjadi satu baris grup yang mewakili semua baris dalam grup. Gunakan GROUP BY untuk menghilangkan redundansi dalam output dan untuk menghitung agregat yang berlaku untuk grup. Kolom pengelompokan harus dideklarasikan saat kueri menghitung agregat dengan fungsi standar seperti SUM, AVG, dan COUNT. Untuk informasi selengkapnya, lihat [Fungsi agregat](c_Aggregate_Functions.md).

## Sintaks
<a name="r_GROUP_BY_clause-syntax"></a>

```
[ GROUP BY  expression [, ...] | ALL | aggregation_extension  ]
```

di mana *aggregation\$1extension* adalah salah satu dari berikut ini:

```
GROUPING SETS ( () | aggregation_extension [, ...] ) |
ROLLUP ( expr [, ...] ) |
CUBE ( expr [, ...] )
```

## Parameter
<a name="r_GROUP_BY_clause-parameters"></a>

 *ekspresi*  
Daftar kolom atau ekspresi harus cocok dengan daftar ekspresi non-agregat dalam daftar pilih kueri. Misalnya, pertimbangkan kueri sederhana berikut.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by listid, eventid
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```
Dalam kueri ini, daftar pilih terdiri dari dua ekspresi agregat. Yang pertama menggunakan fungsi SUM dan yang kedua menggunakan fungsi COUNT. Dua kolom yang tersisa, LISTID dan EVENTID, harus dinyatakan sebagai kolom pengelompokan.  
Ekspresi dalam klausa GROUP BY juga dapat mereferensikan daftar pilih dengan menggunakan nomor urut. Misalnya, contoh sebelumnya dapat disingkat sebagai berikut.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by 1,2
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```

SEMUA  
ALL menunjukkan untuk mengelompokkan dengan semua kolom yang ditentukan dalam daftar SELECT kecuali yang digabungkan. Misalnya, pertimbangkan kueri berikut yang dikelompokkan oleh `col1` dan `col2` tanpa harus menentukannya secara individual dalam klausa GROUP BY. Kolom `col3` adalah argumen `SUM` fungsi dan dengan demikian tidak dikelompokkan.  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
Jika Anda MENGECUALIKAN kolom dalam daftar SELECT, klausa GROUP BY ALL tidak mengelompokkan hasil berdasarkan kolom tertentu.  

```
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
```

 **aggregation\$1extension**   
Anda dapat menggunakan ekstensi agregasi GROUPING SETS, ROLLUP, dan CUBE untuk melakukan pekerjaan beberapa operasi GROUP BY dalam satu pernyataan. Untuk informasi selengkapnya tentang ekstensi agregasi dan fungsi terkait, lihat[Ekstensi agregasi](r_GROUP_BY_aggregation-extensions.md). 

## Contoh
<a name="r_GROUP_BY_clause-examples"></a>

Contoh berikut menggunakan tabel PENJUALAN yang berisi kolom: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, dan saletime. Untuk informasi selengkapnya tentang tabel PENJUALAN, lihat[Database sampel](c_sampledb.md).

Berikut contoh kelompok query oleh `salesid` dan `listid` tanpa harus menentukan mereka secara individual dalam klausa GROUP BY. Kolom `qtysold` adalah argumen `SUM` fungsi dan dengan demikian tidak dikelompokkan.

```
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;

salesid | listid  | sum
--------+---------+------
33095   | 36572   | 2	
88268   | 100813  | 4	
110917  | 127048  | 1	
...
```

Contoh query berikut mengecualikan beberapa kolom dalam daftar SELECT, sehingga GROUP BY ALL hanya grup salesid dan listid.

```
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 
FROM sales GROUP BY ALL;

salesid | listid 
--------+---------
33095   | 36572   	
88268   | 100813 	
110917  | 127048 	
...
```

# Ekstensi agregasi
<a name="r_GROUP_BY_aggregation-extensions"></a>

Amazon Redshift mendukung ekstensi agregasi untuk melakukan pekerjaan beberapa operasi GROUP BY dalam satu pernyataan.

 Contoh untuk ekstensi agregasi menggunakan `orders` tabel, yang menyimpan data penjualan untuk perusahaan elektronik. Anda dapat membuat `orders` dengan yang berikut ini.

```
CREATE TABLE ORDERS (
    ID INT,
    PRODUCT CHAR(20),
    CATEGORY CHAR(20),
    PRE_OWNED CHAR(1),
    COST DECIMAL
);

INSERT INTO ORDERS VALUES
    (0, 'laptop',       'computers',    'T', 1000),
    (1, 'smartphone',   'cellphones',   'T', 800),
    (2, 'smartphone',   'cellphones',   'T', 810),
    (3, 'laptop',       'computers',    'F', 1050),
    (4, 'mouse',        'computers',    'F', 50);
```

## *SET PENGELOMPOKAN*
<a name="r_GROUP_BY_aggregation-extensions-grouping-sets"></a>

 Menghitung satu atau lebih kumpulan pengelompokan dalam satu pernyataan. Kumpulan pengelompokan adalah kumpulan klausa GROUP BY tunggal, satu set kolom 0 atau lebih yang dengannya Anda dapat mengelompokkan kumpulan hasil kueri. GROUP BY GROUPING SETS setara dengan menjalankan query UNION ALL pada satu set hasil yang dikelompokkan berdasarkan kolom yang berbeda. Misalnya, GROUP BY GROUPING SETS ((a), (b)) setara dengan GROUP BY a UNION ALL GROUP BY b. 

 Contoh berikut mengembalikan biaya produk tabel pesanan dikelompokkan sesuai dengan kategori produk dan jenis produk yang dijual. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(category, product);

       category       |       product        | total
----------------------+----------------------+-------
 computers            |                      |  2100
 cellphones           |                      |  1610
                      | laptop               |  2050
                      | smartphone           |  1610
                      | mouse                |    50

(5 rows)
```

## *ROLLUP*
<a name="r_GROUP_BY_aggregation-extensions-rollup"></a>

 Mengasumsikan hierarki di mana kolom sebelumnya dianggap sebagai orang tua dari kolom berikutnya. ROLLUP mengelompokkan data berdasarkan kolom yang disediakan, mengembalikan baris subtotal tambahan yang mewakili total di semua tingkat kolom pengelompokan, selain baris yang dikelompokkan. Misalnya, Anda dapat menggunakan GROUP BY ROLLUP ((a), (b)) untuk mengembalikan kumpulan hasil yang dikelompokkan terlebih dahulu oleh a, kemudian oleh b sambil mengasumsikan bahwa b adalah ayat dari a. ROLLUP juga mengembalikan baris dengan seluruh hasil yang ditetapkan tanpa pengelompokan kolom. 

GROUP BY ROLLUP ((a), (b)) setara dengan GROUP BY GROUPING SETS ((a, b), (a), ()). 

Contoh berikut mengembalikan biaya produk tabel pesanan dikelompokkan pertama berdasarkan kategori dan kemudian produk, dengan produk sebagai subdivisi kategori.

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY ROLLUP(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      |                      |  3710
(6 rows)
```

## *KUBUS*
<a name="r_GROUP_BY_aggregation-extensions-cube"></a>

 Kelompokkan data berdasarkan kolom yang disediakan, mengembalikan baris subtotal tambahan yang mewakili total di semua tingkat kolom pengelompokan, selain baris yang dikelompokkan. CUBE mengembalikan baris yang sama dengan ROLLUP, sambil menambahkan baris subtotal tambahan untuk setiap kombinasi kolom pengelompokan yang tidak dicakup oleh ROLLUP. Misalnya, Anda dapat menggunakan GROUP BY CUBE ((a), (b)) untuk mengembalikan kumpulan hasil yang dikelompokkan terlebih dahulu oleh a, kemudian oleh b sambil mengasumsikan bahwa b adalah subbagian dari a, lalu oleh b saja. CUBE juga mengembalikan baris dengan seluruh hasil yang ditetapkan tanpa pengelompokan kolom.

GROUP BY CUBE ((a), (b)) setara dengan GROUP BY GROUPING SETS ((a, b), (a), (b), ()). 

Contoh berikut mengembalikan biaya produk tabel pesanan dikelompokkan pertama berdasarkan kategori dan kemudian produk, dengan produk sebagai subdivisi kategori. Berbeda dengan contoh sebelumnya untuk ROLLUP, pernyataan mengembalikan hasil untuk setiap kombinasi kolom pengelompokan. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      | laptop               |  2050
                      | mouse                |    50
                      | smartphone           |  1610
                      |                      |  3710
(9 rows)
```

## *Fungsi GROUPING/GROUPING\$1ID*
<a name="r_GROUP_BY_aggregation-extentions-grouping"></a>

 ROLLUP dan CUBE menambahkan nilai NULL ke set hasil untuk menunjukkan baris subtotal. Misalnya, GROUP BY ROLLUP ((a), (b)) mengembalikan satu atau lebih baris yang memiliki nilai NULL di kolom pengelompokan b untuk menunjukkan bahwa mereka adalah subtotal bidang dalam kolom pengelompokan. Nilai-nilai NULL ini hanya berfungsi untuk memenuhi format tupel yang kembali.

 Saat Anda menjalankan operasi GROUP BY dengan ROLLUP dan CUBE pada relasi yang menyimpan nilai NULL itu sendiri, ini dapat menghasilkan kumpulan hasil dengan baris yang tampaknya memiliki kolom pengelompokan yang identik. Kembali ke contoh sebelumnya, jika kolom pengelompokan b berisi nilai NULL yang disimpan, GROUP BY ROLLUP ((a), (b)) mengembalikan baris dengan nilai NULL di kolom pengelompokan b yang bukan subtotal. 

 Untuk membedakan antara nilai NULL yang dibuat oleh ROLLUP dan CUBE, dan nilai NULL yang disimpan dalam tabel itu sendiri, Anda dapat menggunakan fungsi GROUPING, atau alias GROUPING\$1ID. GROUPING mengambil satu set pengelompokan sebagai argumennya, dan untuk setiap baris dalam set hasil mengembalikan nilai 0 atau 1 bit yang sesuai dengan kolom pengelompokan di posisi itu, dan kemudian mengubah nilai itu menjadi bilangan bulat. Jika nilai dalam posisi itu adalah nilai NULL yang dibuat oleh ekstensi agregasi, GROUPING mengembalikan 1. Ia mengembalikan 0 untuk semua nilai lainnya, termasuk nilai NULL yang disimpan.

 Misalnya, PENGELOMPOKAN (kategori, produk) dapat mengembalikan nilai berikut untuk baris tertentu, tergantung pada nilai kolom pengelompokan untuk baris tersebut. Untuk tujuan contoh ini, semua nilai NULL dalam tabel adalah nilai NULL yang dibuat oleh ekstensi agregasi.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_GROUP_BY_aggregation-extensions.html)

Fungsi PENGELOMPOKAN muncul di bagian daftar SELECT dari kueri dalam format berikut.

```
SELECT ... [GROUPING( expr )...] ...
  GROUP BY ... {CUBE | ROLLUP| GROUPING SETS} ( expr ) ...
```

Contoh berikut adalah sama dengan contoh sebelumnya untuk CUBE, tetapi dengan penambahan fungsi GROUPING untuk kumpulan pengelompokannya.

```
SELECT category, product,
       GROUPING(category) as grouping0,
       GROUPING(product) as grouping1,
       GROUPING(category, product) as grouping2,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 3,1,2;

       category       |       product        | grouping0 | grouping1 | grouping2 | total
----------------------+----------------------+-----------+-----------+-----------+-------
 cellphones           | smartphone           |         0 |         0 |         0 |  1610
 cellphones           |                      |         0 |         1 |         1 |  1610
 computers            | laptop               |         0 |         0 |         0 |  2050
 computers            | mouse                |         0 |         0 |         0 |    50
 computers            |                      |         0 |         1 |         1 |  2100
                      | laptop               |         1 |         0 |         2 |  2050
                      | mouse                |         1 |         0 |         2 |    50
                      | smartphone           |         1 |         0 |         2 |  1610
                      |                      |         1 |         1 |         3 |  3710
(9 rows)
```

## *ROLLUP sebagian dan CUBE*
<a name="r_GROUP_BY_aggregation-extentions-partial"></a>

 Anda dapat menjalankan operasi ROLLUP dan CUBE hanya dengan sebagian dari subtotal. 

 Sintaks untuk operasi ROLLUP dan CUBE sebagian adalah sebagai berikut.

```
GROUP BY expr1, { ROLLUP | CUBE }(expr2, [, ...])
```

Di sini, klausa GROUP BY hanya membuat baris subtotal pada level *expr2* dan seterusnya.

Contoh berikut menunjukkan sebagian operasi ROLLUP dan CUBE pada tabel pesanan, mengelompokkan terlebih dahulu berdasarkan apakah suatu produk sudah dimiliki sebelumnya dan kemudian menjalankan ROLLUP dan CUBE pada kategori dan kolom produk.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, ROLLUP(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(9 rows)

SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, CUBE(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(13 rows)
```

Karena kolom pra-dimiliki tidak termasuk dalam operasi ROLLUP dan CUBE, tidak ada total baris besar yang mencakup semua baris lainnya. 

## *Pengelompokan gabungan*
<a name="r_GROUP_BY_aggregation-extentions-concat"></a>

 Anda dapat menggabungkan beberapa SETS/ROLLUP/CUBE klausa PENGELOMPOKAN untuk menghitung tingkat subtotal yang berbeda. Pengelompokan gabungan mengembalikan produk Cartesian dari kumpulan pengelompokan yang disediakan. 

 Sintaks untuk menggabungkan klausa GROUPING SETS/ROLLUP/CUBE adalah sebagai berikut.

```
GROUP BY {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...]),
         {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...])[, ...]
```

Perhatikan contoh berikut untuk melihat bagaimana pengelompokan gabungan kecil dapat menghasilkan set hasil akhir yang besar.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product), GROUPING SETS(pre_owned, ())
ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
           | cellphones           | smartphone           |        1 |  1610
           | computers            | laptop               |        1 |  2050
           | computers            | mouse                |        1 |    50
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
           | cellphones           |                      |        3 |  1610
           | computers            |                      |        3 |  2100
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
           |                      | laptop               |        5 |  2050
           |                      | mouse                |        5 |    50
           |                      | smartphone           |        5 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
           |                      |                      |        7 |  3710
(22 rows)
```

## *Pengelompokan bersarang*
<a name="r_GROUP_BY_aggregation-extentions-nested"></a>

 Anda dapat menggunakan SETS/ROLLUP/CUBE operasi GROUPING sebagai *expr* GROUPING SETS Anda untuk membentuk pengelompokan bersarang. Sub pengelompokan di dalam SET PENGELOMPOKAN bersarang diratakan. 

 Sintaks untuk pengelompokan bersarang adalah sebagai berikut.

```
GROUP BY GROUPING SETS({ROLLUP|CUBE|GROUPING SETS}(expr[, ...])[, ...])
```

Pertimbangkan contoh berikut.

```
SELECT category, product, pre_owned,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(ROLLUP(category), CUBE(product, pre_owned))
ORDER BY 4,1,2,3;

       category       |       product        | pre_owned | group_id | total
----------------------+----------------------+-----------+----------+-------
 cellphones           |                      |           |        3 |  1610
 computers            |                      |           |        3 |  2100
                      | laptop               | F         |        4 |  1050
                      | laptop               | T         |        4 |  1000
                      | mouse                | F         |        4 |    50
                      | smartphone           | T         |        4 |  1610
                      | laptop               |           |        5 |  2050
                      | mouse                |           |        5 |    50
                      | smartphone           |           |        5 |  1610
                      |                      | F         |        6 |  1100
                      |                      | T         |        6 |  2610
                      |                      |           |        7 |  3710
                      |                      |           |        7 |  3710
(13 rows)
```

Perhatikan bahwa karena ROLLUP (kategori) dan CUBE (produk, pre\$1owned) berisi kumpulan pengelompokan (), baris yang mewakili total besar diduplikasi.

## *Catatan penggunaan*
<a name="r_GROUP_BY_aggregation-extensions-usage-notes"></a>
+ Klausa GROUP BY mendukung hingga 64 set pengelompokan. Dalam kasus ROLLUP dan CUBE, atau beberapa kombinasi SET PENGELOMPOKAN, ROLLUP, dan CUBE, batasan ini berlaku untuk jumlah kumpulan pengelompokan yang tersirat. Misalnya, GROUP BY CUBE ((a), (b)) dihitung sebagai 4 set pengelompokan, bukan 2.
+ Anda tidak dapat menggunakan konstanta sebagai pengelompokan kolom saat menggunakan ekstensi agregasi.
+ Anda tidak dapat membuat kumpulan pengelompokan yang berisi kolom duplikat.

# Klausa HAVING
<a name="r_HAVING_clause"></a>

Klausa HAVING menerapkan kondisi untuk kumpulan hasil dikelompokkan perantara yang dikembalikan oleh kueri.

## Sintaksis
<a name="r_HAVING_clause-synopsis"></a>

```
[ HAVING condition ]
```

Misalnya, Anda dapat membatasi hasil fungsi SUM:

```
having sum(pricepaid) >10000
```

Kondisi HAVING diterapkan setelah semua kondisi klausa WHERE diterapkan dan operasi GROUP BY selesai.

Kondisi itu sendiri mengambil bentuk yang sama dengan kondisi klausa WHERE.

## Catatan penggunaan
<a name="r_HAVING_clause_usage_notes"></a>
+ Setiap kolom yang direferensikan dalam kondisi klausa HAVING harus berupa kolom pengelompokan atau kolom yang mengacu pada hasil fungsi agregat.
+ Dalam klausa HAVING, Anda tidak dapat menentukan:
  + Nomor urut yang mengacu pada item daftar pilih. Hanya klausa GROUP BY dan ORDER BY yang menerima nomor urut.

## Contoh
<a name="r_HAVING_clause-examples"></a>

Kueri berikut menghitung total penjualan tiket untuk semua acara berdasarkan nama, kemudian menghilangkan peristiwa di mana total penjualan kurang dari \$1800.000. Kondisi HAVING diterapkan pada hasil fungsi agregat dalam daftar pilih:`sum(pricepaid)`.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(pricepaid) > 800000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

Query berikut menghitung set hasil yang sama. Namun, dalam kasus ini, kondisi HAVING diterapkan ke agregat yang tidak ditentukan dalam daftar pilih:`sum(qtysold)`. Acara yang tidak menjual lebih dari 2.000 tiket dihilangkan dari hasil akhir.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(qtysold) >2000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
Chicago          |  790993.00
Spamalot         |  714307.00
```

Kueri berikut menghitung total penjualan tiket untuk semua acara berdasarkan nama, kemudian menghilangkan peristiwa di mana total penjualan kurang dari \$1800.000. Kondisi HAVING diterapkan pada hasil fungsi agregat dalam daftar pilih menggunakan alias `pp` untuk. `sum(pricepaid)`

```
select eventname, sum(pricepaid) as pp
from sales join event on sales.eventid = event.eventid
group by 1
having pp > 800000
order by 2 desc, 1;

eventname        |    pp
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

# Klausul KUALIFIKASI
<a name="r_QUALIFY_clause"></a>

Klausa QUALIFY memfilter hasil fungsi jendela yang dihitung sebelumnya sesuai dengan kondisi penelusuran yang ditentukan pengguna. Anda dapat menggunakan klausa untuk menerapkan kondisi penyaringan ke hasil fungsi jendela tanpa menggunakan subquery.

Ini mirip dengan [klausa HAVING](https://docs.aws.amazon.com/redshift/latest/dg/r_HAVING_clause.html), yang menerapkan kondisi untuk memfilter baris lebih lanjut dari klausa WHERE. Perbedaan antara QUALIFY dan HAVING adalah bahwa hasil yang disaring dari klausa QUALIFY dapat didasarkan pada hasil menjalankan fungsi jendela pada data. Anda dapat menggunakan klausa QUALIFY dan HAVING dalam satu kueri.

## Sintaksis
<a name="r_QUALIFY-synopsis"></a>

```
QUALIFY condition
```

**catatan**  
Jika Anda menggunakan klausa QUALIFY secara langsung setelah klausa FROM, nama relasi FROM harus memiliki alias yang ditentukan sebelum klausa QUALIFY.

## Contoh
<a name="r_QUALIFY-examples"></a>

Contoh di bagian ini menggunakan data sampel di bawah ini.

```
create table store_sales (ss_sold_date date, ss_sold_time time, 
               ss_item text, ss_sales_price float);
insert into store_sales values ('2022-01-01', '09:00:00', 'Product 1', 100.0),
                               ('2022-01-01', '11:00:00', 'Product 2', 500.0),
                               ('2022-01-01', '15:00:00', 'Product 3', 20.0),
                               ('2022-01-01', '17:00:00', 'Product 4', 1000.0),
                               ('2022-01-01', '18:00:00', 'Product 5', 30.0),
                               ('2022-01-02', '10:00:00', 'Product 6', 5000.0),
                               ('2022-01-02', '16:00:00', 'Product 7', 5.0);
```

Contoh berikut menunjukkan bagaimana menemukan dua barang paling mahal yang dijual setelah pukul 12:00 setiap hari.

```
SELECT *
FROM store_sales ss
WHERE ss_sold_time > time '12:00:00'
QUALIFY row_number()
OVER (PARTITION BY ss_sold_date ORDER BY ss_sales_price DESC) <= 2
               

 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 17:00:00     | Product 4 |           1000
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

Anda kemudian dapat menemukan barang terakhir yang dijual setiap hari.

```
SELECT *
FROM store_sales ss
QUALIFY last_value(ss_item)
OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
      ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) = ss_item;
               
ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

Contoh berikut mengembalikan catatan yang sama dengan kueri sebelumnya, item terakhir yang terjual setiap hari, tetapi tidak menggunakan klausa QUALIFY.

```
SELECT * FROM (
  SELECT *,
  last_value(ss_item)
  OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ss_last_item
  FROM store_sales ss
)
WHERE ss_last_item = ss_item;
               
 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price | ss_last_item 
--------------+--------------+-----------+----------------+--------------
 2022-01-02   | 16:00:00     | Product 7 |              5 | Product 7
 2022-01-01   | 18:00:00     | Product 5 |             30 | Product 5
```

# UNION, INTERSECT, dan KECUALI
<a name="r_UNION"></a>

**Topics**
+ [Sintaksis](#r_UNION-synopsis)
+ [Parameter](#r_UNION-parameters)
+ [Urutan evaluasi untuk operator yang ditetapkan](#r_UNION-order-of-evaluation-for-set-operators)
+ [Catatan penggunaan](#r_UNION-usage-notes)
+ [Contoh kueri UNION](c_example_union_query.md)
+ [Contoh UNION ALL query](c_example_unionall_query.md)
+ [Contoh pertanyaan INTERSECT](c_example_intersect_query.md)
+ [Contoh KECUALI kueri](c_Example_MINUS_query.md)

*Operator set UNION, INTERSECT, dan EXCEPT* digunakan untuk membandingkan dan menggabungkan hasil dari dua ekspresi kueri terpisah. Misalnya, jika Anda ingin mengetahui pengguna situs web mana yang merupakan pembeli dan penjual tetapi nama pengguna mereka disimpan dalam kolom atau tabel terpisah, Anda dapat menemukan *persimpangan* kedua jenis pengguna ini. Jika Anda ingin tahu pengguna situs web mana yang merupakan pembeli tetapi bukan penjual, Anda dapat menggunakan operator EXCEPT untuk menemukan *perbedaan* antara dua daftar pengguna. Jika Anda ingin membuat daftar semua pengguna, apa pun perannya, Anda dapat menggunakan operator UNION.

## Sintaksis
<a name="r_UNION-synopsis"></a>

```
query
{ UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
query
```

## Parameter
<a name="r_UNION-parameters"></a>

 *query*   
Ekspresi kueri yang sesuai, dalam bentuk daftar pilihannya, dengan ekspresi kueri kedua yang mengikuti operator UNION, INTERSECT, atau EXCEPT. Kedua ekspresi harus berisi jumlah kolom keluaran yang sama dengan tipe data yang kompatibel; jika tidak, dua set hasil tidak dapat dibandingkan dan digabungkan. Operasi set tidak mengizinkan konversi implisit antara berbagai kategori tipe data; untuk informasi selengkapnya, lihat[Ketik kompatibilitas dan konversi](c_Supported_data_types.md#r_Type_conversion).  
Anda dapat membuat kueri yang berisi ekspresi kueri dalam jumlah tak terbatas dan menautkannya dengan operator UNION, INTERSECT, dan EXCEPT dalam kombinasi apa pun. Misalnya, struktur kueri berikut ini valid, dengan asumsi bahwa tabel T1, T2, dan T3 berisi kumpulan kolom yang kompatibel:   

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

UNION   
Mengatur operasi yang mengembalikan baris dari dua ekspresi query, terlepas dari apakah baris berasal dari satu atau kedua ekspresi.

BERPOTONGAN   
Mengatur operasi yang mengembalikan baris yang berasal dari dua ekspresi query. Baris yang tidak dikembalikan oleh kedua ekspresi akan dibuang.

KECUALI \$1 MINUS   
Mengatur operasi yang mengembalikan baris yang berasal dari salah satu dari dua ekspresi query. Agar memenuhi syarat untuk hasil, baris harus ada di tabel hasil pertama tetapi bukan yang kedua. MINUS dan KECUALI adalah sinonim yang tepat. 

SEMUA   
Kata kunci ALL mempertahankan setiap baris duplikat yang dihasilkan oleh UNION. Perilaku default saat kata kunci ALL tidak digunakan adalah membuang duplikat ini. INTERSECT ALL, KECUALI ALL, dan MINUS ALL tidak didukung.

## Urutan evaluasi untuk operator yang ditetapkan
<a name="r_UNION-order-of-evaluation-for-set-operators"></a>

Operator set UNION dan EXCEPLE adalah asosiatif kiri. Jika tanda kurung tidak ditentukan untuk mempengaruhi urutan prioritas, kombinasi dari operator set ini dievaluasi dari kiri ke kanan. Misalnya, dalam kueri berikut, UNION T1 dan T2 dievaluasi terlebih dahulu, kemudian operasi EXCEPT dilakukan pada hasil UNION: 

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

Operator INTERSECT lebih diutamakan daripada operator UNION dan EXCEPT ketika kombinasi operator digunakan dalam kueri yang sama. Misalnya, kueri berikut mengevaluasi persimpangan T2 dan T3, lalu menyatukan hasilnya dengan T1: 

```
select * from t1
union
select * from t2
intersect
select * from t3
order by c1;
```

Dengan menambahkan tanda kurung, Anda dapat menerapkan urutan evaluasi yang berbeda. Dalam kasus berikut, hasil penyatuan T1 dan T2 berpotongan dengan T3, dan kueri kemungkinan akan menghasilkan hasil yang berbeda. 

```
(select * from t1
union
select * from t2)
intersect
(select * from t3)
order by c1;
```

## Catatan penggunaan
<a name="r_UNION-usage-notes"></a>
+ Nama kolom yang dikembalikan dalam hasil kueri operasi set adalah nama kolom (atau alias) dari tabel dalam ekspresi kueri pertama. Karena nama kolom ini berpotensi menyesatkan, karena nilai dalam kolom berasal dari tabel di kedua sisi operator set, Anda mungkin ingin memberikan alias yang berarti untuk kumpulan hasil.
+ Ekspresi kueri yang mendahului operator set tidak boleh berisi klausa ORDER BY. Klausa ORDER BY menghasilkan hasil yang diurutkan bermakna hanya jika digunakan di akhir kueri yang berisi operator set. Dalam hal ini, klausa ORDER BY berlaku untuk hasil akhir dari semua operasi yang ditetapkan. Kueri terluar juga dapat berisi klausa LIMIT dan OFFSET standar. 
+ Ketika kueri operator yang disetel mengembalikan hasil desimal, kolom hasil yang sesuai dipromosikan untuk mengembalikan presisi dan skala yang sama. Misalnya, dalam kueri berikut, di mana T1.REVENUE adalah kolom DECIMAL (10,2) dan T2.REVENUE adalah kolom DECIMAL (8,4), hasil desimal dipromosikan ke DECIMAL (12,4): 

  ```
  select t1.revenue union select t2.revenue;
  ```

  Skala ini `4` karena itu adalah skala maksimum dari dua kolom. Ketepatannya adalah `12` karena T1.REVENUE membutuhkan 8 digit di sebelah kiri titik desimal (12 - 4 = 8). Promosi jenis ini memastikan bahwa semua nilai dari kedua sisi UNION sesuai dengan hasilnya. Untuk nilai 64-bit, presisi hasil maksimum adalah 19 dan skala hasil maksimum adalah 18. Untuk nilai 128-bit, presisi hasil maksimum adalah 38 dan skala hasil maksimum adalah 37.

  Jika tipe data yang dihasilkan melebihi presisi Amazon Redshift dan batas skala, kueri akan menampilkan kesalahan.
+ Untuk operasi set, dua baris diperlakukan sebagai identik jika, untuk setiap pasangan kolom yang sesuai, dua nilai data *sama* atau *keduanya NULL*. Misalnya, jika tabel T1 dan T2 keduanya berisi satu kolom dan satu baris, dan baris itu adalah NULL di kedua tabel, operasi INTERSECT di atas tabel tersebut mengembalikan baris itu.

# Contoh kueri UNION
<a name="c_example_union_query"></a>

Dalam query UNION berikut, baris dalam tabel PENJUALAN digabungkan dengan baris dalam tabel LISTING. Tiga kolom yang kompatibel dipilih dari setiap tabel; dalam hal ini, kolom yang sesuai memiliki nama dan tipe data yang sama. 

Set hasil akhir diurutkan oleh kolom pertama dalam tabel LISTING dan terbatas pada 5 baris dengan nilai LISTID tertinggi. 

```
select listid, sellerid, eventid from listing
union select listid, sellerid, eventid from sales
order by listid, sellerid, eventid desc limit 5;

listid | sellerid | eventid
--------+----------+---------
1 |    36861 |    7872
2 |    16002 |    4806
3 |    21461 |    4256
4 |     8117 |    4337
5 |     1616 |    8647
(5 rows)
```

Contoh berikut menunjukkan bagaimana Anda dapat menambahkan nilai literal untuk output dari query UNION sehingga Anda dapat melihat ekspresi query yang dihasilkan setiap baris dalam set hasil. Kueri mengidentifikasi baris dari ekspresi kueri pertama sebagai “B” (untuk pembeli) dan baris dari ekspresi kueri kedua sebagai “S” (untuk penjual). 

Kueri mengidentifikasi pembeli dan penjual untuk transaksi tiket yang harganya \$110.000 atau lebih. Satu-satunya perbedaan antara dua ekspresi kueri di kedua sisi operator UNION adalah kolom bergabung untuk tabel PENJUALAN. 

```
select listid, lastname, firstname, username,
pricepaid as price, 'S' as buyorsell
from sales, users
where sales.sellerid=users.userid
and pricepaid >=10000
union
select listid, lastname, firstname, username, pricepaid,
'B' as buyorsell
from sales, users
where sales.buyerid=users.userid
and pricepaid >=10000
order by 1, 2, 3, 4, 5;

listid | lastname | firstname | username |   price   | buyorsell
--------+----------+-----------+----------+-----------+-----------
209658 | Lamb     | Colette   | VOR15LYI |  10000.00 | B
209658 | West     | Kato      | ELU81XAA |  10000.00 | S
212395 | Greer    | Harlan    | GXO71KOC |  12624.00 | S
212395 | Perry    | Cora      | YWR73YNZ |  12624.00 | B
215156 | Banks    | Patrick   | ZNQ69CLT |  10000.00 | S
215156 | Hayden   | Malachi   | BBG56AKU |  10000.00 | B
(6 rows)
```

Contoh berikut menggunakan operator UNION ALL karena baris duplikat, jika ditemukan, perlu dipertahankan dalam hasilnya. Untuk rangkaian acara tertentu IDs, kueri mengembalikan 0 atau lebih baris untuk setiap penjualan yang terkait dengan setiap acara, dan 0 atau 1 baris untuk setiap daftar acara tersebut. Acara IDs unik untuk setiap baris dalam tabel LISTING dan EVENT, tetapi mungkin ada beberapa penjualan untuk kombinasi acara dan daftar yang sama IDs di tabel PENJUALAN. 

Kolom ketiga dalam set hasil mengidentifikasi sumber baris. Jika berasal dari tabel PENJUALAN, itu ditandai “Ya” di kolom SALESROW. (SALESROW adalah alias untuk SALES.LISTID.) Jika baris berasal dari tabel LISTING, itu ditandai “Tidak” di kolom SALESROW. 

Dalam hal ini, set hasil terdiri dari tiga baris penjualan untuk daftar 500, acara 7787. Dengan kata lain, tiga transaksi berbeda terjadi untuk daftar dan kombinasi acara ini. Dua daftar lainnya, 501 dan 502, tidak menghasilkan penjualan apa pun, jadi satu-satunya baris yang dihasilkan kueri untuk daftar ini IDs berasal dari tabel LISTING (SALESROW = 'Tidak'). 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Jika Anda menjalankan kueri yang sama tanpa kata kunci ALL, hasilnya hanya mempertahankan satu dari transaksi penjualan. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Contoh UNION ALL query
<a name="c_example_unionall_query"></a>

Contoh berikut menggunakan operator UNION ALL karena baris duplikat, jika ditemukan, perlu dipertahankan dalam hasilnya. Untuk rangkaian acara tertentu IDs, kueri mengembalikan 0 atau lebih baris untuk setiap penjualan yang terkait dengan setiap acara, dan 0 atau 1 baris untuk setiap daftar acara tersebut. Acara IDs unik untuk setiap baris dalam tabel LISTING dan EVENT, tetapi mungkin ada beberapa penjualan untuk kombinasi acara dan daftar yang sama IDs di tabel PENJUALAN.

Kolom ketiga dalam set hasil mengidentifikasi sumber baris. Jika berasal dari tabel PENJUALAN, itu ditandai “Ya” di kolom SALESROW. (SALESROW adalah alias untuk SALES.LISTID.) Jika baris berasal dari tabel LISTING, itu ditandai “Tidak” di kolom SALESROW.

Dalam hal ini, set hasil terdiri dari tiga baris penjualan untuk daftar 500, acara 7787. Dengan kata lain, tiga transaksi berbeda terjadi untuk daftar dan kombinasi acara ini. Dua daftar lainnya, 501 dan 502, tidak menghasilkan penjualan apa pun, jadi satu-satunya baris yang dihasilkan kueri untuk daftar ini IDs berasal dari tabel LISTING (SALESROW = 'Tidak').

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Jika Anda menjalankan kueri yang sama tanpa kata kunci ALL, hasilnya hanya mempertahankan satu dari transaksi penjualan. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Contoh pertanyaan INTERSECT
<a name="c_example_intersect_query"></a>

Bandingkan contoh berikut dengan contoh UNION pertama. Satu-satunya perbedaan antara kedua contoh adalah operator set yang digunakan, tetapi hasilnya sangat berbeda. Hanya satu baris yang sama: 

```
235494 |    23875 |    8771
```

 Ini adalah satu-satunya baris dalam hasil terbatas dari 5 baris yang ditemukan di kedua tabel.

```
select listid, sellerid, eventid from listing
intersect
select listid, sellerid, eventid from sales
order by listid desc, sellerid, eventid
limit 5;

listid | sellerid | eventid
--------+----------+---------
235494 |    23875 |    8771
235482 |     1067 |    2667
235479 |     1589 |    7303
235476 |    15550 |     793
235475 |    22306 |    7848
(5 rows)
```

Permintaan berikut menemukan peristiwa (yang tiketnya terjual) yang terjadi di tempat-tempat di New York City dan Los Angeles pada bulan Maret. Perbedaan antara dua ekspresi kueri adalah kendala pada kolom VENUECITY.

```
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='Los Angeles'
intersect
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='New York City'
order by eventname asc;

eventname
----------------------------
A Streetcar Named Desire
Dirty Dancing
Electra
Running with Annalise
Hairspray
Mary Poppins
November
Oliver!
Return To Forever
Rhinoceros
South Pacific
The 39 Steps
The Bacchae
The Caucasian Chalk Circle
The Country Girl
Wicked
Woyzeck
(16 rows)
```

# Contoh KECUALI kueri
<a name="c_Example_MINUS_query"></a>

Tabel CATEGORY dalam database TICKIT berisi 11 baris berikut: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
   1   | Sports   | MLB       | Major League Baseball
   2   | Sports   | NHL       | National Hockey League
   3   | Sports   | NFL       | National Football League
   4   | Sports   | NBA       | National Basketball Association
   5   | Sports   | MLS       | Major League Soccer
   6   | Shows    | Musicals  | Musical theatre
   7   | Shows    | Plays     | All non-musical theatre
   8   | Shows    | Opera     | All opera and light opera
   9   | Concerts | Pop       | All rock and pop music concerts
  10   | Concerts | Jazz      | All jazz singers and bands
  11   | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

Asumsikan bahwa tabel CATEGORY\$1STAGE (tabel pementasan) berisi satu baris tambahan: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
1 | Sports   | MLB       | Major League Baseball
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
6 | Shows    | Musicals  | Musical theatre
7 | Shows    | Plays     | All non-musical theatre
8 | Shows    | Opera     | All opera and light opera
9 | Concerts | Pop       | All rock and pop music concerts
10 | Concerts | Jazz      | All jazz singers and bands
11 | Concerts | Classical | All symphony, concerto, and choir concerts
12 | Concerts | Comedy    | All stand up comedy performances
(12 rows)
```

Kembalikan perbedaan antara dua tabel. Dengan kata lain, kembalikan baris yang ada di tabel CATEGORY\$1STAGE tetapi tidak di tabel CATEGORY: 

```
select * from category_stage
except
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

Kueri setara berikut menggunakan sinonim MINUS. 

```
select * from category_stage
minus
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

Jika Anda membalikkan urutan ekspresi SELECT, kueri tidak mengembalikan baris. 

# Klausa ORDER BY
<a name="r_ORDER_BY_clause"></a>

**Topics**
+ [Sintaksis](#r_ORDER_BY_clause-synopsis)
+ [Parameter](#r_ORDER_BY_clause-parameters)
+ [Catatan penggunaan](#r_ORDER_BY_usage_notes)
+ [Contoh dengan ORDER BY](r_Examples_with_ORDER_BY.md)

Klausa ORDER BY mengurutkan kumpulan hasil kueri.

## Sintaksis
<a name="r_ORDER_BY_clause-synopsis"></a>

```
[ ORDER BY expression [ ASC | DESC ] ]
[ NULLS FIRST | NULLS LAST ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
```

## Parameter
<a name="r_ORDER_BY_clause-parameters"></a>

 *ekspresi*   
Ekspresi yang mendefinisikan urutan urutan hasil kueri set, biasanya dengan menentukan satu atau beberapa kolom dalam daftar pilih. Hasil dikembalikan berdasarkan urutan UTF-8 biner. Anda juga dapat menentukan yang berikut:  
+ Kolom yang tidak ada dalam daftar pilih
+ Ekspresi terbentuk dari satu atau lebih kolom yang ada di tabel yang direferensikan oleh kueri
+ Nomor urut yang mewakili posisi entri daftar pilih (atau posisi kolom dalam tabel jika tidak ada daftar pilih)
+ Alias yang menentukan entri daftar pilih
Ketika klausa ORDER BY berisi beberapa ekspresi, kumpulan hasil diurutkan menurut ekspresi pertama, maka ekspresi kedua diterapkan ke baris yang memiliki nilai yang cocok dari ekspresi pertama, dan seterusnya.

ASC \$1 DESC   
Opsi yang mendefinisikan urutan pengurutan untuk ekspresi, sebagai berikut:   
+ ASC: naik (misalnya, rendah ke tinggi untuk nilai numerik dan 'A' ke 'Z' untuk string karakter). Jika tidak ada opsi yang ditentukan, data diurutkan dalam urutan menaik secara default. 
+ DESC: turun (tinggi ke rendah untuk nilai numerik; 'Z' ke 'A' untuk string). 

NULLS PERTAMA \$1 NULLS TERAKHIR  
Opsi yang menentukan apakah nilai NULL harus diurutkan terlebih dahulu, sebelum nilai non-null, atau terakhir, setelah nilai non-null. Secara default, nilai NULL diurutkan dan diberi peringkat terakhir dalam urutan ASC, dan diurutkan dan diberi peringkat pertama dalam urutan DESC.

BATASAN *nomor* \$1 SEMUA   <a name="order-by-clause-limit"></a>
Opsi yang mengontrol jumlah baris yang diurutkan yang dikembalikan kueri. Bilangan LIMIT harus berupa bilangan bulat positif; nilai maksimumnya adalah`2147483647`.   
LIMIT 0 tidak mengembalikan baris. Anda dapat menggunakan sintaks ini untuk tujuan pengujian: untuk memeriksa apakah kueri berjalan (tanpa menampilkan baris apa pun) atau mengembalikan daftar kolom dari tabel. Klausa ORDER BY berlebihan jika Anda menggunakan LIMIT 0 untuk mengembalikan daftar kolom. Defaultnya adalah LIMIT ALL. 

*OFFSET mulai*   <a name="order-by-clause-offset"></a>
Opsi yang menentukan untuk melewati jumlah baris sebelum *memulai sebelum mulai* mengembalikan baris. Nomor OFFSET harus berupa bilangan bulat positif; nilai maksimumnya adalah. `2147483647` Saat digunakan dengan opsi LIMIT, baris OFFSET dilewati sebelum mulai menghitung baris LIMIT yang dikembalikan. Jika opsi LIMIT tidak digunakan, jumlah baris dalam kumpulan hasil dikurangi dengan jumlah baris yang dilewati. Baris yang dilewati oleh klausa OFFSET masih harus dipindai, jadi mungkin tidak efisien untuk menggunakan nilai OFFSET yang besar.

## Catatan penggunaan
<a name="r_ORDER_BY_usage_notes"></a>

 Perhatikan perilaku yang diharapkan berikut dengan klausa ORDER BY: 
+ Nilai NULL dianggap “lebih tinggi” dari semua nilai lainnya. Dengan urutan urutan menaik default, nilai NULL mengurutkan di akhir. Untuk mengubah perilaku ini, gunakan opsi NULLS FIRST.
+ Ketika kueri tidak berisi klausa ORDER BY, sistem mengembalikan set hasil tanpa urutan baris yang dapat diprediksi. Kueri yang sama dijalankan dua kali mungkin mengembalikan set hasil dalam urutan yang berbeda. 
+ Opsi LIMIT dan OFFSET dapat digunakan tanpa klausa ORDER BY; namun, untuk mengembalikan serangkaian baris yang konsisten, gunakan opsi ini bersama dengan ORDER BY. 
+ Dalam sistem paralel apa pun seperti Amazon Redshift, ketika ORDER BY tidak menghasilkan urutan unik, urutan baris tidak deterministik. Artinya, jika ekspresi ORDER BY menghasilkan nilai duplikat, urutan pengembalian baris tersebut mungkin berbeda dari sistem lain atau dari satu proses Amazon Redshift ke yang berikutnya. 
+ Amazon Redshift tidak mendukung literal string dalam klausa ORDER BY.

# Contoh dengan ORDER BY
<a name="r_Examples_with_ORDER_BY"></a>

Kembalikan semua 11 baris dari tabel CATEGORY, diurutkan berdasarkan kolom kedua, CATGROUP. Untuk hasil yang memiliki nilai CATGROUP yang sama, urutkan nilai kolom CATDESC dengan panjang string karakter. Kemudian urutkan berdasarkan kolom CATID dan CATNAME. 

```
select * from category order by 2, length(catdesc), 1, 3;

catid | catgroup |  catname  |                  catdesc
------+----------+-----------+----------------------------------------
10    | Concerts | Jazz      | All jazz singers and bands
9     | Concerts | Pop       | All rock and pop music concerts
11    | Concerts | Classical | All symphony, concerto, and choir conce
6     | Shows    | Musicals  | Musical theatre
7     | Shows    | Plays     | All non-musical theatre
8     | Shows    | Opera     | All opera and light opera
5     | Sports   | MLS       | Major League Soccer
1     | Sports   | MLB       | Major League Baseball
2     | Sports   | NHL       | National Hockey League
3     | Sports   | NFL       | National Football League
4     | Sports   | NBA       | National Basketball Association
(11 rows)
```

Kembalikan kolom yang dipilih dari tabel PENJUALAN, diurutkan berdasarkan nilai QTYSOLD tertinggi. Batasi hasilnya ke 10 baris teratas: 

```
select salesid, qtysold, pricepaid, commission, saletime from sales
order by qtysold, pricepaid, commission, salesid, saletime desc
limit 10;

salesid | qtysold | pricepaid | commission |      saletime
--------+---------+-----------+------------+---------------------
15401   |       8 |    272.00 |      40.80 | 2008-03-18 06:54:56
61683   |       8 |    296.00 |      44.40 | 2008-11-26 04:00:23
90528   |       8 |    328.00 |      49.20 | 2008-06-11 02:38:09
74549   |       8 |    336.00 |      50.40 | 2008-01-19 12:01:21
130232  |       8 |    352.00 |      52.80 | 2008-05-02 05:52:31
55243   |       8 |    384.00 |      57.60 | 2008-07-12 02:19:53
16004   |       8 |    440.00 |      66.00 | 2008-11-04 07:22:31
489     |       8 |    496.00 |      74.40 | 2008-08-03 05:48:55
4197    |       8 |    512.00 |      76.80 | 2008-03-23 11:35:33
16929   |       8 |    568.00 |      85.20 | 2008-12-19 02:59:33
(10 rows)
```

Kembalikan daftar kolom dan tidak ada baris dengan menggunakan sintaks LIMIT 0: 

```
select * from venue limit 0;
venueid | venuename | venuecity | venuestate | venueseats
---------+-----------+-----------+------------+------------
(0 rows)
```

# CONNECT BY klausa
<a name="r_CONNECT_BY_clause"></a>

Klausa CONNECT BY menentukan hubungan antara baris dalam hierarki. Anda dapat menggunakan CONNECT BY untuk memilih baris dalam urutan hierarkis dengan menggabungkan tabel ke dirinya sendiri dan memproses data hierarkis. Misalnya, Anda dapat menggunakannya untuk melakukan loop secara rekursif melalui bagan organisasi dan daftar data.

Proses kueri hierarkis dalam urutan sebagai berikut:

1. Jika klausa FROM memiliki gabungan, itu diproses terlebih dahulu.

1. Klausa CONNECT BY dievaluasi.

1. Klausul WHERE dievaluasi.

## Sintaksis
<a name="r_CONNECT_BY_clause-synopsis"></a>

```
[START WITH start_with_conditions]
CONNECT BY connect_by_conditions
```

**catatan**  
Meskipun START dan CONNECT bukan kata yang dicadangkan, gunakan pengidentifikasi yang dibatasi (tanda kutip ganda) atau AS jika Anda menggunakan START dan CONNECT sebagai alias tabel dalam kueri Anda untuk menghindari kegagalan saat runtime.

```
SELECT COUNT(*)
FROM Employee "start"
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

```
SELECT COUNT(*)
FROM Employee AS start
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

## Parameter
<a name="r_CONNECT_BY_parameters"></a>

 *start\$1with\$1conditions*   
Kondisi yang menentukan baris root dari hierarki

 *connect\$1by\$1conditions*   
Kondisi yang menentukan hubungan antara baris induk dan baris anak dari hierarki. Setidaknya satu kondisi harus memenuhi syarat dengan operator ` ` unary yang digunakan untuk merujuk ke baris induk.  

```
PRIOR column = expression
-- or
expression > PRIOR column
```

## Operator
<a name="r_CONNECT_BY_operators"></a>

Anda dapat menggunakan operator berikut dalam kueri CONNECT BY.

 *TINGKAT*   
Pseudocolumn yang mengembalikan tingkat baris saat ini dalam hierarki. Mengembalikan 1 untuk baris root, 2 untuk anak dari baris root, dan seterusnya.

 *SEBELUMNYA*   
Operator unary yang mengevaluasi ekspresi untuk baris induk dari baris saat ini dalam hierarki.

## Contoh
<a name="r_CONNECT_BY_example"></a>

Contoh berikut adalah kueri CONNECT BY yang mengembalikan jumlah karyawan yang melaporkan secara langsung atau tidak langsung ke John, tidak lebih dari 4 level. 

```
SELECT id, name, manager_id
FROM employee
WHERE LEVEL < 4
START WITH name = 'John'
CONNECT BY PRIOR id = manager_id;
```

Berikut ini adalah hasil dari query.

```
id      name      manager_id
------+----------+--------------
  101     John        100
  102     Jorge       101
  103     Kwaku       101
  110     Liu         101
  201     Sofía       102
  106     Mateo       102
  110     Nikki       103
  104     Paulo       103
  105     Richard     103
  120     Saanvi      104
  200     Shirley     104
  205     Zhang       104
```

 Definisi tabel untuk contoh ini: 

```
CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
   );
```

 Berikut ini adalah baris yang dimasukkan ke dalam tabel. 

```
INSERT INTO employee(id, name, manager_id)  VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
```

Berikut ini adalah bagan organisasi untuk departemen John.

![\[Diagram bagan organisasi untuk departemen John.\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/images/org-chart.png)


# Contoh subquery
<a name="r_Subquery_examples"></a>

Contoh berikut menunjukkan cara yang berbeda di mana subquery cocok dengan kueri SELECT. Lihat [JOIN contoh](r_Join_examples.md) contoh lain dari penggunaan subquery. 

## PILIH daftar subquery
<a name="r_Subquery_examples-select-list-subquery"></a>

Contoh berikut berisi subquery dalam daftar SELECT. Subquery ini adalah *skalar*: ia mengembalikan hanya satu kolom dan satu nilai, yang diulang dalam hasil untuk setiap baris yang dikembalikan dari query luar. Kueri membandingkan nilai Q1SALES yang dihitung subquery dengan nilai penjualan untuk dua kuartal lainnya (2 dan 3) pada tahun 2008, seperti yang didefinisikan oleh kueri luar. 

```
select qtr, sum(pricepaid) as qtrsales,
(select sum(pricepaid)
from sales join date on sales.dateid=date.dateid
where qtr='1' and year=2008) as q1sales
from sales join date on sales.dateid=date.dateid
where qtr in('2','3') and year=2008
group by qtr
order by qtr;

qtr  |  qtrsales   |   q1sales
-------+-------------+-------------
2     | 30560050.00 | 24742065.00
3     | 31170237.00 | 24742065.00
(2 rows)
```

## Subquery klausa WHERE
<a name="r_Subquery_examples-where-clause-subquery"></a>

Contoh berikut berisi subquery tabel dalam klausa WHERE. Subquery ini menghasilkan beberapa baris. Dalam hal ini, baris hanya berisi satu kolom, tetapi subquery tabel dapat berisi beberapa kolom dan baris, sama seperti tabel lainnya. 

Kueri menemukan 10 penjual teratas dalam hal tiket maksimum yang terjual. Daftar 10 teratas dibatasi oleh subquery, yang menghapus pengguna yang tinggal di kota di mana ada tempat tiket. Kueri ini dapat ditulis dengan cara yang berbeda; misalnya, subquery dapat ditulis ulang sebagai gabungan dalam kueri utama. 

```
select firstname, lastname, city, max(qtysold) as maxsold
from users join sales on users.userid=sales.sellerid
where users.city not in(select venuecity from venue)
group by firstname, lastname, city
order by maxsold desc, city desc
limit 10;

firstname | lastname  |      city      | maxsold
-----------+-----------+----------------+---------
Noah       | Guerrero | Worcester      |       8
Isadora    | Moss     | Winooski       |       8
Kieran     | Harrison | Westminster    |       8
Heidi      | Davis    | Warwick        |       8
Sara       | Anthony  | Waco           |       8
Bree       | Buck     | Valdez         |       8
Evangeline | Sampson  | Trenton        |       8
Kendall    | Keith    | Stillwater     |       8
Bertha     | Bishop   | Stevens Point  |       8
Patricia   | Anderson | South Portland |       8
(10 rows)
```

## DENGAN subquery klausa
<a name="r_Subquery_examples-with-clause-subqueries"></a>

Lihat [DENGAN klausa](r_WITH_clause.md). 

# Subquery yang berkorelasi
<a name="r_correlated_subqueries"></a>

Contoh berikut berisi *subquery berkorelasi* dalam klausa WHERE; subquery semacam ini berisi satu atau lebih korelasi antara kolom dan kolom yang dihasilkan oleh kueri luar. Dalam hal ini, korelasinya adalah`where s.listid=l.listid`. Untuk setiap baris yang dihasilkan oleh kueri luar, subquery dijalankan untuk memenuhi syarat atau mendiskualifikasi baris. 

```
select salesid, listid, sum(pricepaid) from sales s
where qtysold=
(select max(numtickets) from listing l
where s.listid=l.listid)
group by 1,2
order by 1,2
limit 5;

salesid | listid |   sum
--------+--------+----------
 27     |     28 | 111.00
 81     |    103 | 181.00
 142    |    149 | 240.00
 146    |    152 | 231.00
 194    |    210 | 144.00
(5 rows)
```

## Pola subquery berkorelasi yang tidak didukung
<a name="r_correlated_subqueries-correlated-subquery-patterns-that-are-not-supported"></a>

Perencana kueri menggunakan metode penulisan ulang kueri yang disebut decorrelation subquery untuk mengoptimalkan beberapa pola subquery berkorelasi untuk eksekusi di lingkungan MPP. Beberapa jenis subkueri berkorelasi mengikuti pola yang tidak dapat didekorasi dan tidak didukung oleh Amazon Redshift. Kueri yang berisi referensi korelasi berikut mengembalikan kesalahan: 
+  Referensi korelasi yang melewati blok kueri, juga dikenal sebagai “referensi korelasi tingkat lewati.” Misalnya, dalam kueri berikut, blok yang berisi referensi korelasi dan blok yang dilewati dihubungkan oleh predikat NOT EXISTS: 

  ```
  select event.eventname from event
  where not exists
  (select * from listing
  where not exists
  (select * from sales where event.eventid=sales.eventid));
  ```

  Blok yang dilewati dalam kasus ini adalah subquery terhadap tabel LISTING. Referensi korelasi menghubungkan tabel EVENT dan SALES. 
+  Referensi korelasi dari subquery yang merupakan bagian dari klausa ON dalam kueri luar: 

  ```
  select * from category
  left join event
  on category.catid=event.catid and eventid =
  (select max(eventid) from sales where sales.eventid=event.eventid);
  ```

  Klausa ON berisi referensi korelasi dari SALES di subquery ke EVENT di kueri luar. 
+ Referensi korelasi sensitif nol ke tabel sistem Amazon Redshift. Contoh: 

  ```
  select attrelid
  from stv_locks sl, pg_attribute
  where sl.table_id=pg_attribute.attrelid and 1 not in
  (select 1 from pg_opclass where sl.lock_owner = opcowner);
  ```
+ Referensi korelasi dari dalam subquery yang berisi fungsi jendela. 

  ```
  select listid, qtysold
  from sales s
  where qtysold not in
  (select sum(numtickets) over() from listing l where s.listid=l.listid);
  ```
+ Referensi dalam kolom GROUP BY ke hasil subquery yang berkorelasi. Contoh: 

  ```
  select listing.listid,
  (select count (sales.listid) from sales where sales.listid=listing.listid) as list
  from listing
  group by list, listing.listid;
  ```
+ Referensi korelasi dari subquery dengan fungsi agregat dan klausa GROUP BY, terhubung ke kueri luar oleh predikat IN. (Pembatasan ini tidak berlaku untuk fungsi agregat MIN dan MAX.) Contoh: 

  ```
  select * from listing where listid in
  (select sum(qtysold)
  from sales
  where numtickets>4
  group by salesid);
  ```

# PILIH KE
<a name="r_SELECT_INTO"></a>

Memilih baris yang ditentukan oleh kueri apa pun dan menyisipkannya ke dalam tabel baru. Anda dapat menentukan apakah akan membuat tabel sementara atau persisten. 

## Sintaksis
<a name="r_SELECT_INTO-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

 Untuk detail tentang parameter perintah ini, lihat[SELECT](r_SELECT_synopsis.md). 

## Contoh
<a name="r_SELECT_INTO-examples"></a>

Pilih semua baris dari tabel EVENT dan buat tabel NEWEVENT: 

```
select * into newevent from event;
```

Pilih hasil kueri agregat ke dalam tabel sementara yang disebut PROFITS: 

```
select username, lastname, sum(pricepaid-commission) as profit
into temp table profits
from sales, users
where sales.sellerid=users.userid
group by 1, 2
order by 3 desc;
```

# SET
<a name="r_SET"></a>

Menetapkan nilai parameter konfigurasi server. Gunakan perintah SET untuk mengganti pengaturan selama sesi atau transaksi saat ini saja.

Gunakan [ATUR ULANG](r_RESET.md) perintah untuk mengembalikan parameter ke nilai defaultnya. 

Anda dapat mengubah parameter konfigurasi server dengan beberapa cara. Untuk informasi selengkapnya, lihat [Memodifikasi konfigurasi server](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings). 

## Sintaks
<a name="r_SET-synopsis"></a>

```
SET { [ SESSION | LOCAL ]
{ SEED | parameter_name } { TO | = }
{ value | 'value' | DEFAULT } |
SEED TO value }
```

Pernyataan berikut menetapkan nilai variabel konteks sesi.

```
SET { [ SESSION | LOCAL ]
variable_name { TO | = }
{ value | 'value'  }
```

## Parameter
<a name="r_SET-parameters"></a>

SESI   
Menentukan bahwa pengaturan ini valid untuk sesi saat ini. Nilai default.

*variable\$1name*   
Menentukan nama variabel konteks yang ditetapkan untuk sesi.  
Konvensi penamaan adalah nama dua bagian yang dipisahkan oleh titik, misalnya *identifier.identifier*. Hanya satu pemisah titik yang diizinkan. Gunakan *pengenal* yang mengikuti aturan pengenal standar untuk Amazon Redshift Untuk informasi selengkapnya, lihat. [Nama dan pengidentifikasi](r_names.md) Pengidentifikasi yang dibatasi tidak diizinkan.

LOKAL   
Menentukan bahwa pengaturan ini berlaku untuk transaksi saat ini. 

*Nilai* SEED TO   
Menetapkan benih internal yang akan digunakan oleh fungsi RANDOM untuk pembuatan bilangan acak.  
SET SEED mengambil *nilai* numerik antara 0 dan 1, dan mengalikan angka ini dengan (2 31 -1) untuk digunakan dengan fungsi. [fungsi RANDOM](r_RANDOM.md) Jika Anda menggunakan SET SEED sebelum melakukan beberapa panggilan RANDOM, RANDOM menghasilkan angka dalam urutan yang dapat diprediksi.

 *parameter\$1name*   
Nama parameter yang akan ditetapkan. Lihat [Memodifikasi konfigurasi server](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings) untuk informasi tentang parameter.

 *nilai*   
Nilai parameter baru. Gunakan tanda kutip tunggal untuk mengatur nilai ke string tertentu. Jika menggunakan SET SEED, parameter ini berisi nilai SEED. 

DEFAULT   
Menetapkan parameter ke nilai default.

## Contoh
<a name="r_SET-examples"></a>

 **Mengubah parameter untuk sesi saat ini** 

Contoh berikut menetapkan datestyle:

```
set datestyle to 'SQL,DMY';
```

 **Menyetel grup kueri untuk manajemen beban kerja** 

Jika grup kueri tercantum dalam definisi antrian sebagai bagian dari konfigurasi WLM cluster, Anda dapat mengatur parameter QUERY\$1GROUP ke nama grup kueri yang terdaftar. Kueri berikutnya ditetapkan ke antrian kueri terkait. Pengaturan QUERY\$1GROUP tetap berlaku selama durasi sesi atau sampai perintah RESET QUERY\$1GROUP ditemui.

Contoh ini menjalankan dua kueri sebagai bagian dari grup kueri 'prioritas', lalu mengatur ulang grup kueri. 

```
set query_group to 'priority';
select tbl, count(*)from stv_blocklist;
select query, elapsed, substring from svl_qlog order by query desc limit 5;
reset query_group;
```

Untuk informasi selengkapnya, lihat [Manajemen beban kerja](cm-c-implementing-workload-management.md). 

 **Mengubah namespace identitas default untuk sesi** 

Seorang pengguna database dapat mengatur`default_identity_namespace`. Contoh ini menunjukkan cara menggunakan `SET SESSION` untuk mengganti setelan selama durasi sesi saat ini dan kemudian menampilkan nilai penyedia identitas baru. Ini paling sering digunakan saat Anda menggunakan penyedia identitas dengan Redshift dan IAM Identity Center. Untuk informasi selengkapnya tentang penggunaan penyedia identitas dengan Redshift, lihat Connect [Redshift dengan IAM Identity Center untuk memberikan pengalaman masuk tunggal kepada pengguna](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

```
SET SESSION default_identity_namespace = 'MYCO';
         
SHOW default_identity_namespace;
```

Setelah menjalankan perintah, Anda dapat menjalankan pernyataan GRANT atau pernyataan CREATE seperti berikut:

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
         
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

Dalam hal ini, efek pengaturan namespace identitas default setara dengan awalan setiap identitas dengan namespace. Dalam contoh `alice` ini, diganti dengan`MYCO:alice`. Untuk informasi selengkapnya tentang pengaturan yang berkaitan dengan konfigurasi Redshift dengan IAM Identity Center, lihat dan. [MENGUBAH SISTEM](r_ALTER_SYSTEM.md) [MENGUBAH PENYEDIA IDENTITAS](r_ALTER_IDENTITY_PROVIDER.md)

 **Menyetel label untuk sekelompok kueri** 

Parameter QUERY\$1GROUP mendefinisikan label untuk satu atau beberapa kueri yang dijalankan dalam sesi yang sama setelah perintah SET. Pada gilirannya, label ini dicatat ketika kueri dijalankan dan dapat digunakan untuk membatasi hasil yang dikembalikan dari tabel sistem STL\$1QUERY dan STV\$1INFLIGHT dan tampilan SVL\$1QLOG. 

```
show query_group;
query_group
-------------
unset
(1 row)

set query_group to '6 p.m.';


show query_group;
query_group
-------------
6 p.m.
(1 row)

select * from sales where salesid=500;
salesid | listid | sellerid | buyerid | eventid | dateid | ...
---------+--------+----------+---------+---------+--------+-----
500 |    504 |     3858 |    2123 |    5871 |   2052 | ...
(1 row)

reset query_group;

select query, trim(label) querygroup, pid, trim(querytxt) sql
from stl_query
where label ='6 p.m.';
query | querygroup |  pid  |                  sql
-------+------------+-------+----------------------------------------
57 | 6 p.m.     | 30711 | select * from sales where salesid=500;
(1 row)
```

Label grup kueri adalah mekanisme yang berguna untuk mengisolasi kueri individu atau grup kueri yang dijalankan sebagai bagian dari skrip. Anda tidak perlu mengidentifikasi dan melacak kueri dengan mereka IDs; Anda dapat melacak mereka dengan label mereka.

 **Menetapkan nilai benih untuk pembuatan bilangan acak** 

Contoh berikut menggunakan opsi SEED dengan SET untuk menyebabkan fungsi RANDOM menghasilkan angka dalam urutan yang dapat diprediksi.

Pertama, kembalikan tiga bilangan bulat RANDOM tanpa mengatur nilai SEED terlebih dahulu: 

```
select cast (random() * 100 as int);
int4
------
6
(1 row)

select cast (random() * 100 as int);
int4
------
68
(1 row)

select cast (random() * 100 as int);
int4
------
56
(1 row)
```

Sekarang, atur nilai SEED ke`.25`, dan kembalikan tiga angka RANDOM lagi: 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

Terakhir, setel ulang nilai SEED ke`.25`, dan verifikasi bahwa RANDOM mengembalikan hasil yang sama dengan tiga panggilan sebelumnya: 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

Contoh berikut menetapkan variabel konteks yang disesuaikan. 

```
SET app_context.user_id TO 123;
SET app_context.user_id TO 'sample_variable_value';
```

# MENGATUR OTORISASI SESI
<a name="r_SET_SESSION_AUTHORIZATION"></a>

Menetapkan nama pengguna untuk sesi saat ini.

Anda dapat menggunakan perintah SET SESSION AUTHORIZATION, misalnya, untuk menguji akses database dengan menjalankan sementara sesi atau transaksi sebagai pengguna yang tidak memiliki hak istimewa. Anda harus menjadi superuser database untuk menjalankan perintah ini.

## Sintaksis
<a name="r_SET_SESSION_AUTHORIZATION-synopsis"></a>

```
SET [ LOCAL ] SESSION AUTHORIZATION { user_name | DEFAULT }
```

## Parameter
<a name="r_SET_SESSION_AUTHORIZATION-parameters"></a>

LOKAL  
Menentukan bahwa pengaturan ini berlaku untuk transaksi saat ini. Menghilangkan parameter ini menentukan bahwa pengaturan valid untuk sesi saat ini.

 *user\$1name*   
Nama pengguna yang akan diatur. Nama pengguna dapat ditulis sebagai pengenal atau string literal.

DEFAULT  
Menetapkan nama pengguna sesi ke nilai default.

## Contoh
<a name="r_SET_SESSION_AUTHORIZATION-examples"></a>

Contoh berikut menetapkan nama pengguna untuk sesi saat ini untuk`dwuser`:

```
SET SESSION AUTHORIZATION 'dwuser';
```

Contoh berikut menetapkan nama pengguna untuk transaksi saat ini menjadi`dwuser`:

```
SET LOCAL SESSION AUTHORIZATION 'dwuser';
```

Contoh ini menetapkan nama pengguna untuk sesi saat ini ke nama pengguna default:

```
SET SESSION AUTHORIZATION DEFAULT;
```

# MENGATUR KARAKTERISTIK SESI
<a name="r_SET_SESSION_CHARACTERISTICS"></a>

Perintah ini sudah usang.

# MEMPERLIHATKAN
<a name="r_SHOW"></a>

Menampilkan nilai parameter konfigurasi server saat ini. Nilai ini mungkin spesifik untuk sesi saat ini jika perintah SET berlaku. Untuk daftar parameter konfigurasi, lihat[Referensi konfigurasi](cm_chap_ConfigurationRef.md).

## Sintaksis
<a name="r_SHOW-synopsis"></a>

```
SHOW { parameter_name | ALL }
```

Pernyataan berikut menampilkan nilai saat ini dari variabel konteks sesi. Jika variabel tidak ada, Amazon Redshift memunculkan kesalahan.

```
SHOW variable_name
```

## Parameter
<a name="r_SHOW-parameters"></a>

 *parameter\$1name*   
Menampilkan nilai saat ini dari parameter yang ditentukan.

SEMUA   
Menampilkan nilai saat ini dari semua parameter.

*variable\$1name*   
Menampilkan nilai saat ini dari variabel yang ditentukan.

## Contoh
<a name="r_SHOW-examples"></a>

Contoh berikut menampilkan nilai untuk parameter query\$1group: 

```
show query_group;

query_group

unset
(1 row)
```

Contoh berikut menampilkan daftar semua parameter dan nilai-nilai mereka: 

```
show all;
name        |   setting
--------------------+--------------
datestyle          | ISO, MDY
extra_float_digits | 0
query_group        | unset
search_path        | $user,public
statement_timeout  | 0
```

Contoh berikut menampilkan nilai saat ini dari variabel yang ditentukan.

```
SHOW app_context.user_id;
```

# TUNJUKKAN HIBAH KOLOM
<a name="r_SHOW_COLUMN_GRANTS"></a>

Menampilkan hibah pada kolom dalam tabel.

## Izin yang diperlukan
<a name="r_SHOW_COLUMN_GRANTS-required-permissions"></a>

SHOW GRANTS untuk objek target hanya akan menampilkan hibah yang terlihat oleh pengguna saat ini. Hibah dapat dilihat oleh pengguna saat ini jika pengguna saat ini memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pengguna yang diberikan
+ Diberikan pemilik peran yang diberikan
+ Diberikan peran yang ditargetkan oleh hibah objek

## Sintaksis
<a name="r_SHOW_COLUMN_GRANTS-synopsis"></a>

```
SHOW COLUMN GRANTS ON TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

## Parameter
<a name="r_SHOW_COLUMN_GRANTS-parameters"></a>

database\$1name  
Nama database yang berisi tabel target

schema\$1name  
Nama skema yang berisi tabel target

table\$1name  
Nama tabel target

nama pengguna  
Hanya sertakan hibah ke nama pengguna dalam output

role\$1name  
Hanya sertakan hibah ke role\$1name di output

UMUM  
Hanya sertakan hibah kepada PUBLIK dalam output

baris\$1limit  
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000.

## Contoh
<a name="r_SHOW_COLUMN_GRANTS-examples"></a>

Contoh berikut menunjukkan hibah kolom pada tabel demo\$1db.demo\$1schema.t100:

```
SHOW COLUMN GRANTS ON TABLE demo_db.demo_schema.t100;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         134 | bob           | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | SELECT         |         130 | alice         | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | UPDATE         |         130 | alice         | user          | f            | COLUMN          | dbadmin
```

Contoh berikut menunjukkan hibah kolom pada tabel demo\$1schema.t100 untuk pengguna bob:

```
SHOW COLUMN GRANTS ON TABLE demo_schema.t100 for bob;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         135 | bob           | user          | f            | COLUMN          | dbadmin
```

# TAMPILKAN KOLOM
<a name="r_SHOW_COLUMNS"></a>

Menampilkan daftar kolom dalam tabel, bersama dengan beberapa atribut kolom.

Setiap baris keluaran terdiri dari daftar nama database yang dipisahkan koma, nama skema, nama tabel, nama kolom, posisi ordinal, default kolom, dapat dibatalkan, tipe data, panjang maksimum karakter, presisi numerik, komentar, jenis kunci sortir, urutan kunci urutkan, kunci distribusi, pengkodean, dan pemeriksaan. Untuk informasi selengkapnya tentang atribut ini, lihat [SVV\$1ALL\$1COLUMNS](r_SVV_ALL_COLUMNS.md).

Jika lebih dari 10.000 kolom akan dihasilkan dari perintah SHOW COLUMNS, maka kesalahan dikembalikan.

## Izin yang diperlukan
<a name="r_SHOW_COLUMNS-privileges"></a>

Untuk melihat kolom dalam tabel Amazon Redshift, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser.
+ Jadilah pemilik meja.
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan diberikan hak SELECT di atas meja atau diberikan hak pilih pada kolom.

## Sintaksis
<a name="r_SHOW_COLUMNS-synopsis"></a>

```
SHOW COLUMNS FROM TABLE database_name.schema_name.table_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameter
<a name="r_SHOW_COLUMNS-parameters"></a>

 *database\$1name*   
Nama database yang berisi tabel untuk daftar.   
Untuk menampilkan tabel dalam AWS Glue Data Catalog, tentukan (`awsdatacatalog`) sebagai nama database, dan pastikan konfigurasi sistem `data_catalog_auto_mount` diatur ke`true`. Untuk informasi selengkapnya, lihat [MENGUBAH SISTEM](r_ALTER_SYSTEM.md).

 *schema\$1name*   
Nama skema yang berisi tabel untuk daftar.   
Untuk menampilkan AWS Glue Data Catalog tabel, berikan nama AWS Glue database sebagai nama skema.

 *table\$1name*   
Nama tabel yang berisi kolom untuk daftar. 

 *filter\$1pattern*   
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama tabel. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_COLUMNS.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan. 

 *baris\$1limit*   
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000. 

## Contoh
<a name="r_SHOW_COLUMNS-examples"></a>

Contoh berikut menunjukkan kolom dalam database Amazon Redshift bernama `sample_data_dev` yang ada di skema `tickit` dan tabel. `event`

```
SHOW COLUMNS FROM TABLE demo_schema.compound_sort_table;

  database_name | schema_name |     table_name      | column_name | ordinal_position | column_default | is_nullable |     data_type     | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+---------------------+-------------+------------------+----------------+-------------+-------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 demo_db       | demo_schema | compound_sort_table | id          |                1 |                | YES         | integer           |                          |                32 |             0 |         | COMPOUND      |        1 |        1 | delta32k | 
 demo_db       | demo_schema | compound_sort_table | name        |                2 |                | YES         | character varying |                       50 |                   |               |         | COMPOUND      |        2 |          | lzo      | default
 demo_db       | demo_schema | compound_sort_table | date_col    |                3 |                | YES         | date              |                          |                   |               |         |               |        0 |          | delta    | 
 demo_db       | demo_schema | compound_sort_table | amount      |                4 |                | YES         | numeric           |                          |                10 |             2 |         |               |        0 |          | mostly16 |
```

Berikut contoh menunjukkan tabel dalam AWS Glue Data Catalog database bernama `awsdatacatalog` yang dalam skema `batman` dan tabel`nation`. Output terbatas pada `2` baris.

```
SHOW COLUMNS FROM TABLE second_db.public.t22;

 database_name | schema_name | table_name | column_name | ordinal_position | column_default | is_nullable |          data_type          | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+------------+-------------+------------------+----------------+-------------+-----------------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 second_db     | public      | t22        | col1        |                1 |                | YES         | integer                     |                          |                32 |             0 |         | INTERLEAVED   |       -1 |          | mostly8  | 
 second_db     | public      | t22        | col2        |                2 |                | YES         | character varying           |                      100 |                   |               |         | INTERLEAVED   |        2 |          | text255  | default
 second_db     | public      | t22        | col3        |                3 |                | YES         | timestamp without time zone |                          |                   |               |         |               |        0 |          | raw      | 
 second_db     | public      | t22        | col4        |                4 |                | YES         | numeric                     |                          |                10 |             2 |         |               |        0 |          | az64     |
```

# TUNJUKKAN KENDALA
<a name="r_SHOW_CONSTRAINTS"></a>

Menampilkan daftar kunci primer dan kendala kunci asing dalam tabel.

## Izin yang diperlukan
<a name="r_SHOW_CONSTRAINTS-required-permissions"></a>

Untuk menjalankan SHOW CONSTRAINTS pada tabel, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pemilik meja
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan hak istimewa SELECT di atas meja

## Sintaksis
<a name="r_SHOW_CONSTRAINTS-synopsis"></a>

```
SHOW CONSTRAINTS {PRIMARY KEYS | FOREIGN KEYS [EXPORTED]}
FROM TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[LIMIT row_limit]
```

## Parameter
<a name="r_SHOW_CONSTRAINTS-parameters"></a>

*database\$1name*  
Nama database yang berisi tabel target

*schema\$1name*  
Nama skema yang berisi tabel target

*table\$1name*  
Nama tabel target

DIEKSPOR  
Ketika DIEKSPOR ditentukan, maka daftarkan semua kunci asing dari tabel lain yang mereferensikan tabel target.

*baris\$1limit*  
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000.

## Contoh
<a name="r_SHOW_CONSTRAINTS-examples"></a>

Contoh berikut menunjukkan kendala kunci primer dari tabel demo\$1db.demo\$1schema.pk1:

```
SHOW CONSTRAINTS PRIMARY KEYS FROM TABLE demo_db.demo_schema.pk1;
 database_name | schema_name | table_name | pk_name  | column_name | key_seq 
---------------+-------------+------------+----------+-------------+---------
 demo_db       | demo_schema | pk1        | pk1_pkey | i           |       1
 demo_db       | demo_schema | pk1        | pk1_pkey | j           |       2
 demo_db       | demo_schema | pk1        | pk1_pkey | c           |       3
```

Contoh berikut menunjukkan kendala kunci asing dari tabel demo\$1schema.fk2:

```
SHOW CONSTRAINTS FOREIGN KEYS FROM TABLE demo_schema.fk2;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |  fk_name   | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey | pk1_pkey |             |             |
```

Contoh berikut menunjukkan kendala kunci asing yang diekspor dari tabel demo\$1schema.pk1:

```
SHOW CONSTRAINTS FOREIGN KEYS EXPORTED FROM TABLE demo_schema.pk1;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |     fk_name     | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+-----------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | other_fk      | i              |       1 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | other_fk      | j              |       2 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | other_fk      | c              |       3 | other_fk_i_fkey | pk1_pkey |             |             |
```

# TAMPILKAN TABEL EKSTERNAL
<a name="r_SHOW_EXTERNAL_TABLE"></a>

Menunjukkan definisi tabel eksternal, termasuk atribut tabel dan atribut kolom. Anda dapat menggunakan output dari pernyataan SHOW EXTERNAL TABLE untuk membuat ulang tabel. 

Untuk informasi selengkapnya tentang pembuatan tabel eksternal, lihat[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). 

## Sintaksis
<a name="r_SHOW_EXTERNAL_TABLE-synopsis"></a>

```
SHOW EXTERNAL TABLE [external_database].external_schema.table_name [ PARTITION ]
```

## Parameter
<a name="r_SHOW_EXTERNAL_TABLE-parameters"></a>

 *external\$1database*   
Nama database eksternal terkait. Parameter ini bersifat opsional.

 *external\$1schema*   
Nama skema eksternal terkait. 

 *table\$1name*   
Nama tabel untuk ditampilkan. 

PARTITION   
Menampilkan pernyataan ALTER TABLE untuk menambahkan partisi ke definisi tabel. 

## Contoh
<a name="r_SHOW_EXTERNAL_TABLE-examples"></a>

Contoh berikut didasarkan pada tabel eksternal yang didefinisikan sebagai berikut:

```
CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
     csmallint smallint,
     cint int,
     cbigint bigint,
     cfloat float4,
     cdouble float8,
     cchar char(10),
     cvarchar varchar(255),
     cdecimal_small decimal(18,9),
     cdecimal_big decimal(30,15),
     ctimestamp TIMESTAMP,
     cboolean boolean,
     cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime TIMESTAMP)
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
```

Berikut ini adalah contoh dari perintah SHOW EXTERNAL TABLE dan output untuk tabel`my_schema.alldatatypes_parquet_test_partitioned`.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Berikut ini adalah contoh dari perintah SHOW EXTERNAL TABLE dan output untuk tabel yang sama, tetapi dengan database juga ditentukan dalam parameter.

```
SHOW EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Berikut ini adalah contoh dari perintah SHOW EXTERNAL TABLE dan output saat menggunakan `PARTITION` parameter. Output berisi pernyataan ALTER TABLE untuk menambahkan partisi ke definisi tabel.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned PARTITION;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-01') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-01';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-02') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-02';"
```

# TAMPILKAN DATABASE
<a name="r_SHOW_DATABASES"></a>

Menampilkan database dari Katalog Data atau gudang data Amazon Redshift. SHOW DATABASES mencantumkan semua database yang dapat diakses, seperti, di dalam gudang data, AWS Glue Data Catalog database (awsdatacatalog), database berbagi data, dan database Lake Formation.

## Izin yang diperlukan
<a name="r_SHOW_DATABASES-privileges"></a>

Semua database dapat dilihat oleh pengguna kecuali:
+ Untuk database yang dibuat dari datashare dengan izin agar terlihat, pengguna saat ini harus diberikan izin PENGGUNAAN pada database.

## Sintaksis
<a name="r_SHOW_DATABASES-syntax"></a>

Untuk menampilkan database dari gudang data Amazon Redshift:

```
SHOW DATABASES 
[ LIKE '<expression>' ]
[ LIMIT row_limit ]
```

Untuk menampilkan database dari Katalog Data:

```
SHOW DATABASES FROM DATA CATALOG 
[ ACCOUNT  '<id1>', '<id2>', ... ]
[ LIKE '<expression>' ]
[ IAM_ROLE default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ]
[ LIMIT row_limit ]
```

## Parameter
<a name="r_SHOW_DATABASES-parameters"></a>

AKUN '<id1>', '<id2>',...   
 AWS Glue Data Catalog Akun yang digunakan untuk membuat daftar database. Menghilangkan parameter ini menunjukkan bahwa Amazon Redshift harus menampilkan database dari akun yang memiliki cluster.

SEPERTI '<expression>'  
Memfilter daftar database ke yang cocok dengan ekspresi yang Anda tentukan. Parameter ini mendukung pola yang menggunakan karakter wildcard% (percent) dan \$1 (underscore).

<account-id><role-name>IAM\$1ROLE default \$1 'SESI' \$1 'arn:aws:iam: ::role/ '  
Jika Anda menentukan peran IAM yang terkait dengan cluster saat menjalankan perintah SHOW DATABASES, Amazon Redshift akan menggunakan kredenal peran saat Anda menjalankan kueri pada database.  
Menentukan `default` kata kunci berarti menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster.  
Gunakan `'SESSION'` jika Anda terhubung ke klaster Amazon Redshift menggunakan identitas federasi dan mengakses tabel dari database eksternal yang dibuat menggunakan perintah. [BUAT BASIS DATA](r_CREATE_DATABASE.md) Untuk contoh penggunaan identitas federasi, lihat [Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum, yang menjelaskan cara mengonfigurasi identitas](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html) federasi.   
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Minimal, peran IAM harus memiliki izin untuk melakukan operasi LIST di bucket Amazon S3 untuk diakses dan operasi GET pada objek Amazon S3 yang berisi bucket. Untuk mempelajari lebih lanjut tentang database yang dibuat dari AWS Glue Data Catalog untuk datashares dan menggunakan IAM\$1ROLE, lihat [Bekerja dengan](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) jaringan data yang dikelola Lake Formation sebagai konsumen.  
Berikut ini menunjukkan sintaks untuk string parameter IAM\$1ROLE untuk ARN tunggal.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran IAM lain, mungkin milik akun lain. Anda dapat merantai hingga 10 peran. Untuk informasi selengkapnya, lihat [Merantai peran IAM dalam Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Untuk peran IAM ini, lampirkan kebijakan izin IAM yang serupa dengan yang berikut ini.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Untuk langkah-langkah untuk membuat peran IAM yang akan digunakan dengan kueri federasi, lihat. [Membuat rahasia dan peran IAM untuk menggunakan kueri federasi](federated-create-secret-iam-role.md)   
Jangan sertakan spasi dalam daftar peran yang dirantai.
Berikut ini menunjukkan sintaks untuk rantai tiga peran.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

BATAS *baris\$1limit*  
Klausul untuk MEMBATASI jumlah baris yang dikembalikan. Dimana *row\$1limit* adalah jumlah maksimum baris yang akan dikembalikan. *Row\$1limit* bisa 0—10.000.

## Contoh
<a name="r_SHOW_DATABASES-examples"></a>

Contoh berikut menampilkan semua database Data Catalog dari ID akun 123456789012.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012'

  catalog_id  | database_name |                        database_arn                    |     type     |                                             target_database                                      | location | parameters
--------------+---------------+--------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------+----------+------------
 123456789012 |   database1   | arn:aws:glue:us-east-1:123456789012:database/database1 | Data Catalog |                                                                                                  |          |
 123456789012 |   database2   | arn:aws:glue:us-east-1:123456789012:database/database2 | Data Catalog | arn:aws:redshift:us-east-1:123456789012:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/database2 |          |
```

Berikut ini adalah contoh yang menunjukkan cara menampilkan semua database Katalog Data dari ID akun 123456789012 saat menggunakan kredensyal peran IAM.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE default;
```

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE <iam-role-arn>;
```

Contoh berikut menampilkan semua database di gudang data Amazon Redshift yang terhubung.

```
SHOW DATABASES

database_name  | database_owner | database_type        | database_acl | parameters | database_isolation_level
---------------+----------------+----------------------+--------------+------------+--------------------
awsdatacatalog | 1              | auto mounted catalog | NULL         | UNKNOWN    | UNKNOWN
dev            | 1              | local                | NULL         | NULL       | Snapshot Isolation
```

# TAMPILKAN FUNGSI
<a name="r_SHOW_FUNCTIONS"></a>

Menampilkan daftar fungsi dalam skema, bersama dengan informasi tentang objek yang terdaftar.

Setiap baris keluaran memiliki kolom database\$1name, schema\$1name, function\$1name, number\$1of\$1arguments, argument\$1list, return\$1type, komentar.

Jika lebih dari 10.000 baris akan dihasilkan dari SHOW FUNCTIONS, maka perintah tersebut menimbulkan kesalahan.

## Izin yang diperlukan
<a name="r_SHOW_FUNCTIONS-required-permissions"></a>

Untuk melihat fungsi dalam skema Redshift, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pemilik fungsi
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan diberikan EXECUTE pada fungsi

## Sintaksis
<a name="r_SHOW_FUNCTIONS-synopsis"></a>

```
SHOW FUNCTIONS FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameter
<a name="r_SHOW_FUNCTIONS-parameters"></a>

*database\$1name*  
Nama database yang berisi fungsi untuk daftar.

*schema\$1name*  
Nama skema yang berisi fungsi untuk daftar.

*filter\$1pattern*  
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama fungsi. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_FUNCTIONS.html)
Perhatikan bahwa filter\$1pattern hanya cocok dengan nama fungsi.

*baris\$1limit*  
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000.

## Contoh
<a name="r_SHOW_FUNCTIONS-examples"></a>

Contoh berikut menunjukkan fungsi dari skema demo\$1db.demo\$1schema:

```
SHOW FUNCTIONS FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |    function_name     | number_of_arguments |                                  argument_list                                  |    return_type    | remarks 
---------------+-------------+----------------------+---------------------+---------------------------------------------------------------------------------+-------------------+---------
 demo_db       | demo_schema | f2                   |                   6 | integer, character varying, numeric, date, timestamp without time zone, boolean | character varying | 
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer                                                                | numeric           | 
 demo_db       | demo_schema | f_days_between       |                   2 | date, date                                                                      | integer           |
```

Contoh berikut menunjukkan fungsi dari skema demo\$1schema dengan nama yang diakhiri dengan 'discount':

```
SHOW FUNCTIONS FROM SCHEMA demo_schema like '%discount';
 database_name | schema_name |    function_name     | number_of_arguments |  argument_list   | return_type | remarks 
---------------+-------------+----------------------+---------------------+------------------+-------------+---------
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer | numeric     |
```

# TUNJUKKAN HIBAH
<a name="r_SHOW_GRANTS"></a>

Menampilkan hibah untuk pengguna, peran, atau objek. Objek dapat berupa database, skema, tabel, fungsi, atau templat. Saat Anda menentukan objek, seperti tabel atau fungsi, Anda harus memenuhi syarat dengan notasi dua bagian atau tiga bagian. Misalnya, `schema_name.table_name` atau `database_name.schema_name.table_name`.

Jika lebih dari 10.000 baris akan dihasilkan dari SHOW GRANTS, maka perintah tersebut menimbulkan kesalahan.

## Izin yang diperlukan
<a name="r_SHOW_GRANTS-permissions"></a>

Untuk menjalankan SHOW GRANTS bagi pengguna atau peran target, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pengguna target
+ Jadilah pemilik peran target
+ Diberikan peran

SHOW GRANTS untuk objek target hanya akan menampilkan hibah yang terlihat oleh pengguna saat ini. Hibah dapat dilihat oleh pengguna saat ini jika pengguna saat ini memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pengguna target
+ Diberikan pemilik peran yang diberikan
+ Diberikan peran yang ditargetkan oleh hibah objek

## Sintaksis
<a name="r_SHOW_GRANTS-syntax"></a>

Berikut ini adalah sintaks untuk menunjukkan hibah pada objek. Perhatikan bahwa cara kedua menentukan fungsi hanya berlaku untuk skema eksternal dan database yang dibuat dari datashare.

```
SHOW GRANTS ON
{
 DATABASE database_name |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } ( [ [ argname ] argtype [, ...] ] ) |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } |
 SCHEMA {database_name.schema_name | schema_name} | 
 { TABLE {database_name.schema_name.table_name | schema_name.table_name} | table_name }
 TEMPLATE {database_name.schema_name.template_name | template_name}
}
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

Berikut ini adalah sintaks untuk menampilkan hibah untuk pengguna atau peran. 

```
SHOW GRANTS FOR
{username | ROLE role_name}
[FROM DATABASE database_name]
[LIMIT row_limit]
```

## Parameter
<a name="r_SHOW_GRANTS-parameters"></a>

 *database\$1name*   
Nama database untuk menampilkan hibah pada.

 *function\$1name*   
Nama fungsi untuk menampilkan hibah pada.

template\$1name  
Nama template untuk menampilkan hibah pada.

 *schema\$1name*   
Nama skema untuk menunjukkan hibah.

 *table\$1name*   
Nama tabel untuk menunjukkan hibah.

UNTUK *Username*   
Menunjukkan menunjukkan hibah untuk pengguna.

UNTUK PERAN *role\$1name*   
Menunjukkan menunjukkan hibah untuk suatu peran.

UNTUK UMUM  
Menunjukkan menunjukkan hibah untuk PUBLIK.

 *baris\$1limit*   
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000. 

## Contoh
<a name="r_SHOW_GRANTS-examples"></a>

Contoh berikut menampilkan semua hibah pada database bernama`dev`.

```
SHOW GRANTS on database demo_db;

  database_name | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | ALTER          |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TRUNCATE       |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DROP           |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | INSERT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TEMP           |           0 | public        | public        | f            | DATABASE        | dbadmin
 demo_db       | SELECT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | UPDATE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DELETE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | REFERENCES     |         112 | alice         | user          | f            | TABLES          | dbadmin
```

Perintah berikut menunjukkan semua hibah pada skema bernama. `demo`

```
SHOW GRANTS ON SCHEMA demo_schema;

 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | demo_schema | SCHEMA      | ALTER          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | DROP           |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | USAGE          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | CREATE         |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
```

Perintah berikut menunjukkan semua hibah untuk pengguna bernama`alice`.

```
SHOW GRANTS FOR alice;

 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 demo_db       |             |             | DATABASE    | INSERT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | SELECT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | UPDATE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DELETE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | REFERENCES     |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DROP           |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | TRUNCATE       |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | ALTER          |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | USAGE          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | CREATE         |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | DROP           |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | ALTER          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | INSERT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | SELECT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | UPDATE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DELETE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | RULE           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | REFERENCES     |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRIGGER        |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DROP           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRUNCATE       |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | ALTER          |         124 | alice         | user          | TABLE           | dbadmin
```

```
SHOW GRANTS FOR alice FROM DATABASE second_db;
 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 second_db     | public      | t22         | TABLE       | SELECT         |         101 | alice         | user          | TABLE           | dbadmin
```

Perintah berikut menunjukkan semua hibah pada tabel bernama `t3` untuk pengguna bernama`alice`. Perhatikan bahwa Anda dapat menggunakan notasi dua bagian atau tiga bagian untuk menentukan nama tabel.

```
SHOW GRANTS ON TABLE demo_db.demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin


SHOW GRANTS ON TABLE demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

Contoh berikut menunjukkan semua hibah pada tabel bernama`t4`. Perhatikan berbagai cara yang dapat Anda tentukan nama tabel.

```
SHOW GRANTS ON t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 
SHOW GRANTS ON TABLE public.t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

# MODEL PERTUNJUKAN
<a name="r_SHOW_MODEL"></a>

Menampilkan informasi yang berguna tentang model pembelajaran mesin, termasuk statusnya, parameter yang digunakan untuk membuatnya dan fungsi prediksi dengan tipe argumen masukannya. Anda dapat menggunakan informasi dari SHOW MODEL untuk membuat ulang model. Jika tabel dasar telah berubah, menjalankan CREATE MODEL dengan pernyataan SQL yang sama menghasilkan model yang berbeda. Informasi yang dikembalikan oleh SHOW MODEL berbeda untuk pemilik model dan pengguna dengan hak istimewa EXECUTE. SHOW MODEL menunjukkan output yang berbeda ketika model dilatih dari Amazon Redshift atau ketika model adalah model BYOM.

## Sintaksis
<a name="r_SHOW_MODEL-synopsis"></a>

```
SHOW MODEL ( ALL | model_name )
```

## Parameter
<a name="r_SHOW_MODEL-parameters"></a>

SEMUA   
Mengembalikan semua model yang pengguna dapat menggunakan dan skema mereka.

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

## Catatan penggunaan
<a name="r_SHOW_MODEL_usage_notes"></a>

Perintah SHOW MODEL mengembalikan yang berikut: 
+ Nama modelnya.
+ Skema tempat model dibuat.
+ Pemilik model.
+ Waktu pembuatan model.
+ Status model, seperti READY, TRAINING, atau FAILED.
+ Pesan alasan untuk model yang gagal.
+ Kesalahan validasi jika model telah menyelesaikan pelatihan.
+ Perkiraan biaya yang diperlukan untuk mendapatkan model untuk pendekatan non-BYOM. Hanya pemilik model yang dapat melihat informasi ini.
+ Daftar parameter yang ditentukan pengguna dan nilainya, khususnya yang berikut ini:
  + Kolom TARGET yang ditentukan.
  + Jenis model, AUTO atau XGBoost.
  + Jenis masalah, seperti REGRESSION, BINARY\$1CLASSIFICATION, MULTICLASS\$1CLASSIFICATION. Parameter ini khusus untuk AUTO.
  + Nama pekerjaan pelatihan Amazon SageMaker AI atau pekerjaan Amazon SageMaker AI Autopilot yang menciptakan model tersebut. Anda dapat menggunakan nama pekerjaan ini untuk menemukan informasi lebih lanjut tentang model di Amazon SageMaker AI.
  + Tujuannya, seperti MSE, F1, Akurasi. Parameter ini khusus untuk AUTO.
  + Nama fungsi yang dibuat.
  + Jenis inferensi, lokal atau jarak jauh.
  + Argumen input fungsi prediksi.
  + Jenis argumen input fungsi prediksi untuk model yang tidak membawa model Anda sendiri (BYOM).
  + Tipe pengembalian fungsi prediksi. Parameter ini khusus untuk BYOM.
  + Nama titik akhir Amazon SageMaker AI untuk model BYOM dengan inferensi jarak jauh.
  + Peran IAM. Hanya pemilik model yang bisa melihat ini.
  + Ember S3 yang digunakan. Hanya pemilik model yang bisa melihat ini.
  +  AWS KMS Kuncinya, jika ada yang disediakan. Hanya pemilik model yang bisa melihat ini.
  + Waktu maksimum yang dapat dijalankan model.
+ Jika jenis model bukan AUTO, maka Amazon Redshift juga menampilkan daftar hiperparameter yang disediakan dan nilainya.

Anda juga dapat melihat beberapa informasi yang disediakan oleh SHOW MODEL di tabel katalog lainnya, seperti pg\$1proc. Amazon Redshift mengembalikan informasi tentang fungsi prediksi yang terdaftar di tabel katalog pg\$1proc. Informasi ini mencakup nama argumen masukan dan tipenya untuk fungsi prediksi. Amazon Redshift mengembalikan informasi yang sama dalam perintah SHOW MODEL.

```
SELECT * FROM pg_proc WHERE proname ILIKE '%<function_name>%';
```

## Contoh
<a name="r_SHOW_MODEL-examples"></a>

Contoh berikut menunjukkan output model show.

```
SHOW MODEL ALL;

Schema Name |  Model Name
------------+---------------
 public     | customer_churn
```

Pemilik customer\$1churn dapat melihat output berikut. Pengguna yang hanya memiliki hak istimewa EXECUTE tidak dapat melihat peran IAM, bucket Amazon S3, dan perkiraan biaya mode.

```
SHOW MODEL customer_churn;

       Key                 |           Value
---------------------------+-----------------------------------
 Model Name                | customer_churn
 Schema Name               | public
 Owner                     | 'owner'
 Creation Time             | Sat, 15.01.2000 14:45:20
 Model State               | READY
 validation:F1             | 0.855
 Estimated Cost            | 5.7
                           |
 TRAINING DATA:            |
 Table                     | customer_data
 Target Column             | CHURN
                           |
 PARAMETERS:               |
 Model Type                | auto
 Problem Type              | binary_classification
 Objective                 | f1
 Function Name             | predict_churn
 Function Parameters       | age zip average_daily_spend average_daily_cases
 Function Parameter Types  | int int float float
 IAM Role                  | 'iam_role'
 KMS Key                   | 'kms_key'
 Max Runtime               | 36000
```

# TAMPILKAN DATASHARES
<a name="r_SHOW_DATASHARES"></a>

Menampilkan saham masuk dan keluar dalam klaster baik dari akun yang sama atau di seluruh akun. Jika Anda tidak menentukan nama datashare, Amazon Redshift akan menampilkan semua datashares di semua database di cluster. Pengguna yang memiliki hak istimewa ALTER dan SHARE dapat melihat saham yang mereka miliki hak istimewa. 

## Sintaksis
<a name="r_SHOW_DATASHARES-synopsis"></a>

```
SHOW DATASHARES [ LIKE 'namepattern' ] 
```

## Parameter
<a name="r_SHOW_DATASHARES-parameters"></a>

SUKA  
Klausa opsional yang membandingkan pola nama yang ditentukan dengan deskripsi datashare. Ketika klausa ini digunakan, Amazon Redshift hanya menampilkan datashares dengan nama yang cocok dengan pola nama yang ditentukan.

*namepattern*  
Nama datashare diminta atau bagian dari nama yang akan dicocokkan menggunakan karakter wildcard.

## Contoh
<a name="r_SHOW_DATASHARES-examples"></a>

Contoh berikut menampilkan saham inbound dan outbound dalam sebuah cluster. 

```
SHOW DATASHARES;
SHOW DATASHARES LIKE 'sales%';

share_name   | share_owner | source_database | consumer_database | share_type | createdate          | is_publicaccessible | share_acl | producer_account |           producer_namespace
-------------+-------------+-----------------+-------------------+------------+---------------------+---------------------+-----------+------------------+---------------------------------------
'salesshare' | 100         | dev             |                   | outbound   | 2020-12-09 01:22:54.| False               |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
```

# TAMPILKAN PARAMETER
<a name="r_SHOW_PARAMETERS"></a>

Menampilkan daftar parameter untuk fungsi/prosedur, bersama dengan beberapa informasi tentang parameter.

Setiap baris keluaran memiliki kolom database\$1name, schema\$1name, processre\$1name atau function\$1name, parameter\$1name, ordinal\$1position, parameter\$1type (IN/OUT), data\$1type, character\$1maximum\$1length, numeric\$1precision, numeric\$1scale, dan komentar.

## Izin yang diperlukan
<a name="r_SHOW_PARAMETERS-required-permissions"></a>

Untuk melihat skema function/procedure pergeseran merah, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pemilik fungsi
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan diberikan EXECUTE pada fungsi

## Sintaksis
<a name="r_SHOW_PARAMETERS-synopsis"></a>

```
SHOW PARAMETERS OF {FUNCTION| PROCEDURE}
[database_name.]schema_name.function_name(argtype [, ...] )
[LIKE 'filter_pattern'];
```

## Parameter
<a name="r_SHOW_PARAMETERS-parameters"></a>

*database\$1name*  
Nama database yang berisi fungsi untuk daftar.

*schema\$1name*  
Nama skema yang berisi fungsi untuk daftar.

*filter\$1pattern*  
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama tabel. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_PARAMETERS.html)

## Contoh
<a name="r_SHOW_PARAMETERS-examples"></a>

Contoh berikut menunjukkan parameter prosedur demo\$1db.demo\$1schema.f1:

```
SHOW PARAMETERS OF PROCEDURE demo_db.demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL);
 database_name | schema_name | procedure_name |  parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+------------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | operation        |                1 | IN             | character varying           |                       10 |                   |              
 demo_db       | demo_schema | f1             | value1           |                2 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2           |                3 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | result           |                4 | INOUT          | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | operation_status |                5 | OUT            | character varying           |                       50 |                   |              
 demo_db       | demo_schema | f1             | calculation_time |                6 | OUT            | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f1             | is_successful    |                7 | OUT            | boolean                     |                          |                   |
```

Contoh berikut menunjukkan parameter prosedur demo\$1schema.f1 dengan nama yang dimulai dengan 'val':

```
SHOW PARAMETERS OF PROCEDURE demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL) like 'val%';
 database_name | schema_name | procedure_name | parameter_name | ordinal_position | parameter_type | data_type | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+----------------+------------------+----------------+-----------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | value1         |                2 | IN             | numeric   |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2         |                3 | IN             | numeric   |                          |                18 |             0
```

Contoh berikut menunjukkan parameter fungsi demo\$1schema.f2:

```
SHOW PARAMETERS OF FUNCTION demo_schema.f2(INT, VARCHAR, DECIMAL, DATE, TIMESTAMP, BOOLEAN);
 database_name | schema_name | function_name | parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+---------------+-----------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f2            |                 |                0 | RETURN         | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | int_param       |                1 | IN             | integer                     |                          |                32 |             0
 demo_db       | demo_schema | f2            | varchar_param   |                2 | IN             | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | decimal_param   |                3 | IN             | numeric                     |                          |                   |              
 demo_db       | demo_schema | f2            | date_param      |                4 | IN             | date                        |                          |                   |              
 demo_db       | demo_schema | f2            | timestamp_param |                5 | IN             | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f2            | boolean_param   |                6 | IN             | boolean                     |                          |                   |
```

# TAMPILKAN KEBIJAKAN
<a name="r_SHOW_POLICIES"></a>

Menampilkan kebijakan keamanan tingkat baris (RLS) dan masking data dinamis (DDM) yang didefinisikan dalam database, serta kebijakan RLS dan DDM yang diterapkan pada hubungan tertentu. Hanya pengguna super atau pengguna dengan `sys:secadmin` peran di database yang dapat melihat hasil kebijakan ini.

## Sintaksis
<a name="r_SHOW_POLICIES-synopsis"></a>

```
SHOW { RLS | MASKING } POLICIES
[
    ON { database_name.schema_name.relation_name
       | schema_name.relation_name
       }
    [ FOR { user_name | ROLE role_name | PUBLIC } ]
  |
    FROM DATABASE database_name
]
[ LIMIT row_limit ];
```

## Parameter
<a name="r_SHOW_POLICIES-parameters"></a>

*database\$1name*  
Nama database untuk menampilkan kebijakan dari.

*schema\$1name*  
Nama skema hubungan untuk menunjukkan kebijakan terlampir pada.

*hubungan\$1nama*  
Nama hubungan untuk menunjukkan kebijakan terlampir pada.

*user\$1name*  
Nama pengguna untuk siapa kebijakan dilampirkan pada hubungan.

*role\$1name*  
Nama peran di mana kebijakan dilampirkan pada hubungan.

*baris\$1limit*  
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000.

**catatan**  
Tampilkan kebijakan dari database yang berbeda dari database yang terhubung didukung di Katalog Izin Federasi Amazon Redshift. Perintah SHOW POLICIES mendukung kueri lintas basis data untuk semua database di gudang dengan izin federasi Amazon Redshift

## Contoh
<a name="r_SHOW_POLICIES-examples"></a>

Perintah berikut menunjukkan kebijakan RLS dari database yang terhubung.

```
SHOW RLS POLICIES;

  policy_name   | policy_alias |                           policy_atts                            |                                                                  policy_qual                                                                         | policy_enabled | policy_modified_by |    policy_modified_time    
----------------+--------------+------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+--------------------+----------------------------
 policy_america | rls_table    | [{"colname":"region","type":"character varying(10)"}]            | (("rls_table"."region" = CAST('USA' AS TEXT)) OR ("rls_table"."region" = CAST('CANADA' AS TEXT)) OR ("rls_table"."region" = CAST('Mexico' AS TEXT))) | t              | admin              | 2025-11-07 14:57:27
```

Perintah berikut menunjukkan kebijakan masking dari database “sales\$1db.finance-catalog”;

```
SHOW MASKING POLICIES FROM DATABASE "sales_db@finance-catalog";

  policy_name  |                          input_columns                           |                                                  policy_expression                                                  | policy_modified_by |    policy_modified_time    
---------------+------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+--------------------+----------------------------
 hash_credit   | [{"colname":"credit_card","type":"character varying(256)"}]      | [{"expr":"SHA2((\"masked_table\".\"credit_card\" + CAST('testSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}]   | admin              | 2025-11-07 16:05:54
 hash_username | [{"colname":"username","type":"character varying(256)"}]         | [{"expr":"SHA2((\"masked_table\".\"username\" + CAST('otherTestSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}] | admin              | 2025-11-07 16:07:08
(2 rows)
```

Perintah berikut menunjukkan kebijakan RLS yang dilampirkan pada relasi sales\$1table;

```
SHOW RLS POLICIES ON sales_schema.sales_table;

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |          grantee          | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+---------------------------+--------------+--------------+-----------+----------------------
 policy_global  | sales_schema | sales_table   | table         | admin    | sales_analyst_role_global | role         | t            | t         | and
 policy_america | sales_schema | sales_table   | table         | admin    | sales_analyst_usa         | user         | t            | t         | and
```

Perintah berikut menunjukkan kebijakan masking yang dilampirkan pada relasi transaction\$1table dari database “sales\$1db.finance-catalog”.

```
SHOW MASKING POLICIES ON "sales_db@finance-catalog".sales_schema.transaction_table LIMIT 1;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority |   input_columns   |   output_columns   
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+-------------------+-------------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"]     | ["user_name"]
```

Perintah berikut menunjukkan kebijakan RLS yang dilampirkan pada relasi sales\$1table dari database “sales\$1db.finance-catalog” untuk pengguna “IAMR:Sales\$1Analyst\$1USA”.

```
SHOW RLS POLICIES ON "sales_db@finance-catalog".sales_schema.sales_table FOR "IAMR:sales_analyst_usa";

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |      grantee           | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+------------------------+--------------+--------------+-----------+----------------------
 policy_america | sales_schema | sales_table   | table         | admin    | IAMR:sales_analyst_usa | user         | t            | t         | and
```

Perintah berikut menunjukkan kebijakan RLS yang dilampirkan pada relasi transaction\$1table dari database “sales\$1db.finance-catalog” untuk peran transaction\$1analyst\$1role.

```
SHOW MASKING POLICIES ON sales_schema.transaction_table FOR ROLE transaction_analyst_role;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority | input_columns | output_columns 
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+---------------+----------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"] | ["user_name"]
```

# TAMPILKAN PROSEDUR
<a name="r_SHOW_PROCEDURE"></a>

Menunjukkan definisi prosedur tersimpan yang diberikan, termasuk tanda tangannya. Anda dapat menggunakan output dari SHOW PROCEDURE untuk membuat ulang prosedur yang disimpan. 

## Sintaksis
<a name="r_SHOW_PROCEDURE-synopsis"></a>

```
SHOW PROCEDURE sp_name [( [ [ argname ] [ argmode ] argtype [, ...] ] )]
```

## Parameter
<a name="r_SHOW_PROCEDURE-parameters"></a>

 *sp\$1nama*   
Nama prosedur untuk ditampilkan. 

*[argname] [argmode] argtype*   
Jenis argumen masukan untuk mengidentifikasi prosedur yang disimpan. Secara opsional, Anda dapat menyertakan tipe data argumen lengkap, termasuk argumen OUT. Bagian ini opsional jika nama prosedur yang disimpan unik (yaitu, tidak kelebihan beban).

## Contoh
<a name="r_SHOW_PROCEDURE-examples"></a>

Contoh berikut menunjukkan definisi prosedur`test_spl2`.

```
show procedure test_sp2(int, varchar);
                                        Stored Procedure Definition
------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE public.test_sp2(f1 integer, INOUT f2 character varying, OUT character varying)
LANGUAGE plpgsql
AS $_$
DECLARE
out_var alias for $3;
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
CREATE TEMP TABLE etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from etl;
END;
$_$

(1 row)
```

# TUNJUKKAN PROSEDUR
<a name="r_SHOW_PROCEDURES"></a>

Menampilkan daftar prosedur dalam skema, bersama dengan informasi tentang objek yang terdaftar.

Setiap baris keluaran memiliki kolom `database_name``schema_name`,`procedure_name`,`number_of_arguments`,`argument_list`,`return_type`, komentar.

Jika lebih dari 10.000 baris akan dihasilkan dari SHOW PROCEDURES, maka perintah tersebut menimbulkan kesalahan.

## Izin yang diperlukan
<a name="r_SHOW_PROCEDURES-required-permissions"></a>

Untuk melihat prosedur dalam skema Redshift, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser
+ Jadilah pemilik prosedur
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan diberikan EXECUTE pada prosedur

## Sintaksis
<a name="r_SHOW_PROCEDURES-synopsis"></a>

```
SHOW PROCEDURES FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameter
<a name="r_SHOW_PROCEDURES-parameters"></a>

database\$1name  
Nama database yang berisi prosedur untuk daftar.

schema\$1name  
Nama skema yang berisi prosedur untuk daftar.

filter\$1pattern  
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama prosedur. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_PROCEDURES.html)
Perhatikan bahwa filter\$1pattern hanya cocok dengan nama prosedur.

baris\$1limit  
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000.

## Contoh
<a name="r_SHOW_PROCEDURES-examples"></a>

Contoh berikut menunjukkan prosedur dari schema demo\$1db.demo\$1schema:

```
SHOW PROCEDURES FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |  procedure_name   | number_of_arguments |                argument_list                 |                           return_type                            | remarks 
---------------+-------------+-------------------+---------------------+----------------------------------------------+------------------------------------------------------------------+---------
 demo_db       | demo_schema | f1                |                   4 | character varying, numeric, numeric, numeric | numeric, character varying, timestamp without time zone, boolean | 
 demo_db       | demo_schema | sp_get_result_set |                   2 | integer, refcursor                           | refcursor                                                        | 
 demo_db       | demo_schema | sp_process_data   |                   2 | numeric, numeric                             | numeric, character varying                                       |
```

Contoh berikut menunjukkan prosedur dari skema demo\$1schema dengan nama yang diakhiri dengan 'data':

```
SHOW PROCEDURES FROM SCHEMA demo_schema like '%data';
 database_name | schema_name | procedure_name  | number_of_arguments |  argument_list   |        return_type         | remarks 
---------------+-------------+-----------------+---------------------+------------------+----------------------------+---------
 demo_db       | demo_schema | sp_process_data |                   2 | numeric, numeric | numeric, character varying |
```

# TAMPILKAN SKEMA
<a name="r_SHOW_SCHEMAS"></a>

Menampilkan daftar skema dalam database, bersama dengan beberapa atribut skema.

Setiap baris output terdiri dari nama database, nama skema, pemilik skema, jenis skema, skema ACL, database sumber, dan opsi skema. Untuk informasi selengkapnya tentang atribut ini, lihat [SVV\$1ALL\$1SCHEMAS](r_SVV_ALL_SCHEMAS.md).

Jika lebih dari 10.000 skema dapat dihasilkan dari perintah SHOW SCHEMAS, maka kesalahan dikembalikan.

## Izin yang diperlukan
<a name="r_SHOW_SCHEMAS-privileges"></a>

Untuk melihat skema dalam tabel Amazon Redshift, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser.
+ Jadilah pemilik skema.
+ Diberikan hak istimewa PENGGUNAAN pada skema.

## Sintaksis
<a name="r_SHOW_SCHEMAS-synopsis"></a>

```
SHOW SCHEMAS FROM DATABASE database_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameter
<a name="r_SHOW_SCHEMAS-parameters"></a>

 *database\$1name*   
Nama database yang berisi tabel untuk daftar.   
Untuk menampilkan tabel dalam AWS Glue Data Catalog, tentukan (`awsdatacatalog`) sebagai nama database, dan pastikan konfigurasi sistem `data_catalog_auto_mount` diatur ke`true`. Untuk informasi selengkapnya, lihat [MENGUBAH SISTEM](r_ALTER_SYSTEM.md).

 *filter\$1pattern*   
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama skema. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_SCHEMAS.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan. 

 *baris\$1limit*   
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000. 

## Contoh
<a name="r_SHOW_SCHEMAS-examples"></a>

Contoh berikut menunjukkan skema dari database Amazon Redshift bernama. `dev`

```
SHOW SCHEMAS FROM DATABASE dev;

 database_name |     schema_name      | schema_owner | schema_type |         schema_acl          | source_database | schema_option 
---------------+----------------------+--------------+-------------+-----------------------------+-----------------+---------------
 dev           | pg_automv            |            1 | local       |                             |                 | 
 dev           | pg_catalog           |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | public               |            1 | local       | jpuser=UC/jpuser~=UC/jpuser |                 | 
 dev           | information_schema   |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | schemad79cd6d93bf043 |            1 | local       |                             |                 |
```

Berikut contoh menunjukkan skema dalam AWS Glue Data Catalog database bernama`awsdatacatalog`. Jumlah maksimum baris output adalah`5`.

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog LIMIT 5;

 database_name  |     schema_name      | schema_owner | schema_type | schema_acl | source_database | schema_option 
----------------+----------------------+--------------+-------------+------------+-----------------+---------------
 awsdatacatalog | 000_too_many_glue_db |              | EXTERNAL    |            |                 | 
 awsdatacatalog | 123_default          |              | EXTERNAL    |            |                 | 
 awsdatacatalog | adhoc                |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_10mb      |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_1g        |              | EXTERNAL    |            |                 |
```

# TAMPILKAN TABEL
<a name="r_SHOW_TABLE"></a>

Menunjukkan definisi tabel, termasuk atribut tabel, kendala tabel, atribut kolom, pemeriksaan kolom, dan batasan kolom. Anda dapat menggunakan output dari pernyataan SHOW TABLE untuk membuat ulang tabel. 

Untuk informasi selengkapnya tentang pembuatan tabel, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md). 

## Sintaksis
<a name="r_SHOW_TABLE-synopsis"></a>

```
SHOW TABLE [schema_name.]table_name 
```

## Parameter
<a name="r_SHOW_TABLE-parameters"></a>

 *schema\$1name*   
(Opsional) Nama skema terkait. 

 *table\$1name*   
Nama tabel untuk ditampilkan. 

## Contoh
<a name="r_SHOW_TABLE-examples"></a>

Berikut ini adalah contoh dari output SHOW TABLE untuk tabel`sales`.

```
show table sales;
```

```
CREATE TABLE public.sales (
salesid integer NOT NULL ENCODE az64,
listid integer NOT NULL ENCODE az64 distkey,
sellerid integer NOT NULL ENCODE az64,
buyerid integer NOT NULL ENCODE az64,
eventid integer NOT NULL ENCODE az64,
dateid smallint NOT NULL,
qtysold smallint NOT NULL ENCODE az64,
pricepaid numeric(8,2) ENCODE az64,
commission numeric(8,2) ENCODE az64,
saletime timestamp without time zone ENCODE az64
)
DISTSTYLE KEY SORTKEY ( dateid );
```

Berikut ini adalah contoh dari output SHOW TABLE untuk tabel `category` dalam skema`public`. Pengumpulan database adalah CASE\$1SENSITIVE.

```
show table public.category;
```

```
CREATE TABLE public.category (
catid smallint NOT NULL distkey,
catgroup character varying(10) ENCODE lzo COLLATE case_sensitive,
catname character varying(10) ENCODE lzo COLLATE case_sensitive,
catdesc character varying(50) ENCODE lzo COLLATE case_sensitive
) 
DISTSTYLE KEY SORTKEY ( catid );
```

Contoh berikut membuat tabel `foo` dengan kunci utama.

```
create table foo(a int PRIMARY KEY, b int);
```

Hasil SHOW TABLE menampilkan pernyataan create dengan semua properti `foo` tabel.

```
show table foo;
```

```
CREATE TABLE public.foo ( 
a integer NOT NULL ENCODE az64, 
b integer ENCODE az64, PRIMARY KEY (a) 
) 
DISTSTYLE AUTO;
```

Dalam contoh ini, kita membuat tabel di mana kolom `a` mewarisi pemeriksaan CASE\$1SENSITIVE default database, sementara `b` dan `c` secara eksplisit diatur ke pemeriksaan CASE\$1INSENSITIVE.

```
CREATE TABLE public.foo (
a CHAR, 
b VARCHAR(10) COLLATE CASE_INSENSITIVE, 
c SUPER COLLATE CASE_INSENSITIVE
);
```

Hasil SHOW TABLE menampilkan pernyataan create dengan semua properti `foo` tabel.

```
show table public.foo;
```

```
CREATE TABLE public.foo (
a character(1) ENCODE lzo COLLATE case_sensitive,
b character varying(10) ENCODE lzo COLLATE case_insensitive,
c super COLLATE case_insensitive
)
DISTSTYLE AUTO;
```

# TAMPILKAN TABEL
<a name="r_SHOW_TABLES"></a>

Menampilkan daftar tabel dalam skema, bersama dengan beberapa atribut tabel.

Setiap baris keluaran terdiri dari nama database, nama skema, nama tabel, tipe tabel, ACL tabel, komentar, pemilik tabel, waktu terakhir diubah, waktu modifikasi terakhir, dist\$1style, dan sub-tipe tabel. Untuk informasi selengkapnya tentang atribut ini, lihat [SVV\$1ALL\$1TABLES](r_SVV_ALL_TABLES.md).

Stempel waktu modifikasi dan perubahan dapat tertinggal di belakang pembaruan tabel sekitar 20 menit.

Jika lebih dari 10.000 tabel akan dihasilkan dari perintah SHOW TABLES, maka kesalahan dikembalikan.

## Izin yang diperlukan
<a name="r_SHOW_TABLES-privileges"></a>

Untuk melihat tabel dalam skema Amazon Redshift, pengguna saat ini harus memenuhi salah satu kriteria berikut:
+ Jadilah superuser.
+ Jadilah pemilik meja.
+ Diberikan hak istimewa PENGGUNAAN pada skema induk dan diberikan hak SELECT di atas meja atau diberikan hak pilih pada kolom mana pun dalam tabel.

## Sintaksis
<a name="r_SHOW_TABLES-synopsis"></a>

```
SHOW TABLES FROM SCHEMA database_name.schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameter
<a name="r_SHOW_TABLES-parameters"></a>

 *database\$1name*   
Nama database yang berisi tabel untuk daftar.   
Untuk menampilkan tabel dalam AWS Glue Data Catalog, tentukan (`awsdatacatalog`) sebagai nama database, dan pastikan konfigurasi sistem `data_catalog_auto_mount` diatur ke`true`. Untuk informasi selengkapnya, lihat [MENGUBAH SISTEM](r_ALTER_SYSTEM.md).

 *schema\$1name*   
Nama skema yang berisi tabel untuk daftar.   
Untuk menampilkan AWS Glue Data Catalog tabel, berikan nama AWS Glue database sebagai nama skema.

 *filter\$1pattern*   
Ekspresi karakter UTF-8 yang valid dengan pola untuk mencocokkan nama tabel. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_TABLES.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan. 

 *baris\$1limit*   
Jumlah maksimum baris untuk kembali. *Row\$1limit* bisa 0—10.000. 

## Contoh
<a name="r_SHOW_TABLES-examples"></a>

```
SHOW TABLES FROM SCHEMA s1;

 database_name | schema_name |    table_name     | table_type |              table_acl              | remarks | owner |     last_altered_time      |     last_modified_time     | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+-------------------------------------+---------+-------+----------------------------+----------------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | alice=arwdRxtDPA/alice~bob=d/alice  |         | alice |                            |                            |            | LATE BINDING VIEW
 dev           | s1          | manual_mv         | VIEW       | alice=arwdRxtDPA/alice~bob=P/alice  |         | alice |                            |                            |            | MATERIALIZED VIEW
 dev           | s1          | regular_view      | VIEW       | alice=arwdRxtDPA/alice~bob=r/alice  |         | alice |                            |                            |            | REGULAR VIEW
 dev           | s1          | test_table        | TABLE      | alice=arwdRxtDPA/alice~bob=rw/alice |         | alice | 2025-11-18 15:52:00.010452 | 2025-11-18 15:44:34.856073 | AUTO (ALL) | REGULAR TABLE
```

```
SHOW TABLES FROM SCHEMA dev.s1 LIKE '%view' LIMIT 1;

 database_name | schema_name |    table_name     | table_type |              table_acl               | remarks | owner | last_altered_time | last_modified_time | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+--------------------------------------+---------+-------+-------------------+--------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | {alice=arwdRxtDPA/alice,bob=d/alice} |         | alice |                   |                    |            | LATE BINDING VIEW
```

# TAMPILKAN TEMPLATE
<a name="r_SHOW_TEMPLATE"></a>

Menampilkan definisi lengkap template, termasuk nama yang sepenuhnya memenuhi syarat (database, skema, dan nama template) dan semua parameter. Outputnya adalah pernyataan CREATE TEMPLATE valid yang dapat Anda gunakan untuk membuat ulang template atau membuat template serupa dengan modifikasi. 

Untuk informasi selengkapnya tentang pembuatan template, lihat[BUAT TEMPLATE](r_CREATE_TEMPLATE.md). 

## Izin yang diperlukan
<a name="r_SHOW_TEMPLATE-privileges"></a>

Untuk melihat definisi template, Anda harus memiliki salah satu dari berikut ini:
+ Hak istimewa pengguna super
+ Hak istimewa PENGGUNAAN pada template dan hak istimewa PENGGUNAAN pada skema yang berisi template

## Sintaksis
<a name="r_SHOW_TEMPLATE-synopsis"></a>

```
SHOW TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameter
<a name="r_SHOW_TEMPLATE-parameters"></a>

 *database\$1name*   
(Opsional) Nama database tempat template dibuat. Jika tidak ditentukan, database saat ini digunakan. 

 *schema\$1name*   
(Opsional) Nama skema di mana template dibuat. Jika tidak ditentukan, template dicari di jalur pencarian saat ini. 

 *template\$1name*   
Nama templat. 

## Contoh
<a name="r_SHOW_TEMPLATE-examples"></a>

Berikut ini adalah contoh dari output SHOW TEMPLATE untuk template`test_template`:

```
CREATE TEMPLATE test_template FOR COPY AS NOLOAD DELIMITER ',' ENCODING UTF16 ENCRYPTED;
```

```
SHOW TEMPLATE test_template;

CREATE OR REPLACE TEMPLATE dev.public.test_template FOR COPY AS ENCRYPTED NOLOAD ENCODING UTF16 DELIMITER ',';
```

Contoh berikut membuat template `demo_template` dalam skema`demo_schema`.

```
CREATE OR REPLACE TEMPLATE demo_schema.demo_template FOR COPY AS
ACCEPTANYDATE ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY' EXPLICIT_IDS ROUNDEC
TIMEFORMAT  AS 'DD.MM.YYYY HH:MI:SS' TRUNCATECOLUMNS NULL  AS 'null_string';
```

```
SHOW TEMPLATE demo_schema.demo_template;

CREATE OR REPLACE TEMPLATE dev.demo_schema.demo_template FOR COPY AS TRUNCATECOLUMNS NULL 'null_string' EXPLICIT_IDS TIMEFORMAT 'DD.MM.YYYY HH:MI:SS' ACCEPTANYDATE ROUNDEC ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY';
```

# TAMPILKAN TEMPLATE
<a name="r_SHOW_TEMPLATES"></a>

Menampilkan daftar template dalam skema, bersama dengan atributnya.

Setiap baris keluaran terdiri dari nama templat, id templat, jenis templat, pemilik templat, nama database, nama skema, waktu pembuatan, waktu modifikasi terakhir, dan terakhir dimodifikasi oleh. 

Untuk detail template lengkap, termasuk parameter template, lihat[SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md).

## Izin yang diperlukan
<a name="r_SHOW_TEMPLATES-privileges"></a>

Untuk melihat template dalam skema Amazon Redshift, Anda harus memiliki salah satu dari berikut ini:
+ Hak istimewa pengguna super
+ Hak istimewa PENGGUNAAN pada skema yang berisi templat

## Sintaksis
<a name="r_SHOW_TEMPLATES-synopsis"></a>

```
SHOW TEMPLATES FROM SCHEMA [database_name.]schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ];
```

## Parameter
<a name="r_SHOW_TEMPLATES-parameters"></a>

 *database\$1name*   
(Opsional) Nama database yang berisi template untuk dicantumkan. Jika tidak disediakan, gunakan database saat ini.

 *schema\$1name*   
Nama skema yang berisi template untuk daftar. 

 *filter\$1pattern*   
(Opsional) Ekspresi karakter UTF-8 yang valid dengan pola yang cocok dengan nama template. Opsi LIKE melakukan kecocokan peka huruf besar/kecil yang mendukung metakarakter pencocokan pola berikut:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_SHOW_TEMPLATES.html)
Jika *filter\$1pattern* tidak mengandung metakarakter, maka pola hanya mewakili string itu sendiri; dalam hal ini LIKE bertindak sama dengan operator sama dengan. 

 *baris\$1limit*   
Jumlah maksimum baris untuk kembali. Rentang yang valid adalah 0 hingga batas template pada cluster (defaultnya adalah 1000).

## Contoh
<a name="r_SHOW_TEMPLATES-examples"></a>

```
SHOW TEMPLATES FROM SCHEMA s1;

 template_name          | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by
------------------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 template_maxerror      |      107685 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:10.514076 | 2025-12-16 19:31:10.514076 |              100
 json_template          |      107687 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:33.229566 | 2025-12-16 19:31:33.229567 |              100
 noload_template        |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
 csv_delimiter_template |      107688 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:42.354044 | 2025-12-16 19:31:42.354045 |              100
```

```
SHOW TEMPLATES FROM SCHEMA dev.s1 LIKE '%template' LIMIT 1;

 template_name  | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by 
-----------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 noload_template |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
```

# TAMPILKAN TAMPILAN
<a name="r_SHOW_VIEW"></a>

Menunjukkan definisi tampilan, termasuk untuk tampilan yang terwujud dan tampilan yang mengikat akhir. Anda dapat menggunakan output dari pernyataan SHOW VIEW untuk membuat ulang tampilan. 

## Sintaksis
<a name="r_SHOW_VIEW-synopsis"></a>

```
SHOW VIEW [schema_name.]view_name 
```

## Parameter
<a name="r_SHOW_VIEW-parameters"></a>

 *schema\$1name*   
(Opsional) Nama skema terkait. 

 *view\$1name*   
Nama tampilan untuk ditampilkan. 

## Contoh
<a name="r_SHOW_VIEW-examples"></a>

 Berikut ini adalah definisi tampilan untuk tampilan`LA_Venues_v`.

```
create view LA_Venues_v as select * from venue where venuecity='Los Angeles';
```

Berikut ini adalah contoh dari perintah SHOW VIEW dan output untuk tampilan didefinisikan sebelumnya.

```
show view LA_Venues_v;
```

```
SELECT venue.venueid,
venue.venuename,
venue.venuecity,
venue.venuestate,
venue.venueseats
FROM venue WHERE ((venue.venuecity)::text = 'Los Angeles'::text);
```

Berikut ini adalah definisi tampilan untuk tampilan `public.Sports_v` dalam skema`public`.

```
create view public.Sports_v as select * from category where catgroup='Sports';
```

Berikut ini adalah contoh dari perintah SHOW VIEW dan output untuk tampilan didefinisikan sebelumnya.

```
show view public.Sports_v;
```

```
SELECT category.catid,
category.catgroup,
category.catname,
category.catdesc
FROM category WHERE ((category.catgroup)::text = 'Sports'::text);
```

# START TRANSACTION
<a name="r_START_TRANSACTION"></a>

Sinonim dari fungsi BEGIN. 

Lihat [MULAI](r_BEGIN.md). 

# MEMOTONG
<a name="r_TRUNCATE"></a>

Menghapus semua baris dari tabel tanpa melakukan pemindaian tabel: operasi ini adalah alternatif yang lebih cepat untuk operasi DELETE yang tidak memenuhi syarat. Untuk menjalankan perintah TRUNCATE, Anda harus memiliki izin TRUNCATE untuk tabel, menjadi pemilik tabel, atau menjadi superuser. Untuk memberikan izin untuk memotong tabel, gunakan perintah. [HIBAH](r_GRANT.md)

TRUNCATE jauh lebih efisien daripada DELETE dan tidak memerlukan VACUUM dan ANALYSIS. Namun, ketahuilah bahwa TRUNCATE melakukan transaksi di mana ia dijalankan.

## Sintaksis
<a name="r_TRUNCATE-synopsis"></a>

```
TRUNCATE [ TABLE ] table_name
```

Perintah ini juga berfungsi pada tampilan yang terwujud.

```
TRUNCATE materialized_view_name
```

## Parameter
<a name="r_TRUNCATE-parameters"></a>

TABEL   
Kata kunci opsional. 

 *table\$1name*   
Meja sementara atau persisten. Hanya pemilik meja atau superuser yang dapat memotongnya.   
Anda dapat memotong tabel apa pun, termasuk tabel yang direferensikan dalam batasan kunci asing.   
Anda tidak perlu menyedot debu meja setelah memotongnya. 

 *materialized\$1view\$1name*   
Pandangan yang terwujud.  
Anda dapat memotong tampilan terwujud yang digunakan untuk. [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md) 

## Catatan penggunaan
<a name="r_TRUNCATE_usage_notes"></a>
+  Perintah TRUNCATE melakukan transaksi di mana ia dijalankan; oleh karena itu, Anda tidak dapat memutar kembali operasi TRUNCATE, dan perintah TRUNCATE dapat melakukan operasi lain ketika melakukan sendiri. 
+ Operasi TRUNCATE menyimpan kunci eksklusif saat dijalankan di Amazon Redshift streaming tampilan terwujud yang terhubung ke salah satu dari berikut ini:
  +  Aliran data Amazon Kinesis 
  +  Topik Amazon Managed Streaming for Apache Kafka 
  +  Aliran eksternal yang didukung, seperti topik Confluent Cloud Kafka 

  Untuk informasi selengkapnya, lihat [Streaming konsumsi ke tampilan yang terwujud](materialized-view-streaming-ingestion.md).

## Contoh
<a name="r_TRUNCATE-examples"></a>

Gunakan perintah TRUNCATE untuk menghapus semua baris dari tabel CATEGORY: 

```
truncate category;
```

Mencoba memutar kembali operasi TRUNCATE: 

```
begin;

truncate date;

rollback;

select count(*) from date;
count
-------
0
(1 row)
```

Tabel DATE tetap kosong setelah perintah ROLLBACK karena perintah TRUNCATE dilakukan secara otomatis. 

Contoh berikut menggunakan perintah TRUNCATE untuk menghapus semua baris dari tampilan terwujud. 

```
truncate my_materialized_view;
```

Ini menghapus semua catatan dalam tampilan terwujud dan membiarkan tampilan terwujud dan skema utuh. Dalam kueri, nama tampilan terwujud adalah contoh.

# MEMBONGKAR
<a name="r_UNLOAD"></a>


|  | 
| --- |
| Enkripsi sisi klien untuk perintah COPY dan UNLOAD tidak akan lagi terbuka untuk pelanggan baru mulai 30 April 2025. Jika Anda menggunakan enkripsi sisi klien dengan perintah COPY dan UNLOAD dalam 12 bulan sebelum 30 April 2025, Anda dapat terus menggunakan enkripsi sisi klien dengan perintah COPY atau UNLOAD hingga 30 April 2026. Setelah 30 April 2026, Anda tidak akan dapat menggunakan enkripsi sisi klien untuk COPY dan UNLOAD. Kami menyarankan Anda beralih menggunakan enkripsi sisi server untuk COPY dan UNLOAD sesegera mungkin. Jika Anda sudah menggunakan enkripsi sisi server untuk COPY dan UNLOAD, tidak ada perubahan dan Anda dapat terus menggunakannya tanpa mengubah kueri Anda. Untuk informasi selengkapnya tentang enkripsi untuk COPY dan UNLOAD, lihat parameter ENCRYPTED di bawah ini. | 

Bongkar hasil kueri ke satu atau beberapa file teks, JSON, atau Apache Parquet di Amazon S3, menggunakan enkripsi sisi server Amazon S3 (SSE-S3). Anda juga dapat menentukan enkripsi sisi server dengan AWS Key Management Service kunci (SSE-KMS).

Secara default, format file yang dibongkar adalah teks pipe-delimited (). `|`

Anda dapat mengelola ukuran file di Amazon S3, dan dengan ekstensi jumlah file, dengan mengatur parameter MAXFILESIZE. Pastikan rentang IP S3 ditambahkan ke daftar izin Anda. Untuk mempelajari lebih lanjut tentang rentang IP S3 yang diperlukan, lihat [Isolasi jaringan](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

Anda dapat membongkar hasil kueri Amazon Redshift ke data lake Amazon S3 Anda di Apache Parquet, format penyimpanan kolom terbuka yang efisien untuk analitik. Format parket hingga 2x lebih cepat untuk dibongkar dan mengkonsumsi penyimpanan hingga 6x lebih sedikit di Amazon S3, dibandingkan dengan format teks. Ini memungkinkan Anda untuk menyimpan transformasi data dan pengayaan yang telah Anda lakukan di Amazon S3 ke dalam data lake Amazon S3 Anda dalam format terbuka. Anda kemudian dapat menganalisis data Anda dengan Redshift Spectrum dan AWS layanan lain seperti Amazon Athena, Amazon EMR, dan Amazon AI. SageMaker 

Untuk informasi selengkapnya dan contoh skenario tentang penggunaan perintah UNLOAD, lihat[Membongkar data di Amazon Redshift](c_unloading_data.md).

## Hak istimewa dan izin yang diperlukan
<a name="r_UNLOAD-permissions"></a>

Agar perintah UNLOAD berhasil, setidaknya pilih hak istimewa pada data dalam database diperlukan, bersama dengan izin untuk menulis ke lokasi Amazon S3. Untuk informasi tentang izin untuk mengakses AWS sumber daya untuk perintah UNLOAD, lihat. [Izin untuk mengakses Sumber Daya lainnya AWS](copy-usage_notes-access-permissions.md)

Untuk menerapkan izin hak istimewa terkecil, ikuti rekomendasi ini untuk hanya memberikan izin, sesuai kebutuhan, kepada pengguna yang menjalankan perintah.
+ Pengguna harus memiliki hak pilih pada data. Untuk informasi tentang cara membatasi hak istimewa database, lihat[HIBAH](r_GRANT.md).
+ Pengguna memerlukan izin untuk mengambil peran IAM untuk menulis ke bucket Amazon S3 di bucket Anda. Akun AWS Untuk membatasi akses bagi pengguna database untuk mengambil peran, lihat [Membatasi akses ke peran IAM](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service-database-users.html) di Panduan Manajemen *Amazon* Redshift.
+ Pengguna membutuhkan akses ke bucket Amazon S3. Untuk membatasi izin menggunakan kebijakan bucket Amazon S3, [lihat Kebijakan Bucket untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) di Panduan Pengguna Layanan Penyimpanan *Sederhana Amazon*.

## Sintaks
<a name="r_UNLOAD-synopsis"></a>

```
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option, ...] 

where authorization is
IAM_ROLE { default | 'arn:aws:iam::<Akun AWS-id-1>:role/<role-name>[,arn:aws:iam::<Akun AWS-id-2>:role/<role-name>][,...]' }
            
where option is
| [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| EXTENSION 'extension-name'
```

## Parameter
<a name="unload-parameters"></a>

('*pilih-pernyataan*')   
Kueri SELECT. Hasil kueri dibongkar. Dalam kebanyakan kasus, ada baiknya membongkar data dalam urutan yang diurutkan dengan menentukan klausa ORDER BY dalam kueri. Pendekatan ini menghemat waktu yang diperlukan untuk mengurutkan data saat dimuat ulang.   
Kueri harus dilampirkan dalam tanda kutip tunggal seperti yang ditunjukkan berikut:   

```
('select * from venue order by venueid')
```
Jika kueri Anda berisi tanda kutip (misalnya untuk melampirkan nilai literal), letakkan literal di antara dua set tanda kutip tunggal—Anda juga harus melampirkan kueri di antara tanda kutip tunggal:   

```
('select * from venue where venuestate=''NV''')
```

*KE 's3://jalur-objek/nama-awalan '*   
Jalur lengkap, termasuk nama bucket, ke lokasi di Amazon S3 tempat Amazon Redshift menulis objek file keluaran, termasuk file manifes jika MANIFEST ditentukan. Nama objek diawali dengan *nama-awalan*. Jika Anda menggunakan`PARTITION BY`, garis miring maju (/) secara otomatis ditambahkan ke akhir nilai *nama-awalan* jika diperlukan. Untuk keamanan tambahan, UNLOAD terhubung ke Amazon S3 menggunakan koneksi HTTPS. Secara default, UNLOAD menulis satu atau lebih file per irisan. UNLOAD menambahkan nomor irisan dan nomor bagian ke awalan nama yang ditentukan sebagai berikut:  
`<object-path>/<name-prefix><slice-number>_part_<part-number>`.   
Jika MANIFEST ditentukan, file manifes ditulis sebagai berikut:  
`<object_path>/<name_prefix>manifest`.   
Jika PARALLEL ditentukan OFF, file data ditulis sebagai berikut:  
`<object_path>/<name_prefix><part-number>`.   
UNLOAD secara otomatis membuat file terenkripsi menggunakan enkripsi sisi server Amazon S3 (SSE), termasuk file manifes jika MANIFEST digunakan. Perintah COPY secara otomatis membaca file terenkripsi sisi server selama operasi pemuatan. Anda dapat mengunduh file terenkripsi sisi server secara transparan dari bucket menggunakan konsol Amazon S3 atau API. Untuk informasi selengkapnya, lihat [ Melindungi Data Menggunakan Enkripsi Sisi Server](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).   
REGION diperlukan jika bucket Amazon S3 tidak Wilayah AWS sama dengan database Amazon Redshift. 

*otorisasi*  
Perintah UNLOAD memerlukan otorisasi untuk menulis data ke Amazon S3. Perintah UNLOAD menggunakan parameter yang sama yang digunakan perintah COPY untuk otorisasi. Untuk informasi selengkapnya, lihat [Parameter otorisasi](copy-parameters-authorization.md) di referensi sintaks perintah COPY.

IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '*<Akun AWS-id-1>**<role-name>*   <a name="unload-iam"></a>
Gunakan kata kunci default agar Amazon Redshift menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster saat perintah UNLOAD berjalan.  
Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Jika Anda menentukan IAM\$1ROLE, Anda tidak dapat menggunakan ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN, atau CREDENTIALS. IAM\$1ROLE dapat dirantai. Untuk informasi selengkapnya, lihat [Merantai peran IAM di Panduan](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles) Manajemen *Pergeseran Merah Amazon*.

[FORMAT [SEBAGAI]] CSV \$1 PARKET \$1 JSON  <a name="unload-csv"></a>
Kata kunci untuk menentukan format bongkar untuk mengganti format default.   
Saat CSV, bongkar ke file teks dalam format CSV menggunakan karakter koma (,) sebagai pembatas default. Jika bidang berisi pembatas, tanda kutip ganda, karakter baris baru, atau pengembalian carriage, maka bidang dalam file yang dibongkar diapit tanda kutip ganda. Tanda kutip ganda dalam bidang data diloloskan oleh tanda kutip ganda tambahan. Saat nol baris dibongkar, Amazon Redshift mungkin menulis objek Amazon S3 kosong.  
Saat PARQUET, bongkar ke file dalam format Apache Parquet versi 1.0. Secara default, setiap grup baris dikompresi menggunakan kompresi SNAPPY. [Untuk informasi lebih lanjut tentang format Parket Apache, lihat Parket.](https://parquet.apache.org/)   
Saat JSON, bongkar ke file JSON dengan setiap baris berisi objek JSON, mewakili catatan lengkap dalam hasil kueri. Amazon Redshift mendukung penulisan JSON bersarang saat hasil kueri berisi kolom SUPER. Untuk membuat objek JSON yang valid, nama setiap kolom dalam kueri harus unik. Dalam file JSON, nilai boolean diturunkan sebagai `t` atau`f`, dan nilai NULL diturunkan sebagai. `null` Saat nol baris dibongkar, Amazon Redshift tidak menulis objek Amazon S3.  
Kata kunci FORMAT dan AS bersifat opsional. Anda tidak dapat menggunakan CSV dengan ESCAPE, FIXEDWIDTH, atau ADDQUOTES. Anda tidak dapat menggunakan PARQUET dengan DELIMITER, FIXEDWIDTH, ADDQUOTES, ESCAPE, NULL AS, HEADER, GZIP, atau ZSTD. BZIP2 PARQUET dengan ENCRYPTED hanya didukung dengan enkripsi sisi server dengan kunci (SSE-KMS). AWS Key Management Service Anda tidak dapat menggunakan JSON dengan DELIMITER, HEADER, FIXEDWIDTH, ADDQUOTES, ESCAPE, atau NULL AS.

PARTISI OLEH (*column\$1name* [,...]) [TERMASUK]  <a name="unload-partitionby"></a>
Menentukan kunci partisi untuk operasi bongkar. UNLOAD secara otomatis mempartisi file output ke dalam folder partisi berdasarkan nilai kunci partisi, mengikuti konvensi Apache Hive. Misalnya, file Parket milik tahun partisi 2019 dan bulan September memiliki awalan berikut:. `s3://amzn-s3-demo-bucket/my_prefix/year=2019/month=September/000.parquet`   
Nilai untuk *column\$1name* harus berupa kolom dalam hasil kueri yang dibongkar.   
Jika Anda menentukan PARTITION BY dengan opsi INCLUDE, kolom partisi tidak dihapus dari file yang dibongkar.   
Amazon Redshift tidak mendukung literal string di klausa PARTITION BY.

MANIFES [BERTELE-TELE]  
Membuat file manifes yang secara eksplisit mencantumkan detail untuk file data yang dibuat oleh proses UNLOAD. Manifes adalah file teks dalam format JSON yang mencantumkan URL setiap file yang ditulis ke Amazon S3.   
Jika MANIFEST ditentukan dengan opsi VERBOSE, manifes mencakup rincian berikut:   
+ Nama kolom dan tipe data, dan untuk tipe data CHAR, VARCHAR, atau NUMERIK, dimensi untuk setiap kolom. Untuk tipe data CHAR dan VARCHAR, dimensinya adalah panjangnya. Untuk tipe data DECIMAL atau NUMERIK, dimensinya presisi dan skala. 
+ Jumlah baris diturunkan ke setiap file. Jika opsi HEADER ditentukan, jumlah baris termasuk baris header. 
+ Ukuran file total dari semua file yang dibongkar dan jumlah baris total diturunkan ke semua file. Jika opsi HEADER ditentukan, jumlah baris termasuk baris header. 
+ Penulis. Penulis selalu “Amazon Redshift”.
Anda dapat menentukan VERBOSE hanya mengikuti MANIFEST.   
File manifes ditulis ke awalan jalur Amazon S3 yang sama dengan file bongkar muat dalam format. `<object_path_prefix>manifest` Misalnya, jika UNLOAD menentukan awalan jalur Amazon S3 '', lokasi file manifes adalah `s3://amzn-s3-demo-bucket/venue_` ''. `s3://amzn-s3-demo-bucket/venue_manifest`

HEADER  
Menambahkan baris header yang berisi nama kolom di bagian atas setiap file output. Opsi transformasi teks, seperti CSV, DELIMITER, ADDQUOTES, dan ESCAPE, juga berlaku untuk baris header. Anda tidak dapat menggunakan HEADER dengan FIXEDWIDTH.

*PEMBATAS SEBAGAI 'delimiter\$1character'*   
Menentukan karakter ASCII tunggal yang digunakan untuk memisahkan bidang dalam file output, seperti karakter pipa (\$1), koma (,), atau tab (\$1 t). Pembatas default untuk file teks adalah karakter pipa. Pembatas default untuk file CSV adalah karakter koma. Kata kunci AS adalah opsional. Anda tidak dapat menggunakan DELIMITER dengan FIXEDWIDTH. Jika data berisi karakter pembatas, Anda perlu menentukan opsi ESCAPE untuk keluar dari pembatas, atau gunakan ADDQUOTES untuk melampirkan data dalam tanda kutip ganda. Atau, tentukan pembatas yang tidak terkandung dalam data.

*FIXEDWIDTH 'fixedwidth\$1spec'*   
Membongkar data ke file di mana setiap lebar kolom adalah panjang tetap, bukan dipisahkan oleh pembatas. *Fixedwidth\$1spec* adalah string yang menentukan jumlah kolom dan lebar kolom. Kata kunci AS adalah opsional. Karena FIXEDWIDTH tidak memotong data, spesifikasi untuk setiap kolom dalam pernyataan UNLOAD harus setidaknya sepanjang panjang entri terpanjang untuk kolom itu. Format untuk *fixedwidth\$1spec* ditunjukkan di bawah ini:   

```
'colID1:colWidth1,colID2:colWidth2, ...'
```
Anda tidak dapat menggunakan FIXEDWIDTH dengan DELIMITER atau HEADER.

TERENKRIPSI [OTOMATIS]  <a name="unload-parameters-encrypted"></a>
Menentukan bahwa file output di Amazon S3 dienkripsi menggunakan enkripsi sisi server Amazon S3. Jika MANIFEST ditentukan, file manifes juga dienkripsi. Untuk informasi selengkapnya, lihat [Membongkar file data terenkripsi](t_unloading_encrypted_files.md). Jika Anda tidak menentukan parameter ENCRYPTED, UNLOAD secara otomatis membuat file terenkripsi menggunakan enkripsi sisi server Amazon S3 dengan kunci enkripsi -managed (SSE-S3). AWS  
Untuk ENCRYPTED, Anda mungkin ingin membongkar ke Amazon S3 menggunakan enkripsi sisi server dengan kunci (SSE-KMS). AWS KMS Jika demikian, gunakan [KMS_KEY_ID](#unload-parameters-kms-key-id) parameter untuk memberikan ID kunci. Anda tidak dapat menggunakan [Menggunakan parameter CREDENTIALS](copy-parameters-authorization.md#copy-credentials) parameter dengan parameter KMS\$1KEY\$1ID. Jika Anda menjalankan perintah UNLOAD untuk data menggunakan KMS\$1KEY\$1ID, Anda kemudian dapat melakukan operasi COPY untuk data yang sama tanpa menentukan kunci.   
Jika ENCRYPTED AUTO digunakan, perintah UNLOAD akan mengambil kunci AWS KMS enkripsi default pada properti bucket Amazon S3 target dan mengenkripsi file yang ditulis ke Amazon S3 dengan kunci tersebut. AWS KMS Jika bucket tidak memiliki kunci AWS KMS enkripsi default, UNLOAD secara otomatis membuat file terenkripsi menggunakan enkripsi sisi server Amazon Redshift dengan kunci enkripsi -managed (SSE-S3). AWS Anda tidak dapat menggunakan opsi ini dengan KMS\$1KEY\$1ID, MASTER\$1SYMMETRIC\$1KEY, atau CREDENTIALS yang berisi master\$1symmetric\$1key. 

*KMS\$1KEY\$1ID 'id kunci'*  <a name="unload-parameters-kms-key-id"></a>
Menentukan ID kunci untuk kunci AWS Key Management Service (AWS KMS) yang akan digunakan untuk mengenkripsi file data di Amazon S3. Untuk informasi lebih lanjut, lihat [Apa itu AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) Jika Anda menentukan KMS\$1KEY\$1ID, Anda harus menentukan parameter juga. [ENCRYPTED](#unload-parameters-encrypted) Jika Anda menentukan KMS\$1KEY\$1ID, Anda tidak dapat mengautentikasi menggunakan parameter CREDENTIALS. Sebaliknya, gunakan salah satu [Menggunakan parameter IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) atau[Menggunakan parameter ACCESS\$1KEY\$1ID dan SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id). 

BZIP2   
Membongkar data ke satu atau lebih file terkompresi bzip2 per irisan. Setiap file yang dihasilkan ditambahkan dengan `.bz2` ekstensi. 

GZIP   
Membongkar data ke satu atau lebih file terkompresi gzip per irisan. Setiap file yang dihasilkan ditambahkan dengan `.gz` ekstensi. 

ZSTD   
Membongkar data ke satu atau lebih file terkompresi ZStandar per irisan. Setiap file yang dihasilkan ditambahkan dengan `.zst` ekstensi. 

ADDQUOTES   
Menempatkan tanda kutip di sekitar setiap bidang data yang dibongkar, sehingga Amazon Redshift dapat membongkar nilai data yang berisi pembatas itu sendiri. Misalnya, jika pembatas adalah koma, Anda dapat membongkar dan memuat ulang data berikut dengan sukses:   

```
 "1","Hello, World" 
```
Tanpa tanda kutip tambahan, string `Hello, World` akan diurai sebagai dua bidang terpisah.  
Beberapa format output tidak mendukung ADDQUOTES.  
Jika Anda menggunakan ADDQUOTES, Anda harus menentukan REMOVEQUOTES di COPY jika Anda memuat ulang data.

NULL SEBAGAI '*null-string*'   
Menentukan string yang merupakan nilai null dalam membongkar file. Jika opsi ini digunakan, semua file output berisi string yang ditentukan sebagai pengganti nilai nol yang ditemukan dalam data yang dipilih. Jika opsi ini tidak ditentukan, nilai null diturunkan sebagai:   
+ String dengan panjang nol untuk output yang dibatasi 
+ String spasi putih untuk keluaran dengan lebar tetap
Jika string null ditentukan untuk pembongkaran lebar tetap dan lebar kolom keluaran kurang dari lebar string nol, perilaku berikut terjadi:   
+ Bidang kosong adalah output untuk kolom non-karakter 
+ Kesalahan dilaporkan untuk kolom karakter 
Tidak seperti tipe data lain di mana string yang ditentukan pengguna mewakili nilai nol, Amazon Redshift mengekspor kolom data SUPER menggunakan format JSON dan merepresentasikannya sebagai null sebagaimana ditentukan oleh format JSON. Akibatnya, kolom data SUPER mengabaikan opsi NULL [AS] yang digunakan dalam perintah UNLOAD.

MELARIKAN DIRI   
Untuk kolom CHAR dan VARCHAR dalam file unload yang dibatasi, karakter escape (`\`) ditempatkan sebelum setiap kemunculan karakter berikut:  
+ Linefeed: `\n`
+ Pengembalian kereta: `\r`
+ Karakter pembatas ditentukan untuk data yang dibongkar. 
+ Karakter melarikan diri: `\`
+ Karakter tanda kutip: `"` atau `'` (jika ESCAPE dan ADDQUOTES ditentukan dalam perintah UNLOAD).
Jika Anda memuat data Anda menggunakan COPY dengan opsi ESCAPE, Anda juga harus menentukan opsi ESCAPE dengan perintah UNLOAD Anda untuk menghasilkan file output timbal balik. Demikian pula, jika Anda BONGKAR menggunakan opsi ESCAPE, Anda perlu menggunakan ESCAPE saat Anda MENYALIN data yang sama.

ALLOWOVERWRITE   <a name="allowoverwrite"></a>
Secara default, UNLOAD gagal jika menemukan file yang mungkin akan ditimpa. Jika ALLOWOVERWRITE ditentukan, UNLOAD menimpa file yang ada, termasuk file manifes. 

JALAN BERSIH  <a name="cleanpath"></a>
Opsi CLEANPATH menghapus file yang ada yang terletak di jalur Amazon S3 yang ditentukan dalam klausa TO sebelum membongkar file ke lokasi yang ditentukan.   
Jika Anda menyertakan klausa PARTITION BY, file yang ada dihapus hanya dari folder partisi untuk menerima file baru yang dihasilkan oleh operasi UNLOAD.  
Anda harus memiliki `s3:DeleteObject` izin di ember Amazon S3. Untuk selengkapnya, lihat [Kebijakan dan Izin di Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) S3 di Panduan Pengguna *Layanan Penyimpanan Sederhana Amazon*. File yang Anda hapus dengan menggunakan opsi CLEANPATH dihapus secara permanen dan tidak dapat dipulihkan. Jika bucket Amazon S3 target mengaktifkan versi, BONGKAR dengan opsi CLEANPATH tidak akan menghapus versi file sebelumnya.  
Anda tidak dapat menentukan opsi CLEANPATH jika Anda menentukan opsi ALLOWOVERWRITE.

PARALEL   <a name="unload-parallel"></a>
Secara default, UNLOAD menulis data secara paralel dengan beberapa file, sesuai dengan jumlah irisan dalam cluster. Opsi default adalah ON atau TRUE. Jika PARALLEL OFF atau FALSE, UNLOAD menulis ke satu atau lebih file data secara serial, diurutkan secara mutlak sesuai dengan klausa ORDER BY, jika digunakan. Ukuran maksimum untuk file data adalah 6,2 GB. Jadi, misalnya, jika Anda membongkar 13, 4 GB data, UNLOAD membuat tiga file berikut.  

```
s3://amzn-s3-demo-bucket/key000    6.2 GB
s3://amzn-s3-demo-bucket/key001    6.2 GB
s3://amzn-s3-demo-bucket/key002    1.0 GB
```
Perintah UNLOAD dirancang untuk menggunakan pemrosesan paralel. Sebaiknya biarkan PARALLEL diaktifkan untuk sebagian besar kasus, terutama jika file digunakan untuk memuat tabel menggunakan perintah COPY.

MAXFILESIZE [AS] ukuran maks [MB \$1 GB]   <a name="unload-maxfilesize"></a>
Menentukan ukuran maksimum file yang dibuat UNLOAD di Amazon S3. Tentukan nilai desimal antara 5 MB dan 6,2 GB. Kata kunci AS adalah opsional. Unit defaultnya adalah MB. Jika MAXFILESIZE tidak ditentukan, ukuran file maksimum default adalah 6,2 GB. Ukuran file manifes, jika digunakan, tidak terpengaruh oleh MAXFILESIZE.

ROWGROUPSIZE [AS] ukuran [MB \$1 GB]   <a name="unload-rowgroupsize"></a>
Menentukan ukuran kelompok baris. Memilih ukuran yang lebih besar dapat mengurangi jumlah kelompok baris, mengurangi jumlah komunikasi jaringan. Tentukan nilai integer antara 32 MB dan 128 MB. Kata kunci AS adalah opsional. Unit defaultnya adalah MB.  
Jika ROWGROUPSIZE tidak ditentukan, ukuran default adalah 32 MB. Untuk menggunakan parameter ini, format penyimpanan harus Parket dan tipe node harus ra3.4xlarge, ra3.16xlarge, atau dc2.8xlarge.

WILAYAH [AS] '*aws-region*'  <a name="unload-region"></a>
Menentukan Wilayah AWS lokasi bucket Amazon S3 target berada. REGION diperlukan untuk UNLOAD ke bucket Amazon S3 yang tidak Wilayah AWS sama dengan database Amazon Redshift.   
Nilai untuk *aws\$1region* harus cocok dengan AWS Region yang tercantum di wilayah [Amazon Redshift dan tabel titik akhir di](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region). *Referensi Umum AWS*  
Secara default, UNLOAD mengasumsikan bahwa bucket Amazon S3 target terletak Wilayah AWS sama dengan database Amazon Redshift.

EKSTENSI 'nama *ekstensi'*  <a name="unload-extension"></a>
Menentukan ekstensi file untuk ditambahkan ke nama-nama file yang dibongkar. Amazon Redshift tidak menjalankan validasi apa pun, jadi Anda harus memverifikasi bahwa ekstensi file yang ditentukan sudah benar. Jika Anda menentukan metode kompresi tanpa memberikan ekstensi, Amazon Redshift hanya menambahkan ekstensi metode kompresi ke nama file. Jika Anda tidak memberikan ekstensi apa pun dan tidak menentukan metode kompresi, Amazon Redshift tidak menambahkan apa pun ke nama file. 

## Catatan penggunaan
<a name="unload-usage-notes"></a>

### Menggunakan ESCAPE untuk semua operasi UNLOAD teks yang dibatasi
<a name="unload-usage-escape"></a>

Saat Anda MEMBONGKAR menggunakan pembatas, data Anda dapat menyertakan pembatas tersebut atau salah satu karakter yang tercantum dalam deskripsi opsi ESCAPE. Dalam hal ini, Anda harus menggunakan opsi ESCAPE dengan pernyataan UNLOAD. Jika Anda tidak menggunakan opsi ESCAPE dengan UNLOAD, operasi COPY berikutnya menggunakan data yang dibongkar mungkin gagal.

**penting**  
Kami sangat menyarankan agar Anda selalu menggunakan ESCAPE dengan pernyataan UNLOAD dan COPY. Pengecualiannya adalah jika Anda yakin bahwa data Anda tidak mengandung pembatas atau karakter lain yang mungkin perlu diloloskan. 

### Hilangnya presisi floating-point
<a name="unload-usage-floating-point-precision"></a>

Anda mungkin mengalami kehilangan presisi untuk data floating-point yang berturut-turut diturunkan dan dimuat ulang. 

### Batasi klausa
<a name="unload-usage-limit-clause"></a>

Kueri SELECT tidak dapat menggunakan klausa LIMIT di SELECT luar. Misalnya, pernyataan UNLOAD berikut gagal.

```
unload ('select * from venue limit 10')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Sebagai gantinya, gunakan klausa LIMIT bersarang, seperti pada contoh berikut.

```
unload ('select * from venue where venueid in
(select venueid from venue order by venueid desc limit 10)')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Anda juga dapat mengisi tabel menggunakan SELECT... INTO atau CREATE TABLE AS menggunakan klausa LIMIT, lalu bongkar dari tabel itu.

### Membongkar kolom tipe data GEOMETRY
<a name="unload-usage-geometry"></a>

Anda hanya dapat membongkar kolom GEOMETRI ke teks atau format CSV. Anda tidak dapat membongkar data GEOMETRI dengan opsi. `FIXEDWIDTH` Data dibongkar dalam bentuk heksadesimal dari format biner terkenal (EWKB) yang diperluas. Jika ukuran data EWKB lebih dari 4 MB, maka peringatan terjadi karena data nantinya tidak dapat dimuat ke dalam tabel. 

### Membongkar tipe data HLLSKETCH
<a name="unload-usage-hll"></a>

Anda hanya dapat membongkar kolom HLLSKETCH ke teks atau format CSV. Anda tidak dapat membongkar data HLLSKETCH dengan opsi. `FIXEDWIDTH` Data diturunkan dalam format Base64 untuk sketsa padat atau dalam format JSON untuk HyperLogLog sketsa jarang. HyperLogLog Untuk informasi selengkapnya, lihat [HyperLogLog fungsi](hyperloglog-functions.md).

Contoh berikut mengekspor tabel yang berisi kolom HLLSKETCH ke dalam file.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

UNLOAD ('select * from hll_table') TO 's3://amzn-s3-demo-bucket/unload/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' ALLOWOVERWRITE CSV;
```

### Membongkar kolom tipe data VARBYTE
<a name="unload-usage-varbyte"></a>

Anda hanya dapat membongkar kolom VARBYTE ke teks atau format CSV. Data dibongkar dalam bentuk heksadesimal. Anda tidak dapat membongkar data VARBYTE dengan opsi. `FIXEDWIDTH` `ADDQUOTES`Opsi UNLOAD ke CSV tidak didukung. Kolom VARBYTE tidak bisa menjadi kolom PARTITIONED BY. 

### Klausul FORMAT AS PARQUET
<a name="unload-parquet-usage"></a>

Waspadai pertimbangan ini saat menggunakan FORMAT AS PARQUET:
+ Bongkar ke Parket tidak menggunakan kompresi level file. Setiap grup baris dikompresi dengan SNAPPY.
+ Jika MAXFILESIZE tidak ditentukan, ukuran file maksimum default adalah 6,2 GB. Anda dapat menggunakan MAXFILESIZE untuk menentukan ukuran file 5 MB—6,2 GB. Ukuran file sebenarnya diperkirakan saat file sedang ditulis, jadi mungkin tidak persis sama dengan nomor yang Anda tentukan.

  Untuk memaksimalkan kinerja pemindaian, Amazon Redshift mencoba membuat file Parket yang berisi grup baris 32-MB berukuran sama. Nilai MAXFILESIZE yang Anda tentukan secara otomatis dibulatkan ke kelipatan terdekat 32 MB. Misalnya, jika Anda menentukan MAXFILESIZE 200 MB, maka setiap file Parket yang dibongkar kira-kira 192 MB (32 MB grup baris x 6 = 192 MB).
+ Jika kolom menggunakan format data TIMESTAMPTZ, hanya nilai stempel waktu yang diturunkan. Informasi zona waktu tidak dibongkar.
+ Jangan tentukan awalan nama file yang dimulai dengan karakter underscore (\$1) atau period (.). Redshift Spectrum memperlakukan file yang dimulai dengan karakter ini sebagai file tersembunyi dan mengabaikannya.

### PARTISI DENGAN klausa
<a name="unload-partitionby-usage"></a>

Waspadai pertimbangan ini saat menggunakan PARTITION BY:
+ Kolom partisi tidak termasuk dalam file output.
+ Pastikan untuk menyertakan kolom partisi dalam kueri SELECT yang digunakan dalam pernyataan UNLOAD. Anda dapat menentukan sejumlah kolom partisi dalam perintah UNLOAD. Namun, ada batasan bahwa harus ada setidaknya satu kolom nonpartisi untuk menjadi bagian dari file.
+ Jika nilai kunci partisi adalah null, Amazon Redshift secara otomatis membongkar data tersebut ke partisi default yang disebut. `partition_column=__HIVE_DEFAULT_PARTITION__` 
+ Perintah UNLOAD tidak membuat panggilan apa pun ke katalog eksternal. Untuk mendaftarkan partisi baru Anda untuk menjadi bagian dari tabel eksternal yang ada, gunakan ALTER TABLE terpisah... TAMBAHKAN PARTISI... perintah. Atau Anda dapat menjalankan perintah CREATE EXTERNAL TABLE untuk mendaftarkan data yang dibongkar sebagai tabel eksternal baru. Anda juga dapat menggunakan AWS Glue crawler untuk mengisi Katalog Data Anda. Untuk informasi selengkapnya, lihat [Mendefinisikan Crawler](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) di Panduan *AWS Glue Pengembang*. 
+ Jika Anda menggunakan opsi MANIFEST, Amazon Redshift hanya menghasilkan satu file manifes di folder Amazon S3 root.
+ Tipe data kolom yang dapat Anda gunakan sebagai kunci partisi adalah SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, BOOLEAN, CHAR, VARCHAR, DATE, dan TIMESTAMP. 

### Menggunakan hak istimewa ASSUMEROLE untuk memberikan akses ke peran IAM untuk operasi UNLOAD
<a name="unload-assumerole-privilege-usage"></a>

Untuk menyediakan akses bagi pengguna dan grup tertentu ke peran IAM untuk operasi UNLOAD, pengguna super dapat memberikan hak istimewa ASSUMEROLE pada peran IAM kepada pengguna dan grup. Untuk informasi, lihat [HIBAH](r_GRANT.md). 

### UNLOAD tidak mendukung alias jalur akses Amazon S3
<a name="unload-usage-s3-access-point-alias"></a>

Anda tidak dapat menggunakan alias jalur akses Amazon S3 dengan perintah UNLOAD. 

## Contoh
<a name="r_UNLOAD-examples"></a>

Untuk contoh yang menunjukkan cara menggunakan perintah UNLOAD, lihat[Contoh BONGKAR](r_UNLOAD_command_examples.md).

# Contoh BONGKAR
<a name="r_UNLOAD_command_examples"></a>

Contoh-contoh ini menunjukkan berbagai parameter perintah UNLOAD. Data sampel TICKIT digunakan dalam banyak contoh. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

**catatan**  
Contoh-contoh ini berisi jeda baris untuk keterbacaan. Jangan sertakan jeda baris atau spasi dalam string *credentials-args* Anda.

## Bongkar VENUE ke file yang dibatasi pipa (pembatas default)
<a name="unload-examples-venue"></a>

Contoh berikut membongkar tabel VENUE dan menulis data ke`s3://amzn-s3-demo-bucket/unload/`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Secara default, UNLOAD menulis satu atau lebih file per irisan. Dengan asumsi cluster dua simpul dengan dua irisan per node, contoh sebelumnya membuat file-file ini di: `amzn-s3-demo-bucket`

```
unload/0000_part_00
unload/0001_part_00
unload/0002_part_00
unload/0003_part_00
```

Untuk membedakan file output dengan lebih baik, Anda dapat menyertakan awalan di lokasi. Contoh berikut membongkar tabel VENUE dan menulis data ke`s3://amzn-s3-demo-bucket/unload/venue_pipe_`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Hasilnya adalah keempat file ini di `unload` folder, sekali lagi dengan asumsi empat irisan.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Bongkar tabel LINEITEM ke file Parket yang dipartisi
<a name="unload-examples-partitioned-parquet"></a>

Contoh berikut membongkar tabel LINEITEM dalam format Parket, dipartisi oleh kolom. `l_shipdate` 

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
```

Dengan asumsi empat irisan, file Parket yang dihasilkan secara dinamis dipartisi ke dalam berbagai folder. 

```
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
...
```

**catatan**  
Dalam beberapa kasus, perintah UNLOAD menggunakan opsi INCLUDE seperti yang ditunjukkan dalam pernyataan SQL berikut.   

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate) INCLUDE;
```
Dalam kasus ini, `l_shipdate` kolom juga ada dalam data dalam file Parket. Jika tidak, data `l_shipdate` kolom tidak ada di file Parket.

## Bongkar tabel VENUE ke file JSON
<a name="unload-examples-json"></a>

Contoh berikut membongkar tabel VENUE dan menulis data dalam format JSON ke. `s3://amzn-s3-demo-bucket/unload/`

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON;
```

Berikut ini adalah contoh baris dari tabel VENUE.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Setelah bongkar ke JSON, format file mirip dengan yang berikut ini.

```
{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0}
{"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0}
{"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}
```

## Bongkar VENUE ke file CSV
<a name="unload-examples-csv"></a>

Contoh berikut membongkar tabel VENUE dan menulis data dalam format CSV ke. `s3://amzn-s3-demo-bucket/unload/`

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV;
```

Misalkan tabel VENUE berisi baris berikut.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

File bongkar terlihat mirip dengan yang berikut ini.

```
1,Pinewood Racetrack,Akron,OH,0
2,"Columbus ""Crew"" Stadium",Columbus,OH,0
4,"Community, Ballpark, Arena",Kansas City,KS,0
```

## Bongkar VENUE ke file CSV menggunakan pembatas
<a name="unload-examples-csv-delimiter"></a>

Contoh berikut membongkar tabel VENUE dan menulis data dalam format CSV menggunakan karakter pipa (\$1) sebagai pembatas. File yang dibongkar ditulis ke`s3://amzn-s3-demo-bucket/unload/`. Tabel VENUE dalam contoh ini berisi karakter pipa dalam nilai baris pertama (`Pinewood Race|track`). Hal ini dilakukan untuk menunjukkan bahwa nilai dalam hasil terlampir dalam tanda kutip ganda. Tanda kutip ganda diloloskan oleh tanda kutip ganda, dan seluruh bidang diapit tanda kutip ganda. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV DELIMITER AS '|';
```

Misalkan tabel VENUE berisi baris berikut.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-------------
      1 | Pinewood Race|track        | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

File bongkar terlihat mirip dengan yang berikut ini.

```
1|"Pinewood Race|track"|Akron|OH|0
2|"Columbus ""Crew"" Stadium"|Columbus|OH|0
4|Community, Ballpark, Arena|Kansas City|KS|0
```

## Bongkar VENUE dengan file manifes
<a name="unload-examples-manifest"></a>

Untuk membuat file manifes, sertakan opsi MANIFEST. Contoh berikut membongkar tabel VENUE dan menulis file manifes bersama dengan file data ke s3://amzn-s3-demo-bucket/venue\$1pipe\$1: 

**penting**  
Jika Anda membongkar file dengan opsi MANIFEST, Anda harus menggunakan opsi MANIFEST dengan perintah COPY saat Anda memuat file. Jika Anda menggunakan awalan yang sama untuk memuat file dan tidak menentukan opsi MANIFEST, COPY gagal karena mengasumsikan file manifes adalah file data.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

Hasilnya adalah lima file ini:

```
s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00
s3://amzn-s3-demo-bucket/venue_pipe_manifest
```

Berikut ini menunjukkan isi dari file manifes. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

## Bongkar VENUE dengan MANIFEST VERBOSE
<a name="unload-examples-manifest-verbose"></a>

Saat Anda menentukan opsi MANIFEST VERBOSE, file manifes menyertakan bagian berikut: 
+ `entries`Bagian ini mencantumkan jalur Amazon S3, ukuran file, dan jumlah baris untuk setiap file. 
+ `schema`Bagian ini mencantumkan nama kolom, tipe data, dan dimensi untuk setiap kolom. 
+ `meta`Bagian ini menunjukkan ukuran file total dan jumlah baris untuk semua file. 

Contoh berikut membongkar tabel VENUE menggunakan opsi MANIFEST VERBOSE. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload_venue_folder/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest verbose;
```

Berikut ini menunjukkan isi dari file manifes.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }}
  ],
  "schema": {
    "elements": [
      {"name": "venueid", "type": { "base": "integer" }},
      {"name": "venuename", "type": { "base": "character varying", 25 }},
      {"name": "venuecity", "type": { "base": "character varying", 25 }},
      {"name": "venuestate", "type": { "base": "character varying", 25 }},
      {"name": "venueseats", "type": { "base": "character varying", 25 }}
    ]
  },
  "meta": {
    "content_length": 129178,
    "record_count": 55
  },
  "author": {
    "name": "Amazon Redshift",
    "version": "1.0.0"
  }
}
```

## Bongkar VENUE dengan header
<a name="unload-examples-header"></a>

Contoh berikut membongkar VENUE dengan baris header.

```
unload ('select * from venue where venueseats > 75000')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;
```

Berikut ini menunjukkan isi dari file output dengan baris header.

```
venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451
```

## Bongkar VENUE ke file yang lebih kecil
<a name="unload-examples-maxfilesize"></a>

Secara default, ukuran file maksimum adalah 6, 2 GB. Jika data bongkar lebih besar dari 6,2 GB, UNLOAD membuat file baru untuk setiap segmen data 6,2 GB. Untuk membuat file yang lebih kecil, sertakan parameter MAXFILESIZE. Dengan asumsi ukuran data dalam contoh sebelumnya adalah 20 GB, perintah UNLOAD berikut membuat 20 file, masing-masing berukuran 1 GB.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
maxfilesize 1 gb;
```

## Bongkar VENUE secara serial
<a name="unload-examples-serial"></a>

Untuk membongkar secara serial, tentukan PARALLEL OFF. UNLOAD kemudian menulis satu file pada satu waktu, hingga maksimum 6,2 GB per file. 

Contoh berikut membongkar tabel VENUE dan menulis data secara serial ke. `s3://amzn-s3-demo-bucket/unload/` 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

Hasilnya adalah satu file bernama venue\$1serial\$1000. 

Jika data bongkar lebih besar dari 6,2 GB, UNLOAD membuat file baru untuk setiap segmen data 6,2 GB. Contoh berikut membongkar tabel LINEORDER dan menulis data secara serial ke. `s3://amzn-s3-demo-bucket/unload/` 

```
unload ('select * from lineorder')
to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off gzip;
```

Hasilnya adalah serangkaian file berikut.

```
lineorder_serial_0000.gz
lineorder_serial_0001.gz
lineorder_serial_0002.gz
lineorder_serial_0003.gz
```

Untuk membedakan file output dengan lebih baik, Anda dapat menyertakan awalan di lokasi. Contoh berikut membongkar tabel VENUE dan menulis data ke`s3://amzn-s3-demo-bucket/venue_pipe_`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Hasilnya adalah keempat file ini di `unload` folder, sekali lagi dengan asumsi empat irisan.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Muat VENUE dari file bongkar
<a name="unload-examples-load"></a>

Untuk memuat tabel dari satu set file bongkar muat, cukup balikkan proses dengan menggunakan perintah COPY. Contoh berikut membuat tabel baru, LOADVENUE, dan memuat tabel dari file data yang dibuat dalam contoh sebelumnya.

```
create table loadvenue (like venue);

copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Jika Anda menggunakan opsi MANIFEST untuk membuat file manifes dengan file bongkar muat, Anda dapat memuat data menggunakan file manifes yang sama. Anda melakukannya dengan perintah COPY dengan opsi MANIFEST. Contoh berikut memuat data menggunakan file manifes.

```
copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_pipe_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

## Bongkar VENUE ke file terenkripsi
<a name="unload-examples-unload-encrypted"></a>

Contoh berikut membongkar tabel VENUE ke satu set file terenkripsi menggunakan kunci. AWS KMS Jika Anda menentukan file manifes dengan opsi ENCRYPTED, file manifes juga dienkripsi. Untuk informasi selengkapnya, lihat [Membongkar file data terenkripsi](t_unloading_encrypted_files.md).

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_kms'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab'
manifest
encrypted;
```

Contoh berikut membongkar tabel VENUE ke satu set file terenkripsi menggunakan kunci simetris root. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
encrypted;
```

## Muat VENUE dari file terenkripsi
<a name="unload-examples-load-encrypted"></a>

Untuk memuat tabel dari sekumpulan file yang dibuat dengan menggunakan UNLOAD dengan opsi ENCRYPT, balikkan proses dengan menggunakan perintah COPY. Dengan perintah itu, gunakan opsi ENCRYPTED dan tentukan kunci simetris root yang sama yang digunakan untuk perintah UNLOAD. Contoh berikut memuat tabel LOADVENUE dari file data terenkripsi yang dibuat dalam contoh sebelumnya.

```
create table loadvenue (like venue);

copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
manifest
encrypted;
```

## Bongkar data VENUE ke file yang dibatasi tab
<a name="unload-examples-venue-tab"></a>

```
unload ('select venueid, venuename, venueseats from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

File data output terlihat seperti ini: 

```
1	Toyota Park	Bridgeview	IL	0
2	Columbus Crew Stadium	Columbus	OH	0
3	RFK Stadium	Washington	DC	0
4	CommunityAmerica Ballpark	Kansas City	KS	0
5	Gillette Stadium	Foxborough	MA	68756
...
```

## Bongkar VENUE ke file data dengan lebar tetap
<a name="unload-venue-fixed-width"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_fw_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';
```

File data output terlihat seperti berikut ini. 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
...
```

## Bongkar VENUE ke satu set file terkompresi GZIP yang dibatasi tab
<a name="unload-examples-venue-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t'
gzip;
```

## Bongkar VENUE ke file teks terkompresi GZIP
<a name="unload-examples-venue-extension-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
extension 'txt.gz'
gzip;
```

## Bongkar data yang berisi pembatas
<a name="unload-examples-delimiter"></a>

Contoh ini menggunakan opsi ADDQUOTES untuk membongkar data yang dibatasi koma di mana beberapa bidang data aktual berisi koma.

Pertama, buat tabel yang berisi tanda kutip.

```
create table location (id int, location char(64));

insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');
```

Kemudian, bongkar data menggunakan opsi ADDQUOTES.

```
unload ('select id, location from location')
to 's3://amzn-s3-demo-bucket/location_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',' addquotes;
```

File data yang dibongkar terlihat seperti ini: 

```
1,"Phoenix, AZ"
2,"San Diego, CA"
3,"Chicago, IL"
...
```

## Bongkar hasil kueri bergabung
<a name="unload-examples-join"></a>

Contoh berikut membongkar hasil query gabungan yang berisi fungsi jendela. 

```
unload ('select venuecity, venuestate, caldate, pricepaid,
sum(pricepaid) over(partition by venuecity, venuestate
order by caldate rows between 3 preceding and 3 following) as winsum
from sales join date on sales.dateid=date.dateid
join event on event.eventid=sales.eventid
join venue on event.venueid=venue.venueid
order by 1,2')
to 's3://amzn-s3-demo-bucket/tickit/winsum'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

File output terlihat seperti ini: 

```
Atlanta|GA|2008-01-04|363.00|1362.00
Atlanta|GA|2008-01-05|233.00|2030.00
Atlanta|GA|2008-01-06|310.00|3135.00
Atlanta|GA|2008-01-08|166.00|8338.00
Atlanta|GA|2008-01-11|268.00|7630.00
...
```

## Bongkar menggunakan NULL AS
<a name="unload-examples-null-as"></a>

UNLOAD mengeluarkan nilai null sebagai string kosong secara default. Contoh berikut menunjukkan bagaimana menggunakan NULL AS untuk menggantikan string teks untuk nulls.

Untuk contoh ini, kita menambahkan beberapa nilai null ke tabel VENUE.

```
update venue set venuestate = NULL
where venuecity = 'Cleveland';
```

Pilih dari VENUE di mana VENUESTATE adalah nol untuk memverifikasi bahwa kolom berisi NULL.

```
select * from venue where venuestate is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
```

Sekarang, BONGKAR tabel VENUE menggunakan opsi NULL AS untuk mengganti nilai null dengan string karakter ''. `fred` 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

Sampel berikut dari file bongkar menunjukkan bahwa nilai null diganti dengan. `fred` Ternyata beberapa nilai untuk VENUESEATS juga nol dan diganti dengan. `fred` Meskipun tipe data untuk VENUESEATS adalah bilangan bulat, UNLOAD mengonversi nilai menjadi teks dalam file bongkar muat, dan kemudian COPY mengonversinya kembali ke bilangan bulat. Jika Anda membongkar ke file dengan lebar tetap, string NULL AS tidak boleh lebih besar dari lebar bidang.

```
248|Charles Playhouse|Boston|MA|0
251|Paris Hotel|Las Vegas|NV|fred
258|Tropicana Hotel|Las Vegas|NV|fred
300|Kennedy Center Opera House|Washington|DC|0
306|Lyric Opera House|Baltimore|MD|0
308|Metropolitan Opera|New York City|NY|0
  5|Gillette Stadium|Foxborough|MA|5
 22|Quicken Loans Arena|Cleveland|fred|0
101|Progressive Field|Cleveland|fred|43345
...
```

Untuk memuat tabel dari file bongkar muat, gunakan perintah COPY dengan opsi NULL AS yang sama. 

**catatan**  
Jika Anda mencoba memuat null ke dalam kolom yang didefinisikan sebagai NOT NULL, perintah COPY gagal.

```
create table loadvenuenulls (like venue);

copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

Untuk memverifikasi bahwa kolom berisi null, bukan hanya string kosong, pilih dari LOADVENUENULLS dan filter untuk null.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |

...
```

Anda dapat MEMBONGKAR tabel yang berisi null menggunakan perilaku NULL AS default dan kemudian MENYALIN data kembali ke tabel menggunakan perilaku NULL AS default; namun, setiap bidang non-numerik dalam tabel target berisi string kosong, bukan nol. Secara default UNLOAD mengonversi nol menjadi string kosong (spasi putih atau panjang nol). COPY mengkonversi string kosong ke NULL untuk kolom numerik, tetapi menyisipkan string kosong ke kolom non-numerik. Contoh berikut menunjukkan cara melakukan UNLOAD diikuti oleh COPY menggunakan perilaku NULL AS default. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Dalam hal ini, ketika Anda memfilter untuk nol, hanya baris di mana VENUESEATS berisi nol. Dimana VENUESTATE berisi nol dalam tabel (VENUE), VENUESTATE dalam tabel target (LOADVENUENULLS) berisi string kosong.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
     251 | Paris Hotel              | Las Vegas | NV         |
...
```

Untuk memuat string kosong ke kolom non-numerik sebagai NULL, sertakan opsi EMTTYASNULL atau BLANKSASNULL. Tidak apa-apa untuk menggunakan keduanya.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;
```

Untuk memverifikasi bahwa kolom berisi NULL, bukan hanya spasi putih atau string kosong, pilih dari LOADVENUENULLS dan filter untuk null.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |
     ...
```

## Bongkar menggunakan parameter ALLOWOVERWRITE
<a name="unload-examples-allowoverwrite"></a>

Secara default, UNLOAD tidak menimpa file yang ada di bucket tujuan. Misalnya, jika Anda menjalankan pernyataan UNLOAD yang sama dua kali tanpa mengubah file di bucket tujuan, UNLOAD kedua gagal. Untuk menimpa file yang ada, termasuk file manifes, tentukan opsi ALLOWOVERWRITE.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest allowoverwrite;
```

## Bongkar tabel EVENT menggunakan parameter PARALLEL dan MANIFEST
<a name="unload-examples-manifest-parallel"></a>

Anda dapat MEMBONGKAR tabel secara paralel dan menghasilkan file manifes. File data Amazon S3 semuanya dibuat pada tingkat yang sama dan nama diberi akhiran dengan pola. `0000_part_00` File manifes berada pada tingkat folder yang sama dengan file data dan berakhiran dengan teks. `manifest` SQL berikut membongkar tabel EVENT dan membuat file dengan nama dasar `parallel`

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/parallel'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel on
manifest;
```

Daftar file Amazon S3 mirip dengan yang berikut ini.

```
 Name                       Last modified                        Size                  
 parallel0000_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB  
 parallel0001_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0002_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB
 parallel0003_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB
 parallel0004_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB
 parallel0005_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0006_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB
 parallel0007_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB
 parallelmanifest       -   August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B
```

Konten `parallelmanifest` file mirip dengan yang berikut ini.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }}
  ]
}
```

## Bongkar tabel EVENT menggunakan parameter PARALLEL OFF dan MANIFEST
<a name="unload-examples-manifest-serial"></a>

Anda dapat MEMBONGKAR tabel secara serial (PARALLEL OFF) dan menghasilkan file manifes. File data Amazon S3 semuanya dibuat pada tingkat yang sama dan nama diberi akhiran dengan pola. `0000` File manifes berada pada tingkat folder yang sama dengan file data dan berakhiran dengan teks. `manifest`

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/serial'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel off
manifest;
```

Daftar file Amazon S3 mirip dengan yang berikut ini.

```
 Name                       Last modified                        Size                  
 serial0000             -   August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB  
 serialmanifest         -   August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B
```

Konten `serialmanifest` file mirip dengan yang berikut ini.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }}
  ]
}
```

## Bongkar tabel EVENT menggunakan parameter PARTITION BY dan MANIFEST
<a name="unload-examples-manifest-partition"></a>

Anda dapat MEMBONGKAR tabel dengan partisi dan menghasilkan file manifes. Folder baru dibuat di Amazon S3 dengan folder partisi anak, dan file data di folder anak dengan pola nama yang mirip dengan. `0000_par_00` File manifes berada pada tingkat folder yang sama dengan folder anak dengan nama`manifest`.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/partition'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
partition by (eventname)
manifest;
```

Daftar file Amazon S3 mirip dengan yang berikut ini.

```
 Name                   Type     Last modified                        Size                  
 partition           	Folder
```

Dalam folder adalah `partition` folder anak dengan nama partisi dan file manifes. Berikut ini adalah bagian bawah daftar folder dalam `partition` folder, mirip dengan berikut ini.

```
 Name                   Type      Last modified                        Size                  
 ...
 eventname=Zucchero/    Folder 
 eventname=Zumanity/    Folder 
 eventname=ZZ Top/      Folder  
 manifest          	    -	    August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB
```

Dalam `eventname=Zucchero/` folder adalah file data yang mirip dengan yang berikut ini.

```
 Name               Last modified                        Size                  
 0000_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B
 0001_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B
 0002_part_00	-   August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B
 0004_part_00	-   August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B
 0006_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B
 0007_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B
```

Bagian bawah konten `manifest` file mirip dengan yang berikut ini.

```
{
  "entries": [
    ...
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }},
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }}
  ]
}
```

## Bongkar tabel EVENT menggunakan parameter MAXFILESIZE, ROWGROUPSIZE, dan MANIFEST
<a name="unload-examples-manifest-maxsize"></a>

Anda dapat MEMBONGKAR tabel secara paralel dan menghasilkan file manifes. File data Amazon S3 semuanya dibuat pada tingkat yang sama dan nama diberi akhiran dengan pola. `0000_part_00` File data Parket yang dihasilkan dibatasi hingga 256 MB dan ukuran grup baris 128 MB. File manifes berada pada tingkat folder yang sama dengan file data dan berakhiran dengan file. `manifest`

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/eventsize'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
maxfilesize 256 MB
rowgroupsize 128 MB
parallel on
parquet
manifest;
```

Daftar file Amazon S3 mirip dengan yang berikut ini.

```
 Name                            Type      Last modified                        Size 
 eventsize0000_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB
 eventsize0001_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0002_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB
 eventsize0003_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB
 eventsize0004_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB
 eventsize0005_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0006_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB
 eventsize0007_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB
 eventsizemanifest                 -       August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B
```

Konten `eventsizemanifest` file mirip dengan yang berikut ini.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }}
  ]
}
```

# UPDATE
<a name="r_UPDATE"></a>

**Topics**
+ [Sintaksis](#r_UPDATE-synopsis)
+ [Parameter](#r_UPDATE-parameters)
+ [Catatan penggunaan](#r_UPDATE_usage_notes)
+ [Contoh pernyataan UPDATE](c_Examples_of_UPDATE_statements.md)

Memperbarui nilai dalam satu atau beberapa kolom tabel ketika suatu kondisi terpenuhi. 

**catatan**  
Ukuran maksimum untuk satu pernyataan SQL adalah 16 MB.

## Sintaksis
<a name="r_UPDATE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
            UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...]

[ FROM fromlist ]
[ WHERE condition ]
```

## Parameter
<a name="r_UPDATE-parameters"></a>

DENGAN klausa  
Klausa opsional yang menentukan satu atau lebih. *common-table-expressions* Lihat [DENGAN klausa](r_WITH_clause.md). 

 *table\$1name*   
Meja sementara atau persisten. Hanya pemilik tabel atau pengguna dengan hak istimewa UPDATE pada tabel yang dapat memperbarui baris. Jika Anda menggunakan klausa FROM atau memilih dari tabel dalam ekspresi atau kondisi, Anda harus memiliki hak pilih pada tabel tersebut. Anda tidak dapat memberikan tabel alias di sini; Namun, Anda dapat menentukan alias dalam klausa FROM.   
Tabel eksternal Amazon Redshift Spectrum hanya bisa dibaca. Anda tidak dapat MEMPERBARUI tabel eksternal.

alias  
Nama alternatif sementara untuk tabel target. Alias bersifat opsional. Kata kunci AS selalu opsional. 

*Kolom* SET =   
Satu atau beberapa kolom yang ingin Anda modifikasi. Kolom yang tidak terdaftar mempertahankan nilainya saat ini. Jangan sertakan nama tabel dalam spesifikasi kolom target. Misalnya, `UPDATE tab SET tab.col = 1` tidak valid.

 *ekspresi*   
Ekspresi yang mendefinisikan nilai baru untuk kolom yang ditentukan. 

DEFAULT   
Memperbarui kolom dengan nilai default yang ditetapkan ke kolom dalam pernyataan CREATE TABLE. 

DARI *tablelist*   
Anda dapat memperbarui tabel dengan mereferensikan informasi di tabel lain. Cantumkan tabel lain ini dalam klausa FROM atau gunakan subquery sebagai bagian dari kondisi WHERE. Tabel yang tercantum dalam klausa FROM dapat memiliki alias. Jika Anda perlu menyertakan tabel target dari pernyataan UPDATE dalam daftar, gunakan alias. 

*Kondisi* DIMANA   
Klausa opsional yang membatasi pembaruan ke baris yang cocok dengan kondisi. Ketika kondisi kembali`true`, kolom SET yang ditentukan diperbarui. Kondisi ini dapat berupa predikat sederhana pada kolom atau kondisi berdasarkan hasil subquery.   
Anda dapat memberi nama tabel apa pun di subquery, termasuk tabel target untuk UPDATE. 

## Catatan penggunaan
<a name="r_UPDATE_usage_notes"></a>

Setelah memperbarui sejumlah besar baris dalam tabel: 
+ Vakum meja untuk merebut kembali ruang penyimpanan dan mengurutkan ulang baris. 
+ Analisis tabel untuk memperbarui statistik untuk perencana kueri. 

Gabungan luar kiri, kanan, dan penuh tidak didukung dalam klausa FROM dari pernyataan UPDATE; mereka mengembalikan kesalahan berikut: 

```
ERROR: Target table must be part of an equijoin predicate
```

 Jika Anda perlu menentukan gabungan luar, gunakan subquery di klausa WHERE dari pernyataan UPDATE. 

Jika pernyataan UPDATE Anda memerlukan self-join ke tabel target, Anda perlu menentukan kondisi gabungan, serta kriteria klausa WHERE yang memenuhi syarat baris untuk operasi pembaruan. Secara umum, ketika tabel target bergabung dengan dirinya sendiri atau tabel lain, praktik terbaik adalah menggunakan subquery yang secara jelas memisahkan kondisi gabungan dari kriteria yang memenuhi syarat baris untuk pembaruan. 

Perbarui kueri dengan beberapa kecocokan per baris menimbulkan kesalahan saat parameter konfigurasi `error_on_nondeterministic_update` disetel ke *true*. Untuk informasi selengkapnya, lihat [error\$1on\$1nondeterministic\$1update](r_error_on_nondeterministic_update.md).

Anda dapat memperbarui kolom GENERATED BY DEFAULT AS IDENTITY. Kolom didefinisikan sebagai GENERATED BY DEFAULT AS IDENTITY dapat diperbarui dengan nilai yang Anda berikan. Untuk informasi selengkapnya, lihat [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Contoh pernyataan UPDATE
<a name="c_Examples_of_UPDATE_statements"></a>

Untuk informasi selengkapnya tentang tabel yang digunakan dalam contoh berikut, lihat[Database sampel](c_sampledb.md).

Tabel CATEGORY dalam database TICKIT berisi baris berikut: 

```
+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 5     | Sports   | MLS       | Major League Soccer                        |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 1     | Sports   | MLB       | Major League Baseball                      |
| 6     | Shows    | Musicals  | Musical theatre                            |
| 3     | Sports   | NFL       | National Football League                   |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 2     | Sports   | NHL       | National Hockey League                     |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 4     | Sports   | NBA       | National Basketball Association            |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
+-------+----------+-----------+--------------------------------------------+
```

 **Memperbarui tabel berdasarkan rentang nilai** 

Perbarui kolom CATGROUP berdasarkan rentang nilai di kolom CATID. 

```
UPDATE category
SET catgroup='Theatre'
WHERE catid BETWEEN 6 AND 8;

SELECT * FROM category
WHERE catid BETWEEN 6 AND 8;

+-------+----------+----------+---------------------------+
| catid | catgroup | catname  |          catdesc          |
+-------+----------+----------+---------------------------+
| 6     | Theatre  | Musicals | Musical theatre           |
| 7     | Theatre  | Plays    | All non-musical theatre   |
| 8     | Theatre  | Opera    | All opera and light opera |
+-------+----------+----------+---------------------------+
```

 **Memperbarui tabel berdasarkan nilai saat ini** 

Perbarui kolom CATNAME dan CATDESC berdasarkan nilai CATGROUP mereka saat ini: 

```
UPDATE category
SET catdesc=default, catname='Shows'
WHERE catgroup='Theatre';

SELECT * FROM category
WHERE catname='Shows';

+-------+----------+---------+---------+
| catid | catgroup | catname | catdesc |
+-------+----------+---------+---------+
| 6     | Theatre  | Shows   | NULL    |
| 7     | Theatre  | Shows   | NULL    |
| 8     | Theatre  | Shows   | NULL    |
+-------+----------+---------+---------+)
```

Dalam kasus ini, kolom CATDESC disetel ke null karena tidak ada nilai default yang ditentukan saat tabel dibuat.

Jalankan perintah berikut untuk mengatur data tabel CATEGORY kembali ke nilai asli:

```
TRUNCATE category;

COPY category
FROM 's3://redshift-downloads/tickit/category_pipe.txt' 
DELIMITER '|' 
IGNOREHEADER 1 
REGION 'us-east-1'
IAM_ROLE default;
```

 **Memperbarui tabel berdasarkan hasil subquery klausa WHERE** 

Perbarui tabel CATEGORY berdasarkan hasil subquery di klausa WHERE: 

```
UPDATE category
SET catdesc='Broadway Musical'
WHERE category.catid IN
(SELECT category.catid FROM category
JOIN event ON category.catid = event.catid
JOIN venue ON venue.venueid = event.venueid
JOIN sales ON sales.eventid = event.eventid
WHERE venuecity='New York City' AND catname='Musicals');
```

Lihat tabel yang diperbarui: 

```
SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 6     | Shows    | Musicals  | Broadway Musical                           |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
+-------+----------+-----------+--------------------------------------------+
```

 **Memperbarui tabel berdasarkan hasil subquery klausa WITH** 

Untuk memperbarui tabel CATEGORY berdasarkan hasil subquery menggunakan klausa WITH, gunakan contoh berikut.

```
WITH u1 as (SELECT catid FROM event ORDER BY catid DESC LIMIT 1) 
UPDATE category SET catid='200' FROM u1 WHERE u1.catid=category.catid;

SELECT * FROM category ORDER BY catid DESC LIMIT 1;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 200   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

## Memperbarui tabel berdasarkan hasil dari kondisi gabungan
<a name="c_Examples_of_UPDATE_statements-updating-a-table-based-on-the-result-of-a-join-condition"></a>

Perbarui 11 baris asli dalam tabel CATEGORY berdasarkan baris CATID yang cocok di tabel EVENT: 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid;

SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 100   | Concerts | Pop       | All rock and pop music concerts            |
| 100   | Shows    | Plays     | All non-musical theatre                    |
| 100   | Shows    | Opera     | All opera and light opera                  |
| 100   | Shows    | Musicals  | Broadway Musical                           |
+-------+----------+-----------+--------------------------------------------+
```

 Perhatikan bahwa tabel EVENT tercantum dalam klausa FROM dan kondisi gabungan ke tabel target didefinisikan dalam klausa WHERE. Hanya empat baris yang memenuhi syarat untuk pembaruan. Keempat baris ini adalah baris yang nilai CATID awalnya 6, 7, 8, dan 9; hanya empat kategori yang diwakili dalam tabel EVENT: 

```
SELECT DISTINCT catid FROM event;

+-------+
| catid |
+-------+
| 6     |
| 7     |
| 8     |
| 9     |
+-------+
```

Perbarui 11 baris asli dalam tabel CATEGORY dengan memperluas contoh sebelumnya dan menambahkan kondisi lain ke klausa WHERE. Karena pembatasan pada kolom CATGROUP, hanya satu baris yang memenuhi syarat untuk pembaruan (meskipun empat baris memenuhi syarat untuk bergabung). 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid
AND catgroup='Concerts';

SELECT * FROM category WHERE catid=100;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 100   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

Cara alternatif untuk menulis contoh ini adalah sebagai berikut: 

```
UPDATE category SET catid=100
FROM event JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
```

Keuntungan dari pendekatan ini adalah bahwa kriteria gabungan jelas dipisahkan dari kriteria lain yang memenuhi syarat baris untuk pembaruan. Perhatikan penggunaan alias CAT untuk tabel CATEGORY dalam klausa FROM.

## Pembaruan dengan gabungan luar dalam klausa FROM
<a name="c_Examples_of_UPDATE_statements-updates-with-outer-joins-in-the-from-clause"></a>

Contoh sebelumnya menunjukkan gabungan batin yang ditentukan dalam klausa FROM dari pernyataan UPDATE. Contoh berikut mengembalikan kesalahan karena klausa FROM tidak mendukung gabungan luar ke tabel target: 

```
UPDATE category SET catid=100
FROM event LEFT JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
ERROR:  Target table must be part of an equijoin predicate
```

Jika gabungan luar diperlukan untuk pernyataan UPDATE, Anda dapat memindahkan sintaks gabungan luar ke subquery: 

```
UPDATE category SET catid=100
FROM
(SELECT event.catid FROM event LEFT JOIN category cat ON event.catid=cat.catid) eventcat
WHERE category.catid=eventcat.catid
AND catgroup='Concerts';
```

## Pembaruan dengan kolom dari tabel lain di klausa SET
<a name="c_Examples_of_UPDATE_statements-set-with-column-from-another-table"></a>

Untuk memperbarui listing tabel dalam database sampel TICKIT dengan nilai-nilai dari sales tabel, gunakan contoh berikut.

```
SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 4          |
| 108334 | 24         |
| 117150 | 4          |
| 135915 | 20         |
| 205927 | 6          |
+--------+------------+

UPDATE listing
SET numtickets = sales.sellerid
FROM sales
WHERE sales.sellerid = 1 AND listing.sellerid = sales.sellerid;

SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 1          |
| 108334 | 1          |
| 117150 | 1          |
| 135915 | 1          |
| 205927 | 1          |
+--------+------------+
```

# USE
<a name="r_USE_command"></a>

Mengubah database tempat kueri berjalan. SHOW USE menunjuk ke database yang terakhir digunakan dengan perintah USE. RESET USE me-reset database yang digunakan. Ini berarti bahwa jika database tidak ditentukan dalam SQL, objek dicari dalam database saat ini.

## Sintaksis
<a name="r_USE-synopsis"></a>

```
USE database
```

## Contoh
<a name="r_USE_command-examples"></a>

Misalkan ada tiga database, `dev` dan`pdb`, dan`pdb2`. Biarkan ada dua tabel `t` dalam skema publik dari masing-masing database. Pertama, masukkan data ke dalam tabel di berbagai database:

```
dev=# insert into dev.public.t values (1);
INSERT 0 1
dev=# insert into pdb.public.t values (2);
INSERT 0 1
```

Tanpa secara eksplisit mengatur database, sistem menggunakan database Anda yang terhubung. Periksa konteks database Anda saat ini:

```
dev=# show use;
Use Database

(1 row)
dev=> show search_path;
search_path
$user, public
(1 row)
```

Saat menanyakan tabel `t` tanpa menentukan database, sistem menggunakan tabel dalam database Anda saat ini:

```
dev=# select * from t;
c
----
1
(1 row)
```

Gunakan `use` perintah untuk beralih database tanpa mengubah koneksi Anda:

```
dev=# use pdb;
USE
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# select * from t;
id
----
2
(1 row)
```

Anda juga dapat secara eksplisit menentukan skema:

```
dev=# select * from public.t;
id
----
2
(1 row)
```

Anda sekarang dapat membuat tabel dalam skema yang berbeda dalam database Anda saat ini:

```
dev=# create table s1.t(id int);
CREATE TABLE
dev=# insert into pdb.s1.t values (3);
INSERT 0 1
```

Jalur pencarian menentukan objek skema mana yang diakses saat Anda tidak menentukan skema:

```
dev=# set search_path to public, s1;
SET
dev=# select * from t;
 id
----
  2
(1 row)
```

Ubah urutan skema untuk mengakses tabel yang berbeda:

```
dev=# set search_path to s1, public;
SET
dev=# show search_path;
 search_path
-------------
 s1, public
(1 row)
dev=# select * from t;
 id
----
  3
(1 row)
```

Beralih ke database lain sambil mempertahankan koneksi asli Anda:

```
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# use pdb2;
USE
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)
```

Saat beralih database, jalur pencarian disetel ulang ke default:

```
dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Buat tabel dan masukkan data dalam database Anda saat ini:

```
dev=# create table pdb2.public.t(id int);
CREATE TABLE
dev=# insert into pdb2.public.t values (4);
INSERT 0 1
dev=# select * from t;
 id
----
  4
(1 row)
```

Dalam transaksi, Anda dapat menulis ke database saat ini dan membaca dari database apa pun menggunakan notasi tiga bagian. Ini juga termasuk database yang terhubung:

```
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)

dev=# BEGIN;
BEGIN
dev=# select * from t;
 id
----
  4
(1 row)

dev=# insert into t values (5);
INSERT 0 1
dev=# select * from t;
 id
----
  4
  5
(2 rows)

dev=# select * from pdb.public.t;
 id
----
  2
(1 row)

dev=# select * from dev.public.t;
 id
----
  1
(1 row)
```

Setel ulang ke database Anda yang terhubung. Perhatikan bahwa ini tidak hanya kembali ke database yang digunakan sebelumnya`pdb`, tetapi mengatur ulang ke database yang terhubung. Jalur pencarian juga berubah ke jalur default: 

```
dev=# RESET USE;
RESET
dev=# select * from t;
c
----
1
(1 row)
dev=# show use;
 Use Database
--------------

(1 row)

dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Anda dapat mengubah database pada awal transaksi, tetapi tidak setelah menjalankan kueri:

```
dev=# BEGIN;
BEGIN
dev=# use pdb;
USE
dev=# use pdb2;
USE
dev=# use pdb;
USE
dev=# select * from t;
 id
----
  2
(1 row)
dev=# use pdb2;
ERROR:  USEd Database cannot be set or reset inside a transaction after another command.
dev=# rollback;
ROLLBACK
(1 row)
```

### Contoh Katalog Data
<a name="use-redlake-example"></a>

Pertama, buat tabel dalam skema dan katalog yang berbeda untuk mendemonstrasikan kueri lintas katalog. Mulailah dengan membuat tabel di database yang terhubung.

```
dev=# CREATE TABLE dev.public.t (col INT);
dev=# INSERT INTO dev.public.t VALUES (1);
dev=# CREATE SCHEMA write_schema;
dev=# CREATE TABLE dev.write_schema.t (state char (2));
dev=# INSERT INTO dev.write_schema.t VALUES ('WA');
```

Sekarang, buat tabel serupa di katalog yang berbeda. Ini menunjukkan cara bekerja dengan database lintas katalog.

```
dev=# CREATE TABLE my_db@my_catalog.public.t (col INT);
dev=# INSERT INTO my_db@my_catalog.public.t VALUES (100);
dev=# CREATE SCHEMA my_db@my_catalog.write_schema;
dev=# CREATE TABLE my_db@my_catalog.write_schema.t (state char (2));
dev=# INSERT INTO my_db@my_catalog.write_schema.t VALUES ('CA');
```

Periksa konteks database saat ini. Tanpa secara eksplisit mengatur database, sistem menggunakan database yang terhubung.

```
dev=# SHOW USE;
 Use Database
--------------

(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)

dev=# SELECT * FROM t;
 col
-----
   1
(1 row)
```

Mengatur USEd database untuk query tabel dalam katalog yang berbeda.

```
dev=# USE my_db@my_catalog;

dev=# SHOW USE;
            Use Database
-------------------------------------
 my_db@my_catalog
(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Saat menanyakan tabel t, hasil berasal dari database lintas-katalog.

```
dev=# SELECT * FROM t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM my_db@my_catalog.public.t;
 col
-----
 100
(1 row)
```

Ubah jalur pencarian untuk mengakses tabel dalam skema yang berbeda dalam USEd database.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM my_db@my_catalog.write_schema.t;
 state
-------
 CA
(1 row)
```

Meskipun USE diatur ke database lintas katalog, masih mungkin untuk secara eksplisit menanyakan database asli.

```
dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

Setel ulang USEd database untuk kembali merujuk ke objek dalam database yang terhubung.

```
dev=# RESET USE;

dev=# SHOW USE;
 Use Database
--------------

(1 row)
```

Perhatikan bahwa search\$1path disetel ulang saat USE disetel ulang.

```
dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Setelah mengatur ulang, kueri sekarang merujuk ke database terhubung asli.

```
dev=# SELECT * FROM t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM dev.public.t;
 col
-----
   1
(1 row)
```

Anda dapat memodifikasi jalur pencarian di database asli untuk mengakses skema yang berbeda.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

# VAKUM
<a name="r_VACUUM_command"></a>

Mengurutkan ulang baris dan merebut kembali ruang baik dalam tabel tertentu atau semua tabel dalam database saat ini.

**catatan**  
Hanya pengguna dengan izin tabel yang diperlukan yang dapat secara efektif menyedot tabel. Jika VACUUM dijalankan tanpa izin tabel yang diperlukan, operasi selesai dengan sukses tetapi tidak berpengaruh. Untuk daftar izin tabel yang valid untuk menjalankan VACUUM secara efektif, lihat bagian Hak istimewa yang diperlukan berikut.

Amazon Redshift secara otomatis mengurutkan data dan menjalankan VACUUM DELETE di latar belakang. Ini mengurangi kebutuhan untuk menjalankan perintah VACUUM. Untuk informasi selengkapnya, lihat [Tabel penyedot debu](t_Reclaiming_storage_space202.md). 

Secara default, VACUUM melewatkan fase pengurutan untuk tabel mana pun di mana lebih dari 95 persen baris tabel sudah diurutkan. Melewatkan fase pengurutan dapat secara signifikan meningkatkan kinerja VACUUM. Untuk mengubah ambang batas pengurutan atau penghapusan default untuk satu tabel, sertakan nama tabel dan parameter TO *threshold* PERCENT saat Anda menjalankan VACUUM. 

Pengguna dapat mengakses tabel saat sedang disedot. Anda dapat melakukan kueri dan menulis operasi saat tabel sedang disedot, tetapi ketika perintah bahasa manipulasi data (DHTML) dan vakum berjalan secara bersamaan, keduanya mungkin membutuhkan waktu lebih lama. Jika Anda menjalankan pernyataan UPDATE dan DELETE selama vakum, kinerja sistem mungkin berkurang. VACUUM DELETE memblokir sementara operasi pembaruan dan penghapusan. 

Amazon Redshift secara otomatis melakukan vakum DELETE ONLY di latar belakang. Operasi vakum otomatis berhenti saat pengguna menjalankan operasi bahasa definisi data (DDL), seperti ALTER TABLE.

**catatan**  
Sintaks dan perilaku perintah Amazon Redshift VACUUM sangat berbeda dari operasi VACUUM PostgreSQL. Misalnya, operasi VACUUM default di Amazon Redshift adalah VACUUM FULL, yang merebut kembali ruang disk dan menyortir ulang semua baris. Sebaliknya, operasi VACUUM default di PostgreSQL hanya merebut kembali ruang dan membuatnya tersedia untuk digunakan kembali.

Untuk informasi selengkapnya, lihat [Tabel penyedot debu](t_Reclaiming_storage_space202.md).

## Hak istimewa yang diperlukan
<a name="r_VACUUM_command-privileges"></a>

Berikut ini adalah hak istimewa yang diperlukan untuk VACUUM:
+ Superuser
+ Pengguna dengan hak istimewa VACUUM
+ Pemilik meja
+ Pemilik basis data yang tabel dibagikan

## Sintaksis
<a name="r_VACUUM_command-synopsis"></a>

```
VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ]
[ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]
```

## Parameter
<a name="r_VACUUM_command-parameters"></a>

PENUH   <a name="vacuum-full"></a>
Mengurutkan tabel yang ditentukan (atau semua tabel dalam database saat ini) dan merebut kembali ruang disk yang ditempati oleh baris yang ditandai untuk dihapus oleh operasi UPDATE dan DELETE sebelumnya. VACUUM FULL adalah default.  
Vakum penuh tidak melakukan pengindeksan ulang untuk tabel yang disisipkan. Untuk mengindeks ulang tabel yang disisipkan diikuti dengan vakum penuh, gunakan opsi. [VACUUM REINDEX](#vacuum-reindex)   
Secara default, VACUUM FULL melewatkan fase pengurutan untuk tabel apa pun yang sudah setidaknya 95 persen diurutkan. Jika VACUUM dapat melewati fase pengurutan, ia melakukan DELETE ONLY dan merebut kembali ruang dalam fase penghapusan sehingga setidaknya 95 persen dari baris yang tersisa tidak ditandai untuk dihapus.    
Jika ambang pengurutan tidak terpenuhi (misalnya, jika 90 persen baris diurutkan) dan VACUUM melakukan pengurutan penuh, maka itu juga melakukan operasi penghapusan lengkap, memulihkan ruang dari 100 persen baris yang dihapus.   
Anda dapat mengubah ambang vakum default hanya untuk satu tabel. Untuk mengubah ambang batas vakum default untuk satu tabel, sertakan nama tabel dan parameter TO *threshold* PERCENT. 

URUTKAN SAJA   <a name="vacuum-sort-only"></a>
Mengurutkan tabel yang ditentukan (atau semua tabel dalam database saat ini) tanpa merebut kembali ruang yang dibebaskan oleh baris yang dihapus. Opsi ini berguna saat merebut kembali ruang disk tidak penting tetapi menyortir ulang baris baru itu penting. Vakum SORT ONLY mengurangi waktu yang telah berlalu untuk operasi vakum saat wilayah yang tidak disortir tidak berisi sejumlah besar baris yang dihapus dan tidak menjangkau seluruh wilayah yang diurutkan. Aplikasi yang tidak memiliki batasan ruang disk tetapi bergantung pada pengoptimalan kueri yang terkait dengan menjaga baris tabel diurutkan dapat memperoleh manfaat dari jenis vakum ini.  
Secara default, VACUUM SORT ONLY melewatkan tabel apa pun yang sudah setidaknya 95 persen diurutkan. Untuk mengubah ambang batas pengurutan default untuk satu tabel, sertakan nama tabel dan parameter TO *threshold* PERCENT saat Anda menjalankan VACUUM. 

HAPUS SAJA   <a name="vacuum-delete-only"></a>
Amazon Redshift secara otomatis melakukan vakum DELETE ONLY di latar belakang, jadi Anda jarang, jika pernah, perlu menjalankan DELETE ONLY vacuum.  
VACUUM DELETE merebut kembali ruang disk yang ditempati oleh baris yang ditandai untuk dihapus oleh operasi UPDATE dan DELETE sebelumnya, dan memadatkan tabel untuk membebaskan ruang yang dikonsumsi. Operasi vakum DELETE ONLY tidak mengurutkan data tabel.   
Opsi ini mengurangi waktu yang telah berlalu untuk operasi vakum saat merebut kembali ruang disk adalah penting tetapi menyortir ulang baris baru tidak penting. Opsi ini juga dapat berguna ketika kinerja kueri Anda sudah optimal, dan mengurutkan ulang baris untuk mengoptimalkan kinerja kueri bukanlah persyaratan.  
Secara default, VACUUM DELETE ONLY merebut kembali ruang sehingga setidaknya 95 persen dari baris yang tersisa tidak ditandai untuk dihapus. Untuk mengubah ambang batas penghapusan default untuk satu tabel, sertakan nama tabel dan parameter TO *threshold* PERCENT saat Anda menjalankan VACUUM.    
Beberapa operasi, seperti`ALTER TABLE APPEND`, dapat menyebabkan tabel terfragmentasi. Bila Anda menggunakan `DELETE ONLY` klausa operasi vakum merebut kembali ruang dari tabel terfragmentasi. Nilai ambang batas yang sama sebesar 95 persen berlaku untuk operasi defragmentasi. 

INDEKS ULANG  <a name="vacuum-reindex"></a>
Menganalisis distribusi nilai-nilai dalam kolom kunci sortir yang disisipkan, kemudian melakukan operasi VACUUM penuh. Jika REINDEX digunakan, nama tabel diperlukan.  
VACUUM REINDEX membutuhkan waktu yang jauh lebih lama daripada VACUUM FULL karena membuat pass tambahan untuk menganalisis kunci sortir yang disisipkan. Operasi pengurutan dan penggabungan dapat memakan waktu lebih lama untuk tabel yang disisipkan karena pengurutan yang disisipkan mungkin perlu mengatur ulang lebih banyak baris daripada pengurutan majemuk.  
Jika operasi VACUUM REINDEX berakhir sebelum selesai, VACUUM berikutnya melanjutkan operasi indeks ulang sebelum melakukan operasi vakum penuh.  
VACUUM REINDEX tidak didukung dengan TO *threshold* PERCENT.  

PENYENDIRI  <a name="vacuum-recluster"></a>
Mengurutkan bagian-bagian tabel yang tidak disortir. Bagian dari tabel yang sudah diurutkan berdasarkan jenis tabel otomatis dibiarkan utuh. Perintah ini tidak menggabungkan data yang baru diurutkan dengan wilayah yang diurutkan. Itu juga tidak merebut kembali semua ruang yang ditandai untuk dihapus. Ketika perintah ini selesai, tabel mungkin tidak tampak sepenuhnya diurutkan, seperti yang ditunjukkan oleh `unsorted` bidang di SVV\$1TABLE\$1INFO.   
 Kami menyarankan Anda menggunakan VACUUM RECLUSTER untuk tabel besar dengan seringnya konsumsi dan kueri yang hanya mengakses data terbaru.   
 VACUUM RECLUSTER tidak didukung dengan TO threshold PERCENT. Jika RECLUSTER digunakan, nama tabel diperlukan.  
VACUUM RECLUSTER tidak didukung pada tabel dengan tombol sortir dan tabel yang disisipkan dengan gaya distribusi SEMUA.

 *table\$1name*   
Nama meja untuk menyedot debu. Jika Anda tidak menentukan nama tabel, operasi vakum berlaku untuk semua tabel dalam database saat ini. Anda dapat menentukan tabel buatan pengguna permanen atau sementara. Perintah tidak berarti untuk objek lain, seperti tampilan dan tabel sistem.  
 Jika Anda menyertakan parameter TO *threshold* PERCENT, nama tabel diperlukan.

 Untuk *ambang* PERSENTASE   
Klausa yang menentukan ambang batas di mana VACUUM melewati fase pengurutan dan ambang target untuk merebut kembali ruang dalam fase hapus. *Ambang batas pengurutan* adalah persentase dari total baris yang sudah dalam urutan untuk tabel yang ditentukan sebelum menyedot debu.  *Ambang batas penghapusan* adalah persentase minimum dari total baris yang tidak ditandai untuk dihapus setelah menyedot debu.   
Karena VACUUM menyortir ulang baris hanya ketika persentase baris yang diurutkan dalam tabel kurang dari ambang pengurutan, Amazon Redshift seringkali dapat mengurangi waktu VACUUM secara signifikan. Demikian pula, ketika VACUUM tidak dibatasi untuk merebut kembali ruang dari 100 persen baris yang ditandai untuk dihapus, sering kali dapat melewati blok penulisan ulang yang hanya berisi beberapa baris yang dihapus.  
Misalnya, jika Anda menentukan 75 untuk *ambang batas*, VACUUM melewatkan fase pengurutan jika 75 persen atau lebih dari baris tabel sudah dalam urutan pengurutan. Untuk fase penghapusan, VACUUMS menetapkan target reklamasi ruang disk sehingga setidaknya 75 persen dari baris tabel tidak ditandai untuk dihapus setelah vakum. Nilai *ambang batas* harus berupa bilangan bulat antara 0 dan 100. Defaultnya adalah 95. Jika Anda menentukan nilai 100, VACUUM selalu mengurutkan tabel kecuali sudah sepenuhnya diurutkan dan merebut kembali ruang dari semua baris yang ditandai untuk dihapus. Jika Anda menentukan nilai 0, VACUUM tidak pernah mengurutkan tabel dan tidak pernah merebut kembali ruang.  
Jika Anda menyertakan parameter TO *threshold* PERCENT, Anda juga harus menentukan nama tabel. Jika nama tabel dihilangkan, VACUUM gagal.   
Anda tidak dapat menggunakan parameter TO *threshold* PERCENT dengan REINDEX. 

DORONGAN  
Menjalankan perintah VACUUM dengan sumber daya tambahan, seperti memori dan ruang disk, karena tersedia. Dengan opsi BOOST, VACUUM beroperasi dalam satu jendela dan memblokir penghapusan dan pembaruan bersamaan selama operasi VACUUM. Berjalan dengan opsi BOOST memperebutkan sumber daya sistem, yang mungkin memengaruhi kinerja kueri. Jalankan VACUUM BOOST saat beban pada sistem ringan, seperti selama operasi pemeliharaan.   
Pertimbangkan hal berikut saat menggunakan opsi BOOST:  
+ Ketika BOOST ditentukan, nilai *table\$1name* diperlukan. 
+ BOOST tidak didukung dengan REINDEX. 
+ BOOST diabaikan dengan DELETE ONLY. 

## Catatan penggunaan
<a name="r_VACUUM_usage_notes"></a>

Untuk sebagian besar aplikasi Amazon Redshift, vakum penuh direkomendasikan. Untuk informasi selengkapnya, lihat [Tabel penyedot debu](t_Reclaiming_storage_space202.md).

Sebelum menjalankan operasi vakum, perhatikan perilaku berikut: 
+ Anda tidak dapat menjalankan VACUUM dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihat[Tingkat isolasi di Amazon Redshift](c_serial_isolation.md). 
+ Beberapa jumlah pertumbuhan tabel mungkin terjadi ketika tabel disedot. Perilaku ini diharapkan ketika tidak ada baris yang dihapus untuk diambil kembali atau urutan baru tabel menghasilkan rasio kompresi data yang lebih rendah.
+ Selama operasi vakum, beberapa tingkat penurunan kinerja kueri diharapkan. Kinerja normal dilanjutkan segera setelah operasi vakum selesai.
+ Operasi penulisan bersamaan dilanjutkan selama operasi vakum, tetapi kami tidak menyarankan melakukan operasi tulis saat menyedot debu. Lebih efisien untuk menyelesaikan operasi penulisan sebelum menjalankan ruang hampa. Juga, data apa pun yang ditulis setelah operasi vakum dimulai tidak dapat disedot oleh operasi itu. Dalam hal ini, operasi vakum kedua diperlukan.
+ Operasi vakum mungkin tidak dapat dimulai jika operasi beban atau penyisipan sudah berlangsung. Operasi vakum sementara memerlukan akses eksklusif ke tabel untuk memulai. Akses eksklusif ini diperlukan sebentar, sehingga operasi vakum tidak memblokir beban dan sisipan bersamaan untuk jangka waktu yang signifikan.
+ Operasi vakum dilewati ketika tidak ada pekerjaan yang harus dilakukan untuk tabel tertentu; Namun, ada beberapa overhead yang terkait dengan penemuan bahwa operasi dapat dilewati. Jika Anda tahu bahwa meja itu murni atau tidak memenuhi ambang vakum, jangan menjalankan operasi vakum terhadapnya.
+ Operasi vakum DELETE ONLY pada tabel kecil mungkin tidak mengurangi jumlah blok yang digunakan untuk menyimpan data, terutama ketika tabel memiliki sejumlah besar kolom atau cluster menggunakan sejumlah besar irisan per node. Operasi vakum ini menambahkan satu blok per kolom per irisan untuk memperhitungkan sisipan bersamaan ke dalam tabel, dan ada potensi overhead ini melebihi pengurangan jumlah blok dari ruang disk reklamasi. Misalnya, jika tabel 10 kolom pada cluster 8-node menempati 1000 blok sebelum vakum, vakum tidak mengurangi jumlah blok aktual kecuali lebih dari 80 blok ruang disk direklamasi karena baris yang dihapus. (Setiap blok data menggunakan 1 MB.)

Operasi vakum otomatis berhenti sejenak jika salah satu dari kondisi berikut terpenuhi: 
+ Seorang pengguna menjalankan operasi bahasa definisi data (DDL), seperti ALTER TABLE, yang memerlukan kunci eksklusif pada tabel yang saat ini sedang dikerjakan oleh vakum otomatis. 
+ Periode beban cluster yang tinggi.

### Support untuk VACUUM bersamaan
<a name="r_VACUUM_usage_notes_concurrent"></a>

Amazon Redshift mendukung menjalankan beberapa transaksi vakum secara bersamaan di berbagai sesi dalam klaster atau grup kerja. Ini berarti Anda dapat mengeluarkan contoh yang berbeda dan banyak dari semua mode vakum sekaligus, dengan setiap transaksi vakum pada tabel yang unik. Dua operasi vakum tidak dapat bekerja pada satu meja pada saat yang bersamaan.

**Pedoman untuk menjalankan vakum bersamaan**
+ Saat menjalankan transaksi vakum bersamaan di berbagai sesi, Anda harus memantau sumber daya sistem, dan menghindari menjalankan terlalu banyak operasi vakum secara bersamaan.
+ Tingkat konkurensi yang disarankan tergantung pada jumlah ruang yang akan direklamasi, baik jumlah dan lebar baris yang akan disortir, ukuran gudang, dan ukuran beban kerja Anda yang berjalan di samping operasi VACUUM.
+ Bergantung pada mode transaksi vakum, mulailah dengan dua operasi vakum bersamaan, dan tambahkan lebih banyak tergantung pada waktu pengoperasian dan beban sistemnya. Sama seperti kueri berat lainnya yang dikeluarkan oleh pengguna, operasi vakum dapat mulai mengantri jika Anda menjalankan terlalu banyak secara bersamaan saat Amazon Redshift mencapai batas sumber daya sistem. 
+ Jalankan beberapa operasi Vacuum BOOST dengan hati-hati. Menjalankan Vacuum dengan opsi BOOST bersaing untuk sumber daya sistem, yang mungkin memengaruhi kinerja kueri. Jalankan VACUUM BOOST saat beban pada sistem ringan, seperti selama operasi pemeliharaan.
+ Jika Anda tidak menentukan nama tabel, operasi vakum berlaku untuk semua tabel dalam database saat ini. Opearasi vakum ini masih berjalan secara berurutan.

## Contoh
<a name="r_VACUUM_command-examples"></a>

Dapatkan kembali ruang dan database dan urutkan ulang baris di semua tabel berdasarkan ambang batas vakum 95 persen default.

```
vacuum;
```

Dapatkan kembali ruang dan urutkan ulang baris dalam tabel PENJUALAN berdasarkan ambang batas 95 persen default. 

```
vacuum sales;
```

Selalu merebut kembali ruang dan mengurutkan kembali baris di tabel PENJUALAN. 

```
vacuum sales to 100 percent;
```

Urutkan ulang baris dalam tabel PENJUALAN hanya jika kurang dari 75 persen baris sudah diurutkan. 

```
 vacuum sort only sales to 75 percent;
```

Dapatkan kembali ruang dalam tabel PENJUALAN sehingga setidaknya 75 persen dari baris yang tersisa tidak ditandai untuk dihapus setelah vakum. 

```
vacuum delete only sales to 75 percent;
```

Index ulang dan kemudian vakum tabel LISTING. 

```
vacuum reindex listing;
```

Perintah berikut mengembalikan kesalahan. 

```
vacuum reindex listing to 75 percent;
```

Recluster dan kemudian vakum tabel LISTING. 

```
vacuum recluster listing;
```

Recluster dan kemudian vakum tabel LISTING dengan opsi BOOST. 

```
vacuum recluster listing boost;
```

# Referensi fungsi SQL
<a name="c_SQL_functions"></a>

**Topics**
+ [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md)
+ [Fungsi agregat](c_Aggregate_Functions.md)
+ [Fungsi array](c_Array_Functions.md)
+ [Fungsi agregat bit-wise](c_bitwise_aggregate_functions.md)
+ [Ekspresi bersyarat](c_conditional_expressions.md)
+ [Fungsi pemformatan tipe data](r_Data_type_formatting.md)
+ [Fungsi tanggal dan waktu](Date_functions_header.md)
+ [Fungsi hash](hash-functions.md)
+ [HyperLogLog fungsi](hyperloglog-functions.md)
+ [Fungsi JSON](json-functions.md)
+ [Fungsi pembelajaran mesin](ml-function.md)
+ [Fungsi matematika](Math_functions.md)
+ [Fungsi objek](Object_Functions.md)
+ [Fungsi spasial](geospatial-functions.md)
+ [Fungsi string](String_functions_header.md)
+ [Fungsi informasi tipe SUPER](c_Type_Info_Functions.md)
+ [Fungsi dan operator VARBYTE](varbyte-functions.md)
+ [Fungsi jendela](c_Window_functions.md)
+ [Fungsi administrasi sistem](r_System_administration_functions.md)
+ [Fungsi informasi sistem](r_System_information_functions.md)

Amazon Redshift mendukung sejumlah fungsi yang merupakan ekstensi ke standar SQL, serta fungsi agregat standar, fungsi skalar, dan fungsi jendela.

**catatan**  
Amazon Redshift didasarkan pada PostgreSQL. Amazon Redshift dan PostgreSQL memiliki sejumlah perbedaan yang sangat penting yang harus Anda waspadai saat merancang dan mengembangkan aplikasi gudang data Anda. Untuk informasi selengkapnya tentang perbedaan Amazon Redshift SQL dari PostgreSQL, lihat. [Amazon Redshift dan PostgreSQL](c_redshift-and-postgres-sql.md)

# Fungsi simpul pemimpin—hanya
<a name="c_SQL_functions_leader_node_only"></a>

Beberapa kueri Amazon Redshift didistribusikan dan dijalankan pada node komputasi; kueri lain dijalankan secara eksklusif pada node pemimpin.

Node pemimpin mendistribusikan SQL ke node komputasi ketika kueri mereferensikan tabel atau tabel sistem yang dibuat pengguna (tabel dengan awalan STL atau STV dan tampilan sistem dengan awalan SVL atau SVV). Kueri yang hanya mereferensikan tabel katalog (tabel dengan awalan PG, seperti PG\$1TABLE\$1DEF) atau yang tidak mereferensikan tabel apa pun, berjalan secara eksklusif pada node pemimpin.

Beberapa fungsi Amazon Redshift SQL hanya didukung pada node pemimpin dan tidak didukung pada node komputasi. Kueri yang menggunakan fungsi leader-node harus dijalankan secara eksklusif pada node pemimpin, bukan pada node komputasi, atau akan mengembalikan kesalahan.

Dokumentasi untuk setiap fungsi leader-node saja menyertakan catatan yang menyatakan bahwa fungsi tersebut akan mengembalikan kesalahan jika mereferensikan tabel yang ditentukan pengguna atau tabel sistem Amazon Redshift.

Untuk informasi selengkapnya, lihat [Fungsi SQL didukung pada node pemimpin](c_sql-functions-leader-node.md).

Fungsi SQL berikut adalah fungsi leader-node saja dan tidak didukung pada node komputasi:

Fungsi informasi sistem
+ CURRENT\$1SCHEMA
+ SKEMA SAAT INI
+ HAS\$1DATABASE\$1PRIVILEGE
+ HAS\$1SCHEMA\$1PRIVILEGE
+ HAS\$1TABLE\$1PRIVILEGE

Fungsi string
+ SUBSTR

Fungsi matematika
+ FAKTORIAL
+  LOG 

Fungsi hanya leader-node berikut tidak digunakan lagi dan tidak lagi didukung:

Fungsi tanggal
+ USIA
+ CURRENT\$1TIME
+ CURRENT\$1TIMESTAMP
+ LOCALTIME
+ TIDAK TERBATAS
+ SEKARANG

Fungsi string
+ GETBIT
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# Fungsi agregat
<a name="c_Aggregate_Functions"></a>

**Topics**
+ [Fungsi ANY\$1VALUE](r_ANY_VALUE.md)
+ [PERKIRAAN fungsi PERCENTILE\$1DISC](r_APPROXIMATE_PERCENTILE_DISC.md)
+ [Fungsi AVG](r_AVG.md)
+ [Fungsi COUNT](r_COUNT.md)
+ [Fungsi LISTAGG](r_LISTAGG.md)
+ [Fungsi MAX](r_MAX.md)
+ [Fungsi MEDIAN](r_MEDIAN.md)
+ [Fungsi MIN](r_MIN.md)
+ [Fungsi PERCENTILE\$1CONT](r_PERCENTILE_CONT.md)
+ [Fungsi STDDEV\$1SAMP dan STDDEV\$1POP](r_STDDEV_functions.md)
+ [Fungsi SUM](r_SUM.md)
+ [Fungsi VAR\$1SAMP dan VAR\$1POP](r_VARIANCE_functions.md)

Fungsi agregat menghitung nilai hasil tunggal dari satu set nilai masukan. 

Pernyataan SELECT menggunakan fungsi agregat dapat mencakup dua klausa opsional: GROUP BY dan HAVING. Sintaks untuk klausa ini adalah sebagai berikut (menggunakan fungsi COUNT sebagai contoh): 

```
SELECT count (*) expression FROM table_reference
WHERE condition [GROUP BY expression ] [ HAVING condition]
```

Klausa GROUP BY menggabungkan dan mengelompokkan hasil berdasarkan nilai unik dalam kolom atau kolom tertentu. Klausa HAVING membatasi hasil yang dikembalikan ke baris di mana kondisi agregat tertentu benar, seperti count (\$1) > 1. Klausa HAVING digunakan dengan cara yang sama seperti WHERE untuk membatasi baris berdasarkan nilai kolom. Untuk contoh klausa tambahan ini, lihat. [COUNT](r_COUNT.md)

Fungsi agregat tidak menerima fungsi agregat bersarang atau fungsi jendela sebagai argumen.

# Fungsi ANY\$1VALUE
<a name="r_ANY_VALUE"></a>

Fungsi ANY\$1VALUE mengembalikan nilai apapun dari nilai ekspresi masukan nondeterministik. Fungsi ini kembali `NULL` jika ekspresi masukan tidak menghasilkan baris yang dikembalikan. Fungsi ini juga dapat kembali `NULL` jika ada `NULL` nilai dalam ekspresi input. Jika input berisi `NULL` nilai-nilai yang dicampur dengan `NULL` non-nilai, `NULL` mungkin dikembalikan. Jika semua nilai`NULL`, `NULL` dikembalikan. Jika tidak ada baris yang cocok dengan kondisi, `NULL` dikembalikan.

## Sintaksis
<a name="r_ANY_VALUE-synopsis"></a>

```
ANY_VALUE( [ DISTINCT | ALL ] expression )
```

## Argumen
<a name="r_ANY_VALUE-arguments"></a>

BERBEDA \$1 SEMUA  
Tentukan DISTINCT atau ALL untuk mengembalikan nilai apa pun dari nilai ekspresi input. Argumen DISTINCT tidak berpengaruh dan diabaikan.

 *ekspresi*   
Kolom target atau ekspresi di mana fungsi beroperasi. *Ekspresi* adalah salah satu tipe data berikut:  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ PRECISON GANDA
+ BOOLEAN
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ JADWAL
+ INTERVAL TAHUN KE BULAN
+ INTERVAL HARI KE DETIK
+ VARBYTE
+ SUPER
+ HLLSKETSA
+ GEOMETRY
+ GEOGRAPHY

## Pengembalian
<a name="r_ANY_VALUE-returns"></a>

Mengembalikan tipe data yang sama sebagai *ekspresi*. 

## Catatan penggunaan
<a name="r_ANY_VALUE-usage-notes"></a>

Jika pernyataan yang menentukan fungsi ANY\$1VALUE untuk kolom juga menyertakan referensi kolom kedua, kolom kedua harus muncul dalam klausa GROUP BY atau disertakan dalam fungsi agregat. 

## Contoh
<a name="r_ANY_VALUE-examples"></a>

Contoh menggunakan tabel peristiwa yang dibuat di [Langkah 4: Muat data sampel dari Amazon S3](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) di Panduan Memulai *Amazon Redshift*. Contoh berikut mengembalikan sebuah instance dari dateid mana eventname adalah Eagles. 

```
select any_value(dateid) as dateid, eventname from event where eventname ='Eagles' group by eventname;
```

Berikut ini adalah hasilnya.

```
dateid | eventname
-------+---------------
 1878  | Eagles
```

Contoh berikut mengembalikan instance dari setiap dateid di mana eventname adalah Eagles atau Cold War Kids. 

```
select any_value(dateid) as dateid, eventname from event where eventname in('Eagles', 'Cold War Kids') group by eventname;
```

Berikut ini adalah hasilnya.

```
dateid | eventname
-------+---------------
 1922  | Cold War Kids
 1878  | Eagles
```

# PERKIRAAN fungsi PERCENTILE\$1DISC
<a name="r_APPROXIMATE_PERCENTILE_DISC"></a>

PERKIRAAN PERCENTILE\$1DISC adalah fungsi distribusi terbalik yang mengasumsikan model distribusi diskrit. Dibutuhkan nilai persentil dan spesifikasi semacam dan mengembalikan elemen dari set yang diberikan. Pendekatan memungkinkan fungsi berjalan lebih cepat, dengan kesalahan relatif rendah sekitar 0,5 persen.

Untuk nilai *persentil* tertentu, PERKIRAAN PERCENTILE\$1DISC menggunakan algoritma ringkasan kuantil untuk memperkirakan persentil diskrit ekspresi dalam klausa ORDER BY. *PERKIRAAN PERCENTILE\$1DISC mengembalikan nilai dengan nilai distribusi kumulatif terkecil (sehubungan dengan spesifikasi jenis yang sama) yang lebih besar dari atau sama dengan persentil.* 

## Sintaksis
<a name="r_APPROXIMATE_PERCENTILE_DISC-synopsis"></a>

```
APPROXIMATE  PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
```

## Argumen
<a name="r_APPROXIMATE_PERCENTILE_DISC-arguments"></a>

 *persentil*   
Konstanta numerik antara 0 dan 1. Null diabaikan dalam perhitungan.

DALAM GRUP (ORDER BY *expr)*   
Klausul yang menentukan numerik atau date/time nilai untuk mengurutkan dan menghitung persentil atas. 

## Pengembalian
<a name="r_APPROXIMATE_PERCENTILE_DISC-returns"></a>

Tipe data yang sama dengan ekspresi ORDER BY dalam klausa WITHIN GROUP.

## Catatan penggunaan
<a name="r_APPROXIMATE_PERCENTILE_DISC-usage-notes"></a>

Jika pernyataan PERKIRAAN PERCENTILE\$1DISC menyertakan klausa GROUP BY, kumpulan hasil terbatas. Batas bervariasi berdasarkan jenis node dan jumlah node. Jika batas terlampaui, fungsi gagal dan mengembalikan kesalahan berikut.

```
GROUP BY limit for approximate percentile_disc exceeded.
```

Jika Anda perlu mengevaluasi lebih banyak grup daripada batas izin, pertimbangkan untuk menggunakannya[Fungsi PERCENTILE\$1CONT](r_PERCENTILE_CONT.md). 

## Contoh
<a name="r_APPROXIMATE_PERCENTILE_DISC-examples"></a>

Contoh berikut mengembalikan jumlah penjualan, total penjualan, dan nilai persentil kelima puluh untuk 10 tanggal teratas. 

```
select top 10 date.caldate,
count(totalprice), sum(totalprice),
approximate percentile_disc(0.5) 
within group (order by totalprice)
from listing
join date on listing.dateid = date.dateid
group by date.caldate
order by 3 desc;

caldate    | count | sum        | percentile_disc
-----------+-------+------------+----------------
2008-01-07 |   658 | 2081400.00 |         2020.00
2008-01-02 |   614 | 2064840.00 |         2178.00
2008-07-22 |   593 | 1994256.00 |         2214.00
2008-01-26 |   595 | 1993188.00 |         2272.00
2008-02-24 |   655 | 1975345.00 |         2070.00
2008-02-04 |   616 | 1972491.00 |         1995.00
2008-02-14 |   628 | 1971759.00 |         2184.00
2008-09-01 |   600 | 1944976.00 |         2100.00
2008-07-29 |   597 | 1944488.00 |         2106.00
2008-07-23 |   592 | 1943265.00 |         1974.00
```

# Fungsi AVG
<a name="r_AVG"></a>

 Fungsi AVG mengembalikan rata-rata (rata-rata aritmatika) dari nilai ekspresi masukan. Fungsi AVG bekerja dengan nilai numerik dan mengabaikan nilai NULL.

## Sintaksis
<a name="r_AVG-synopsis"></a>

```
AVG ( [ DISTINCT | ALL ] expression )
```

## Argumen
<a name="r_AVG-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. *Ekspresi* adalah salah satu tipe data berikut:  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ PRECISON GANDA
+ SUPER

BERBEDA \$1 SEMUA   
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat dari ekspresi yang ditentukan sebelum menghitung rata-rata. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung rata-rata. SEMUA adalah default.

## Jenis Data
<a name="r_AVG-data-types"></a>

 Tipe argumen yang didukung oleh fungsi AVG adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE PRECISION, dan SUPER.

Jenis pengembalian yang didukung oleh fungsi AVG adalah: 
+ BIGINT untuk argumen tipe integer
+ PRESISI GANDA untuk argumen floating point
+ Mengembalikan tipe data yang sama sebagai ekspresi untuk jenis argumen lainnya.

Presisi default untuk hasil fungsi AVG dengan argumen NUMERIK atau DECIMAL adalah 38. Skala hasilnya sama dengan skala argumen. Misalnya, AVG kolom DEC (5,2) mengembalikan tipe data DEC (38,2).

## Contoh
<a name="r_AVG-examples"></a>

Temukan jumlah rata-rata yang terjual per transaksi dari tabel PENJUALAN: 

```
select avg(qtysold)from sales;

avg
-----
2
(1 row)
```

Temukan harga total rata-rata yang tercantum untuk semua listing: 

```
select avg(numtickets*priceperticket) as avg_total_price from listing;

avg_total_price
-----------------
3034.41
(1 row)
```

Temukan harga rata-rata yang dibayarkan, dikelompokkan berdasarkan bulan dalam urutan menurun: 

```
select avg(pricepaid) as avg_price, month 
from sales, date
where sales.dateid = date.dateid
group by month
order by avg_price desc;

avg_price | month
-----------+-------
659.34 | MAR
655.06 | APR
645.82 | JAN
643.10 | MAY
642.72 | JUN
642.37 | SEP
640.72 | OCT
640.57 | DEC
635.34 | JUL
635.24 | FEB
634.24 | NOV
632.78 | AUG
(12 rows)
```

# Fungsi COUNT
<a name="r_COUNT"></a>

 Fungsi COUNT menghitung baris yang ditentukan oleh ekspresi.

Fungsi COUNT memiliki variasi berikut.
+ COUNT (\$1) menghitung semua baris dalam tabel target apakah mereka termasuk nol atau tidak.
+ COUNT (*ekspresi*) menghitung jumlah baris dengan nilai non-Null dalam kolom atau ekspresi tertentu.
+ COUNT (*ekspresi* DISTINCT) menghitung jumlah nilai non-Null yang berbeda dalam kolom atau ekspresi.
+ PERKIRAAN COUNT DISTINCT mendekati jumlah nilai non-NULL yang berbeda dalam kolom atau ekspresi.

## Sintaksis
<a name="r_COUNT-synopsis"></a>

```
COUNT( * | expression )
```

```
COUNT ( [ DISTINCT | ALL ] expression )
```

```
APPROXIMATE COUNT ( DISTINCT expression )
```

## Argumen
<a name="r_COUNT-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. Fungsi COUNT mendukung semua tipe data argumen.

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat dari ekspresi yang ditentukan sebelum melakukan penghitungan. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung. SEMUA adalah default.

KIRA-KIRA  
Ketika digunakan dengan PERKIRAAN, fungsi COUNT DISTINCT menggunakan HyperLogLog algoritma untuk memperkirakan jumlah nilai non-NULL yang berbeda dalam kolom atau ekspresi. Kueri yang menggunakan kata kunci PERKIRAAN berjalan lebih cepat, dengan kesalahan relatif rendah sekitar 2%. Perkiraan dijamin untuk kueri yang mengembalikan sejumlah besar nilai berbeda, dalam jutaan atau lebih per kueri, atau per grup, jika ada klausa grup demi klausa. Untuk set nilai berbeda yang lebih kecil, dalam ribuan, perkiraan mungkin lebih lambat daripada hitungan yang tepat. PERKIRAAN hanya dapat digunakan dengan COUNT DISTINCT.

## Jenis pengembalian
<a name="c_Supported_data_types_count"></a>

Fungsi COUNT mengembalikan BIGINT.

## Contoh
<a name="r_COUNT-examples"></a>

Hitung semua pengguna dari negara bagian Florida:

```
select count(*) from users where state='FL';

count
-------
510
```

Hitung semua nama acara dari tabel EVENT:

```
select count(eventname) from event;

count
-------
8798
```

Hitung semua nama acara dari tabel EVENT:

```
select count(all eventname) from event;

count
-------
8798
```

Hitung semua tempat unik IDs dari tabel EVENT:

```
select count(distinct venueid) as venues from event;

venues
--------
204
```

Hitung berapa kali setiap penjual mencantumkan batch lebih dari empat tiket untuk dijual. Kelompokkan hasil berdasarkan ID penjual:

```
select count(*), sellerid from listing 
where numtickets > 4
group by sellerid
order by 1 desc, 2;

count | sellerid
------+----------
12    |    6386
11    |    17304
11    |    20123
11    |    25428
...
```

Contoh berikut membandingkan nilai pengembalian dan waktu eksekusi untuk COUNT dan PERKIRAAN COUNT. 

```
select  count(distinct pricepaid) from sales;
              
count
-------
  4528


Time: 48.048 ms

               
select approximate count(distinct pricepaid) from sales;

count
-------
  4553


Time: 21.728 ms
```

# Fungsi LISTAGG
<a name="r_LISTAGG"></a>

Untuk setiap grup dalam kueri, fungsi agregat LISTAGG mengurutkan baris untuk grup tersebut sesuai dengan ekspresi ORDER BY, lalu menggabungkan nilai menjadi satu string. 

## Sintaksis
<a name="r_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ]
```

## Argumen
<a name="r_LISTAGG-arguments"></a>

DISTINCT  
Klausa yang menghilangkan nilai duplikat dari ekspresi yang ditentukan sebelum menggabungkan. Spasi trailing diabaikan. Misalnya, string `'a'` dan `'a '` diperlakukan sebagai duplikat. LISTAGG menggunakan nilai pertama yang ditemui. Untuk informasi selengkapnya, lihat [Signifikansi trailing blanko](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

 *aggregate\$1expression*   
 Ekspresi yang valid, seperti nama kolom, yang memberikan nilai untuk digabungkan. Nilai NULL dan string kosong diabaikan. 

 *pembatas*   
Konstanta string untuk memisahkan nilai gabungan. Default-nya adalah NULL.

 *DALAM GRUP (PESANAN BERDASARKAN order\$1list)*   
Sebuah klausa yang menentukan urutan dari nilai agregat. 

## Pengembalian
<a name="r_LISTAGG-data-types"></a>

VARCHAR (MAKS). Jika set hasil lebih besar dari ukuran VARCHAR maksimum, LISTAGG mengembalikan kesalahan berikut:

```
Invalid operation: Result size exceeds LISTAGG limit
```

## Catatan penggunaan
<a name="r_LISTAGG-usage-notes"></a>
+ Jika pernyataan menyertakan beberapa fungsi LISTAGG yang menggunakan klausa WITHERE GROUP, setiap klausa WITHIN GROUP harus menggunakan nilai ORDER BY yang sama.

  Misalnya, pernyataan berikut mengembalikan kesalahan.

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY sellerid) AS dates
  FROM sales;
  ```

  Pernyataan berikut berjalan dengan sukses.

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY dateid) AS dates
  FROM sales;
  
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) AS dates
  FROM sales;
  ```
+ Anda tidak dapat menggunakan fungsi agregat LISTAGG, PERCENTILE\$1CONT, dan MEDIAN dengan fungsi agregat berbeda lainnya.

## Contoh
<a name="r_LISTAGG-examples"></a>

Contoh berikut agregat penjual IDs, dipesan oleh ID penjual. 

```
SELECT LISTAGG(sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
380, 380, 1178, 1178, 1178, 2731, 8117, 12905, 32043, 32043, 32043, 32432, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 47188, 48294
```

Contoh berikut menggunakan DISTINCT untuk mengembalikan daftar penjual unik IDs.

```
SELECT LISTAGG(DISTINCT sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                    
-------------------------------------------------------------------------------------------
380, 1178, 2731, 8117, 12905, 32043, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 48294
```

Contoh berikut agregat penjual IDs dalam urutan tanggal. 

```
SELECT LISTAGG(sellerid, ', ')  
WITHIN GROUP (ORDER BY dateid) 
FROM sales
WHERE eventid = 4337;

   listagg
-----------------------------------------------------------------------------------------------------------------------------------------
 41498, 47188, 47188, 1178, 1178, 1178, 380, 45676, 46324, 48294, 32043, 32043, 32432, 12905, 8117, 38750, 2731, 32432, 32043, 380, 38669
```

Contoh berikut mengembalikan daftar tanggal penjualan yang dipisahkan pipa untuk pembeli dengan ID 660.

```
SELECT LISTAGG(
    (SELECT caldate FROM date WHERE date.dateid=sales.dateid), ' | '    
)
WITHIN GROUP (ORDER BY sellerid DESC, salesid ASC)
FROM sales
WHERE buyerid = 660;

             listagg
-------------------------------------------------
2008-07-16 | 2008-07-09 | 2008-01-01 | 2008-10-26
```

Contoh berikut mengembalikan daftar penjualan yang dipisahkan koma IDs untuk pembeli IDs 660, 661, dan 662.

```
SELECT buyerid, 
LISTAGG(salesid,', ')
WITHIN GROUP (ORDER BY salesid) AS sales_id
FROM sales
WHERE buyerid BETWEEN 660 AND 662
GROUP BY buyerid
ORDER BY buyerid;
            
buyerid |                sales_id
--------+-----------------------------------------------------
660     | 32872, 33095, 33514, 34548
661     | 19951, 20517, 21695, 21931
662     | 3318, 3823, 4215, 51980, 53202, 55908, 57832, 171603
```

# Fungsi MAX
<a name="r_MAX"></a>

 Fungsi MAX mengembalikan nilai maksimum dalam satu set baris. DISTINCT atau ALL dapat digunakan tetapi tidak mempengaruhi hasilnya. 

## Sintaksis
<a name="r_MAX-synopsis"></a>

```
MAX ( [ DISTINCT | ALL ] expression )
```

## Argumen
<a name="r_MAX-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. *Ekspresi* adalah salah satu tipe data berikut:  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ PRECISON GANDA
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ JADWAL
+ VARBYTE
+ SUPER

BERBEDA \$1 SEMUA   
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat dari ekspresi yang ditentukan sebelum menghitung maksimum. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung maksimum. SEMUA adalah default. 

## Jenis Data
<a name="c_Supported_data_types_max"></a>

Mengembalikan tipe data yang sama sebagai *ekspresi*. Ekuivalen Boolean dari fungsi MIN adalah[Fungsi BOOL\$1AND](r_BOOL_AND.md), dan setara Boolean dari MAX adalah. [Fungsi BOOL\$1OR](r_BOOL_OR.md) 

## Contoh
<a name="r_MAX-examples"></a>

Temukan harga tertinggi yang dibayarkan dari semua penjualan: 

```
select max(pricepaid) from sales;

max
----------
12624.00
(1 row)
```

Temukan harga tertinggi yang dibayarkan per tiket dari semua penjualan: 

```
select max(pricepaid/qtysold) as max_ticket_price
from sales;

max_ticket_price
-----------------
2500.00000000
(1 row)
```

# Fungsi MEDIAN
<a name="r_MEDIAN"></a>

Menghitung nilai median untuk rentang nilai. `NULL`nilai dalam rentang diabaikan.

MEDIAN adalah fungsi distribusi terbalik yang mengasumsikan model distribusi kontinu.

Median adalah kasus khusus. [PERSENTILE\$1CONT](r_PERCENTILE_CONT.md)

## Sintaksis
<a name="r_MEDIAN-synopsis"></a>

```
MEDIAN(median_expression)
```

## Argumen
<a name="r_MEDIAN-arguments"></a>

 *median\$1expression*   
Kolom target atau ekspresi tempat fungsi beroperasi.

## Jenis Data
<a name="r_MEDIAN-data-types"></a>

Jenis pengembalian ditentukan oleh tipe data *median\$1expression*. Tabel berikut menunjukkan tipe kembali untuk setiap tipe data *median\$1expression*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_MEDIAN.html)

## Catatan penggunaan
<a name="r_MEDIAN-data-type-usage-notes"></a>

Jika argumen *median\$1expression* adalah tipe `DECIMAL` data yang didefinisikan dengan presisi maksimum 38 digit, ada kemungkinan MEDIAN akan mengembalikan hasil yang tidak akurat atau kesalahan. Jika nilai pengembalian fungsi MEDIAN melebihi 38 digit, hasilnya terpotong agar sesuai, yang menyebabkan hilangnya presisi. Jika, selama interpolasi, hasil antara melebihi presisi maksimum, luapan numerik terjadi dan fungsi mengembalikan kesalahan. Untuk menghindari kondisi ini, sebaiknya gunakan tipe data dengan presisi lebih rendah atau mentransmisikan argumen *median\$1expression* ke presisi yang lebih rendah. 

Jika pernyataan menyertakan beberapa panggilan ke fungsi agregat berbasis sortir (LISTAGG, PERCENTILE\$1CONT, atau MEDIAN), semuanya harus menggunakan nilai ORDER BY yang sama. Perhatikan bahwa MEDIAN menerapkan urutan implisit oleh pada nilai ekspresi. 

Misalnya, pernyataan berikut mengembalikan kesalahan. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

Pernyataan berikut berjalan dengan sukses. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## Contoh
<a name="r_MEDIAN-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Contoh berikut menunjukkan bahwa MEDIAN menghasilkan hasil yang sama seperti PERCENTILE\$1CONT (0.5). 

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

Contoh berikut menemukan jumlah median yang dijual untuk setiap sellerid.

```
SELECT sellerid, 
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+
| sellerid | median |
+----------+--------+
|        1 |    1.5 |
|        2 |      2 |
|        3 |      2 |
|        4 |      2 |
|        5 |      1 |
|        6 |      1 |
|        7 |    1.5 |
|        8 |      1 |
|        9 |      4 |
|       12 |      2 |
+----------+--------+
```

Untuk memverifikasi hasil kueri sebelumnya untuk sellerid pertama, gunakan contoh berikut.

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# Fungsi MIN
<a name="r_MIN"></a>

 Fungsi MIN mengembalikan nilai minimum dalam satu set baris. DISTINCT atau ALL dapat digunakan tetapi tidak mempengaruhi hasilnya.

## Sintaksis
<a name="r_MIN-synopsis"></a>

```
MIN ( [ DISTINCT | ALL ] expression )
```

## Argumen
<a name="r_MIN-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. *Ekspresi* adalah salah satu tipe data berikut:  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ PRECISON GANDA
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ JADWAL
+ VARBYTE
+ SUPER

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat dari ekspresi yang ditentukan sebelum menghitung minimum. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung minimum. SEMUA adalah default.

## Jenis Data
<a name="c_Supported_data_types_min"></a>

 Mengembalikan tipe data yang sama sebagai *ekspresi*. Ekuivalen Boolean dari fungsi MIN adalah[Fungsi BOOL\$1AND](r_BOOL_AND.md), dan Boolean setara dengan MAX adalah. [Fungsi BOOL\$1OR](r_BOOL_OR.md) 

## Contoh
<a name="r_MIN-examples"></a>

Temukan harga terendah yang dibayarkan dari semua penjualan:

```
select min(pricepaid) from sales;

min
-------
20.00
(1 row)
```

Temukan harga terendah yang dibayarkan per tiket dari semua penjualan:

```
select min(pricepaid/qtysold)as min_ticket_price
from sales;

min_ticket_price
------------------
20.00000000
(1 row)
```

# Fungsi PERCENTILE\$1CONT
<a name="r_PERCENTILE_CONT"></a>

PERCENTILE\$1CONT adalah fungsi distribusi terbalik yang mengasumsikan model distribusi kontinu. Dibutuhkan nilai persentil dan spesifikasi sortir, dan mengembalikan nilai interpolasi yang akan jatuh ke dalam nilai persentil yang diberikan sehubungan dengan spesifikasi sortir. 

PERCENTILE\$1CONT menghitung interpolasi linier antara nilai setelah mengurutkannya. Menggunakan nilai persentil `(P)` dan jumlah baris bukan nol `(N)` dalam grup agregasi, fungsi menghitung nomor baris setelah mengurutkan baris sesuai dengan spesifikasi pengurutan. Nomor baris ini `(RN)` dihitung sesuai dengan `RN = (1+ (P*(N-1))` rumus. Hasil akhir dari fungsi agregat dihitung dengan interpolasi linier antara nilai-nilai dari baris pada nomor baris dan. `CRN = CEILING(RN)` `FRN = FLOOR(RN)` 

Hasil akhirnya adalah sebagai berikut.

Jika `(CRN = FRN = RN)` maka hasilnya adalah `(value of expression from row at RN)` 

Jika tidak, hasilnya adalah sebagai berikut:

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

## Sintaksis
<a name="r_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT(percentile)
WITHIN GROUP(ORDER BY expr)
```

## Argumen
<a name="r_PERCENTILE_CONT-arguments"></a>

 *persentil*   
Konstanta numerik antara 0 dan 1. `NULL`nilai diabaikan dalam perhitungan.

*expr*  
Menentukan numerik atau date/time nilai-nilai untuk mengurutkan dan menghitung persentil atas. 

## Pengembalian
<a name="r_PERCENTILE_CONT-returns"></a>

Tipe pengembalian ditentukan oleh tipe data ekspresi ORDER BY dalam klausa WITHIN GROUP. Tabel berikut menunjukkan tipe pengembalian untuk setiap tipe data ekspresi ORDER BY.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_PERCENTILE_CONT.html)

## Catatan penggunaan
<a name="r_PERCENTILE_CONT-usage-notes"></a>

Jika ekspresi ORDER BY adalah tipe data DECIMAL yang ditentukan dengan presisi maksimum 38 digit, ada kemungkinan bahwa PERCENTILE\$1CONT akan mengembalikan hasil yang tidak akurat atau kesalahan. Jika nilai pengembalian fungsi PERCENTILE\$1CONT melebihi 38 digit, hasilnya terpotong agar sesuai, yang menyebabkan hilangnya presisi.. Jika, selama interpolasi, hasil antara melebihi presisi maksimum, luapan numerik terjadi dan fungsi mengembalikan kesalahan. Untuk menghindari kondisi ini, sebaiknya gunakan tipe data dengan presisi lebih rendah atau mentransmisikan ekspresi ORDER BY ke presisi yang lebih rendah.

Jika pernyataan menyertakan beberapa panggilan ke fungsi agregat berbasis sortir (LISTAGG, PERCENTILE\$1CONT, atau MEDIAN), semuanya harus menggunakan nilai ORDER BY yang sama. Perhatikan bahwa MEDIAN menerapkan urutan implisit oleh pada nilai ekspresi. 

Misalnya, pernyataan berikut mengembalikan kesalahan. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

Pernyataan berikut berjalan dengan sukses. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## Contoh
<a name="r_PERCENTILE_CONT-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Contoh berikut menunjukkan bahwa PERCENTILE\$1CONT (0.5) menghasilkan hasil yang sama dengan MEDIAN. 

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

Contoh berikut menemukan PERCENTILE\$1CONT (0,5) dan PERCENTILE\$1CONT (0,75) untuk kuantitas yang dijual untuk setiap sellerid dalam tabel PENJUALAN.

```
SELECT sellerid, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold) as pct_50,
PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY qtysold) as pct_75
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+---------+
| sellerid | pct_50 | pct_75 |
+----------+--------+---------+
|        1 |    1.5 |    1.75 |
|        2 |      2 |    2.25 |
|        3 |      2 |       3 |
|        4 |      2 |       2 |
|        5 |      1 |     1.5 |
|        6 |      1 |       1 |
|        7 |    1.5 |    1.75 |
|        8 |      1 |       1 |
|        9 |      4 |       4 |
|       12 |      2 |    3.25 |
+----------+--------+---------+
```

Untuk memverifikasi hasil kueri sebelumnya untuk sellerid pertama, gunakan contoh berikut.

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# Fungsi STDDEV\$1SAMP dan STDDEV\$1POP
<a name="r_STDDEV_functions"></a>

 Fungsi STDDEV\$1SAMP dan STDDEV\$1POP mengembalikan sampel dan standar deviasi populasi dari satu set nilai numerik (integer, desimal, atau floating-point). Hasil dari fungsi STDDEV\$1SAMP setara dengan akar kuadrat dari varians sampel dari kumpulan nilai yang sama. 

STDDEV\$1SAMP dan STDDEV adalah sinonim untuk fungsi yang sama. 

## Sintaksis
<a name="r_STDDEV_functions-syntax"></a>

```
STDDEV_SAMP | STDDEV ( [ DISTINCT | ALL ] expression)
STDDEV_POP ( [ DISTINCT | ALL ] expression)
```

Ekspresi harus memiliki tipe data integer, desimal, atau floating point. Terlepas dari tipe data ekspresi, tipe pengembalian fungsi ini adalah angka presisi ganda. 

**catatan**  
Standar deviasi dihitung menggunakan aritmatika floating point, yang dapat mengakibatkan sedikit ketidaktepatan.

## Catatan penggunaan
<a name="r_STDDEV_usage_notes"></a>

Ketika standar deviasi sampel (STDDEV atau STDDEV\$1SAMP) dihitung untuk ekspresi yang terdiri dari satu nilai, hasil fungsinya adalah NULL bukan 0. 

## Contoh
<a name="r_STDDEV_functions-examples"></a>

Kueri berikut mengembalikan rata-rata nilai di kolom VENUESEATS dari tabel VENUE, diikuti oleh standar deviasi sampel dan standar deviasi populasi dari kumpulan nilai yang sama. VENUESEATS adalah kolom INTEGER. Skala hasil dikurangi menjadi 2 digit. 

```
select avg(venueseats),
cast(stddev_samp(venueseats) as dec(14,2)) stddevsamp,
cast(stddev_pop(venueseats) as dec(14,2)) stddevpop
from venue;

avg  | stddevsamp | stddevpop
-------+------------+-----------
17503 |   27847.76 |  27773.20
(1 row)
```

Kueri berikut mengembalikan standar deviasi sampel untuk kolom KOMISI dalam tabel PENJUALAN. KOMISI adalah kolom DESIMAL. Skala hasilnya dikurangi menjadi 10 digit. 

```
select cast(stddev(commission) as dec(18,10))
from sales;

stddev
----------------
130.3912659086
(1 row)
```

Kueri berikut menampilkan standar deviasi sampel untuk kolom COMMISSION sebagai integer. 

```
select cast(stddev(commission) as integer)
from sales;

stddev
--------
130
(1 row)
```

Kueri berikut mengembalikan standar deviasi sampel dan akar kuadrat dari varians sampel untuk kolom KOMISI. Hasil perhitungan ini sama. 

```
select
cast(stddev_samp(commission) as dec(18,10)) stddevsamp,
cast(sqrt(var_samp(commission)) as dec(18,10)) sqrtvarsamp
from sales;

stddevsamp   |  sqrtvarsamp
----------------+----------------
130.3912659086 | 130.3912659086
(1 row)
```

# Fungsi SUM
<a name="r_SUM"></a>

 Fungsi SUM mengembalikan jumlah kolom input atau nilai ekspresi. Fungsi SUM bekerja dengan nilai numerik dan mengabaikan nilai NULL. 

## Sintaksis
<a name="r_SUM-synopsis"></a>

```
SUM ( [ DISTINCT | ALL ] expression )
```

## Argumen
<a name="r_SUM-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. *Ekspresi* adalah salah satu tipe data berikut:  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ PRECISON GANDA
+ SUPER

BERBEDA \$1 SEMUA   
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat dari ekspresi yang ditentukan sebelum menghitung jumlah. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung jumlah. SEMUA adalah default. 

## Jenis Data
<a name="c_Supported_data_types_sum"></a>

Jenis argumen yang didukung oleh fungsi SUM adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE PRECISION, dan SUPER.

Jenis pengembalian yang didukung oleh fungsi SUM adalah 
+ BIGINT untuk argumen BIGINT, SMALLINT, dan INTEGER
+ NUMERIK untuk argumen NUMERIK
+ PRESISI GANDA untuk argumen floating point
+ Mengembalikan tipe data yang sama sebagai ekspresi untuk jenis argumen lainnya.

Presisi default untuk hasil fungsi SUM dengan argumen NUMERIK atau DECIMAL adalah 38. Skala hasilnya sama dengan skala argumen. Misalnya, SUM kolom DEC (5,2) mengembalikan tipe data DEC (38,2).

## Contoh
<a name="r_SUM-examples"></a>

 Temukan jumlah semua komisi yang dibayarkan dari tabel PENJUALAN: 

```
select sum(commission) from sales;

sum
-------------
16614814.65
(1 row)
```

Temukan jumlah kursi di semua tempat di negara bagian Florida: 

```
select sum(venueseats) from venue
where venuestate = 'FL';

sum
--------
250411
(1 row)
```

Temukan jumlah kursi yang terjual pada bulan Mei: 

```
select sum(qtysold) from sales, date
where sales.dateid = date.dateid and date.month = 'MAY';

sum
-------
32291
(1 row)
```

# Fungsi VAR\$1SAMP dan VAR\$1POP
<a name="r_VARIANCE_functions"></a>

 Fungsi VAR\$1SAMP dan VAR\$1POP mengembalikan sampel dan varians populasi dari sekumpulan nilai numerik (integer, desimal, atau floating-point). Hasil dari fungsi VAR\$1SAMP setara dengan standar deviasi sampel kuadrat dari kumpulan nilai yang sama. 

VAR\$1SAMP dan VARIANCE adalah sinonim untuk fungsi yang sama. 

## Sintaksis
<a name="r_VARIANCE_functions-syntax"></a>

```
VAR_SAMP | VARIANCE ( [ DISTINCT | ALL ] expression)
VAR_POP ( [ DISTINCT | ALL ] expression)
```

Ekspresi harus memiliki tipe data integer, desimal, atau floating-point. Terlepas dari tipe data ekspresi, tipe pengembalian fungsi ini adalah angka presisi ganda. 

**catatan**  
Hasil dari fungsi-fungsi ini dapat bervariasi di seluruh cluster data warehouse, tergantung pada konfigurasi cluster dalam setiap kasus. 

## Catatan penggunaan
<a name="r_VARIANCE_usage_notes"></a>

Ketika varians sampel (VARIANCE atau VAR\$1SAMP) dihitung untuk ekspresi yang terdiri dari satu nilai, hasil fungsinya adalah NULL bukan 0. 

## Contoh
<a name="r_VARIANCE_functions-examples"></a>

Kueri berikut mengembalikan sampel bulat dan varians populasi kolom NUMTICKETS dalam tabel LISTING. 

```
select avg(numtickets),
round(var_samp(numtickets)) varsamp,
round(var_pop(numtickets)) varpop
from listing;

avg | varsamp | varpop
-----+---------+--------
10 |      54 |     54
(1 row)
```

Kueri berikut menjalankan perhitungan yang sama tetapi melemparkan hasilnya ke nilai desimal. 

```
select avg(numtickets),
cast(var_samp(numtickets) as dec(10,4)) varsamp,
cast(var_pop(numtickets) as dec(10,4)) varpop
from listing;

avg | varsamp | varpop
-----+---------+---------
10 | 53.6291 | 53.6288
(1 row)
```

# Fungsi array
<a name="c_Array_Functions"></a>

Berikut ini, Anda dapat menemukan deskripsi untuk fungsi array untuk SQL yang didukung Amazon Redshift untuk mengakses dan memanipulasi array.

**Topics**
+ [Fungsi ARRAY](r_array.md)
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)
+ [Fungsi ARRAY\$1CONTAINS](array_contains.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)
+ [Fungsi ARRAY\$1EXCEPLE](array_except.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)
+ [Fungsi ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fungsi ARRAY\$1POSITION](array_position.md)
+ [Fungsi ARRAY\$1POSITIONS](array_positions.md)
+ [Fungsi ARRAY\$1SORT](array_sort.md)
+ [Fungsi ARRAY\$1UNION](array_union.md)
+ [Fungsi ARRAYS\$1OVERLAP](arrays_overlap.md)
+ [Fungsi GET\$1ARRAY\$1LENGTH](get_array_length.md)
+ [Fungsi SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fungsi SUBARRAY](r_subarray.md)

# Fungsi ARRAY
<a name="r_array"></a>

Membuat array tipe data SUPER.

## Sintaksis
<a name="r_array-synopsis"></a>

```
ARRAY( [ expr1 ] [, expr2 [, ... ]] )
```

## Pendapat
<a name="r_array-argument"></a>

 *expr1, expr2*   
Ekspresi tipe data Amazon Redshift apa pun kecuali jenis tanggal dan waktu, karena Amazon Redshift tidak mentransmisikan tipe tanggal dan waktu ke tipe data SUPER. Argumen tidak harus dari tipe data yang sama.

## Jenis pengembalian
<a name="r_array-return-type"></a>

Fungsi ARRAY mengembalikan tipe data SUPER.

## Contoh
<a name="r_array-example"></a>

Contoh berikut menunjukkan array nilai numerik dan array tipe data yang berbeda.

```
--an array of numeric values
select ARRAY(1,50,null,100);
      array
------------------
 [1,50,null,100]
(1 row)

--an array of different data types
select ARRAY(1,'abc',true,3.14);
        array
-----------------------
 [1,"abc",true,3.14]
(1 row)
```

## Lihat juga
<a name="r_array-see-also"></a>
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)
+ [Fungsi SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)

# Fungsi ARRAY\$1CONCAT
<a name="r_array_concat"></a>

Menggabungkan dua array untuk membuat array yang berisi semua elemen dalam array pertama diikuti oleh semua elemen dalam array kedua. Kedua argumen harus array SUPER valid.

## Sintaksis
<a name="r_array_concat-synopsis"></a>

```
ARRAY_CONCAT( array1, array2 )
```

## Argumen
<a name="r_array_concat-argument-arguments"></a>

 *array1*  
Nilai yang menentukan yang pertama dari dua array untuk digabungkan.

 *array2*  
Nilai yang menentukan kedua dari dua array untuk digabungkan.

## Jenis pengembalian
<a name="r_array_concat-return-type"></a>

Fungsi ARRAY\$1CONCAT mengembalikan nilai data SUPER.

## Contoh
<a name="r_array_concat-example"></a>

Contoh berikut menunjukkan penggabungan dua array dari jenis yang sama dan penggabungan dua array dari jenis yang berbeda.

```
-- concatenating two arrays 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY(10003,10004));
              array_concat
------------------------------------
 [10001,10002,10003,10004]
(1 row)

-- concatenating two arrays of different types 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY('ab','cd'));
          array_concat
------------------------------
 [10001,10002,"ab","cd"]
(1 row)
```

## Lihat juga
<a name="r_array_concat-see-also"></a>
+ [Fungsi ARRAY\$1UNION](array_union.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)
+ [Fungsi SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)

# Fungsi ARRAY\$1CONTAINS
<a name="array_contains"></a>

Memeriksa apakah array berisi nilai yang diberikan dan mengembalikan TRUE jika ditemukan.

## Sintaksis
<a name="array_contains-syntax"></a>

```
ARRAY_CONTAINS( array, value [, null_match] )
```

## Argumen
<a name="array_contains-arguments"></a>

 *array*   
Ekspresi SUPER yang menentukan array untuk mencari.

 *nilai*   
Sebuah nilai yang menentukan elemen untuk mencari.

 *null\$1match*   
Sebuah nilai boolean yang menentukan bagaimana nilai-nilai NULL ditangani:  
+ *null\$1match* = FALSE: Mencari NULL mengembalikan NULL. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, mengembalikan NULL.
+ *null\$1match* = TRUE: diperlakukan sebagai elemen NULLs yang valid dan dapat dicari. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, ia mengembalikan FALSE.
Defaultnya adalah BETUL.  
Penanganan NULL default juga dapat ditentukan oleh opsi konfigurasi:  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Jenis pengembalian
<a name="array_contains-return-type"></a>

Fungsi ARRAY\$1CONTAINS mengembalikan tipe BOOLEAN.

## Contoh
<a name="array_contains-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1CONTAINS.

```
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), 'red');
array_contains
----------------
 t
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), NULL);
array_contains
----------------
 t
(1 row)

-- The array can contain NULLs
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
array_contains
----------------
 f
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke FALSE. Perhatikan bahwa menentukan perilaku *null\$1match* dalam fungsi akan mengganti pengaturan konfigurasi default.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), NULL, FALSE);
array_contains
----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'green');
array_contains
----------------
 t
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue');
array_contains
----------------
 
(1 row)
```

## Lihat juga
<a name="array_contains-see-also"></a>
+ [Fungsi ARRAY\$1POSITION](array_position.md)
+ [Fungsi ARRAY\$1POSITIONS](array_positions.md)
+ [Fungsi ARRAYS\$1OVERLAP](arrays_overlap.md)

# Fungsi ARRAY\$1DISTINCT
<a name="array_distinct"></a>

Membuat array baru yang hanya berisi elemen unik dari array input, menghapus semua duplikat. Urutan elemen dalam array output tidak dijamin cocok dengan urutan input. Nilai NULL diperlakukan sebagai elemen yang valid; jika NULLs ada beberapa dalam array input, hanya satu NULL yang muncul di output.

## Sintaksis
<a name="array_distinct-syntax"></a>

```
ARRAY_DISTINCT( array )
```

## Argumen
<a name="array_distinct-arguments"></a>

 *array*   
Ekspresi SUPER yang menentukan array.

## Jenis pengembalian
<a name="array_distinct-return-type"></a>

Fungsi ARRAY\$1DISTINCT mengembalikan tipe SUPER.

## Contoh
<a name="array_distinct-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1DISTINCT.

```
SELECT ARRAY_DISTINCT(ARRAY(1, 1, 'a', 'a', NULL, NULL));
 array_distinct 
----------------
 [1,"a",null]
(1 row)

SELECT ARRAY_DISTINCT(ARRAY_CONCAT(ARRAY(1,2,3,3),ARRAY(2,3,4,4)));
 array_distinct 
----------------
 [1,2,3,4]
(1 row)
```

## Lihat juga
<a name="array_distinct-see-also"></a>
+ [Fungsi ARRAY\$1UNION](array_union.md)
+ [Fungsi ARRAY\$1SORT](array_sort.md)
+ [Fungsi ARRAY\$1EXCEPLE](array_except.md)
+ [Fungsi ARRAY\$1INTERSECTION](array_intersection.md)

# Fungsi ARRAY\$1EXCEPLE
<a name="array_except"></a>

Mengembalikan perbedaan antara dua array dengan menjaga elemen dari array pertama yang tidak ada dalam array kedua. Fungsinya null-safe, artinya memperlakukan diperlakukan sebagai objek NULLs yang dikenal.

## Sintaksis
<a name="array_except-syntax"></a>

```
ARRAY_EXCEPT( array1, array2 [, distinct] )
```

## Argumen
<a name="array_except-arguments"></a>

 *array1*   
Ekspresi SUPER yang menentukan array pertama.

 *array2*   
Ekspresi SUPER yang menentukan array kedua.

 *berbeda*   
Nilai boolean yang menentukan apakah akan mengembalikan elemen yang berbeda saja:  
+ *beda* = FALSE: Semantik multi-set berlaku. Setiap kemunculan elemen dalam array pertama dicocokkan dengan kejadian di array kedua. Jika array pertama memiliki lebih banyak kemunculan elemen daripada array kedua, kejadian tambahan dipertahankan dalam hasilnya.
+ *beda* = BENAR: Setel semantik berlaku. Kedua array diperlakukan sebagai set, mengabaikan elemen duplikat. Elemen dari array pertama dihapus jika ada di mana saja di array kedua, terlepas dari jumlah kejadian.
Defaultnya adalah FALSE.

## Jenis pengembalian
<a name="array_except-return-type"></a>

Fungsi ARRAY\$1EXCEPLE mengembalikan tipe SUPER.

## Contoh
<a name="array_except-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1EXCEPLE.

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_except
--------------
 ["a"]
(1 row)
```

Semantik multi-set:

```
SELECT ARRAY_EXCEPT(ARRAY('b','b','b','b'), ARRAY('b','b'));
 array_except
--------------
 ["b","b"]
(1 row)
```

Set semantik:

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','b'), ARRAY('b'), TRUE);
 array_except
--------------
 ["a"]
(1 row)
```

NULLs diperlakukan sebagai objek yang dikenal.

```
SELECT ARRAY_EXCEPT(ARRAY('a',NULL), ARRAY(NULL));
 array_except
--------------
 ["a"]
(1 row)
```

## Lihat juga
<a name="array_except-see-also"></a>
+ [Fungsi ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fungsi ARRAY\$1UNION](array_union.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)
+ [Fungsi ARRAYS\$1OVERLAP](arrays_overlap.md)

# Fungsi ARRAY\$1FLATTEN
<a name="array_flatten"></a>

Menggabungkan beberapa array ke dalam satu array tipe SUPER. Elemen dari array bagian dalam pertama muncul pertama, diikuti oleh elemen dari array dalam berikutnya. NULLs diperlakukan sebagai objek yang dikenal.

## Sintaksis
<a name="array_flatten-syntax"></a>

```
ARRAY_FLATTEN( array )
```

## Argumen
<a name="array_flatten-arguments"></a>

 *array*   
Ekspresi SUPER dari bentuk array.

## Jenis pengembalian
<a name="array_flatten-returm-type"></a>

Fungsi ARRAY\$1FLATTEN mengembalikan tipe SUPER.

## Contoh
<a name="array_flatten-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1FLATTEN.

```
SELECT ARRAY_FLATTEN(ARRAY(ARRAY(1,2,3,4),ARRAY(5,6,7,8),ARRAY(9,10)));
     array_flatten
------------------------
 [1,2,3,4,5,6,7,8,9,10]
(1 row)
```

## Lihat juga
<a name="array_flatten-see-also"></a>
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)
+ [Fungsi SUBARRAY](r_subarray.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)

# Fungsi ARRAY\$1INTERSECTION
<a name="array_intersection"></a>

Mengembalikan array baru yang hanya berisi unsur-unsur yang ada di kedua array input. Fungsinya null-safe, artinya memperlakukan diperlakukan sebagai objek NULLs yang dikenal. Urutan elemen dalam hasil tidak dijamin.

## Sintaksis
<a name="array_intersection-syntax"></a>

```
ARRAY_INTERSECTION( array1, array2 [, distinct] )
```

## Argumen
<a name="array_intersection-arguments"></a>

 *array1*   
Ekspresi SUPER yang menentukan array.

 *array2*   
Ekspresi SUPER yang menentukan array.

 *berbeda*   
Nilai boolean yang menentukan apakah akan mengembalikan elemen yang berbeda saja:  
+ *beda* = FALSE: Semantik multi-set berlaku. Elemen duplikat dipertahankan, dan frekuensi setiap elemen dalam hasil sama dengan minimum frekuensinya dalam dua array input.
+ *beda* = BENAR: Setel semantik berlaku. Hanya elemen unik yang umum untuk kedua array yang dikembalikan, tanpa duplikat.
Defaultnya adalah FALSE.

## Jenis pengembalian
<a name="array_intersection-return-type"></a>

Fungsi ARRAY\$1INTERSECTION mengembalikan tipe SUPER.

## Contoh
<a name="array_intersection-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1INTERSECTION.

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_intersection 
--------------------
 ["b","c"]
(1 row)
```

Semantik multi-set:

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'));
 array_intersection 
--------------------
 ["b","b"]
(1 row)
```

Set semantik:

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'), TRUE);
 array_intersection 
--------------------
 ["b"]
(1 row)
```

NULLs diperlakukan sebagai objek yang dikenal.

```
SELECT ARRAY_INTERSECTION(ARRAY('a',NULL), ARRAY('b',NULL));
 array_intersection 
--------------------
 [null]
(1 row)
```

## Lihat juga
<a name="array_intersection-see-also"></a>
+ [Fungsi ARRAY\$1EXCEPLE](array_except.md)
+ [Fungsi ARRAYS\$1OVERLAP](arrays_overlap.md)
+ [Fungsi ARRAY\$1UNION](array_union.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)

# Fungsi ARRAY\$1POSITION
<a name="array_position"></a>

Mengembalikan posisi (indeks) dari kejadian pertama dari elemen tertentu dalam array. Indeks berbasis 0, di mana 0 menunjukkan elemen pertama, 1 menunjukkan elemen kedua, dan seterusnya. Mengembalikan -1 jika elemen tidak ditemukan dalam array.

Fungsi mengembalikan hanya posisi kejadian pertama. Untuk menemukan semua kejadian, pertimbangkan untuk menggunakan [Fungsi ARRAY\$1POSITIONS](array_positions.md) fungsi.

## Sintaksis
<a name="array_position-syntax"></a>

```
ARRAY_POSITION( array, value [, null_match] )
```

## Argumen
<a name="array_position-arguments"></a>

 *array*   
Ekspresi SUPER yang menentukan array untuk mencari.

 *nilai*   
Sebuah nilai yang menentukan elemen untuk mencari.

 *null\$1match*   
Sebuah nilai boolean yang menentukan bagaimana nilai-nilai NULL ditangani:  
+ *null\$1match* = FALSE: Mencari NULL mengembalikan NULL. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, mengembalikan NULL.
+ *null\$1match* = TRUE: diperlakukan sebagai elemen NULLs yang valid dan dapat dicari. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, ia mengembalikan -1.
Defaultnya adalah BETUL.  
Penanganan NULL default juga dapat ditentukan oleh opsi konfigurasi:  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Jenis pengembalian
<a name="array_position-return-type"></a>

Fungsi ARRAY\$1POSITION mengembalikan tipe INT.

## Contoh
<a name="array_position-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1POSITION.

```
SELECT ARRAY_POSITION(ARRAY('red', 'green'), 'red');
 array_position 
----------------
              0
(1 row)

SELECT ARRAY_POSITION(ARRAY(1, 2, 3), 4);
 array_position 
----------------
             -1
(1 row)

-- only the position of the first occurrence is returned
SELECT ARRAY_POSITION(ARRAY('red', 'green', 'red'), 'red');
 array_position 
----------------
              0
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), NULL);
 array_position 
----------------
              1
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_position 
----------------
             -1
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke FALSE. Perhatikan bahwa menentukan perilaku *null\$1match* dalam fungsi akan mengganti pengaturan konfigurasi default.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITION(ARRAY('red', 'green'), NULL, FALSE);
 array_position 
----------------
               
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'green');
 array_position 
----------------
              2
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue');
 array_position 
----------------
               
(1 row)
```

## Lihat juga
<a name="array_position-see-also"></a>
+ [Fungsi ARRAY\$1POSITIONS](array_positions.md)
+ [Fungsi ARRAY\$1CONTAINS](array_contains.md)
+ [Fungsi SUBARRAY](r_subarray.md)

# Fungsi ARRAY\$1POSITIONS
<a name="array_positions"></a>

Mengembalikan array posisi (indeks) di mana elemen tertentu muncul dalam array input. Indeks berbasis 0, di mana 0 menunjukkan elemen pertama, 1 menunjukkan elemen kedua, dan seterusnya. Mengembalikan array kosong jika elemen tidak ditemukan.

## Sintaksis
<a name="array_positions-syntax"></a>

```
ARRAY_POSITIONS( array, value [, null_match] )
```

## Argumen
<a name="array_positions-arguments"></a>

 *array*   
Ekspresi SUPER yang menentukan array untuk mencari.

 *nilai*   
Sebuah nilai yang menentukan elemen untuk mencari.

 *null\$1match*   
Sebuah nilai boolean yang menentukan bagaimana nilai-nilai NULL ditangani:  
+ *null\$1match* = FALSE: Mencari NULL mengembalikan NULL. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, mengembalikan NULL.
+ *null\$1match* = TRUE: diperlakukan sebagai elemen NULLs yang valid dan dapat dicari. Jika array berisi nilai NULL dan tidak ada kecocokan ditemukan untuk nilai pencarian non-NULL, ia mengembalikan array kosong.
Defaultnya adalah BETUL.  
Penanganan NULL default juga dapat ditentukan oleh opsi konfigurasi:  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Jenis pengembalian
<a name="array_positions-return-type"></a>

Fungsi ARRAY\$1POSITIONS mengembalikan tipe SUPER.

## Contoh
<a name="array_positions-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1POSITIONS.

```
SELECT ARRAY_POSITIONS(ARRAY('red', 'green', 'red'), 'red');
 array_positions 
-----------------
 [0,2]
(1 row)

SELECT ARRAY_POSITIONS(ARRAY(1, 2, 3), 4);
 array_positions 
-----------------
 []
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green', NULL), NULL);
 array_positions 
-----------------
 [1,3]
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_positions 
-----------------
 []
(1 row)
```

Contoh berikut menunjukkan perilaku fungsi dengan *null\$1match* disetel ke FALSE. Perhatikan bahwa menentukan perilaku *null\$1match* dalam fungsi akan mengganti pengaturan konfigurasi default.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITIONS(ARRAY('red', 'green'), NULL, FALSE);
 array_positions 
-----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'green');
 array_positions 
-----------------
 [2]
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue');
 array_positions 
-----------------
 
(1 row)
```

## Lihat juga
<a name="array_positions-see-also"></a>
+ [Fungsi ARRAY\$1POSITION](array_position.md)
+ [Fungsi ARRAY\$1CONTAINS](array_contains.md)
+ [Fungsi SUBARRAY](r_subarray.md)

# Fungsi ARRAY\$1SORT
<a name="array_sort"></a>

Membuat versi yang diurutkan dari array input baik dalam urutan naik atau turun. Anda dapat menentukan di mana nilai NULL akan muncul dalam hasil. Fungsinya null-safe, artinya memperlakukan diperlakukan sebagai objek NULLs yang dikenal.

## Sintaksis
<a name="array_sort-syntax"></a>

```
ARRAY_SORT( array [, sort_ascending [, nulls_first]] )
```

## Argumen
<a name="array_sort-arguments"></a>

 *array*   
Ekspresi SUPER yang menentukan array yang akan diurutkan.

 *sort\$1ascending*   
Nilai boolean yang menentukan apakah akan mengurutkan array dalam urutan naik atau turun:  
+ Tentukan TRUE untuk mengurutkan elemen dalam urutan menaik.
+ Tentukan FALSE untuk mengurutkan elemen dalam urutan menurun.
Defaultnya adalah BETUL.

 *nulls\$1first*   
Nilai boolean yang menentukan posisi NULL:  
+ Tentukan TRUE untuk ditempatkan NULLs di awal array yang diurutkan.
+ Tentukan FALSE untuk ditempatkan NULLs di akhir array yang diurutkan.

## Jenis pengembalian
<a name="array_sort-return-type"></a>

Fungsi ARRAY\$1SORT mengembalikan tipe SUPER.

## Catatan
<a name="array_sort-note"></a>

Saat menyortir array yang berisi tipe data campuran, elemen diurutkan sesuai dengan prioritas tipe berikut:
+ Nilai Boolean
+ Nilai numerik
+ Nilai string
+ Array
+ Objek/Kamus

Dalam setiap kategori tipe, elemen diurutkan menurut urutan alaminya (misalnya, angka diurutkan secara numerik, string menurut abjad).

## Contoh
<a name="array_sort-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1SORT.

```
-- Ascending order (default)
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false));
        array_sort        
--------------------------
 [false,0,1,"a","b",null]
(1 row)

-- Descending order
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False);
        array_sort        
--------------------------
 [null,"b","a",1,0,false]
(1 row)

-- Descending order with NULLs at the end of the sorted array
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False, False);
        array_sort        
--------------------------
 ["b","a",1,0,false,null]
(1 row)
```

## Lihat juga
<a name="array_sort-see-also"></a>
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)
+ [Fungsi SUBARRAY](r_subarray.md)

# Fungsi ARRAY\$1UNION
<a name="array_union"></a>

Menggabungkan dua array dan mengembalikan array tunggal yang berisi semua nilai unik, menghapus duplikat apapun. Fungsinya null-safe, artinya memperlakukan diperlakukan sebagai objek NULLs yang dikenal. Urutan elemen dalam hasil tidak dijamin.

## Sintaksis
<a name="array_union-syntax"></a>

```
ARRAY_UNION( array1, array2 )
```

## Argumen
<a name="array_union-arguments"></a>

 *array1*   
Ekspresi SUPER yang menentukan array pertama.

 *array2*   
Ekspresi SUPER yang menentukan array kedua.

## Jenis pengembalian
<a name="array_union-return-type"></a>

Fungsi ARRAY\$1UNION mengembalikan tipe SUPER.

## Contoh
<a name="array_union-example"></a>

Contoh berikut menunjukkan fungsi ARRAY\$1UNION.

```
SELECT ARRAY_UNION(ARRAY('a','b','b'), ARRAY('b','c','c'));
  array_union  
---------------
 ["a","b","c"]
(1 row)
```

Urutan elemen tidak dijamin:

```
SELECT ARRAY_UNION(ARRAY('b','a','b'), ARRAY(NULL,'b',NULL));
  array_union   
----------------
 ["b","a",null]
(1 row)
```

## Lihat juga
<a name="array_union-see-also"></a>
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)
+ [Fungsi ARRAY\$1DISTINCT](array_distinct.md)
+ [Fungsi ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fungsi ARRAY\$1EXCEPLE](array_except.md)

# Fungsi ARRAYS\$1OVERLAP
<a name="arrays_overlap"></a>

Memeriksa apakah dua array memiliki elemen umum. Mengembalikan TRUE jika array berbagi setidaknya satu elemen, atau FALSE jika tidak ada elemen umum yang ada. Fungsinya null-safe, artinya memperlakukan diperlakukan sebagai objek NULLs yang dikenal.

## Sintaksis
<a name="arrays_overlap-syntax"></a>

```
ARRAYS_OVERLAP( array1, array2 )
```

## Argumen
<a name="arrays_overlap-arguments"></a>

 *array1*   
Ekspresi SUPER yang menentukan array.

 *array2*   
Ekspresi SUPER yang menentukan array.

## Jenis pengembalian
<a name="arrays_overlap-return-type"></a>

Fungsi ARRAYS\$1OVERLAP mengembalikan tipe Boolean.

## Contoh
<a name="arrays_overlap-example"></a>

Contoh berikut menunjukkan fungsi ARRAYS\$1OVERLAP.

```
SELECT ARRAYS_OVERLAP(ARRAY('blue', 'green'), ARRAY('red', 'green'));
 arrays_overlap 
----------------
 t
(1 row)
```

Contoh berikut menunjukkan bahwa NULLs diperlakukan sebagai elemen yang valid.

```
SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green', NULL));
 arrays_overlap 
----------------
 t
(1 row)

SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green'));
 arrays_overlap 
----------------
 f
(1 row)

SELECT ARRAYS_OVERLAP(JSON_PARSE('[null]'), ARRAY(NULL));
 arrays_overlap 
----------------
 t
(1 row)
```

## Lihat juga
<a name="arrays_overlap-see-also"></a>
+ [Fungsi ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fungsi ARRAY\$1CONTAINS](array_contains.md)
+ [Fungsi ARRAY\$1EXCEPLE](array_except.md)

# Fungsi GET\$1ARRAY\$1LENGTH
<a name="get_array_length"></a>

Mengembalikan panjang array SUPER diberikan objek atau array path.

## Sintaksis
<a name="get_array_length-syntax"></a>

```
GET_ARRAY_LENGTH( super_expr )
```

## Argumen
<a name="get_array_length-arguments"></a>

 *super\$1expr*   
Ekspresi SUPER yang valid dari bentuk array.

## Jenis pengembalian
<a name="get_array_length-returm-type"></a>

Fungsi GET\$1ARRAY\$1LENGTH mengembalikan sebuah INT. 

## Contoh
<a name="get_array_length-example"></a>

Contoh berikut menunjukkan fungsi GET\$1ARRAY\$1LENGTH.

```
SELECT GET_ARRAY_LENGTH(ARRAY(1,2,3,4,5,6,7,8,9,10));
 get_array_length
----------------------
            10
(1 row)
```

# Fungsi SPLIT\$1TO\$1ARRAY
<a name="split_to_array"></a>

Menggunakan pembatas sebagai parameter opsional. Jika tidak ada pembatas, maka defaultnya adalah koma.

## Sintaksis
<a name="split_to_array-syntax"></a>

```
SPLIT_TO_ARRAY( string, delimiter )
```

## Argumen
<a name="split_to_array-arguments"></a>

 **tali**   
String input yang akan dibagi.

 **pembatas**   
Nilai opsional di mana string input akan dibagi. Default adalah koma.

## Jenis pengembalian
<a name="split_to_array-return-type"></a>

Fungsi SPLIT\$1TO\$1ARRAY mengembalikan nilai data SUPER.

## Contoh
<a name="split_to_array-example"></a>

Contoh berikut menunjukkan fungsi SPLIT\$1TO\$1ARRAY.

```
SELECT SPLIT_TO_ARRAY('12|345|6789', '|');
     split_to_array
-------------------------
 ["12","345","6789"]
(1 row)
```

## Lihat juga
<a name="split_to_array-see-also"></a>
+ [Fungsi ARRAY](r_array.md)
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)
+ [Fungsi SUBARRAY](r_subarray.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)

# Fungsi SUBARRAY
<a name="r_subarray"></a>

Ekstrak sebagian dari array mulai dari posisi tertentu. Mengembalikan array baru yang berisi jumlah tertentu elemen dari array input.

## Sintaksis
<a name="r_subarray-syntax"></a>

```
SUBARRAY( super_expr, start_position, length )
```

## Argumen
<a name="r_subarray-arguments"></a>

*super\$1expr*  
Ekspresi SUPER valid dalam bentuk array.

*start\$1position*  
Sebuah integer yang menentukan posisi awal untuk ekstraksi. Indeks berbasis 0, di mana 0 menunjukkan elemen pertama. Jika start\$1position berada di luar panjang array, array kosong dikembalikan.

*panjang*  
Sebuah integer opsional yang menentukan jumlah elemen untuk mengekstrak. Jika dihilangkan, semua elemen dari posisi awal hingga akhir array dikembalikan.

## Jenis pengembalian
<a name="r_subarray-return-type"></a>

Fungsi SUBARRAY mengembalikan nilai data SUPER.

## Contoh
<a name="r_subarray-examples"></a>

Berikut ini adalah contoh dari fungsi SUBARRAY.

```
 SELECT SUBARRAY(ARRAY('a', 'b', 'c', 'd', 'e', 'f'), 2, 3);
   subarray
---------------
 ["c","d","e"]
(1 row)
```

## Lihat juga
<a name="r_subarray-see-also"></a>
+ [Fungsi ARRAY\$1POSITION](array_position.md)
+ [Fungsi ARRAY\$1POSITIONS](array_positions.md)
+ [Fungsi ARRAY\$1FLATTEN](array_flatten.md)
+ [Fungsi ARRAY\$1CONCAT](r_array_concat.md)

# Fungsi agregat bit-wise
<a name="c_bitwise_aggregate_functions"></a>

Fungsi agregat bit-wise menghitung operasi bit untuk melakukan agregasi kolom integer dan kolom yang dapat dikonversi atau dibulatkan ke nilai integer.

**Topics**
+ [Menggunakan NULLs agregasi bit-wise](#c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations)
+ [Dukungan DISTINCT untuk agregasi bit-wise](#distinct-support-for-bit-wise-aggregations)
+ [Contoh ikhtisar untuk fungsi bit-wise](#r_bitwise_example)
+ [Fungsi BIT\$1AND](r_BIT_AND.md)
+ [Fungsi BIT\$1OR](r_BIT_OR.md)
+ [Fungsi BOOL\$1AND](r_BOOL_AND.md)
+ [Fungsi BOOL\$1OR](r_BOOL_OR.md)

## Menggunakan NULLs agregasi bit-wise
<a name="c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations"></a>

Saat Anda menerapkan fungsi bit-wise ke kolom yang nullable, nilai NULL apa pun dihilangkan sebelum hasil fungsi dihitung. Jika tidak ada baris yang memenuhi syarat untuk agregasi, fungsi bit-wise mengembalikan NULL. Perilaku yang sama berlaku untuk fungsi agregat reguler. Berikut adalah contohnya.

```
select sum(venueseats), bit_and(venueseats) from venue
where venueseats is null;

sum  | bit_and
------+---------
null |    null
(1 row)
```

## Dukungan DISTINCT untuk agregasi bit-wise
<a name="distinct-support-for-bit-wise-aggregations"></a>

Seperti fungsi agregat lainnya, fungsi bit-wise mendukung kata kunci DISTINCT. 

Namun, menggunakan DISTINCT dengan fungsi-fungsi ini tidak berdampak pada hasil. Contoh pertama dari suatu nilai cukup untuk memenuhi operasi AND atau OR yang sedikit bijak. Tidak ada bedanya jika nilai duplikat hadir dalam ekspresi yang sedang dievaluasi. 

Karena pemrosesan DISTINCT kemungkinan akan menimbulkan beberapa overhead eksekusi kueri, sebaiknya Anda tidak menggunakan DISTINCT dengan fungsi bit-wise.

## Contoh ikhtisar untuk fungsi bit-wise
<a name="r_bitwise_example"></a>

Berikut ini, Anda dapat menemukan beberapa contoh ikhtisar yang menunjukkan cara bekerja dengan fungsi bit-wise. Anda juga dapat menemukan contoh kode spesifik dengan setiap deskripsi fungsi.

Contoh untuk fungsi bit-wise didasarkan pada database sampel TICKIT. Tabel USERS dalam database sampel TICKIT berisi beberapa kolom Boolean yang menunjukkan apakah setiap pengguna diketahui menyukai berbagai jenis acara, seperti olahraga, teater, opera, dan sebagainya. Berikut contohnya.

```
select userid, username, lastname, city, state, 
likesports, liketheatre
from users limit 10;

userid | username | lastname  |     city     | state | likesports | liketheatre
-------+----------+-----------+--------------+-------+------------+-------------
1 | JSG99FHE | Taylor    | Kent         | WA    | t          | t
9 | MSD36KVR | Watkins   | Port Orford  | MD    | t          | f
```

Asumsikan bahwa versi baru dari tabel USERS dibangun dengan cara yang berbeda. Dalam versi baru ini, kolom integer tunggal yang mendefinisikan (dalam bentuk biner) delapan jenis peristiwa yang disukai atau tidak disukai setiap pengguna. Dalam desain ini, setiap posisi bit mewakili jenis acara. Seorang pengguna yang menyukai semua delapan jenis memiliki semua delapan bit diatur ke 1 (seperti pada baris pertama dari tabel berikut). Seorang pengguna yang tidak menyukai peristiwa ini memiliki semua delapan bit disetel ke 0 (lihat baris kedua). Seorang pengguna yang hanya menyukai olahraga dan jazz diwakili di baris ketiga berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_bitwise_aggregate_functions.html)

Dalam tabel database, nilai-nilai biner ini dapat disimpan dalam kolom LIKES tunggal sebagai bilangan bulat, seperti yang ditunjukkan berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_bitwise_aggregate_functions.html)

# Fungsi BIT\$1AND
<a name="r_BIT_AND"></a>

Fungsi BIT\$1AND menjalankan operasi AND bit-wise pada semua nilai dalam kolom atau ekspresi integer tunggal. Fungsi ini menggabungkan setiap bit dari setiap nilai biner yang sesuai dengan setiap nilai integer dalam ekspresi.

Fungsi BIT\$1AND mengembalikan hasil `0` jika tidak ada bit diatur ke 1 di semua nilai. Jika satu atau lebih bit diatur ke 1 di semua nilai, fungsi mengembalikan nilai integer. Bilangan bulat ini adalah angka yang sesuai dengan nilai biner untuk bit-bit tersebut.

Misalnya, tabel berisi empat nilai integer dalam kolom: 3, 7, 10, dan 22. Bilangan bulat ini direpresentasikan dalam bentuk biner sebagai berikut:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_BIT_AND.html)

Sebuah operasi BIT\$1AND pada dataset ini menemukan bahwa semua bit diatur ke `1` dalam posisi saja. second-to-last Hasilnya adalah nilai biner`00000010`, yang mewakili nilai `2` integer. Oleh karena itu, fungsi BIT\$1AND kembali. `2`

## Sintaksis
<a name="r_BIT_AND-synopsis"></a>

```
BIT_AND ( [DISTINCT | ALL] expression )
```

## Argumen
<a name="r_BIT_AND-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. Ekspresi ini harus memiliki INT, INT2, atau tipe INT8 data. Fungsi mengembalikan INT setara, INT2, atau tipe INT8 data.

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat untuk ekspresi yang ditentukan sebelum menghitung hasilnya. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat. SEMUA adalah default. Untuk informasi selengkapnya, lihat [Dukungan DISTINCT untuk agregasi bit-wise](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Contoh
<a name="r_bit_end_example"></a>

Mengingat bahwa informasi bisnis yang bermakna disimpan dalam kolom integer, Anda dapat menggunakan fungsi bit-wise untuk mengekstrak dan mengumpulkan informasi tersebut. Kueri berikut menerapkan fungsi BIT\$1AND ke kolom LIKES dalam tabel yang disebut USERLIKES dan mengelompokkan hasil menurut kolom CITY. 

```
select city, bit_and(likes) from userlikes group by city 
order by city;
city          | bit_and
--------------+---------
Los Angeles   |       0
Sacramento    |       0
San Francisco |       0
San Jose      |      64
Santa Barbara |     192
(5 rows)
```

Anda dapat menafsirkan hasil ini sebagai berikut:
+ Nilai integer `192` untuk Santa Barbara diterjemahkan ke nilai biner. `11000000` Dengan kata lain, semua pengguna di kota ini menyukai olahraga dan teater, tetapi tidak semua pengguna menyukai jenis acara lainnya.
+ Integer `64` diterjemahkan menjadi. `01000000` Jadi, bagi pengguna di San Jose, satu-satunya jenis acara yang mereka sukai adalah teater.
+ Nilai `0` untuk tiga kota lainnya menunjukkan bahwa tidak ada “suka” yang dibagikan oleh semua pengguna di kota-kota tersebut.

# Fungsi BIT\$1OR
<a name="r_BIT_OR"></a>

Fungsi BIT\$1OR menjalankan operasi OR bit-wise pada semua nilai dalam kolom atau ekspresi integer tunggal. Fungsi ini menggabungkan setiap bit dari setiap nilai biner yang sesuai dengan setiap nilai integer dalam ekspresi.

Misalnya, tabel Anda berisi empat nilai integer dalam kolom: 3, 7, 10, dan 22. Bilangan bulat ini direpresentasikan dalam bentuk biner sebagai berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_BIT_OR.html)

Jika Anda menerapkan fungsi BIT\$1OR ke kumpulan nilai integer, operasi mencari nilai apa pun di mana a `1` ditemukan di setiap posisi. Dalam hal ini, a `1` ada di lima posisi terakhir untuk setidaknya satu dari nilai, menghasilkan hasil biner`00011111`; oleh karena itu, fungsi mengembalikan `31` (atau`16 + 8 + 4 + 2 + 1`).

## Sintaksis
<a name="r_BIT_OR-synopsis"></a>

```
BIT_OR ( [DISTINCT | ALL] expression )
```

## Argumen
<a name="r_BIT_OR-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. Ekspresi ini harus memiliki INT, INT2, atau tipe INT8 data. Fungsi mengembalikan INT setara, INT2, atau tipe INT8 data.

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat untuk ekspresi yang ditentukan sebelum menghitung hasilnya. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat. SEMUA adalah default. Untuk informasi selengkapnya, lihat [Dukungan DISTINCT untuk agregasi bit-wise](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Contoh
<a name="r_bit_or_example"></a>

Kueri berikut menerapkan fungsi BIT\$1OR ke kolom SUKA dalam tabel yang disebut USERLIKES dan mengelompokkan hasil menurut kolom CITY.

```
select city, bit_or(likes) from userlikes group by city
order by city;
city          | bit_or
--------------+--------
Los Angeles   |    127
Sacramento    |    255
San Francisco |    255
San Jose      |    255
Santa Barbara |    255
(5 rows)
```

Untuk empat kota yang terdaftar, semua jenis acara disukai oleh setidaknya satu pengguna (`255=11111111`). Untuk Los Angeles, semua jenis acara kecuali olahraga disukai oleh setidaknya satu pengguna (`127=01111111`).

# Fungsi BOOL\$1AND
<a name="r_BOOL_AND"></a>

Fungsi BOOL\$1AND beroperasi pada satu kolom atau ekspresi Boolean atau integer. Fungsi ini menerapkan logika yang mirip dengan fungsi BIT\$1AND dan BIT\$1OR. Untuk fungsi ini, tipe kembali adalah nilai Boolean (`true`atau`false`).

Jika semua nilai dalam satu set adalah true, fungsi BOOL\$1AND mengembalikan `true` (). `t` Jika ada nilai palsu, fungsi mengembalikan `false` (`f`).

## Sintaksis
<a name="r_BOOL_AND-synopsis"></a>

```
BOOL_AND ( [DISTINCT | ALL] expression )
```

## Argumen
<a name="r_BOOL_AND-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. Ekspresi ini harus memiliki tipe data BOOLEAN atau integer. Jenis kembali dari fungsi ini adalah BOOLEAN.

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat untuk ekspresi yang ditentukan sebelum menghitung hasilnya. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat. SEMUA adalah default. Untuk informasi selengkapnya, lihat [Dukungan DISTINCT untuk agregasi bit-wise](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Contoh
<a name="r_bool_and_example"></a>

Anda dapat menggunakan fungsi Boolean terhadap ekspresi Boolean atau ekspresi integer. Misalnya, query berikut mengembalikan hasil dari tabel USERS standar dalam database TICKIT, yang memiliki beberapa kolom Boolean.

Fungsi BOOL\$1AND kembali `false` untuk semua lima baris. Tidak semua pengguna di masing-masing negara bagian menyukai olahraga.

```
select state, bool_and(likesports) from users 
group by state order by state limit 5;

state | bool_and
------+---------
AB    | f
AK    | f
AL    | f
AZ    | f
BC    | f
(5 rows)
```

# Fungsi BOOL\$1OR
<a name="r_BOOL_OR"></a>

Fungsi BOOL\$1OR beroperasi pada satu kolom atau ekspresi Boolean atau integer. Fungsi ini menerapkan logika yang mirip dengan fungsi BIT\$1AND dan BIT\$1OR. Untuk fungsi ini, tipe kembali adalah nilai Boolean (`true`,`false`, or`NULL`).

Jika satu atau lebih nilai dalam satu set adalah`true`, fungsi BOOL\$1OR mengembalikan `true` (). `t` Jika semua nilai dalam satu set adalah`false`, fungsi mengembalikan `false` (`f`). NULL dapat dikembalikan jika nilainya tidak diketahui.

## Sintaksis
<a name="r_BOOL_OR-synopsis"></a>

```
BOOL_OR ( [DISTINCT | ALL] expression )
```

## Argumen
<a name="r_BOOL_OR-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. Ekspresi ini harus memiliki tipe data BOOLEAN atau integer. Jenis kembali dari fungsi ini adalah BOOLEAN.

BERBEDA \$1 SEMUA  
Dengan argumen DISTINCT, fungsi menghilangkan semua nilai duplikat untuk ekspresi yang ditentukan sebelum menghitung hasilnya. Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat. SEMUA adalah default. Lihat [Dukungan DISTINCT untuk agregasi bit-wise](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Contoh
<a name="r_bool_or_example"></a>

Anda dapat menggunakan fungsi Boolean dengan ekspresi Boolean atau ekspresi integer. Misalnya, query berikut mengembalikan hasil dari tabel USERS standar dalam database TICKIT, yang memiliki beberapa kolom Boolean.

Fungsi BOOL\$1OR kembali `true` untuk semua lima baris. Setidaknya satu pengguna di masing-masing negara bagian menyukai olahraga.

```
select state, bool_or(likesports) from users 
group by state order by state limit 5;

state | bool_or 
------+--------
AB    | t      
AK    | t      
AL    | t       
AZ    | t       
BC    | t       
(5 rows)
```

Contoh berikut mengembalikan NULL.

```
SELECT BOOL_OR(NULL = '123')
               bool_or
------                  
NULL
```

# Ekspresi bersyarat
<a name="c_conditional_expressions"></a>

**Topics**
+ [Ekspresi bersyarat CASE](r_CASE_function.md)
+ [Fungsi DECODE](r_DECODE_expression.md)
+ [Fungsi TERBESAR dan PALING KECIL](r_GREATEST_LEAST.md)
+ [Fungsi NVL dan COALESCE](r_NVL_function.md)
+ [NVL2 fungsi](r_NVL2.md)
+ [Fungsi NULLIF](r_NULLIF_function.md)

Amazon Redshift mendukung beberapa ekspresi bersyarat yang merupakan ekstensi ke standar SQL.

# Ekspresi bersyarat CASE
<a name="r_CASE_function"></a>

Ekspresi CASE adalah ekspresi bersyarat, mirip dengan if/then/else pernyataan yang ditemukan dalam bahasa lain. CASE digunakan untuk menentukan hasil jika terdapat beberapa kondisi. Gunakan CASE di mana ekspresi SQL valid, seperti dalam perintah SELECT.

Ada 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. Jika tidak ada kecocokan ditemukan, tindakan dalam klausul ELSE diterapkan.
+ Dalam ekspresi CASE yang dicari, setiap CASE dievaluasi berdasarkan ekspresi Boolean, dan pernyataan CASE mengembalikan CASE yang cocok pertama. Jika tidak ada kecocokan yang ditemukan di antara klausa WHEN, tindakan dalam klausa ELSE dikembalikan.

## Sintaksis
<a name="r_CASE_function-syntax"></a>

Pernyataan CASE sederhana yang digunakan untuk menyesuaikan kondisi:

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

Pernyataan CASE yang dicari digunakan untuk mengevaluasi setiap kondisi:

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

## Pendapat
<a name="r_CASE_function-arguments"></a>

 *ekspresi*   
Nama kolom atau ekspresi yang valid.

 *nilai*   
Nilai yang dibandingkan dengan ekspresi, seperti konstanta numerik atau string karakter.

 *hasil*   
Nilai target atau ekspresi yang dikembalikan ketika ekspresi atau kondisi Boolean dievaluasi. Tipe data dari semua ekspresi hasil harus dikonversi ke tipe output tunggal.

 *ketentuan*   
Ekspresi Boolean yang mengevaluasi benar atau salah. Jika *kondisi* benar, nilai ekspresi CASE adalah hasil yang mengikuti kondisi, dan sisa ekspresi CASE tidak diproses. Jika *kondisinya* salah, klausa WHEN berikutnya dievaluasi. Jika tidak ada hasil kondisi WHEN yang benar, nilai ekspresi CASE adalah hasil dari klausa ELSE. Jika klausa ELSE dihilangkan dan tidak ada kondisi yang benar, hasilnya adalah nol.

## Contoh
<a name="r_CASE_function-examples"></a>

Contoh berikut menggunakan tabel VENUE dan tabel PENJUALAN dari sampel data TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Gunakan ekspresi CASE sederhana untuk mengganti `New York City` `Big Apple` dengan query terhadap tabel VENUE. Ganti semua nama kota lainnya dengan `other`.

```
select venuecity,
  case venuecity
    when 'New York City'
    then 'Big Apple' else 'other'
  end 
from venue
order by venueid desc;

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

Gunakan ekspresi CASE yang dicari untuk menetapkan nomor grup berdasarkan nilai PRICEPAID untuk penjualan tiket individu:

```
select pricepaid,
  case when pricepaid <10000 then 'group 1'
    when pricepaid >10000 then 'group 2'
    else 'group 3'
  end 
from sales
order by 1 desc;

pricepaid |  case
----------+---------
12624     | group 2
10000     | group 3
10000     | group 3
9996      | group 1
9988      | group 1
...
```

# Fungsi DECODE
<a name="r_DECODE_expression"></a>

Ekspresi DECODE menggantikan nilai tertentu dengan nilai spesifik lain atau nilai default, tergantung pada hasil dari kondisi kesetaraan. Operasi ini setara dengan operasi ekspresi CASE sederhana atau IF-THEN-ELSE pernyataan.

## Sintaksis
<a name="r_DECODE_expression-synopsis"></a>

```
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
```

Jenis ekspresi ini berguna untuk mengganti singkatan atau kode yang disimpan dalam tabel dengan nilai bisnis yang berarti yang diperlukan untuk laporan.

## Parameter
<a name="r_DECODE_expression-parameters"></a>

 *ekspresi*   
Sumber nilai yang ingin Anda bandingkan, seperti kolom dalam tabel.

 *pencarian*   
Nilai target yang dibandingkan dengan ekspresi sumber, seperti nilai numerik atau string karakter. Ekspresi pencarian harus mengevaluasi ke satu nilai tetap. Anda tidak dapat menentukan ekspresi yang mengevaluasi rentang nilai, seperti`age between 20 and 29`; Anda perlu menentukan search/result pasangan terpisah untuk setiap nilai yang ingin Anda ganti.  
Tipe data dari semua contoh ekspresi pencarian harus sama atau kompatibel. Parameter *ekspresi* dan *pencarian* juga harus kompatibel.

 *hasil*   
Nilai pengganti yang dikembalikan kueri saat ekspresi cocok dengan nilai pencarian. Anda harus menyertakan setidaknya satu search/result pasangan dalam ekspresi DECODE.  
Tipe data dari semua contoh ekspresi hasil harus sama atau kompatibel. *Hasil* dan parameter *default* juga harus kompatibel.

 *default*   
Nilai default opsional yang digunakan untuk kasus ketika kondisi pencarian gagal. Jika Anda tidak menentukan nilai default, ekspresi DECODE mengembalikan NULL.

## Catatan penggunaan
<a name="decode-expression-usage-notes"></a>

*Jika nilai *ekspresi* dan nilai *pencarian* keduanya NULL, hasil DECODE adalah nilai hasil yang sesuai.* Untuk ilustrasi penggunaan fungsi ini, lihat bagian Contoh.

Ketika digunakan dengan cara ini, DECODE mirip dengan[NVL2 fungsi](r_NVL2.md), tetapi ada beberapa perbedaan. Untuk deskripsi perbedaan ini, lihat catatan NVL2 penggunaan.

## Contoh
<a name="r_DECODE_expression-examples"></a>

Ketika nilai `2008-06-01` ada di kolom caldate dari datetable, contoh berikut menggantikannya dengan. `June 1st, 2008` Contoh menggantikan semua nilai caldate lainnya dengan NULL. 

```
select decode(caldate, '2008-06-01', 'June 1st, 2008')
from datetable where month='JUN' order by caldate;

case
----------------
June 1st, 2008

...
(30 rows)
```

Contoh berikut menggunakan ekspresi DECODE untuk mengonversi lima kolom CATNAME yang disingkat dalam tabel CATEGORY menjadi nama lengkap dan mengonversi nilai lain di kolom menjadi. `Unknown` 

```
select catid, decode(catname,
'NHL', 'National Hockey League',
'MLB', 'Major League Baseball',
'MLS', 'Major League Soccer',
'NFL', 'National Football League',
'NBA', 'National Basketball Association',
'Unknown')
from category
order by catid;

catid  |	case
-------+---------------------------------
1      | Major League Baseball
2      | National Hockey League
3      | National Football League
4      | National Basketball Association
5      | Major League Soccer
6      | Unknown
7      | Unknown
8      | Unknown
9      | Unknown
10     | Unknown
11     | Unknown
(11 rows)
```

Gunakan ekspresi DECODE untuk menemukan tempat di Colorado dan Nevada dengan NULL di kolom VENUESEATS; ubah menjadi nol. NULLs Jika kolom VENUESEATS bukan NULL, kembalikan 1 sebagai hasilnya. 

```
select venuename, venuestate, decode(venueseats,null,0,1)
from venue
where venuestate in('NV','CO')
order by 2,3,1;

venuename	              | venuestate     | case
------------------------------+----------------+-----------
Coors Field                   |	CO	       |   1
Dick's Sporting Goods Park    |	CO	       |   1
Ellie Caulkins Opera House    |	CO	       |   1
INVESCO Field		      |	CO	       |   1
Pepsi Center		      |	CO	       |   1
Ballys Hotel		      |	NV	       |   0
Bellagio Hotel                |	NV	       |   0
Caesars Palace                |	NV	       |   0
Harrahs Hotel                 |	NV	       |   0
Hilton Hotel                  |	NV	       |   0
...						
(20 rows)
```

# Fungsi TERBESAR dan PALING KECIL
<a name="r_GREATEST_LEAST"></a>

Mengembalikan nilai terbesar atau terkecil dari daftar sejumlah ekspresi.

## Sintaksis
<a name="r_GREATEST_LEAST-synopsis"></a>

```
GREATEST (value [, ...])
LEAST (value [, ...])
```

## Parameter
<a name="r_GREATEST_LEAST-arguments"></a>

*expression\$1list*  
Daftar ekspresi yang dipisahkan koma, seperti nama kolom. Ekspresi semua harus dikonversi ke tipe data umum. Nilai NULL dalam daftar diabaikan. Jika semua ekspresi mengevaluasi ke NULL, hasilnya adalah NULL.

## Pengembalian
<a name="r_GREATEST_LEAST-returns"></a>

Mengembalikan nilai terbesar (untuk GREATEST) atau least (untuk LEAST) dari daftar ekspresi yang disediakan.

## Contoh
<a name="r_GREATEST_LEAST-examples"></a>

Contoh berikut mengembalikan nilai tertinggi menurut abjad untuk `firstname` atau. `lastname`

```
select firstname, lastname, greatest(firstname,lastname) from users
where userid < 10
order by 3;

 firstname | lastname  | greatest
-----------+-----------+-----------
 Lars      | Ratliff   | Ratliff
 Reagan    | Hodge     | Reagan
 Colton    | Roy       | Roy
 Barry     | Roy       | Roy
 Tamekah   | Juarez    | Tamekah
 Rafael    | Taylor    | Taylor
 Victor    | Hernandez | Victor
 Vladimir  | Humphrey  | Vladimir
 Mufutau   | Watkins   | Watkins
(9 rows)
```

# Fungsi NVL dan COALESCE
<a name="r_NVL_function"></a>

Mengembalikan nilai ekspresi pertama yang tidak null dalam serangkaian ekspresi. Ketika nilai non-null ditemukan, ekspresi yang tersisa dalam daftar tidak dievaluasi. 

NVL identik dengan COALESCE. Mereka adalah sinonim. Topik ini menjelaskan sintaks dan berisi contoh untuk keduanya.

## Sintaksis
<a name="r_NVL_function-synopsis"></a>

```
NVL( expression, expression, ... )
```

Sintaks untuk COALESCE adalah sama:

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

Jika semua ekspresi nol, hasilnya adalah null.

Fungsi-fungsi ini berguna ketika Anda ingin mengembalikan nilai sekunder ketika nilai primer hilang atau null. Misalnya, kueri mungkin mengembalikan yang pertama dari tiga nomor telepon yang tersedia: ponsel, rumah, atau kantor. Urutan ekspresi dalam fungsi menentukan urutan evaluasi.

## Pendapat
<a name="r_NVL_function-arguments"></a>

 *ekspresi*   
Ekspresi, seperti nama kolom, yang akan dievaluasi untuk status null.

## Jenis pengembalian
<a name="r_NVL_function-returntype"></a>

Amazon Redshift menentukan tipe data dari nilai yang dikembalikan berdasarkan ekspresi input. Jika tipe data dari ekspresi input tidak memiliki tipe umum, maka kesalahan dikembalikan.

## Contoh
<a name="r_NVL_function-examples"></a>

Jika daftar berisi ekspresi integer, fungsi mengembalikan integer. 

```
SELECT COALESCE(NULL, 12, NULL);

coalesce
--------------
12
```

Contoh ini, yang sama dengan contoh sebelumnya, kecuali bahwa ia menggunakan NVL, mengembalikan hasil yang sama. 

```
SELECT NVL(NULL, 12, NULL);

coalesce
--------------
12
```

Contoh berikut mengembalikan tipe string.

```
SELECT COALESCE(NULL, 'Amazon Redshift', NULL);

coalesce
--------------
Amazon Redshift
```

Contoh berikut menghasilkan kesalahan karena tipe data bervariasi dalam daftar ekspresi. Dalam hal ini, ada tipe string dan tipe angka dalam daftar.

```
SELECT COALESCE(NULL, 'Amazon Redshift', 12);
ERROR: invalid input syntax for integer: "Amazon Redshift"
```

Untuk contoh ini, Anda membuat tabel dengan kolom START\$1DATE dan END\$1DATE, menyisipkan baris yang menyertakan nilai null, lalu menerapkan ekspresi NVL ke dua kolom.

```
create table datetable (start_date date, end_date date);           
insert into datetable values ('2008-06-01','2008-12-31');
insert into datetable values (null,'2008-12-31');
insert into datetable values ('2008-12-31',null);
```

```
select nvl(start_date, end_date)
from datetable
order by 1;
               
coalesce
------------
2008-06-01
2008-12-31
2008-12-31
```

Nama kolom default untuk ekspresi NVL adalah COALESCE. Query berikut mengembalikan hasil yang sama:

```
select coalesce(start_date, end_date)
from datetable
order by 1;
```

Untuk contoh kueri berikut, Anda membuat tabel dengan contoh informasi pemesanan hotel dan menyisipkan beberapa baris. Beberapa catatan berisi nilai nol.

```
create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));
```

Masukkan data sampel berikut. Beberapa catatan tidak memiliki `check_out` tanggal atau `funds_collected` jumlah.

```
insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00);
insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00);
insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00);
insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00);
insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null);
insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);
```

Query berikut mengembalikan daftar tanggal. Jika `check_out` tanggal tidak tersedia, itu mencantumkan `check_in` tanggal.

```
select coalesce(check_out, check_in)
from booking_info
order by booking_id;
```

Hasilnya adalah sebagai berikut. Perhatikan bahwa dua catatan terakhir menunjukkan `check_in` tanggal.

```
coalesce
------------
2023-02-03
2023-04-26	
2023-03-16	
2023-06-03	
2023-07-10	
2023-08-15
```

Jika Anda mengharapkan kueri untuk mengembalikan nilai null untuk fungsi atau kolom tertentu, Anda dapat menggunakan ekspresi NVL untuk mengganti nol dengan beberapa nilai lainnya. Misalnya, fungsi agregat, seperti SUM, mengembalikan nilai null alih-alih nol ketika mereka tidak memiliki baris untuk dievaluasi. Anda dapat menggunakan ekspresi NVL untuk mengganti nilai null ini dengan. `700.0` Alih-alih`485`, hasil penjumlahan `funds_collected` adalah `1885` karena dua baris yang memiliki null diganti dengan. `700`

```
select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info;
               
sumresult
------
 1885
```

# NVL2 fungsi
<a name="r_NVL2"></a>

Mengembalikan salah satu dari dua nilai berdasarkan apakah ekspresi tertentu mengevaluasi ke NULL atau TIDAK NULL.

## Sintaksis
<a name="r_NVL2-synopsis"></a>

```
NVL2 ( expression, not_null_return_value, null_return_value )
```

## Argumen
<a name="r_NVL2-arguments"></a>

 *ekspresi*   
Ekspresi, seperti nama kolom, yang akan dievaluasi untuk status null.

 *not\$1null\$1return\$1value*   
Nilai yang dikembalikan jika *ekspresi* mengevaluasi ke NOT NULL. Nilai *not\$1null\$1return\$1value* harus memiliki tipe data yang sama dengan *ekspresi* atau secara implisit dapat dikonversi ke tipe data tersebut.

 *null\$1return\$1value*   
Nilai yang dikembalikan jika *ekspresi* mengevaluasi ke NULL. Nilai *null\$1return\$1value* harus memiliki tipe data yang sama dengan *ekspresi* atau secara implisit dapat dikonversi ke tipe data tersebut.

## Jenis pengembalian
<a name="r_NVL2-return-type"></a>

Jenis NVL2 pengembalian ditentukan sebagai berikut:
+ Jika *not\$1null\$1return\$1value atau null\$1return\$1value* adalah *null, tipe data dari ekspresi not-null dikembalikan*.

*Jika kedua *not\$1null\$1return\$1value dan null\$1return\$1value* tidak null:*
+ Jika *not\$1null\$1return\$1value dan *null\$1return\$1value** memiliki tipe data yang sama, tipe data tersebut dikembalikan.
+ Jika *not\$1null\$1return\$1value dan null\$1return\$1value* *memiliki tipe data numerik yang berbeda, tipe data numerik terkecil yang kompatibel dikembalikan*.
+ Jika *not\$1null\$1return\$1value dan null\$1return\$1value* *memiliki tipe data datetime yang berbeda, tipe data stempel waktu dikembalikan*.
+ *Jika *not\$1null\$1return\$1value dan null\$1return\$1value* memiliki tipe data karakter yang berbeda, tipe data *not\$1null\$1return\$1value* dikembalikan.*
+ *Jika *not\$1null\$1return\$1value dan null\$1return\$1value* memiliki tipe data numerik dan non-numerik campuran, tipe data *not\$1null\$1return\$1value* dikembalikan.*

**penting**  
*Dalam dua kasus terakhir di mana tipe data *not\$1null\$1return\$1value dikembalikan, null\$1return\$1value* secara implisit dilemparkan ke tipe data tersebut.* Jika tipe data tidak kompatibel, fungsi gagal.

## Catatan penggunaan
<a name="nvl2-usage-notes"></a>

[Fungsi DECODE](r_DECODE_expression.md)dapat digunakan dengan cara yang mirip dengan NVL2 ketika *ekspresi* dan parameter *pencarian* keduanya nol. Perbedaannya adalah bahwa untuk DECODE, pengembalian akan memiliki nilai dan tipe data dari parameter *hasil*. *Sebaliknya, untuk NVL2, pengembalian akan memiliki nilai parameter *not\$1null\$1return\$1value atau null\$1return\$1value*, mana yang dipilih oleh fungsi, tetapi akan memiliki tipe data *not\$1null\$1return\$1value*.*

Misalnya, dengan asumsi kolom1 adalah NULL, kueri berikut akan mengembalikan nilai yang sama. Namun, tipe data nilai pengembalian DECODE adalah INTEGER dan tipe data nilai yang NVL2 dikembalikan adalah VARCHAR.

```
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
```

## Contoh
<a name="r_NVL2-examples"></a>

Contoh berikut memodifikasi beberapa data sampel, kemudian mengevaluasi dua bidang untuk memberikan informasi kontak yang sesuai bagi pengguna: 

```
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo';

select (firstname + ' ' + lastname) as name, 
nvl2(email, email, phone) AS contact_info
from users 
where state = 'WA'
and lastname  like 'A%'
order by lastname, firstname;

name			     contact_info	
--------------------+-------------------------------------------
Aphrodite Acevedo	(906) 632-4407
Caldwell Acevedo 	Nunc.sollicitudin@Duisac.ca
Quinn Adams		  vel@adipiscingligulaAenean.com
Kamal Aguilar		quis@vulputaterisusa.com
Samson Alexander	 hendrerit.neque@indolorFusce.ca
Hall Alford		  ac.mattis@vitaediamProin.edu
Lane Allen		   et.netus@risusDonec.org
Xander Allison	   ac.facilisis.facilisis@Infaucibus.com
Amaya Alvarado	   dui.nec.tempus@eudui.edu
Vera Alvarez		 at.arcu.Vestibulum@pellentesque.edu
Yetta Anthony		enim.sit@risus.org
Violet Arnold		ad.litora@at.com
August Ashley		consectetuer.euismod@Phasellus.com
Karyn Austin		 ipsum.primis.in@Maurisblanditenim.org
Lucas Ayers		  at@elitpretiumet.com
```

# Fungsi NULLIF
<a name="r_NULLIF_function"></a>

## Sintaksis
<a name="r_NULLIF_function-synopsis"></a>

Ekspresi NULLIF membandingkan dua argumen dan mengembalikan null jika argumennya sama. Jika mereka tidak sama, argumen pertama dikembalikan. Ekspresi ini adalah kebalikan dari ekspresi NVL atau COALESCE.

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

## Pendapat
<a name="r_NULLIF_function-arguments"></a>

 *ekspresi1, ekspresi2*   
Kolom target atau ekspresi yang dibandingkan. Tipe pengembalian sama dengan tipe ekspresi pertama. Nama kolom default hasil NULLIF adalah nama kolom dari ekspresi pertama.

## Contoh
<a name="r_NULLIF_function-examples"></a>

Dalam contoh berikut, query mengembalikan string `first` karena argumen tidak sama.

```
SELECT NULLIF('first', 'second');

case
-------
first
```

Dalam contoh berikut, query kembali `NULL` karena argumen literal string sama.

```
SELECT NULLIF('first', 'first');

case
-------
NULL
```

Dalam contoh berikut, query kembali `1` karena argumen integer tidak sama.

```
SELECT NULLIF(1, 2);

case
-------
1
```

Dalam contoh berikut, query kembali `NULL` karena argumen integer sama.

```
SELECT NULLIF(1, 1);

case
-------
NULL
```

Dalam contoh berikut, query mengembalikan null ketika nilai LISTID dan SALESID cocok:

```
select nullif(listid,salesid), salesid
from sales where salesid<10 order by 1, 2 desc;

listid  | salesid
--------+---------
     4  |       2
     5  |       4
     5  |       3
     6  |       5
     10 |       9
     10 |       8
     10 |       7
     10 |       6
        |       1
(9 rows)
```

Anda dapat menggunakan NULLIF untuk memastikan bahwa string kosong selalu dikembalikan sebagai nol. Dalam contoh di bawah ini, ekspresi NULLIF mengembalikan nilai null atau string yang berisi setidaknya satu karakter.

```
insert into category
values(0,'','Special','Special');

select nullif(catgroup,'') from category
where catdesc='Special';

catgroup
----------
null
(1 row)
```

NULLIF mengabaikan trailing blank. Jika string tidak kosong tetapi berisi kosong, NULLIF masih mengembalikan null:

```
create table nulliftest(c1 char(2), c2 char(2));

insert into nulliftest values ('a','a ');

insert into nulliftest values ('b','b');


select nullif(c1,c2) from nulliftest;
c1
------
null
null
(2 rows)
```

# Fungsi pemformatan tipe data
<a name="r_Data_type_formatting"></a>

**Topics**
+ [Fungsi CAST](r_CAST_function.md)
+ [Fungsi CONVERT](r_CONVERT_function.md)
+ [TEXT\$1TO\$1INT\$1ALT](r_TEXT_TO_INT_ALT.md)
+ [TEXT\$1TO\$1NUMERIC\$1ALT](r_TEXT_TO_NUMERIC_ALT.md)
+ [TO\$1CHAR](r_TO_CHAR.md)
+ [Fungsi TO\$1DATE](r_TO_DATE_function.md)
+ [TO\$1NUMBER](r_TO_NUMBER.md)
+ [Fungsi TRY\$1CAST](r_TRY_CAST.md)
+ [String format datetime](r_FORMAT_strings.md)
+ [String format numerik](r_Numeric_formating.md)
+ [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md)

Fungsi pemformatan tipe data menyediakan cara mudah untuk mengonversi nilai dari satu tipe data ke tipe data lainnya. Untuk masing-masing fungsi ini, argumen pertama selalu nilai yang akan diformat dan argumen kedua berisi template untuk format baru. Amazon Redshift mendukung beberapa fungsi pemformatan tipe data.

# Fungsi CAST
<a name="r_CAST_function"></a>

Fungsi CAST mengubah satu tipe data ke tipe data lain yang kompatibel. Misalnya, Anda dapat mengonversi string ke tanggal, atau tipe numerik menjadi string. CAST melakukan konversi runtime, yang berarti konversi tidak mengubah tipe data nilai dalam tabel sumber. Itu hanya berubah dalam konteks kueri.

Fungsi CAST sangat mirip dengan[Fungsi CONVERT](r_CONVERT_function.md), karena keduanya mengonversi satu tipe data ke tipe data lainnya, tetapi mereka disebut berbeda.

Tipe data tertentu memerlukan konversi eksplisit ke tipe data lain menggunakan fungsi CAST atau CONVERT. Tipe data lain dapat dikonversi secara implisit, sebagai bagian dari perintah lain, tanpa menggunakan CAST atau CONVERT. Lihat [Ketik kompatibilitas dan konversi](c_Supported_data_types.md#r_Type_conversion). 

## Sintaksis
<a name="r_CAST_function-syntax"></a>

Gunakan salah satu dari dua bentuk sintaks yang setara ini untuk mentransmisikan ekspresi dari satu tipe data ke tipe data lainnya.

```
CAST ( expression AS type )
expression :: type
```

## Pendapat
<a name="r_CAST_function-arguments"></a>

 *ekspresi*   
Ekspresi yang mengevaluasi satu atau lebih nilai, seperti nama kolom atau literal. Mengkonversi nilai null mengembalikan nol. Ekspresi tidak dapat berisi string kosong atau kosong. 

 *jenis*   
Salah satu yang didukung[Jenis Data](c_Supported_data_types.md). 

## Jenis pengembalian
<a name="r_CAST_function-return-type"></a>

CAST mengembalikan tipe data yang ditentukan oleh argumen *tipe*. 

**catatan**  
Amazon Redshift mengembalikan kesalahan jika Anda mencoba melakukan konversi bermasalah, seperti konversi DECIMAL yang kehilangan presisi, seperti berikut ini:   

```
select 123.456::decimal(2,1);
```
atau konversi INTEGER yang menyebabkan overflow:   

```
select 12345678::smallint;
```

## Contoh
<a name="r_CAST_function-examples"></a>

Beberapa contoh menggunakan [database TICKIT](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html) sampel. Untuk informasi selengkapnya tentang menyiapkan data sampel, lihat [Memuat data](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

Dua pertanyaan berikut adalah setara. Keduanya memberikan nilai desimal ke bilangan bulat: 

```
select cast(pricepaid as integer)
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

```
select pricepaid::integer
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

Berikut ini menghasilkan hasil yang serupa. Tidak memerlukan data sampel untuk dijalankan: 

```
select cast(162.00 as integer) as pricepaid;

pricepaid
-----------
162
(1 row)
```

Dalam contoh ini, nilai dalam kolom stempel waktu dilemparkan sebagai tanggal, yang mengakibatkan penghapusan waktu dari setiap hasil:

```
select cast(saletime as date), salesid
from sales order by salesid limit 10;

 saletime  | salesid
-----------+---------
2008-02-18 |       1
2008-06-06 |       2
2008-06-06 |       3
2008-06-09 |       4
2008-08-31 |       5
2008-07-16 |       6
2008-06-26 |       7
2008-07-10 |       8
2008-07-22 |       9
2008-08-06 |      10
(10 rows)
```

Jika Anda tidak menggunakan CAST seperti yang diilustrasikan dalam sampel sebelumnya, hasilnya akan mencakup waktu: *2008-02-18* 02:36:48.

Kueri berikut melemparkan data karakter variabel ke tanggal. Tidak memerlukan data sampel untuk dijalankan. 

```
select cast('2008-02-18 02:36:48' as date) as mysaletime;

mysaletime    
--------------------
2008-02-18  
(1 row)
```

Dalam contoh ini, nilai dalam kolom tanggal dilemparkan sebagai stempel waktu: 

```
select cast(caldate as timestamp), dateid
from date order by dateid limit 10;

      caldate       | dateid
--------------------+--------
2008-01-01 00:00:00 |   1827
2008-01-02 00:00:00 |   1828
2008-01-03 00:00:00 |   1829
2008-01-04 00:00:00 |   1830
2008-01-05 00:00:00 |   1831
2008-01-06 00:00:00 |   1832
2008-01-07 00:00:00 |   1833
2008-01-08 00:00:00 |   1834
2008-01-09 00:00:00 |   1835
2008-01-10 00:00:00 |   1836
(10 rows)
```

Dalam kasus seperti sampel sebelumnya, Anda dapat memperoleh kontrol tambahan atas pemformatan output dengan menggunakan [TO\$1CHAR](https://docs.aws.amazon.com/redshift/latest/dg/r_TO_CHAR.html).

Dalam contoh ini, bilangan bulat dilemparkan sebagai string karakter: 

```
select cast(2008 as char(4));

bpchar
--------
2008
```

Dalam contoh ini, nilai DECIMAL (6,3) dilemparkan sebagai nilai DECIMAL (4,1): 

```
select cast(109.652 as decimal(4,1));

numeric
---------
109.7
```

Contoh ini menunjukkan ekspresi yang lebih kompleks. Kolom PRICEPAID (kolom DECIMAL (8,2)) dalam tabel PENJUALAN dikonversi ke kolom DECIMAL (38,2) dan nilainya dikalikan dengan 100000000000000000000: 

```
select salesid, pricepaid::decimal(38,2)*100000000000000000000
as value from sales where salesid<10 order by salesid;


 salesid |           value
---------+----------------------------
       1 | 72800000000000000000000.00
       2 |  7600000000000000000000.00
       3 | 35000000000000000000000.00
       4 | 17500000000000000000000.00
       5 | 15400000000000000000000.00
       6 | 39400000000000000000000.00
       7 | 78800000000000000000000.00
       8 | 19700000000000000000000.00
       9 | 59100000000000000000000.00
(9 rows)
```

**catatan**  
Anda tidak dapat melakukan operasi CAST atau CONVERT pada tipe `GEOMETRY` data untuk mengubahnya ke tipe data lain. Namun, Anda dapat memberikan representasi heksadesimal dari string literal dalam format biner terkenal (EWKB) yang diperluas sebagai masukan ke fungsi yang menerima argumen. `GEOMETRY` Misalnya, `ST_AsText` fungsi berikut mengharapkan tipe `GEOMETRY` data.   

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
Anda juga dapat secara eksplisit menentukan tipe `GEOMETRY` data.   

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# Fungsi CONVERT
<a name="r_CONVERT_function"></a>

Seperti [fungsi CAST, fungsi](https://docs.aws.amazon.com/redshift/latest/dg/r_CAST_function.html) CONVERT mengubah satu tipe data ke tipe data lain yang kompatibel. Misalnya, Anda dapat mengonversi string ke tanggal, atau tipe numerik menjadi string. CONVERT melakukan konversi runtime, yang berarti konversi tidak mengubah tipe data nilai dalam tabel sumber. Itu hanya berubah dalam konteks kueri.

Tipe data tertentu memerlukan konversi eksplisit ke tipe data lain menggunakan fungsi CONVERT. Tipe data lain dapat dikonversi secara implisit, sebagai bagian dari perintah lain, tanpa menggunakan CAST atau CONVERT. Lihat [Ketik kompatibilitas dan konversi](c_Supported_data_types.md#r_Type_conversion). 

## Sintaksis
<a name="r_CONVERT-syntax"></a>

```
CONVERT ( type, expression )
```

## Argumen
<a name="r_CONVERT-arguments"></a>

 *jenis*   
Salah satu yang didukung[Jenis Data](c_Supported_data_types.md). 

 *ekspresi*   
Ekspresi yang mengevaluasi satu atau lebih nilai, seperti nama kolom atau literal. Mengkonversi nilai null mengembalikan nol. Ekspresi tidak dapat berisi string kosong atau kosong. 

## Jenis pengembalian
<a name="r_CONVERT-return-type"></a>

CONVERT mengembalikan tipe data yang ditentukan oleh argumen *tipe*.

**catatan**  
Amazon Redshift mengembalikan kesalahan jika Anda mencoba melakukan konversi bermasalah, seperti konversi DECIMAL yang kehilangan presisi, seperti berikut ini:   

```
SELECT CONVERT(decimal(2,1), 123.456);
```
atau konversi INTEGER yang menyebabkan overflow:   

```
SELECT CONVERT(smallint, 12345678);
```

## Contoh
<a name="r_CONVERT-examples"></a>

Beberapa contoh menggunakan [database TICKIT](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html) sampel. Untuk informasi selengkapnya tentang menyiapkan data sampel, lihat [Memuat data](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

Query berikut menggunakan fungsi CONVERT untuk mengubah kolom desimal menjadi bilangan bulat

```
SELECT CONVERT(integer, pricepaid)
FROM sales WHERE salesid=100;
```

Contoh ini mengkonversi integer menjadi string karakter.

```
SELECT CONVERT(char(4), 2008);
```

Dalam contoh ini, tanggal dan waktu saat ini dikonversi ke tipe data karakter variabel: 

```
SELECT CONVERT(VARCHAR(30), GETDATE());

getdate
---------
2023-02-02 04:31:16
```

Contoh ini mengubah kolom saletime menjadi hanya waktu, menghapus tanggal dari setiap baris.

```
SELECT CONVERT(time, saletime), salesid
FROM sales order by salesid limit 10;
```

Untuk informasi tentang mengonversi stempel waktu dari satu zona waktu ke zona waktu lainnya, lihat. [Fungsi CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md) Untuk fungsi tanggal dan waktu tambahan, lihat[Fungsi tanggal dan waktu](Date_functions_header.md).

Contoh berikut mengkonversi data karakter variabel menjadi objek datetime.

```
SELECT CONVERT(datetime, '2008-02-18 02:36:48') as mysaletime;
```

**catatan**  
Anda tidak dapat melakukan operasi CAST atau CONVERT pada tipe `GEOMETRY` data untuk mengubahnya ke tipe data lain. Namun, Anda dapat memberikan representasi heksadesimal dari string literal dalam format biner terkenal (EWKB) yang diperluas sebagai masukan ke fungsi yang menerima argumen. `GEOMETRY` Misalnya, `ST_AsText` fungsi berikut mengharapkan tipe `GEOMETRY` data.   

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
Anda juga dapat secara eksplisit menentukan tipe `GEOMETRY` data.   

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# TEXT\$1TO\$1INT\$1ALT
<a name="r_TEXT_TO_INT_ALT"></a>

TEXT\$1TO\$1INT\$1ALT mengkonversi string karakter ke integer menggunakan format gaya Teradata. Digit fraksi dalam hasil terpotong.

## Sintaksis
<a name="r_TEXT_TO_INT_ALT-synopsis"></a>

```
TEXT_TO_INT_ALT (expression [ , 'format'])
```

## Argumen
<a name="r_TEXT_TO_INT_ALT-arguments"></a>

 *ekspresi*   
Ekspresi yang menghasilkan satu atau lebih nilai CHAR atau VARCHAR, seperti nama kolom atau string literal. Mengkonversi nilai null mengembalikan nol. Fungsi mengkonversi string kosong atau kosong ke 0. 

 *format*   
Sebuah string literal yang mendefinisikan format ekspresi input. Untuk informasi selengkapnya tentang karakter pemformatan yang dapat Anda tentukan, lihat[Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md). 

## Jenis pengembalian
<a name="r_TEXT_TO_INT_ALT-return-type"></a>

TEXT\$1TO\$1INT\$1ALT mengembalikan nilai INTEGER.

Bagian fraksional dari hasil gips terpotong.

Amazon Redshift mengembalikan kesalahan jika konversi ke frasa *format* yang Anda tentukan tidak berhasil.

## Contoh
<a name="r_TEXT_TO_INT_ALT-examples"></a>

Contoh berikut mengkonversi string *ekspresi* input '123-' ke integer -123.

```
select text_to_int_alt('123-');
```

```
text_to_int_alt
----------
      -123
```

Contoh berikut mengkonversi string *ekspresi* input '2147483647\$1' ke integer 2147483647.

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

Contoh berikut mengkonversi eksponensial input *ekspresi* string '-123E-2' ke integer -1.

```
select text_to_int_alt('-123E-2');
```

```
text_to_int_alt
----------
        -1
```

Contoh berikut mengkonversi string *ekspresi* input '2147483647\$1' ke integer 2147483647.

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

Contoh berikut mengkonversi string *ekspresi* input '123 \$1'dengan frase *format*' 999S 'ke bilangan bulat 1230. Karakter S menunjukkan Desimal Zonasi Ditandatangani. Untuk informasi selengkapnya, lihat [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md).

```
select text_to_int_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

Contoh berikut mengkonversi string *ekspresi* input 'USD123' dengan frase *format* 'C9 (I) 'ke integer 123. Lihat [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md).

```
select text_to_int_alt('USD123', 'C9(I)');
```

```
text_to_int_alt
----------
       123
```

Contoh berikut menentukan kolom tabel sebagai *ekspresi* input.

```
select text_to_int_alt(a), text_to_int_alt(b) from t_text2int order by 1;
```

```
 text_to_int_alt | text_to_int_alt
-----------------+-----------------
            -123 |            -123
            -123 |            -123
             123 |             123
             123 |             123
```

Berikut ini adalah definisi tabel dan pernyataan insert untuk contoh ini.

```
create table t_text2int (a varchar(200), b char(200));
```

```
insert into t_text2int VALUES('123', '123'),('123.123', '123.123'), ('-123', '-123'), ('123-', '123-');
```

# TEXT\$1TO\$1NUMERIC\$1ALT
<a name="r_TEXT_TO_NUMERIC_ALT"></a>

TEXT\$1TO\$1NUMERIC\$1ALT melakukan operasi cast gaya Teradata untuk mengonversi string karakter ke format data numerik. 

## Sintaksis
<a name="r_TEXT_TO_NUMERIC_ALT-synopsis"></a>

```
TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])
```

## Argumen
<a name="r_TEXT_TO_NUMERIC_ALT-arguments"></a>

 *ekspresi*   
Ekspresi yang mengevaluasi satu atau lebih nilai CHAR atau VARCHAR, seperti nama kolom atau literal. Mengkonversi nilai null mengembalikan nol. String kosong atau kosong dikonversi menjadi 0. 

 *format*   
Sebuah string literal yang mendefinisikan format ekspresi input. Untuk informasi selengkapnya, lihat [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md). 

 *presisi*   
Jumlah digit dalam hasil numerik. Defaultnya adalah 38. 

 *skala*   
Jumlah digit di sebelah kanan titik desimal dalam hasil numerik. Default-nya adalah 0. 

## Jenis pengembalian
<a name="r_TEXT_TO_NUMERIC_ALT-return-type"></a>

TEXT\$1TO\$1NUMERIC\$1ALT mengembalikan nomor DESIMAL.

Amazon Redshift mengembalikan kesalahan jika konversi ke frasa *format* yang Anda tentukan tidak berhasil.

*Amazon Redshift melemparkan string *ekspresi* input ke tipe numerik dengan presisi tertinggi yang Anda tentukan untuk tipe tersebut dalam opsi presisi.* Jika panjang nilai numerik melebihi nilai yang Anda tentukan untuk *presisi*, Amazon Redshift membulatkan nilai numerik sesuai dengan aturan berikut:
+ Jika panjang hasil cast melebihi panjang yang Anda tentukan dalam frasa *format*, Amazon Redshift mengembalikan kesalahan.
+ Jika hasilnya dilemparkan ke nilai numerik, hasilnya dibulatkan ke nilai terdekat. Jika bagian pecahan tepat di tengah-tengah antara hasil gips atas dan bawah, hasilnya dibulatkan ke nilai genap terdekat.

## Contoh
<a name="r_TEXT_TO_NUMERIC_ALT-examples"></a>

Contoh berikut mengkonversi string *ekspresi* input '1.5' ke nilai numerik '2'. Karena pernyataan tidak menentukan *skala*, *skala* default ke 0 dan hasil pemeran tidak menyertakan hasil pecahan. Karena .5 berada di tengah-tengah antara 1 dan 2, hasil pemeran dibulatkan ke nilai genap 2.

```
select text_to_numeric_alt('1.5');
```

```
 text_to_numeric_alt
---------------------
                   2
```

Contoh berikut mengkonversi string *ekspresi* input '2.51' ke nilai numerik 3. Karena pernyataan tidak menentukan nilai *skala*, *skala* default ke 0 dan hasil pemeran tidak menyertakan hasil pecahan. Karena 0,51 lebih dekat ke 3 dari 2, hasil pemeran dibulatkan ke nilai 3.

```
select text_to_numeric_alt('2.51');
```

```
 text_to_numeric_alt
---------------------
                   3
```

Contoh berikut mengkonversi string *ekspresi* input 123.52501 dengan *presisi* 10 dan *skala* 2 ke nilai numerik 123.53. 

```
select text_to_numeric_alt('123.52501', 10, 2);
```

```
 text_to_numeric_alt
---------------------
               123.53
```

Contoh berikut mengkonversi string *ekspresi* input '123 \$1'dengan frase *format*' 999S 'ke angka 1230. Karakter S menunjukkan Desimal Zonasi Ditandatangani. Untuk informasi selengkapnya, lihat [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md).

```
select text_to_numeric_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

Contoh berikut mengkonversi string *ekspresi* input 'USD123' dengan frase *format* 'C9 (I) 'ke angka 124. Lihat [Karakter pemformatan gaya Teradata untuk data numerik](r_Numeric-format-teradata.md).

```
select text_to_numeric_alt('USD123.9', 'C9(I)');
```

```
text_to_numeric_alt
----------
       124
```

Contoh berikut menentukan kolom tabel sebagai *ekspresi* input.

```
select text_to_numeric_alt(a), text_to_numeric_alt(b) from t_text2numeric order by 1;
```

```
           text_to_numeric_alt           |           text_to_numeric_alt
-----------------------------------------+-----------------------------------------
 -99999999999999999999999999999999999999 | -99999999999999999999999999999999999999
                                  -12300 |                                  -12300
                                     123 |                                     123
                                     123 |                                     123
  99999999999999999999999999999999999999 |  99999999999999999999999999999999999999
```

Berikut ini adalah definisi tabel dan pernyataan insert untuk contoh ini.

```
create table  t_text2numeric (a varchar(200), b char(200));
```

```
insert into  t_text2numeric values
('123', '123'),
('+123.456', '+123.456'),
('-' || repeat('9', 38), '-' || repeat('9', 38)),
(repeat('9', 38) || '+', repeat('9', 38) || '+'),
('-123E2', '-123E2');
```

# TO\$1CHAR
<a name="r_TO_CHAR"></a>

TO\$1CHAR mengkonversi timestamp atau ekspresi numerik ke format data karakter-string. 

## Sintaksis
<a name="r_TO_CHAR-synopsis"></a>

```
TO_CHAR (timestamp_expression | numeric_expression , 'format')
```

## Argumen
<a name="r_TO_CHAR-arguments"></a>

 *timestamp\$1expression*   
Ekspresi yang menghasilkan nilai tipe TIMESTAMP atau TIMESTAMPTZ atau nilai yang secara implisit dapat dipaksa ke stempel waktu. 

 *numeric\$1expression*   
Ekspresi yang menghasilkan nilai tipe data numerik atau nilai yang secara implisit dapat dipaksa ke tipe numerik. Untuk informasi selengkapnya, lihat [Jenis numerik](r_Numeric_types201.md). TO\$1CHAR menyisipkan spasi di sebelah kiri string angka.  
TO\$1CHAR tidak mendukung nilai DESIMAL 128-bit. 

 *format*   
Format untuk nilai baru. Untuk format yang valid, lihat [String format datetime](r_FORMAT_strings.md) dan[String format numerik](r_Numeric_formating.md). 

## Jenis pengembalian
<a name="r_TO_CHAR-return-type"></a>

VARCHAR

## Contoh
<a name="r_TO_CHAR-examples"></a>

Contoh berikut mengkonversi stempel waktu ke nilai dengan tanggal dan waktu dalam format dengan nama bulan empuk untuk sembilan karakter, nama hari dalam seminggu, dan nomor hari bulan.

```
select to_char(timestamp '2009-12-31 23:15:59', 'MONTH-DY-DD-YYYY HH12:MIPM');

to_char
-------------------------
DECEMBER -THU-31-2009 11:15PM
```

Contoh berikut mengonversi stempel waktu menjadi nilai dengan nomor hari dalam setahun.

```
select to_char(timestamp '2009-12-31 23:15:59', 'DDD');

to_char
-------------------------
365
```

Contoh berikut mengonversi stempel waktu ke nomor hari ISO dalam seminggu.

```
select to_char(timestamp '2022-05-16 23:15:59', 'ID');

to_char
-------------------------
1
```

Contoh berikut mengekstrak nama bulan dari tanggal.

```
select to_char(date '2009-12-31', 'MONTH');

to_char
-------------------------
DECEMBER
```

Contoh berikut mengkonversi setiap nilai STARTTIME dalam tabel EVENT ke string yang terdiri dari jam, menit, dan detik.

```
select to_char(starttime, 'HH12:MI:SS')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00
08:00:00
02:30:00
02:30:00
07:00:00
```

Contoh berikut mengkonversi seluruh nilai timestamp ke dalam format yang berbeda.

```
select starttime, to_char(starttime, 'MON-DD-YYYY HH12:MIPM')
from event where eventid=1;

      starttime      |       to_char
---------------------+---------------------
 2008-01-25 14:30:00 | JAN-25-2008 02:30PM
```

Contoh berikut mengkonversi stempel waktu literal ke string karakter.

```
select to_char(timestamp '2009-12-31 23:15:59','HH24:MI:SS');

to_char
----------
23:15:59
```

Contoh berikut mengkonversi angka desimal ke string karakter.

```
select to_char(125.8, '999.99');

to_char
---------
125.80
```

Contoh berikut mengkonversi angka desimal ke string karakter.

```
select to_char(125.8, '999D99');

to_char
---------
125.80
```

Contoh berikut mengkonversi angka ke string karakter dengan nol di depan.

```
select to_char(125.8, '0999D99');

to_char
---------
0125.80
```

Contoh berikut mengkonversi angka ke string karakter dengan tanda negatif di akhir.

```
select to_char(-125.8, '999D99S');

to_char
---------
125.80-
```

Contoh berikut mengkonversi angka ke string karakter dengan tanda positif atau negatif pada posisi yang ditentukan.

```
select to_char(125.8, '999D99SG');

to_char
---------
125.80+
```

Contoh berikut mengkonversi angka ke string karakter dengan tanda positif pada posisi yang ditentukan.

```
select to_char(125.8, 'PL999D99');

to_char
---------
+ 125.80
```

Contoh berikut mengkonversi angka ke string karakter dengan simbol mata uang.

```
select to_char(-125.88, '$S999D99');

to_char
---------
$-125.88
```

Contoh berikut mengkonversi angka ke string karakter dengan simbol mata uang di posisi yang ditentukan.

```
select to_char(-125.88, 'S999D99L');

to_char
---------
-125.88$
```

Contoh berikut mengkonversi angka ke string karakter menggunakan pemisah ribuan (koma).

```
select to_char(1125.8, '9,999.99');

to_char
---------
1,125.80
```

Contoh berikut mengkonversi angka ke string karakter menggunakan kurung sudut untuk angka negatif.

```
select to_char(-125.88, '$999D99PR');

to_char
---------
$<125.88>
```

Contoh berikut mengkonversi angka ke string angka Romawi.

```
select to_char(125, 'RN');

to_char
---------
   CXXV
```

Contoh berikut mengonversi tanggal menjadi kode abad.

```
select to_char(date '2020-12-31', 'CC');

to_char
---------
21
```

Contoh berikut menampilkan hari dalam seminggu.

```
SELECT to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS');

to_char
-----------------------
Wednesday, 31 09:34:26
```

Contoh berikut menampilkan akhiran nomor urut untuk angka.

```
SELECT to_char(482, '999th');

to_char
-----------------------
 482nd
```

Contoh berikut mengurangi komisi dari harga yang dibayarkan dalam tabel penjualan. Perbedaannya kemudian dibulatkan dan diubah menjadi angka romawi, ditunjukkan pada kolom to\$1char: 

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'rn') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

 salesid | pricepaid | commission | difference |     to_char
---------+-----------+------------+------------+-----------------
       1 |    728.00 |     109.20 |     618.80 |           dcxix
       2 |     76.00 |      11.40 |      64.60 |             lxv
       3 |    350.00 |      52.50 |     297.50 |        ccxcviii
       4 |    175.00 |      26.25 |     148.75 |           cxlix
       5 |    154.00 |      23.10 |     130.90 |           cxxxi
       6 |    394.00 |      59.10 |     334.90 |         cccxxxv
       7 |    788.00 |     118.20 |     669.80 |           dclxx
       8 |    197.00 |      29.55 |     167.45 |          clxvii
       9 |    591.00 |      88.65 |     502.35 |             dii
      10 |     65.00 |       9.75 |      55.25 |              lv
```

Contoh berikut menambahkan simbol mata uang ke nilai selisih yang ditunjukkan di kolom to\$1char: 

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'l99999D99') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

salesid | pricepaid | commission | difference |  to_char
--------+-----------+------------+------------+------------
      1 |    728.00 |     109.20 |     618.80 | $   618.80
      2 |     76.00 |      11.40 |      64.60 | $    64.60
      3 |    350.00 |      52.50 |     297.50 | $   297.50
      4 |    175.00 |      26.25 |     148.75 | $   148.75
      5 |    154.00 |      23.10 |     130.90 | $   130.90
      6 |    394.00 |      59.10 |     334.90 | $   334.90
      7 |    788.00 |     118.20 |     669.80 | $   669.80
      8 |    197.00 |      29.55 |     167.45 | $   167.45
      9 |    591.00 |      88.65 |     502.35 | $   502.35
     10 |     65.00 |       9.75 |      55.25 | $    55.25
```

Contoh berikut mencantumkan abad di mana setiap penjualan dilakukan. 

```
select salesid, saletime, to_char(saletime, 'cc') from sales
order by salesid limit 10;

 salesid |      saletime       | to_char
---------+---------------------+---------
       1 | 2008-02-18 02:36:48 | 21
       2 | 2008-06-06 05:00:16 | 21
       3 | 2008-06-06 08:26:17 | 21
       4 | 2008-06-09 08:38:52 | 21
       5 | 2008-08-31 09:17:02 | 21
       6 | 2008-07-16 11:59:24 | 21
       7 | 2008-06-26 12:56:06 | 21
       8 | 2008-07-10 02:12:36 | 21
       9 | 2008-07-22 02:23:17 | 21
      10 | 2008-08-06 02:51:55 | 21
```

Contoh berikut mengkonversi setiap nilai STARTTIME dalam tabel EVENT ke string yang terdiri dari jam, menit, detik, dan zona waktu. 

```
select to_char(starttime, 'HH12:MI:SS TZ')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00 UTC
08:00:00 UTC
02:30:00 UTC
02:30:00 UTC
07:00:00 UTC
```

Contoh berikut menunjukkan pemformatan untuk detik, milidetik, dan mikrodetik.

```
select sysdate,
to_char(sysdate, 'HH24:MI:SS') as seconds,
to_char(sysdate, 'HH24:MI:SS.MS') as milliseconds,
to_char(sysdate, 'HH24:MI:SS:US') as microseconds;

timestamp           | seconds  | milliseconds | microseconds   
--------------------+----------+--------------+----------------
2015-04-10 18:45:09 | 18:45:09 | 18:45:09.325 | 18:45:09:325143
```

# Fungsi TO\$1DATE
<a name="r_TO_DATE_function"></a>

TO\$1DATE mengonversi tanggal yang diwakili oleh string karakter ke tipe data DATE. 

**catatan**  
TO\$1DATE tidak mendukung string format dengan Q (Quarter number).

## Sintaksis
<a name="r_TO_DATE_function-synopsis"></a>

```
TO_DATE(string, format)
```

```
TO_DATE(string, format, is_strict)
```

## Argumen
<a name="r_TO_DATE_function-arguments"></a>

 *tali*   
Sebuah string yang akan dikonversi. 

 *format*   
Sebuah string literal yang mendefinisikan format *string* input, dalam hal bagian tanggalnya. Untuk daftar format hari, bulan, dan tahun yang valid, lihat[String format datetime](r_FORMAT_strings.md). 

 *is\$1strict*   
Nilai Boolean opsional yang menentukan apakah kesalahan dikembalikan jika nilai tanggal masukan berada di luar jangkauan. Ketika *is\$1strict* disetel ke`TRUE`, kesalahan dikembalikan jika ada nilai di luar jangkauan. Ketika *is\$1strict* disetel ke`FALSE`, yang merupakan default, maka nilai overflow diterima. 

## Jenis pengembalian
<a name="r_TO_DATE_function-return-type"></a>

TO\$1DATE mengembalikan DATE, tergantung pada nilai *format*. 

Jika konversi ke *format* gagal, maka kesalahan dikembalikan. 

## Contoh
<a name="r_TO_DATE_function-example"></a>

 Pernyataan SQL berikut mengubah tanggal `02 Oct 2001` menjadi tipe data tanggal.

```
select to_date('02 Oct 2001', 'DD Mon YYYY');

to_date
------------
2001-10-02
(1 row)
```

 Pernyataan SQL berikut mengkonversi string `20010631` ke tanggal.

```
select to_date('20010631', 'YYYYMMDD', FALSE);
```

Hasilnya adalah 1 Juli 2001, karena hanya ada 30 hari di bulan Juni.

```
to_date
------------
2001-07-01
```

 Pernyataan SQL berikut mengkonversi string `20010631` ke tanggal: 

```
to_date('20010631', 'YYYYMMDD', TRUE);
```

Hasilnya adalah kesalahan karena hanya ada 30 hari di bulan Juni.

```
ERROR:  date/time field date value out of range: 2001-6-31
```

# TO\$1NUMBER
<a name="r_TO_NUMBER"></a>

TO\$1NUMBER mengkonversi string ke nilai numerik (desimal). 

**catatan**  
Kami menyarankan Anda menggunakan string `FM` format Anda untuk menekan padding kosong dan nol. Untuk daftar format yang valid, lihat[String format numerik](r_Numeric_formating.md).

## Sintaksis
<a name="r_TO_NUMBER-synopsis"></a>

```
to_number(string, format)
```

## Argumen
<a name="r_TO_NUMBER-arguments"></a>

 *tali*   
String yang akan dikonversi. Formatnya harus berupa nilai literal. 

 *format*   
Argumen kedua adalah string format yang menunjukkan bagaimana string karakter harus diurai untuk membuat nilai numerik. Misalnya, format `'FM99D999'` menentukan bahwa string yang akan dikonversi terdiri dari lima digit dengan titik desimal di posisi ketiga. Misalnya, `to_number('12.345','FM99D999')` kembali `12.345` sebagai nilai numerik. Untuk daftar format yang valid, lihat[String format numerik](r_Numeric_formating.md). 

## Jenis pengembalian
<a name="r_TO_NUMBER-return-type"></a>

TO\$1NUMBER mengembalikan nomor DECIMAL. 

Jika konversi ke *format* gagal, maka kesalahan dikembalikan. 

## Contoh
<a name="r_TO_NUMBER-examples"></a>

Contoh berikut mengkonversi string `12,454.8-` ke nomor: 

```
select to_number('12,454.8-', 'FM99G999D9S');

to_number
-----------
-12454.8
```

Contoh berikut mengkonversi string `$ 12,454.88` ke nomor: 

```
select to_number('$ 12,454.88', 'FML99G999D99');

to_number
-----------
12454.88
```

Contoh berikut mengkonversi string `$ 2,012,454.88` ke nomor: 

```
select to_number('$ 2,012,454.88', 'FML9,999,999.99');

to_number
-----------
2012454.88
```

# Fungsi TRY\$1CAST
<a name="r_TRY_CAST"></a>

Dibandingkan dengan fungsi CAST, TRY\$1CAST pertama kali mencoba untuk mentransmisikan ekspresi ke tipe yang ditentukan. Jika casting gagal karena kesalahan konversi, operasi mengembalikan null. Jika konversi tidak diizinkan secara eksplisit, operasi mengembalikan kesalahan. Anda dapat menemukan daftar kemungkinan konversi dalam catatan penggunaan di bawah ini. Misalnya, mencoba mengonversi boolean ke stempel waktu tidak diizinkan. 

## Sintaksis
<a name="r_TRY_CAST-syntax"></a>

```
TRY_CAST(expression AS type)
```

## Argumen
<a name="r_TRY_CAST-arguments"></a>

 *ekspresi*   
Ekspresi yang mengevaluasi satu atau lebih nilai, seperti nama kolom atau literal. Mengkonversi nilai null mengembalikan nol. Ekspresi tidak dapat berisi string kosong atau kosong. 

 *jenis*   
 Salah satu tipe data yang didukung. Untuk daftar lengkap tipe data, lihat[Jenis Data](c_Supported_data_types.md). Untuk daftar pasangan tipe data sumber dan tipe data target yang didukung, lihat catatan penggunaan di bawah ini. 

## Jenis pengembalian
<a name="r_TRY_CAST-return-type"></a>

TRY\$1CAST mengembalikan nilai tipe data yang ditentukan oleh argumen *tipe*. Jika konversi gagal, operasi mengembalikan null. 

## Catatan penggunaan
<a name="r_TRY_CAST-usage-notes"></a>

Berikut ini adalah daftar tipe data sumber dan pasangan tipe data target yang didukung Amazon Redshift untuk TRY\$1CAST.

 *BOOL*   
 KECIL, INT, BIGINT, SUPER 

 *KECIL*   
 BOOL, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, BPCHAR, TEKS, VARCHAR, SUPER 

 *INT*   
 BOOL, SMALLINT, BIGINT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER 

 *BIGINT*   
 BOOL, SMALLINT, INT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER 

 *DESIMAL*   
 SMALLINT, INT, BIGINT, NYATA, MENGAMBANG, BPCHAR, TEKS, VARCHAR, SUPER 

 *NYATA*   
 SMALLINT, INT, BIGINT, DESIMAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER 

 *MENGAPUNG*   
 SMALLINT, INT, BIGINT, DESIMAL, NYATA, BPCHAR, TEKS, VARCHAR, SUPER 

 *BPCHAR*   
 SMALLINT, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, TEKS, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER 

 *TEKS*   
 SMALLINT, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, BPCHAR, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER 

 *VARCHAR*   
 SMALLINT, INT, BIGINT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER 

 *STEMPEL WAKTU*   
 BPCHAR, TEKS, VARCHAR, TIMESTAMPTZ, TANGGAL, WAKTU 

 *TIMESTAMPTZ*   
 BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, TANGGAL, WAKTU, TIMETZ 

 *TANGGAL*   
 BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ 

 *WAKTU*   
 BPCHAR, TEKS, VARCHAR 

 *JADWAL*   
 BPCHAR, TEKS, VARCHAR 

 *SUPER*   
 SUPER dapat dikonversi menjadi tipe data lain, dengan pengecualian DATE, TIME, TIMETZ, TIMESTAMP, dan TIMESTAMPTZ. 

## Contoh
<a name="r_TRY_CAST-examples"></a>

Contoh berikut melemparkan STRING ke INTEGER.

```
SELECT TRY_CAST('123' AS INT);

int
----
123
```

Contoh berikut mengembalikan null. Mengonversi STRING ke INTEGER diizinkan sehingga TRY\$1CAST tidak mengembalikan kesalahan, tetapi 'foo' bukan bilangan bulat sehingga fungsi mengembalikan null.

```
SELECT TRY_CAST('foo' AS INT)
```

Contoh berikut mengembalikan kesalahan, karena mengonversi BOOLEAN ke TIMESTAMP tidak diizinkan.

```
SELECT TRY_CAST(true as timestamp);
```

Karena TRY\$1CAST mengembalikan null alih-alih segera mengembalikan kesalahan jika konversi gagal, Anda dapat menggunakan TRY\$1CAST untuk memfilter data yang tidak valid. Perhatikan contoh berikut, di mana baris yang tidak valid disaring karena kegagalan konversi di kolom usia untuk Akua Mansa.

```
CREATE TABLE IF NOT EXISTS student_data(
name VARCHAR(100) NOT NULL,
age VARCHAR(3) NOT NULL,
enrollment_date DATE NOT NULL);

INSERT INTO student_data (name, age, enrollment_date)
VALUES
('Alejandro Rosalez', '10', '01/01/2000'),
('Akua Mansa', 'Ten', '01/01/2000');

SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL;

--Akua is not returned.
 name              | age | enrollment_date
-------------------+-----+-----------------
 Alejandro Rosalez | 10  | 01/01/2000
```

# String format datetime
<a name="r_FORMAT_strings"></a>

Anda dapat menemukan referensi untuk string format datetime berikut. 

String format berikut berlaku untuk fungsi seperti TO\$1CHAR. String ini dapat berisi pemisah datetime (seperti '', '`-`', atau '`/``:`') dan “dateparts” dan “timeparts” berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_FORMAT_strings.html)

**catatan**  
Anda harus mengelilingi pemisah datetime (seperti '-', '/' atau ':') dengan tanda kutip tunggal, tetapi Anda harus mengelilingi “bagian tanggal” dan “bagian waktu” yang tercantum dalam tabel sebelumnya dengan tanda kutip ganda.

## Contoh
<a name="r_FORMAT_strings-examples"></a>

Untuk contoh pemformatan tanggal sebagai string, lihat. [TO\$1CHAR](r_TO_CHAR.md)

# String format numerik
<a name="r_Numeric_formating"></a>

Berikut ini, Anda dapat menemukan referensi untuk string format numerik. 

String format berikut berlaku untuk fungsi seperti TO\$1NUMBER dan TO\$1CHAR. 
+ Untuk contoh memformat string sebagai angka, lihat. [TO\$1NUMBER](r_TO_NUMBER.md)
+ Untuk contoh memformat angka sebagai string, lihat. [TO\$1CHAR](r_TO_CHAR.md)

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Numeric_formating.html)

# Karakter pemformatan gaya Teradata untuk data numerik
<a name="r_Numeric-format-teradata"></a>

*Berikut ini, Anda dapat menemukan bagaimana fungsi TEXT\$1TO\$1INT\$1ALT dan TEXT\$1TO\$1NUMERIC\$1ALT menafsirkan karakter dalam string ekspresi input.* Anda juga dapat menemukan daftar karakter yang dapat Anda tentukan dalam frasa *format*. *Selain itu, Anda dapat menemukan deskripsi perbedaan antara pemformatan gaya Teradata dan Amazon Redshift untuk opsi format.* 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Numeric-format-teradata.html)

## Karakter pemformatan data untuk Desimal Zona Ditandatangani, pemformatan data numerik gaya Teradata
<a name="r_Numeric-format-teradata-signed-zone"></a>

Anda dapat menggunakan karakter berikut dalam frase *format* fungsi TEXT\$1TO\$1INT\$1ALT dan TEXT\$1TO\$1NUMERIC\$1ALT untuk nilai desimal yang dikategorikan yang ditandatangani. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Numeric-format-teradata.html)

# Fungsi tanggal dan waktu
<a name="Date_functions_header"></a>

Di bagian ini, Anda dapat menemukan informasi tentang fungsi skalar tanggal dan waktu yang didukung Amazon Redshift.

**Topics**
+ [Ringkasan fungsi tanggal dan waktu](#date-functions-summary)
+ [Fungsi tanggal dan waktu dalam transaksi](#date-functions-transactions)
+ [Fungsi khusus node pemimpin yang tidak digunakan lagi](#date-functions-deprecated)
+ [\$1 Operator (Penggabungan)](r_DATE-CONCATENATE_function.md)
+ [Fungsi ADD\$1MONTHS](r_ADD_MONTHS.md)
+ [Fungsi AT TIME ZONE](r_AT_TIME_ZONE.md)
+ [Fungsi CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md)
+ [Fungsi CURRENT\$1DATE](r_CURRENT_DATE_function.md)
+ [Fungsi DATE\$1CMP](r_DATE_CMP.md)
+ [Fungsi DATE\$1CMP\$1TIMESTAMP](r_DATE_CMP_TIMESTAMP.md)
+ [Fungsi DATE\$1CMP\$1TIMESTAMPTZ](r_DATE_CMP_TIMESTAMPTZ.md)
+ [Fungsi DATEADD](r_DATEADD_function.md)
+ [Fungsi DATEDIFF](r_DATEDIFF_function.md)
+ [Fungsi DATE\$1PART](r_DATE_PART_function.md)
+ [Fungsi DATE\$1PART\$1YEAR](r_DATE_PART_YEAR.md)
+ [Fungsi DATE\$1TRUNC](r_DATE_TRUNC.md)
+ [Fungsi EKSTRAK](r_EXTRACT_function.md)
+ [fungsi GETDATE](r_GETDATE.md)
+ [Fungsi INTERVAL\$1CMP](r_INTERVAL_CMP.md)
+ [Fungsi LAST\$1DAY](r_LAST_DAY.md)
+ [Fungsi MONTHS\$1BETWEEN](r_MONTHS_BETWEEN_function.md)
+ [fungsi NEXT\$1DAY](r_NEXT_DAY.md)
+ [fungsi SYSDATE](r_SYSDATE.md)
+ [Fungsi TIMEOFDAY](r_TIMEOFDAY_function.md)
+ [Fungsi TIMESTAMP\$1CMP](r_TIMESTAMP_CMP.md)
+ [Fungsi TIMESTAMP\$1CMP\$1DATE](r_TIMESTAMP_CMP_DATE.md)
+ [Fungsi TIMESTAMP\$1CMP\$1TIMESTAMPTZ](r_TIMESTAMP_CMP_TIMESTAMPTZ.md)
+ [Fungsi TIMESTAMPTZ\$1CMP](r_TIMESTAMPTZ_CMP.md)
+ [Fungsi TIMESTAMPTZ\$1CMP\$1DATE](r_TIMESTAMPTZ_CMP_DATE.md)
+ [Fungsi TIMESTAMPTZ\$1CMP\$1TIMESTAMP](r_TIMESTAMPTZ_CMP_TIMESTAMP.md)
+ [Fungsi TIMEZONE](r_TIMEZONE.md)
+ [Fungsi TO\$1TIMESTAMP](r_TO_TIMESTAMP.md)
+ [Fungsi TRUNC](r_TRUNC_date.md)
+ [Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md)

## Ringkasan fungsi tanggal dan waktu
<a name="date-functions-summary"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/Date_functions_header.html)

**catatan**  
Detik kabisat tidak dipertimbangkan dalam perhitungan waktu berlalu.

## Fungsi tanggal dan waktu dalam transaksi
<a name="date-functions-transactions"></a>

Ketika Anda menjalankan fungsi berikut dalam blok transaksi (BEGIN... END), fungsi mengembalikan tanggal mulai atau waktu transaksi saat ini, bukan awal dari pernyataan saat ini.
+ SYSDATE
+ TIMESTAMP
+ CURRENT\$1DATE

Fungsi-fungsi berikut selalu mengembalikan tanggal mulai atau waktu pernyataan saat ini, bahkan ketika mereka berada dalam blok transaksi.
+ GETDATE
+ WAKTUHARI

## Fungsi khusus node pemimpin yang tidak digunakan lagi
<a name="date-functions-deprecated"></a>

Fungsi tanggal berikut tidak digunakan lagi karena hanya berjalan pada node pemimpin. Untuk informasi selengkapnya, lihat [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md).
+ USIA. Gunakan [Fungsi DATEDIFF](r_DATEDIFF_function.md) sebagai gantinya.
+ CURRENT\$1TIME. Gunakan [fungsi GETDATE](r_GETDATE.md) atau [SYSDATE](r_SYSDATE.md) sebagai gantinya. 
+ CURRENT\$1TIMESTAMP. Gunakan [fungsi GETDATE](r_GETDATE.md) atau [SYSDATE](r_SYSDATE.md) sebagai gantinya.
+ WAKTU LOKAL. Gunakan [fungsi GETDATE](r_GETDATE.md) atau [SYSDATE](r_SYSDATE.md) sebagai gantinya.
+ STEMPEL WAKTU LOKAL. Gunakan [fungsi GETDATE](r_GETDATE.md) atau [SYSDATE](r_SYSDATE.md) sebagai gantinya.
+ TIDAK TERBATAS 
+ SEKARANG. Gunakan [fungsi GETDATE](r_GETDATE.md) atau [SYSDATE](r_SYSDATE.md) sebagai gantinya. Jika Anda menggunakan fungsi NOW dalam tampilan terwujud, ia akan menetapkan ke stempel waktu pembuatan tampilan terwujud, bukan stempel waktu saat ini. 

# \$1 Operator (Penggabungan)
<a name="r_DATE-CONCATENATE_function"></a>

Menggabungkan TANGGAL ke TIME atau TIMETZ di kedua sisi simbol \$1 dan mengembalikan TIMESTAMP atau TIMESTAMPTZ. 

## Sintaksis
<a name="r_DATE-CONCATENATE_function-synopsis"></a>

```
date + {time | timetz}
```

Urutan argumen dapat dibalik. Misalnya, **waktu\$1tanggal**.

## Pendapat
<a name="r_DATE-CONCATENATE_function-arguments"></a>

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE` 

 *waktu*   
Kolom tipe data `TIME` atau ekspresi yang secara implisit mengevaluasi tipe. `TIME` 

 *jadwal*   
Kolom tipe data `TIMETZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMETZ` 

## Jenis pengembalian
<a name="r_DATE-CONCATENATE_function-return-type"></a>

*TIMESTAMP jika masukan adalah *tanggal\$1waktu*.* 

*TIMESTAMPTZ jika masukan adalah *tanggal* \$1 jadwal.* 

## Contoh
<a name="r_DATE-CONCATENATE_function-examples"></a>

### Contoh pengaturan
<a name="r_DATE-CONCATENATE_function-example-setup"></a>

Untuk mengatur tabel TIME\$1TEST dan TIMETZ\$1TEST yang digunakan dalam contoh, gunakan perintah berikut.

```
create table time_test(time_val time);

insert into time_test values
('20:00:00'),
('00:00:00.5550'),
('00:58:00');
   
create table timetz_test(timetz_val timetz);
   
insert into timetz_test values
('04:00:00+00'),
('00:00:00.5550+00'),
('05:58:00+00');
```

### Contoh dengan kolom waktu
<a name="r_DATE-CONCATENATE_function-examples-time"></a>

Berikut contoh tabel TIME\$1TEST memiliki kolom TIME\$1VAL (tipe TIME) dengan tiga nilai dimasukkan. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

Contoh berikut menggabungkan tanggal literal dan kolom TIME\$1VAL.

```
select date '2000-01-02' + time_val as ts from time_test;
            
ts
---------------------
2000-01-02 20:00:00
2000-01-02 00:00:00.5550
2000-01-02 00:58:00
```

Contoh berikut menggabungkan tanggal literal dan literal waktu. 

```
select date '2000-01-01' + time '20:00:00' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

Contoh berikut menggabungkan literal waktu dan tanggal literal. 

```
select time '20:00:00' + date '2000-01-01' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

### Contoh dengan kolom TIMETZ
<a name="r_DATE-CONCATENATE_function-examples-timetz"></a>

Contoh tabel berikut TIMETZ\$1TEST memiliki kolom TIMETZ\$1VAL (tipe TIMETZ) dengan tiga nilai dimasukkan. 

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

Contoh berikut menggabungkan tanggal literal dan kolom TIMETZ\$1VAL. 

```
select date '2000-01-01' + timetz_val as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

Contoh berikut menggabungkan kolom TIMETZ\$1VAL dan tanggal literal. 

```
select timetz_val + date '2000-01-01' as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

Contoh berikut menggabungkan literal DATE dan literal TIMETZ. Contoh mengembalikan TIMESTAMPTZ yang berada di zona waktu UTC secara default. UTC adalah 8 jam di depan PST, jadi hasilnya 8 jam lebih awal dari waktu input.

```
select date '2000-01-01' + timetz '20:00:00 PST' as ts;
            
           ts
------------------------
 2000-01-02 04:00:00+00
```

# Fungsi ADD\$1MONTHS
<a name="r_ADD_MONTHS"></a>

ADD\$1MONTHS menambahkan jumlah bulan yang ditentukan ke nilai atau ekspresi tanggal atau stempel waktu. [DATEADD](r_DATEADD_function.md)Fungsi ini menyediakan fungsionalitas serupa. 

## Sintaksis
<a name="r_ADD_MONTHS-synopsis"></a>

```
ADD_MONTHS( {date | timestamp}, integer)
```

## Argumen
<a name="r_ADD_MONTHS-arguments"></a>

 *tanggal* \$1 *stempel* waktu   
Kolom tipe data `DATE` atau `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `DATE` `TIMESTAMP` Jika tanggal adalah hari terakhir bulan itu, atau jika bulan yang dihasilkan lebih pendek, fungsi mengembalikan hari terakhir bulan dalam hasilnya. Untuk tanggal lain, hasilnya berisi nomor hari yang sama dengan ekspresi tanggal. 

 *bilangan bulat*   
Nilai tipe data`INTEGER`. Gunakan angka negatif untuk mengurangi bulan dari tanggal. 

## Jenis pengembalian
<a name="r_ADD_MONTHS-return-type"></a>

TIMESTAMP

## Contoh
<a name="r_ADD_MONTHS-example"></a>

Query berikut menggunakan fungsi ADD\$1MONTHS di dalam fungsi TRUNC. Fungsi TRUNC menghapus waktu hari dari hasil ADD\$1MONTHS. Fungsi ADD\$1MONTHS menambahkan 12 bulan ke setiap nilai dari kolom CALDATE. Nilai dalam kolom CALDATE adalah tanggal. 

```
select distinct trunc(add_months(caldate, 12)) as calplus12,
trunc(caldate) as cal
from date
order by 1 asc;

 calplus12  |    cal
------------+------------
 2009-01-01 | 2008-01-01
 2009-01-02 | 2008-01-02
 2009-01-03 | 2008-01-03
...
(365 rows)
```

*Contoh berikut menggunakan fungsi ADD\$1MONTHS untuk menambahkan 1 bulan ke stempel waktu.* 

```
select add_months('2008-01-01 05:07:30', 1); 

add_months
---------------------
2008-02-01 05:07:30
```

Contoh berikut menunjukkan perilaku ketika fungsi ADD\$1MONTHS beroperasi pada tanggal dengan bulan yang memiliki jumlah hari yang berbeda. Contoh ini menunjukkan bagaimana fungsi menangani penambahan 1 bulan ke 31 Maret dan menambahkan 1 bulan ke 30 April. April memiliki 30 hari, jadi menambahkan 1 bulan ke 31 Maret menghasilkan 30 April. Mei memiliki 31 hari, jadi menambahkan 1 bulan ke 30 April menghasilkan 31 Mei. 

```
select add_months('2008-03-31',1);

add_months
---------------------
2008-04-30 00:00:00

select add_months('2008-04-30',1); 

add_months
---------------------
2008-05-31 00:00:00
```

# Fungsi AT TIME ZONE
<a name="r_AT_TIME_ZONE"></a>

AT TIME ZONE menentukan zona waktu mana yang akan digunakan dengan ekspresi TIMESTAMP atau TIMESTAMPTZ.

## Sintaksis
<a name="r_AT_TIME_ZONE-syntax"></a>

```
AT TIME ZONE 'timezone'
```

## Argumen
<a name="r_AT_TIME_ZONE-arguments"></a>

*zona waktu*  
`TIMEZONE`Untuk nilai pengembalian. Zona waktu dapat ditentukan sebagai nama zona waktu (seperti **'Africa/Kampala'** atau**'Singapore'**) atau sebagai singkatan zona waktu (seperti **'UTC'** atau**'PDT'**).   
Untuk melihat daftar nama zona waktu yang didukung, jalankan perintah berikut.   

```
select pg_timezone_names();
```
 Untuk melihat daftar singkatan zona waktu yang didukung, jalankan perintah berikut.   

```
select pg_timezone_abbrevs();
```
 Untuk informasi selengkapnya dan contoh tambahan, lihat [Catatan penggunaan zona waktu](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes).

## Jenis pengembalian
<a name="r_AT_TIME_ZONE-return-type"></a>

TIMESTAMPTZ bila digunakan dengan ekspresi TIMESTAMP. TIMESTAMP bila digunakan dengan ekspresi TIMESTAMPTZ. 

## Contoh
<a name="r_AT_TIME_ZONE-examples"></a>

Contoh berikut mengkonversi nilai timestamp tanpa zona waktu dan menafsirkannya sebagai waktu MST (UTC\$17 di POSIX). Contoh mengembalikan nilai tipe data TIMESTAMPTZ untuk zona waktu UTC. Jika Anda mengonfigurasi zona waktu default ke zona waktu selain UTC, Anda mungkin melihat hasil yang berbeda.

```
SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-17 03:38:40+00
```

Contoh berikut mengambil timestamp masukan dengan nilai zona waktu di mana zona waktu yang ditentukan adalah EST (UTC\$15 di POSIX) dan mengubahnya menjadi MST (UTC\$17 di POSIX). Contoh mengembalikan nilai tipe data TIMESTAMP.

```
SELECT TIMESTAMPTZ '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-16 18:38:40
```

# Fungsi CONVERT\$1TIMEZONE
<a name="CONVERT_TIMEZONE"></a>

CONVERT\$1TIMEZONE mengonversi stempel waktu dari satu zona waktu ke zona waktu lainnya. Fungsi ini secara otomatis menyesuaikan waktu musim panas.

## Sintaksis
<a name="CONVERT_TIMEZONE-syntax"></a>

```
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
```

## Argumen
<a name="CONVERT_TIMEZONE-arguments"></a>

*source\$1timezone*  
(Opsional) Zona waktu stempel waktu saat ini. Defaultnya adalah UTC. Untuk informasi selengkapnya, lihat [Catatan penggunaan zona waktu](#CONVERT_TIMEZONE-usage-notes).

*target\$1zona waktu*   
Zona waktu untuk stempel waktu baru. Untuk informasi selengkapnya, lihat [Catatan penggunaan zona waktu](#CONVERT_TIMEZONE-usage-notes).

*stempel waktu*   
Kolom timestamp atau ekspresi yang secara implisit mengkonversi ke stempel waktu.

## Jenis pengembalian
<a name="CONVERT_TIMEZONE-return-type"></a>

TIMESTAMP

## Catatan penggunaan zona waktu
<a name="CONVERT_TIMEZONE-usage-notes"></a>

*source\$1timezone* atau *target\$1timezone* dapat ditentukan sebagai nama zona waktu (seperti 'Afrika/Kampala' atau 'Singapura') atau sebagai singkatan zona waktu (seperti 'UTC' atau 'PDT'). Anda tidak perlu mengubah nama zona waktu menjadi nama atau singkatan menjadi singkatan. Misalnya, Anda dapat memilih stempel waktu dari nama zona waktu sumber 'Singapura' dan mengubahnya menjadi stempel waktu dalam singkatan zona waktu 'PDT'.

**catatan**  
Hasil penggunaan nama zona waktu atau singkatan zona waktu dapat berbeda karena waktu musiman lokal, seperti waktu musim panas. 

### Menggunakan nama zona waktu
<a name="CONVERT_TIMEZONE-using-name"></a>

Untuk melihat daftar nama zona waktu saat ini dan lengkap, jalankan perintah berikut. 

```
select pg_timezone_names();
```

Setiap baris berisi string yang dipisahkan koma dengan nama zona waktu, singkatan, offset UTC, dan indikator jika zona waktu mengamati waktu musim panas (atau). `t` `f` Misalnya, cuplikan berikut menunjukkan dua baris yang dihasilkan. Baris pertama adalah zona waktu`Antarctica/South Pole`, singkatan`NZDT`, dengan `13:00:00` offset dari UTC, dan `f` untuk menunjukkan itu tidak mengamati waktu musim panas. Baris kedua adalah zona waktu`Europe/Paris`, singkatan`CET`, dengan `01:00:00` offset dari UTC, dan `f` untuk menunjukkan itu mengamati waktu musim panas.

```
pg_timezone_names
------------------
(Antarctica/South_Pole,NZDT,13:00:00,t)	
(Europe/Paris,CET,01:00:00,f)
```

Jalankan pernyataan SQL untuk mendapatkan seluruh daftar dan menemukan nama zona waktu. Sekitar 600 baris dikembalikan. Meskipun beberapa nama zona waktu yang dikembalikan adalah inisialisme atau akronim yang dikapitalisasi (misalnya; GB, RRC, ROK), fungsi CONVERT\$1TIMEZONE memperlakukannya sebagai nama zona waktu, bukan singkatan zona waktu. 

*Jika Anda menentukan zona waktu menggunakan nama zona waktu, CONVERT\$1TIMEZONE secara otomatis menyesuaikan waktu musim panas (DST), atau protokol musiman lokal lainnya, seperti Waktu Musim Panas, Waktu Standar, atau Waktu Musim Dingin, yang berlaku untuk zona waktu tersebut selama tanggal dan waktu yang ditentukan oleh 'stempel waktu'.* Misalnya, 'Eropa/London' mewakili UTC di musim dingin dan menambahkan satu jam di musim panas. Perhatikan bahwa Amazon Redshift menggunakan [Database Zona Waktu IANA sebagai sumber otoritatif spesifikasi zona waktu](https://www.iana.org/time-zones).

### Menggunakan singkatan zona waktu
<a name="CONVERT_TIMEZONE-using-abbrev"></a>

 Untuk melihat daftar singkatan zona waktu saat ini dan lengkap, jalankan perintah berikut. 

```
select pg_timezone_abbrevs();
```

Hasilnya berisi string yang dipisahkan koma dengan singkatan zona waktu, offset UTC, dan indikator jika zona waktu mengamati waktu musim panas (atau). `t` `f` Misalnya, cuplikan berikut menunjukkan dua baris yang dihasilkan. Baris pertama berisi singkatan untuk Pacific Daylight Time`PDT`, dengan `-07:00:00` offset dari UTC, dan `t` untuk menunjukkan itu mengamati waktu musim panas. Baris kedua berisi singkatan untuk Waktu Standar Pasifik`PST`, dengan `-08:00:00` offset dari UTC, dan `f` untuk menunjukkan itu tidak mengamati waktu musim panas.

```
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)	
(PST,-08:00:00,f)
```

Jalankan pernyataan SQL untuk mendapatkan seluruh daftar dan temukan singkatan berdasarkan indikator offset dan daylight saving time. Sekitar 200 baris dikembalikan.

Singkatan zona waktu mewakili offset tetap dari UTC. Jika Anda menentukan zona waktu menggunakan singkatan zona waktu, CONVERT\$1TIMEZONE menggunakan offset tetap dari UTC dan tidak menyesuaikan protokol musiman lokal apa pun.

### Menggunakan format bergaya POSIX
<a name="CONVERT_TIMEZONE-using-posix"></a>

Spesifikasi zona waktu gaya POSIX adalah dalam bentuk *STDoffset*atau *STDoffsetDST*, di mana *STD* adalah singkatan zona waktu, offset adalah *offset* numerik dalam jam barat dari UTC, dan *DST* adalah singkatan zona musim panas opsional. Daylight saving time diasumsikan satu jam lebih cepat dari offset yang diberikan.

Format zona waktu bergaya POSIX menggunakan offset positif di sebelah barat Greenwich, berbeda dengan konvensi ISO-8601, yang menggunakan offset positif di timur Greenwich.

Berikut ini adalah contoh zona waktu bergaya POSIX:
+  PST8
+  PST8PDT
+  EST5
+  EST5EDT

**catatan**  
Amazon Redshift tidak memvalidasi spesifikasi zona waktu gaya POSIX, sehingga dimungkinkan untuk mengatur zona waktu ke nilai yang tidak valid. Misalnya, perintah berikut tidak mengembalikan kesalahan, meskipun menetapkan zona waktu ke nilai yang tidak valid.  

```
set timezone to ‘xxx36’;
```

## Contoh
<a name="CONVERT_TIMEZONE-examples"></a>

Banyak contoh menggunakan kumpulan data sampel TICKIT. Untuk informasi selengkapnya, lihat [Contoh database](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

Contoh berikut mengkonversi nilai timestamp dari zona waktu UTC default untuk PST.

```
select convert_timezone('PST', '2008-08-21 07:23:54');
                     
 convert_timezone
------------------------
2008-08-20 23:23:54
```

Contoh berikut mengkonversi nilai timestamp dalam kolom LISTTIME dari zona waktu UTC default ke PST. Meskipun stempel waktu berada dalam periode waktu siang hari, itu diubah menjadi waktu standar karena zona waktu target ditentukan sebagai singkatan (PST).

```
select listtime, convert_timezone('PST', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+-------------------
2008-08-24 09:36:12     2008-08-24 01:36:12
```

Contoh berikut mengonversi timestamp kolom LISTTIME dari zona waktu UTC default ke zona waktu. US/Pacific Zona waktu target menggunakan nama zona waktu, dan stempel waktu berada dalam periode waktu siang hari, sehingga fungsi mengembalikan waktu siang hari.

```
select listtime, convert_timezone('US/Pacific', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+---------------------
2008-08-24 09:36:12 | 2008-08-24 02:36:12
```

Contoh berikut mengkonversi string timestamp dari EST ke PST:

```
select convert_timezone('EST', 'PST', '20080305 12:25:29');
                     
 convert_timezone
-------------------
2008-03-05 09:25:29
```

Contoh berikut mengubah stempel waktu ke Waktu Standar Timur AS karena zona waktu target menggunakan nama zona waktu (America/New\$1York) dan stempel waktu berada dalam periode waktu standar.

```
select convert_timezone('America/New_York', '2013-02-01 08:00:00');

 convert_timezone
---------------------
2013-02-01 03:00:00
(1 row)
```

Contoh berikut mengubah stempel waktu menjadi US Eastern Daylight Time karena zona waktu target menggunakan nama zona waktu (America/New\$1York) dan stempel waktu berada dalam periode waktu siang hari.

```
select convert_timezone('America/New_York', '2013-06-01 08:00:00');

 convert_timezone
---------------------
2013-06-01 04:00:00
(1 row)
```

Contoh berikut menunjukkan penggunaan offset. 

```
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, 
CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, 
CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2,
CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2;
 
   newzone_plus_2    | newzone_minus_2_15  |      la_plus_2      |     gmt_plus_2
---------------------+---------------------+---------------------+---------------------
2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00
(1 row)
```

# Fungsi CURRENT\$1DATE
<a name="r_CURRENT_DATE_function"></a>

CURRENT\$1DATE mengembalikan tanggal di zona waktu sesi saat ini (UTC secara default) dalam format default:. YYYY-MM-DD

**catatan**  
CURRENT\$1DATE mengembalikan tanggal mulai untuk transaksi saat ini, bukan untuk awal pernyataan saat ini. Pertimbangkan skenario di mana Anda memulai transaksi yang berisi beberapa pernyataan pada 10/01/08 23:59, dan pernyataan yang berisi CURRENT\$1DATE berjalan pada 10/02/08 00:00. CURRENT\$1DATE kembali`10/01/08`, tidak. `10/02/08`

## Sintaksis
<a name="r_CURRENT_DATE_function-syntax"></a>

```
CURRENT_DATE
```

## Jenis pengembalian
<a name="r_CURRENT_DATE_function-return-type"></a>

DATE

## Contoh
<a name="r_CURRENT_DATE_function-examples"></a>

Contoh berikut mengembalikan tanggal saat ini (di Wilayah AWS mana fungsi berjalan).

```
select current_date;

   date
------------
2008-10-01
```

Contoh berikut membuat tabel, menyisipkan baris di mana default kolom `todays_date` adalah CURRENT\$1DATE, dan kemudian memilih semua baris dalam tabel.

```
CREATE TABLE insert_dates(
    label varchar(128) NOT NULL,
    todays_date DATE DEFAULT CURRENT_DATE);

INSERT INTO insert_dates(label)
VALUES('Date row inserted');

SELECT * FROM insert_dates;
         

 label            | todays_date
------------------+-------------
Date row inserted | 2023-05-10
```

# Fungsi DATE\$1CMP
<a name="r_DATE_CMP"></a>

DATE\$1CMP membandingkan dua tanggal. Fungsi kembali `0` jika tanggal identik, `1` jika *date1* lebih besar, dan `-1` jika *date2* lebih besar.

## Sintaksis
<a name="r_DATE_CMP-synopsis"></a>

```
DATE_CMP(date1, date2)
```

## Argumen
<a name="r_DATE_CMP-arguments"></a>

 *tanggal1*   
Kolom tipe data `DATE` atau ekspresi yang mengevaluasi `DATE` tipe.

 *tanggal2*   
Kolom tipe data `DATE` atau ekspresi yang mengevaluasi `DATE` tipe.

## Jenis pengembalian
<a name="r_DATE_CMP-return-type"></a>

INTEGER

## Contoh
<a name="r_DATE_CMP-example"></a>

Kueri berikut membandingkan nilai DATE di kolom CALDATE dengan tanggal 4 Januari 2008 dan mengembalikan apakah nilai di CALDATE adalah sebelum (`-1`), sama dengan (), atau setelah (`0``1`) 4 Januari 2008: 

```
select caldate, '2008-01-04',
date_cmp(caldate,'2008-01-04')
from date
order by dateid
limit 10;

 caldate   |  ?column?  | date_cmp
-----------+------------+----------
2008-01-01 | 2008-01-04 |       -1
2008-01-02 | 2008-01-04 |       -1
2008-01-03 | 2008-01-04 |       -1
2008-01-04 | 2008-01-04 |        0
2008-01-05 | 2008-01-04 |        1
2008-01-06 | 2008-01-04 |        1
2008-01-07 | 2008-01-04 |        1
2008-01-08 | 2008-01-04 |        1
2008-01-09 | 2008-01-04 |        1
2008-01-10 | 2008-01-04 |        1
(10 rows)
```

# Fungsi DATE\$1CMP\$1TIMESTAMP
<a name="r_DATE_CMP_TIMESTAMP"></a>

**DATE\$1CMP\$1TIMESTAMP membandingkan tanggal dengan stempel waktu dan mengembalikan `0` jika nilainya identik, jika tanggal lebih besar secara kronologis dan jika stempel waktu lebih besar. `1` `-1`**

## Sintaksis
<a name="r_DATE_CMP_TIMESTAMP-synopsis"></a>

```
DATE_CMP_TIMESTAMP(date, timestamp)
```

## Argumen
<a name="r_DATE_CMP_TIMESTAMP-arguments"></a>

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang mengevaluasi `DATE` tipe.

 *stempel waktu*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang mengevaluasi `TIMESTAMP` tipe.

## Jenis pengembalian
<a name="r_DATE_CMP_TIMESTAMP-return-type"></a>

INTEGER

## Contoh
<a name="r_DATE_CMP_TIMESTAMP-examples"></a>

Contoh berikut membandingkan tanggal dengan `2008-06-18` LISTTIME. Nilai kolom LISTTIME adalah stempel waktu. Daftar yang dibuat sebelum tanggal ini kembali`1`; daftar yang dibuat setelah tanggal ini kembali`-1`. 

```
select listid, '2008-06-18', listtime,
date_cmp_timestamp('2008-06-18', listtime)
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      listtime       | date_cmp_timestamp
--------+------------+---------------------+--------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54 |                  1
(10 rows)
```

# Fungsi DATE\$1CMP\$1TIMESTAMPTZ
<a name="r_DATE_CMP_TIMESTAMPTZ"></a>

**DATE\$1CMP\$1TIMESTAMPTZ membandingkan tanggal dengan stempel waktu dengan zona waktu dan mengembalikan `0` jika nilainya identik, jika tanggal lebih besar secara kronologis dan jika timestamptz lebih besar. `1` `-1`**

## Sintaksis
<a name="r_DATE_CMP_TIMESTAMPTZ-syntax"></a>

```
DATE_CMP_TIMESTAMPTZ(date, timestamptz)
```

## Argumen
<a name="r_DATE_CMP_TIMESTAMPTZ-arguments"></a>

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

 *timestamptz*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

## Jenis pengembalian
<a name="r_DATE_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## Contoh
<a name="r_DATE_CMP_TIMESTAMPTZ-examples"></a>

Contoh berikut membandingkan tanggal dengan `2008-06-18` LISTTIME. Daftar yang dibuat sebelum tanggal ini kembali`1`; daftar yang dibuat setelah tanggal ini kembali`-1`. 

```
select listid, '2008-06-18', CAST(listtime AS timestamptz),
date_cmp_timestamptz('2008-06-18', CAST(listtime AS timestamptz))
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      timestamptz       | date_cmp_timestamptz
--------+------------+------------------------+----------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29+00 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29+00 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33+00 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37+00 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11+00 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13+00 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15+00 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30+00 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36+00 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54+00 |                  1
(10 rows)
```

# Fungsi DATEADD
<a name="r_DATEADD_function"></a>

Menambah nilai DATE, TIME, TIMETZ, atau TIMESTAMP dengan interval tertentu. 

## Sintaksis
<a name="r_DATEADD_function-synopsis"></a>

```
DATEADD( datepart, interval, {date|time|timetz|timestamp} )
```

## Argumen
<a name="r_DATEADD_function-arguments"></a>

 *datepart*   
Bagian tanggal (tahun, bulan, hari, atau jam, misalnya) tempat fungsi beroperasi. Untuk informasi selengkapnya, lihat [Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md). 

 *interval*   
Integer yang menentukan interval (jumlah hari, misalnya) untuk ditambahkan ke ekspresi target. Sebuah integer negatif mengurangi interval. 

 *tanggal* *\$1 *waktu* \$1 *timetz \$1 stempel waktu**  
Kolom TANGGAL, WAKTU, TIMETZ, atau TIMESTAMP atau ekspresi yang secara implisit mengkonversi ke TANGGAL, WAKTU, TIMETZ, atau TIMESTAMP. Ekspresi DATE, TIME, TIMETZ, atau TIMESTAMP harus berisi bagian tanggal yang ditentukan. 

## Jenis pengembalian
<a name="r_DATEADD_function-return-type"></a>

TIMESTAMP atau TIME atau TIMETZ tergantung pada tipe data input.

## Contoh dengan kolom DATE
<a name="r_DATEADD_function-examples"></a>

Contoh berikut menambahkan 30 hari untuk setiap tanggal di bulan November yang ada di tabel DATE.

```
select dateadd(day,30,caldate) as novplus30
from date
where month='NOV'
order by dateid;

novplus30
---------------------
2008-12-01 00:00:00
2008-12-02 00:00:00
2008-12-03 00:00:00
...
(30 rows)
```

 Contoh berikut menambahkan 18 bulan ke nilai tanggal literal.

```
select dateadd(month,18,'2008-02-28');

date_add
---------------------
2009-08-28 00:00:00
(1 row)
```

Nama kolom default untuk fungsi DATEADD adalah DATE\$1ADD. Stempel waktu default untuk nilai tanggal adalah. `00:00:00` 

Contoh berikut menambahkan 30 menit ke nilai tanggal yang tidak menentukan stempel waktu.

```
select dateadd(m,30,'2008-02-28');

date_add
---------------------
2008-02-28 00:30:00
(1 row)
```

Anda dapat memberi nama bagian tanggal secara lengkap atau menyingkatnya. Dalam hal ini, *m* berarti menit, bukan bulan. 

## Contoh dengan kolom TIME
<a name="r_DATEADD_function-examples-time"></a>

Berikut contoh tabel TIME\$1TEST memiliki kolom TIME\$1VAL (tipe TIME) dengan tiga nilai dimasukkan. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

Contoh berikut menambahkan 5 menit untuk setiap TIME\$1VAL dalam tabel TIME\$1TEST.

```
select dateadd(minute,5,time_val) as minplus5 from time_test;
            
minplus5
---------------
20:05:00
00:05:00.5550
01:03:00
```

Contoh berikut menambahkan 8 jam ke nilai waktu literal.

```
select dateadd(hour, 8, time '13:24:55');
            
date_add
---------------
21:24:55
```

Contoh berikut menunjukkan kapan waktu berjalan lebih dari 24:00:00 atau di bawah 00:00:00. 

```
select dateadd(hour, 12, time '13:24:55');
            
date_add
---------------
01:24:55
```

## Contoh dengan kolom TIMETZ
<a name="r_DATEADD_function-examples-timetz"></a>

Nilai output dalam contoh ini ada di UTC yang merupakan zona waktu default. 

Contoh tabel berikut TIMETZ\$1TEST memiliki kolom TIMETZ\$1VAL (tipe TIMETZ) dengan tiga nilai dimasukkan.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

Contoh berikut menambahkan 5 menit untuk setiap TIMETZ\$1VAL dalam tabel TIMETZ\$1TEST.

```
select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test;
            
minplus5_tz
---------------
04:05:00+00
00:05:00.5550+00
06:03:00+00
```

Contoh berikut menambahkan 2 jam ke nilai timetz literal.

```
select dateadd(hour, 2, timetz '13:24:55 PST');
            
date_add
---------------
23:24:55+00
```

## Contoh dengan kolom TIMESTAMP
<a name="r_DATEADD_function-examples-timestamp"></a>

Nilai output dalam contoh ini ada di UTC yang merupakan zona waktu default. 

Contoh tabel berikut TIMESTAMP\$1TEST memiliki kolom TIMESTAMP\$1VAL (tipe TIMESTAMP) dengan tiga nilai disisipkan.

```
SELECT timestamp_val FROM timestamp_test;
            
timestamp_val
------------------
1988-05-15 10:23:31
2021-03-18 17:20:41
2023-06-02 18:11:12
```

Contoh berikut menambahkan 20 tahun hanya ke nilai TIMESTAMP\$1VAL di TIMESTAMP\$1TEST dari sebelum tahun 2000.

```
SELECT dateadd(year,20,timestamp_val) 
FROM timestamp_test
WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS');
            
date_add
---------------
2008-05-15 10:23:31
```

Contoh berikut menambahkan 5 detik ke nilai stempel waktu literal yang ditulis tanpa indikator detik.

```
SELECT dateadd(second, 5, timestamp '2001-06-06');
            
date_add
---------------
2001-06-06 00:00:05
```

## Catatan penggunaan
<a name="r_DATEADD_usage_notes"></a>

 Fungsi DATEADD (bulan,...) dan ADD\$1MONTHS menangani tanggal yang jatuh pada akhir bulan secara berbeda:
+ ADD\$1MONTHS: Jika tanggal yang Anda tambahkan adalah hari terakhir bulan itu, hasilnya selalu hari terakhir dari bulan hasil, terlepas dari panjang bulan. Misalnya, 30 April\$11 bulan adalah 31 Mei. 

  ```
  select add_months('2008-04-30',1);
  
  add_months
  ---------------------
  2008-05-31 00:00:00
  (1 row)
  ```
+ DATEADD: Jika ada lebih sedikit hari pada tanggal yang Anda tambahkan daripada di bulan hasil, hasilnya adalah hari yang sesuai dari bulan hasil, bukan hari terakhir bulan itu. Misalnya, 30 April\$11 bulan adalah 30 Mei. 

  ```
  select dateadd(month,1,'2008-04-30');
  
  date_add
  ---------------------
  2008-05-30 00:00:00
  (1 row)
  ```

Fungsi DATEADD menangani tanggal tahun kabisat 02-29 secara berbeda saat menggunakan dateadd (month, 12,...) atau dateadd (year, 1,...). 

```
select dateadd(month,12,'2016-02-29');
               
date_add
---------------------
2017-02-28 00:00:00

select dateadd(year, 1, '2016-02-29');

date_add       
---------------------
2017-03-01 00:00:00
```

# Fungsi DATEDIFF
<a name="r_DATEDIFF_function"></a>

DATEDIFF mengembalikan perbedaan antara bagian tanggal dari dua ekspresi tanggal atau waktu. 

## Sintaksis
<a name="r_DATEDIFF_function-synopsis"></a>

```
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
```

## Argumen
<a name="r_DATEDIFF_function-arguments"></a>

 *datepart*   
Bagian spesifik dari nilai tanggal atau waktu (tahun, bulan, atau hari, jam, menit, detik, milidetik, atau mikrodetik) tempat fungsi beroperasi. Untuk informasi selengkapnya, lihat [Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md).   
Secara khusus, DATEDIFF menentukan jumlah batas bagian tanggal yang disilangkan antara dua ekspresi. Misalnya, anggaplah Anda menghitung perbedaan tahun antara dua tanggal, `12-31-2008` dan`01-01-2009`. Dalam hal ini, fungsi mengembalikan 1 tahun meskipun fakta bahwa tanggal-tanggal ini hanya terpisah satu hari. Jika Anda menemukan perbedaan jam antara dua stempel waktu, `01-01-2009 8:30:00` dan`01-01-2009 10:00:00`, hasilnya adalah 2 jam. Jika Anda menemukan perbedaan jam antara dua stempel waktu, `8:30:00` dan`10:00:00`, hasilnya adalah 2 jam.

*tanggal* *\$1 *waktu* \$1 *timetz \$1 stempel waktu**  
Kolom atau ekspresi TANGGAL, WAKTU, TIMETZ, atau TIMESTAMP yang secara implisit dikonversi ke TANGGAL, WAKTU, TIMETZ, atau TIMESTAMP. Ekspresi harus berisi tanggal atau bagian waktu yang ditentukan. Jika tanggal atau waktu kedua lebih lambat dari tanggal atau waktu pertama, hasilnya positif. Jika tanggal atau waktu kedua lebih awal dari tanggal atau waktu pertama, hasilnya negatif.

## Jenis pengembalian
<a name="r_DATEDIFF_function-return-type"></a>

BIGINT

## Contoh dengan kolom DATE
<a name="r_DATEDIFF_function-examples"></a>

Contoh berikut menemukan perbedaan, dalam jumlah minggu, antara dua nilai tanggal literal. 

```
select datediff(week,'2009-01-01','2009-12-31') as numweeks;

numweeks
----------
52
(1 row)
```

Contoh berikut menemukan perbedaan, dalam jam, antara dua nilai tanggal literal. Ketika Anda tidak memberikan nilai waktu untuk tanggal, defaultnya adalah 00:00:00.

```
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03');
            
date_diff
----------
53
(1 row)
```

Contoh berikut menemukan perbedaan, dalam hari, antara dua nilai TIMESTAMETZ literal. 

```
Select datediff(days, 'Jun 1,2008  09:59:59 EST', 'Jul 4,2008  09:59:59 EST')
         
date_diff
----------
33
```

Contoh berikut menemukan perbedaan, dalam hari, antara dua tanggal dalam baris tabel yang sama.

```
select * from date_table;

start_date |   end_date
-----------+-----------
2009-01-01 | 2009-03-23
2023-01-04 | 2024-05-04
(2 rows)

select datediff(day, start_date, end_date) as duration from date_table;
         
duration
---------
      81
     486
(2 rows)
```

Contoh berikut menemukan perbedaan, dalam jumlah kuartal, antara nilai literal di masa lalu dan tanggal hari ini. Contoh ini mengasumsikan bahwa tanggal saat ini adalah 5 Juni 2008. Anda dapat memberi nama bagian tanggal secara lengkap atau menyingkatnya. Nama kolom default untuk fungsi DATEDIFF adalah DATE\$1DIFF. 

```
select datediff(qtr, '1998-07-01', current_date);

date_diff
-----------
40
(1 row)
```

Contoh berikut bergabung dengan tabel PENJUALAN dan DAFTAR untuk menghitung berapa hari setelah mereka terdaftar, tiket apa pun dijual untuk daftar 1000 hingga 1005. Penantian terpanjang untuk penjualan daftar ini adalah 15 hari, dan yang terpendek kurang dari satu hari (0 hari). 

```
select priceperticket,
datediff(day, listtime, saletime) as wait
from sales, listing where sales.listid = listing.listid
and sales.listid between 1000 and 1005
order by wait desc, priceperticket desc;

priceperticket | wait
---------------+------
 96.00         |   15
 123.00        |   11
 131.00        |    9
 123.00        |    6
 129.00        |    4
 96.00         |    4
 96.00         |    0
(7 rows)
```

Contoh ini menghitung jumlah rata-rata jam penjual menunggu semua penjualan tiket. 

```
select avg(datediff(hours, listtime, saletime)) as avgwait
from sales, listing
where sales.listid = listing.listid;

avgwait
---------
465
(1 row)
```

## Contoh dengan kolom TIME
<a name="r_DATEDIFF_function-examples-time"></a>

Berikut contoh tabel TIME\$1TEST memiliki kolom TIME\$1VAL (tipe TIME) dengan tiga nilai dimasukkan.

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

Contoh berikut menemukan perbedaan jumlah jam antara kolom TIME\$1VAL dan literal waktu.

```
select datediff(hour, time_val, time '15:24:45') from time_test;
         
 date_diff
-----------
        -5
        15
        15
```

Contoh berikut menemukan perbedaan jumlah menit antara dua nilai waktu literal.

```
select datediff(minute, time '20:00:00', time '21:00:00') as nummins;  
         
nummins 
---------- 
60
```

## Contoh dengan kolom TIMETZ
<a name="r_DATEDIFF_function-examples-timetz"></a>

Contoh tabel berikut TIMETZ\$1TEST memiliki kolom TIMETZ\$1VAL (tipe TIMETZ) dengan tiga nilai dimasukkan.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

Contoh berikut menemukan perbedaan jumlah jam, antara literal TIMETZ dan timetz\$1val. 

```
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test;

numhours 
---------- 
0
-4
1
```

Contoh berikut menemukan perbedaan jumlah jam, antara dua nilai TIMETZ literal.

```
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours;
         
numhours 
---------- 
1
```

# Fungsi DATE\$1PART
<a name="r_DATE_PART_function"></a>

DATE\$1PART mengekstrak nilai bagian tanggal dari ekspresi. DATE\$1PART adalah sinonim dari fungsi PGDATE\$1PART. 

## Sintaksis
<a name="r_DATE_PART_function-synopsis"></a>

```
DATE_PART(datepart, {date|timestamp})
```

## Argumen
<a name="r_DATE_PART_function-arguments"></a>

 *datepart*   
Pengidentifikasi literal atau string dari bagian tertentu dari nilai tanggal (misalnya, tahun, bulan, atau hari) di mana fungsi beroperasi. Untuk informasi selengkapnya, lihat [Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md). 

\$1*tanggal* \$1 *stempel waktu*\$1  
Kolom tanggal, kolom stempel waktu, atau ekspresi yang secara implisit mengkonversi ke tanggal atau stempel waktu. *Kolom atau ekspresi dalam *tanggal* atau *stempel waktu* harus berisi bagian tanggal yang ditentukan dalam datepart.* 

## Jenis pengembalian
<a name="r_DATE_PART_function-return-type"></a>

DOUBLE

## Contoh
<a name="r_DATE_PART_function-examples"></a>

Nama kolom default untuk fungsi DATE\$1PART adalah. `pgdate_part`

 Untuk informasi selengkapnya tentang data yang digunakan dalam beberapa contoh ini, lihat[Database sampel](c_sampledb.md).

Contoh berikut menemukan menit dari stempel waktu literal. 

```
SELECT DATE_PART(minute, timestamp '20230104 04:05:06.789');
            
pgdate_part
-----------
         5
```

Contoh berikut menemukan nomor minggu dari literal stempel waktu. Perhitungan angka minggu mengikuti standar ISO 8601. Untuk informasi lebih lanjut, lihat [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) di Wikipedia.

```
SELECT DATE_PART(week, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         18
```

Contoh berikut menemukan hari dalam sebulan dari stempel waktu literal.

```
SELECT DATE_PART(day, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         2
```

Contoh berikut menemukan hari dalam seminggu dari stempel waktu literal. Perhitungan angka hari dalam seminggu adalah bilangan bulat dari 0-6, dimulai dengan hari Minggu.

```
SELECT DATE_PART(dayofweek, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         1
```

Contoh berikut menemukan abad dari stempel waktu literal. Perhitungan abad mengikuti standar ISO 8601. Untuk informasi lebih lanjut, lihat [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) di Wikipedia.

```
SELECT DATE_PART(century, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         21
```

Contoh berikut menemukan milenium dari literal stempel waktu. Perhitungan milenium mengikuti standar ISO 8601. Untuk informasi lebih lanjut, lihat [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) di Wikipedia.

```
SELECT DATE_PART(millennium, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         3
```

Contoh berikut menemukan mikrodetik dari literal stempel waktu. Perhitungan mikrodetik mengikuti standar ISO 8601. Untuk informasi lebih lanjut, lihat [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) di Wikipedia.

```
SELECT DATE_PART(microsecond, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
    789000
```

Contoh berikut menemukan bulan dari tanggal literal. 

```
SELECT DATE_PART(month, date '20220502');
            
pgdate_part
-----------
         5
```

Contoh berikut menerapkan fungsi DATE\$1PART ke kolom dalam tabel. 

```
SELECT date_part(w, listtime) AS weeks, listtime
FROM listing 
WHERE listid=10
            

weeks |      listtime
------+---------------------
 25   | 2008-06-17 09:44:54
(1 row)
```

Anda dapat memberi nama bagian tanggal secara lengkap atau menyingkatnya; dalam hal ini, *w* berarti minggu. 

Bagian tanggal hari minggu mengembalikan bilangan bulat dari 0-6, dimulai dengan hari Minggu. Gunakan DATE\$1PART dengan dow (DAYOFWEEK) untuk melihat acara pada hari Sabtu. 

```
SELECT date_part(dow, starttime) AS dow, starttime 
FROM event
WHERE date_part(dow, starttime)=6
ORDER BY 2,1;     

 dow |      starttime
-----+---------------------
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
...
(1147 rows)
```

# Fungsi DATE\$1PART\$1YEAR
<a name="r_DATE_PART_YEAR"></a>

Fungsi DATE\$1PART\$1YEAR mengekstrak tahun dari tanggal. 

## Sintaksis
<a name="r_DATE_PART_YEAR-synopsis"></a>

```
DATE_PART_YEAR(date)
```

## Pendapat
<a name="r_DATE_PART_YEAR-argument"></a>

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

## Jenis pengembalian
<a name="r_DATE_PART_YEAR-return-type"></a>

INTEGER

## Contoh
<a name="r_DATE_PART_YEAR-examples"></a>

Contoh berikut menemukan tahun dari tanggal literal. 

```
SELECT DATE_PART_YEAR(date '20220502 04:05:06.789');

date_part_year
---------------
2022
```

Contoh berikut mengekstrak tahun dari kolom CALDATE. Nilai dalam kolom CALDATE adalah tanggal. Untuk informasi selengkapnya tentang data yang digunakan dalam contoh ini, lihat[Database sampel](c_sampledb.md).

```
select caldate, date_part_year(caldate)
from date
order by
dateid limit 10;

 caldate   | date_part_year
-----------+----------------
2008-01-01 |           2008
2008-01-02 |           2008
2008-01-03 |           2008
2008-01-04 |           2008
2008-01-05 |           2008
2008-01-06 |           2008
2008-01-07 |           2008
2008-01-08 |           2008
2008-01-09 |           2008
2008-01-10 |           2008
(10 rows)
```

# Fungsi DATE\$1TRUNC
<a name="r_DATE_TRUNC"></a>

Fungsi DATE\$1TRUNC memotong ekspresi stempel waktu atau literal berdasarkan bagian tanggal yang Anda tentukan, seperti jam, hari, atau bulan. 

## Sintaksis
<a name="r_DATE_TRUNC-synopsis"></a>

```
DATE_TRUNC('datepart', timestamp)
```

## Argumen
<a name="r_DATE_TRUNC-arguments"></a>

 *datepart*   
Bagian tanggal untuk memotong nilai stempel waktu. *Stempel waktu* *input dipotong sesuai presisi datepart input.* Misalnya, `month` terpotong ke hari pertama bulan itu. Format yang valid adalah sebagai berikut:   
+ mikrodetik, mikrodetik
+ milidetik, milidetik
+ kedua, detik
+ menit, menit
+ jam, jam
+ hari, hari
+ minggu, minggu
+ bulan, bulan
+ seperempat, kuartal
+ tahun, tahun
+ dekade, dekade
+ abad, berabad-abad
+ milenium, milenium
Untuk informasi selengkapnya tentang singkatan dari beberapa format, lihat [Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md)

 *stempel waktu*   
Kolom timestamp atau ekspresi yang secara implisit mengkonversi ke stempel waktu.

## Jenis pengembalian
<a name="r_DATE_TRUNC-return-type"></a>

TIMESTAMP

## Contoh
<a name="r_DATE_TRUNC-example"></a>

Pisahkan stempel waktu masukan ke yang kedua.

```
SELECT DATE_TRUNC('second', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:06
```

Pisahkan stempel waktu masukan ke menit.

```
SELECT DATE_TRUNC('minute', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:00
```

Memangkas stempel waktu input ke jam.

```
SELECT DATE_TRUNC('hour', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:00:00
```

Memangkas stempel waktu masukan ke hari itu.

```
SELECT DATE_TRUNC('day', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 00:00:00
```

Pisahkan stempel waktu masukan ke hari pertama dalam sebulan.

```
SELECT DATE_TRUNC('month', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

Potong stempel waktu input ke hari pertama seperempat.

```
SELECT DATE_TRUNC('quarter', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

Pisahkan stempel waktu masukan ke hari pertama dalam setahun.

```
SELECT DATE_TRUNC('year', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-01-01 00:00:00
```

Potong stempel waktu input ke hari pertama abad.

```
SELECT DATE_TRUNC('millennium', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2001-01-01 00:00:00
```

Pisahkan stempel waktu input ke hari Senin dalam seminggu.

```
select date_trunc('week', TIMESTAMP '20220430 04:05:06.789');
date_trunc
2022-04-25 00:00:00
```

Dalam contoh berikut, fungsi DATE\$1TRUNC menggunakan bagian tanggal 'minggu' untuk mengembalikan tanggal untuk hari Senin setiap minggu. 

```
select date_trunc('week', saletime), sum(pricepaid) from sales where
saletime like '2008-09%' group by date_trunc('week', saletime) order by 1;

date_trunc  |    sum
------------+-------------
2008-09-01  | 2474899
2008-09-08  | 2412354
2008-09-15  | 2364707
2008-09-22  | 2359351
2008-09-29  |  705249
```

# Fungsi EKSTRAK
<a name="r_EXTRACT_function"></a>

Fungsi EXTRACT mengembalikan bagian tanggal atau waktu dari nilai TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH, atau INTERVAL DAY TO SECOND. Contohnya termasuk hari, bulan, tahun, jam, menit, detik, milidetik, atau mikrodetik dari stempel waktu.

## Sintaksis
<a name="r_EXTRACT_function-synopsis"></a>

```
EXTRACT(datepart FROM source)
```

## Argumen
<a name="r_EXTRACT_function-arguments"></a>

 *datepart*   
Subbidang tanggal atau waktu untuk mengekstrak, seperti hari, bulan, tahun, jam, menit, detik, milidetik, atau mikrodetik. Untuk nilai yang mungkin, lihat[Bagian tanggal untuk fungsi tanggal atau stempel waktu](r_Dateparts_for_datetime_functions.md). 

 *sumber*   
Kolom atau ekspresi yang mengevaluasi tipe data TIMESTAMP, TIMESTAMPTZ, WAKTU, TIMETZ, INTERVAL TAHUN KE BULAN, atau INTERVAL HARI KE KEDUA.

## Jenis pengembalian
<a name="r_EXTRACT_function-return-type"></a>

INTEGER jika nilai *sumber* mengevaluasi tipe data TIMESTAMP, WAKTU, TIMETZ, INTERVAL TAHUN KE BULAN, atau INTERVAL HARI KE KEDUA.

PRESISI GANDA jika nilai *sumber* mengevaluasi tipe data TIMESTAMPTZ.

## Contoh dengan TIMESTAMP
<a name="r_EXTRACT_function-examples"></a>

Contoh berikut menentukan angka minggu untuk penjualan di mana harga yang dibayarkan adalah \$110.000 atau lebih. Contoh ini menggunakan data TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
select salesid, extract(week from saletime) as weeknum
from sales 
where pricepaid > 9999 
order by 2;

salesid | weeknum
--------+---------
 159073 |       6
 160318 |       8
 161723 |      26
```

Contoh berikut mengembalikan nilai menit dari nilai timestamp literal. 

```
select extract(minute from timestamp '2009-09-09 12:08:43');
            
date_part
-----------
8
```

Contoh berikut mengembalikan nilai milidetik dari nilai timestamp literal. 

```
select extract(ms from timestamp '2009-09-09 12:08:43.101');
            
date_part
-----------
101
```

## Contoh dengan TIMESTAMPTZ
<a name="r_EXTRACT_function-examples-timestamptz"></a>

Contoh berikut mengembalikan nilai tahun dari nilai timestamptz literal. 

```
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST');
            
date_part
-----------
1997
```

## Contoh dengan waktu
<a name="r_EXTRACT_function-examples-time"></a>

Berikut contoh tabel TIME\$1TEST memiliki kolom TIME\$1VAL (tipe TIME) dengan tiga nilai dimasukkan. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

Contoh berikut mengekstrak menit dari setiap time\$1val.

```
select extract(minute from time_val) as minutes from time_test;
            
minutes
-----------
         0
         0
         58
```

Contoh berikut mengekstrak jam dari setiap time\$1val.

```
select extract(hour from time_val) as hours from time_test;
            
hours
-----------
         20
         0
         0
```

Contoh berikut mengekstrak milidetik dari nilai literal.

```
select extract(ms from time '18:25:33.123456');
            
 date_part
-----------
     123
```

## Contoh dengan TIMETZ
<a name="r_EXTRACT_function-examples-timetz"></a>

Contoh tabel berikut TIMETZ\$1TEST memiliki kolom TIMETZ\$1VAL (tipe TIMETZ) dengan tiga nilai dimasukkan.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

Contoh berikut mengekstrak jam dari setiap timetz\$1val.

```
select extract(hour from timetz_val) as hours from time_test;
            
hours
-----------
         4
         0
         5
```

Contoh berikut mengekstrak milidetik dari nilai literal. Literal tidak dikonversi ke UTC sebelum ekstraksi diproses. 

```
select extract(ms from timetz '18:25:33.123456 EST');
            
 date_part
-----------
     123
```

Contoh berikut mengembalikan jam offset zona waktu dari UTC dari nilai timetz literal. 

```
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT');
            
date_part
-----------
-7
```

## Contoh dengan INTERVAL TAHUN KE BULAN dan INTERVAL HARI KE KEDUA
<a name="r_EXTRACT_function-examples-interval"></a>

Contoh berikut mengekstrak bagian hari `1` dari INTERVAL DAY TO SECOND yang mendefinisikan 36 jam, yaitu 1 hari 12 jam.

```
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
  
 date_part
------------------
 1
```

Contoh berikut mengekstrak bagian bulan `3` dari TAHUN KE BULAN yang mendefinisikan 15 bulan, yaitu 1 tahun 3 bulan.

```
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
  
 date_part
------------------
 3
```

Contoh berikut mengekstrak bagian bulan `6` dari 30 bulan yaitu 2 tahun 6 bulan.

```
select EXTRACT('month' from INTERVAL '30' MONTH)
   
 date_part
------------------
 6
```

Contoh berikut mengekstrak bagian jam `2` dari 50 jam yaitu 2 hari 2 jam.

```
select EXTRACT('hours' from INTERVAL '50' HOUR)
  
 date_part
------------------
 2
```

Contoh berikut mengekstrak bagian menit `11` dari 1 jam 11 menit 11.123 detik.

```
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
  
 date_part
------------------
 11
```

Contoh berikut mengekstrak bagian detik `1.11` dari 1 hari 1 jam 1 menit 1,11 detik.

```
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 date_part
------------------
 1.11
```

Contoh berikut mengekstrak jumlah total jam dalam INTERVAL. Setiap bagian diekstraksi dan ditambahkan ke total.

```
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
 
 ?column?
------------------
 50
```

Contoh berikut mengekstrak jumlah detik dalam INTERVAL. Setiap bagian diekstraksi dan ditambahkan ke total.

```
select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + 
       EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 +
       EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + 
       EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 ?column?
------------------
 90061.11
```

# fungsi GETDATE
<a name="r_GETDATE"></a>

GETDATE mengembalikan tanggal dan waktu saat ini di zona waktu sesi saat ini (UTC secara default). Ini mengembalikan tanggal mulai atau waktu pernyataan saat ini, bahkan ketika itu berada dalam blok transaksi.

## Sintaksis
<a name="r_GETDATE-synopsis"></a>

```
GETDATE()
```

Tanda kurung diperlukan. 

## Jenis pengembalian
<a name="r_GETDATE-return-type"></a>

TIMESTAMP

## Contoh
<a name="r_GETDATE-examples"></a>

Contoh berikut menggunakan fungsi GETDATE untuk mengembalikan stempel waktu penuh untuk tanggal saat ini. 

```
select getdate();

timestamp
---------------------
2008-12-04 16:10:43
```

Contoh berikut menggunakan fungsi GETDATE di dalam fungsi TRUNC untuk mengembalikan tanggal saat ini tanpa waktu.

```
select trunc(getdate());

trunc
------------
2008-12-04
```

# Fungsi INTERVAL\$1CMP
<a name="r_INTERVAL_CMP"></a>

INTERVAL\$1CMP membandingkan dua interval dan kembali `1` jika interval pertama lebih besar, `-1` jika interval kedua lebih besar, dan `0` jika intervalnya sama. Untuk informasi selengkapnya, lihat [Contoh literal interval tanpa sintaks qualifier](r_interval_literals.md).

## Sintaks
<a name="r_INTERVAL_CMP-syntax"></a>

```
INTERVAL_CMP(interval1, interval2)
```

## Argumen
<a name="r_INTERVAL_CMP-arguments"></a>

 *interval1*   
Nilai literal interval.

 *interval2*   
Nilai literal interval.

## Jenis pengembalian
<a name="r_INTERVAL_CMP-return-type"></a>

INTEGER

## Contoh
<a name="r_INTERVAL_CMP-examples"></a>

Contoh berikut membandingkan nilai `3 days` to`1 year`. 

```
select interval_cmp('3 days','1 year');

interval_cmp
--------------
-1
```

Contoh ini membandingkan nilainya `7 days` dengan. `1 week` 

```
select interval_cmp('7 days','1 week');

interval_cmp
--------------
0
```

Contoh berikut membandingkan nilai `1 year` to`3 days`. 

```
select interval_cmp('1 year','3 days');

interval_cmp
--------------
1
```

# Fungsi LAST\$1DAY
<a name="r_LAST_DAY"></a>

*LAST\$1DAY mengembalikan tanggal hari terakhir bulan yang berisi tanggal.* Tipe pengembalian selalu DATE, terlepas dari tipe data argumen *tanggal*.

Untuk informasi selengkapnya tentang mengambil bagian tanggal tertentu, lihat[Fungsi DATE\$1TRUNC](r_DATE_TRUNC.md).

## Sintaksis
<a name="r_LAST_DAY-synopsis"></a>

```
LAST_DAY( { date | timestamp } )
```

## Argumen
<a name="r_LAST_DAY-arguments"></a>

*tanggal* \$1 *stempel* waktu

Kolom tipe data `DATE` atau `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `DATE` `TIMESTAMP`

## Jenis pengembalian
<a name="r_LAST_DAY-return-type"></a>

DATE

## Contoh
<a name="r_LAST_DAY-examples"></a>

Contoh berikut mengembalikan tanggal hari terakhir di bulan berjalan.

```
select last_day(sysdate);

  last_day
------------
 2014-01-31
```

Contoh berikut mengembalikan jumlah tiket yang terjual untuk masing-masing dari 7 hari terakhir dalam sebulan. Nilai dalam kolom SALETIME adalah stempel waktu.

```
select datediff(day, saletime, last_day(saletime)) as "Days Remaining", sum(qtysold)
from sales
where datediff(day, saletime, last_day(saletime)) < 7
group by 1
order by 1;

days remaining |  sum
---------------+-------
             0 | 10140
             1 | 11187
             2 | 11515
             3 | 11217
             4 | 11446
             5 | 11708
             6 | 10988
(7 rows)
```

# Fungsi MONTHS\$1BETWEEN
<a name="r_MONTHS_BETWEEN_function"></a>

MONTHS\$1BETWEEN menentukan jumlah bulan antara dua tanggal.

Jika kencan pertama lebih lambat dari tanggal kedua, hasilnya positif; jika tidak, hasilnya negatif.

Jika salah satu argumen adalah nol, hasilnya adalah NULL.

## Sintaksis
<a name="r_MONTHS_BETWEEN_function-synopsis"></a>

```
MONTHS_BETWEEN( date1, date2 )
```

## Argumen
<a name="r_MONTHS_BETWEEN_function-arguments"></a>

 *tanggal1*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

 *tanggal2*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

## Jenis pengembalian
<a name="r_MONTHS_BETWEEN_function-return-type"></a>

FLOAT8

Bagian bilangan bulat dari hasil didasarkan pada perbedaan antara nilai tahun dan bulan dari tanggal. Bagian fraksional dari hasil dihitung dari nilai hari dan stempel waktu tanggal dan mengasumsikan bulan 31 hari.

Jika *date1* dan *date2* keduanya berisi tanggal yang sama dalam sebulan (misalnya, 1/15/14 dan 2/15/14) atau hari terakhir bulan tersebut (misalnya, 8/31/14 dan 9/30/14), maka hasilnya adalah bilangan bulat berdasarkan nilai tahun dan bulan tanggal, terlepas dari apakah bagian stempel waktu cocok, jika ada.

## Contoh
<a name="r_MONTHS_BETWEEN_function-examples"></a>

Contoh berikut mengembalikan bulan antara 1/18/1969 dan 3/18/1969. 

```
select months_between('1969-01-18', '1969-03-18')
as months;

months
----------
-2
```

Contoh berikut mengembalikan bulan antara 1/18/1969 dan 1/18/1969. 

```
select months_between('1969-01-18', '1969-01-18')
as months;

months
----------
0
```

 Contoh berikut mengembalikan bulan antara pertunjukan pertama dan terakhir dari suatu acara. 

```
select eventname, 
min(starttime) as first_show,
max(starttime) as last_show,
months_between(max(starttime),min(starttime)) as month_diff
from event 
group by eventname
order by eventname
limit 5;

eventname         first_show             last_show              month_diff
---------------------------------------------------------------------------
.38 Special       2008-01-21 19:30:00.0  2008-12-25 15:00:00.0  11.12
3 Doors Down      2008-01-03 15:00:00.0  2008-12-01 19:30:00.0  10.94
70s Soul Jam      2008-01-16 19:30:00.0  2008-12-07 14:00:00.0  10.7
A Bronx Tale      2008-01-21 19:00:00.0  2008-12-15 15:00:00.0  10.8
A Catered Affair  2008-01-08 19:30:00.0  2008-12-19 19:00:00.0  11.35
```

# fungsi NEXT\$1DAY
<a name="r_NEXT_DAY"></a>

NEXT\$1DAY mengembalikan tanggal contoh pertama dari hari tertentu yang lebih lambat dari tanggal yang diberikan.

Jika nilai *hari* adalah hari yang sama dalam seminggu dengan tanggal yang diberikan, kejadian berikutnya dari hari itu dikembalikan.

## Sintaksis
<a name="r_NEXT_DAY-synopsis"></a>

```
NEXT_DAY( { date | timestamp }, day )
```

## Argumen
<a name="r_NEXT_DAY-arguments"></a>

 *tanggal* \$1 *stempel* waktu  
Kolom tipe data `DATE` atau `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `DATE` `TIMESTAMP`

 *hari*   
Sebuah string yang berisi nama setiap hari. Kapitalisasi tidak masalah.  
Nilai yang valid adalah sebagai berikut.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_NEXT_DAY.html)

## Jenis pengembalian
<a name="r_NEXT_DAY-return-type"></a>

DATE

## Contoh
<a name="r_NEXT_DAY-example"></a>

Contoh berikut mengembalikan tanggal Selasa pertama setelah 8/20/2014.

```
select next_day('2014-08-20','Tuesday');

next_day
-----------
2014-08-26
```

Contoh berikut mengembalikan tanggal Selasa pertama setelah 1/1/2008 pukul 5:54:44.

```
select listtime, next_day(listtime, 'Tue') from listing limit 1;

listtime            | next_day
--------------------+-----------
2008-01-01 05:54:44 | 2008-01-08
```

Contoh berikut mendapat target tanggal pemasaran untuk kuartal ketiga.

```
select username, (firstname ||' '|| lastname) as name,
eventname, caldate, next_day (caldate, 'Monday') as marketing_target
from sales, date, users, event
where sales.buyerid = users.userid
and sales.eventid = event.eventid
and event.dateid = date.dateid
and date.qtr = 3
order by marketing_target, eventname, name;

username  |     name          |     eventname        |    caldate   |   marketing_target
----------+-------------------+----------------------+--------------+-------------------
MBO26QSG  |   Callum Atkinson | .38 Special          |  2008-07-06  |	2008-07-07
WCR50YIU  |   Erasmus Alvarez | A Doll's House       |  2008-07-03  |	2008-07-07
CKT70OIE  |   Hadassah Adkins | Ana Gabriel          |  2008-07-06  |	2008-07-07
VVG07OUO  |   Nathan Abbott   | Armando Manzanero    |  2008-07-04  |	2008-07-07
GEW77SII  |   Scarlet Avila   | August: Osage County |  2008-07-06  |	2008-07-07
ECR71CVS  |   Caryn Adkins    | Ben Folds            |  2008-07-03  |	2008-07-07
KUW82CYU  |   Kaden Aguilar   | Bette Midler         |  2008-07-01  |	2008-07-07
WZE78DJZ  |   Kay Avila       | Bette Midler         |  2008-07-01  |	2008-07-07
HXY04NVE  |   Dante Austin    | Britney Spears       |  2008-07-02  |	2008-07-07
URY81YWF  |   Wilma Anthony   | Britney Spears       |  2008-07-02  |	2008-07-07
```

# fungsi SYSDATE
<a name="r_SYSDATE"></a>

SYSDATE mengembalikan tanggal dan waktu saat ini di zona waktu sesi saat ini (UTC secara default). 

**catatan**  
SYSDATE mengembalikan tanggal dan waktu mulai untuk transaksi saat ini, bukan untuk dimulainya pernyataan saat ini.

## Sintaksis
<a name="r_SYSDATE-synopsis"></a>

```
SYSDATE
```

Fungsi ini tidak memerlukan argumen. 

## Jenis pengembalian
<a name="r_SYSDATE-return-type"></a>

TIMESTAMP

## Contoh
<a name="r_SYSDATE-examples"></a>

Contoh berikut menggunakan fungsi SYSDATE untuk mengembalikan stempel waktu penuh untuk tanggal saat ini.

```
select sysdate;

timestamp
----------------------------
2008-12-04 16:10:43.976353
```

Contoh berikut menggunakan fungsi SYSDATE di dalam fungsi TRUNC untuk mengembalikan tanggal saat ini tanpa waktu.

```
select trunc(sysdate);

trunc
------------
2008-12-04
```

Kueri berikut mengembalikan informasi penjualan untuk tanggal yang berada di antara tanggal ketika kueri dikeluarkan dan tanggal berapa pun 120 hari sebelumnya.

```
select salesid, pricepaid, trunc(saletime) as saletime, trunc(sysdate) as now
from sales
where saletime between trunc(sysdate)-120 and trunc(sysdate)
order by saletime asc;

 salesid | pricepaid |  saletime  |    now
---------+-----------+------------+------------
91535    |    670.00 | 2008-08-07 | 2008-12-05
91635    |    365.00 | 2008-08-07 | 2008-12-05
91901    |   1002.00 | 2008-08-07 | 2008-12-05
...
```

# Fungsi TIMEOFDAY
<a name="r_TIMEOFDAY_function"></a>

TIMEOFDAY adalah alias khusus yang digunakan untuk mengembalikan hari kerja, tanggal, dan waktu sebagai nilai string. Ia mengembalikan string time of day untuk pernyataan saat ini, bahkan ketika itu berada dalam blok transaksi. 

## Sintaksis
<a name="r_TIMEOFDAY_function-syntax"></a>

```
TIMEOFDAY()
```

## Jenis pengembalian
<a name="r_TIMEOFDAY_function-return-type"></a>

VARCHAR

## Contoh
<a name="r_TIMEOFDAY_function-examples"></a>

Contoh berikut mengembalikan tanggal dan waktu saat ini dengan menggunakan fungsi TIMEOFDAY. 

```
select timeofday();

timeofday
------------
Thu Sep 19 22:53:50.333525 2013 UTC
```

# Fungsi TIMESTAMP\$1CMP
<a name="r_TIMESTAMP_CMP"></a>

Membandingkan nilai dua stempel waktu dan mengembalikan integer. Jika stempel waktu identik, fungsi kembali. `0` Jika stempel waktu pertama lebih besar, fungsi kembali. `1` Jika stempel waktu kedua lebih besar, fungsi kembali. `-1`

## Sintaksis
<a name="r_TIMESTAMP_CMP-synopsis"></a>

```
TIMESTAMP_CMP(timestamp1, timestamp2)
```

## Argumen
<a name="r_TIMESTAMP_CMP-arguments"></a>

 *stempel waktu1*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`

 *stempel waktu2*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`

## Jenis pengembalian
<a name="r_TIMESTAMP_CMP-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMP_CMP-examples"></a>

Contoh berikut membandingkan stempel waktu dan menunjukkan hasil perbandingan.

```
SELECT TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-01-24 06:43:29'), TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-02-18 02:36:48'), TIMESTAMP_CMP('2008-02-18 02:36:48', '2008-01-24 06:43:29');

timestamp_cmp  | timestamp_cmp | timestamp_cmp 
---------------+---------------+---------------
             0 |            -1 |             1
```

Contoh berikut membandingkan LISTTIME dan SALETIME untuk daftar. Nilai untuk TIMESTAMP\$1CMP adalah `-1` untuk semua listing karena stempel waktu untuk penjualan adalah setelah stempel waktu untuk daftar.

```
select listing.listid, listing.listtime,
sales.saletime, timestamp_cmp(listing.listtime, sales.saletime)
from listing, sales
where listing.listid=sales.listid
order by 1, 2, 3, 4
limit 10;

 listid |      listtime       |      saletime       | timestamp_cmp
--------+---------------------+---------------------+---------------
      1 | 2008-01-24 06:43:29 | 2008-02-18 02:36:48 |            -1
      4 | 2008-05-24 01:18:37 | 2008-06-06 05:00:16 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-06 08:26:17 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-09 08:38:52 |            -1
      6 | 2008-08-15 02:08:13 | 2008-08-31 09:17:02 |            -1
     10 | 2008-06-17 09:44:54 | 2008-06-26 12:56:06 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-10 02:12:36 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-16 11:59:24 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-22 02:23:17 |            -1
     12 | 2008-07-25 01:45:49 | 2008-08-04 03:06:36 |            -1
(10 rows)
```

Contoh ini menunjukkan bahwa TIMESTAMP\$1CMP mengembalikan 0 untuk stempel waktu yang identik: 

```
select listid, timestamp_cmp(listtime, listtime)
from listing
order by 1 , 2
limit 10;

 listid | timestamp_cmp
--------+---------------
      1 |             0
      2 |             0
      3 |             0
      4 |             0
      5 |             0
      6 |             0
      7 |             0
      8 |             0
      9 |             0
     10 |             0
(10 rows)
```

# Fungsi TIMESTAMP\$1CMP\$1DATE
<a name="r_TIMESTAMP_CMP_DATE"></a>

TIMESTAMP\$1CMP\$1DATE membandingkan nilai stempel waktu dan tanggal. Jika nilai stempel waktu dan tanggal identik, fungsi kembali. `0` Jika stempel waktu lebih besar secara kronologis, fungsi kembali. `1` Jika tanggal lebih besar, fungsi kembali`-1`.

## Sintaksis
<a name="r_TIMESTAMP_CMP_DATE-syntax"></a>

```
TIMESTAMP_CMP_DATE(timestamp, date)
```

## Argumen
<a name="r_TIMESTAMP_CMP_DATE-arguments"></a>

 *stempel waktu*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

## Jenis pengembalian
<a name="r_TIMESTAMP_CMP_DATE-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMP_CMP_DATE-examples"></a>

Contoh berikut membandingkan LISTTIME dengan tanggal. `2008-06-18` Daftar yang dibuat setelah tanggal ini kembali`1`; daftar yang dibuat sebelum tanggal ini kembali`-1`. Nilai LISTTIME adalah stempel waktu.

```
select listid, listtime,
timestamp_cmp_date(listtime, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |      listtime       | timestamp_cmp_date
--------+---------------------+--------------------
      1 | 2008-01-24 06:43:29 |              -1
      2 | 2008-03-05 12:25:29 |              -1
      3 | 2008-11-01 07:35:33 |               1
      4 | 2008-05-24 01:18:37 |              -1
      5 | 2008-05-17 02:29:11 |              -1
      6 | 2008-08-15 02:08:13 |               1
      7 | 2008-11-15 09:38:15 |               1
      8 | 2008-11-09 05:07:30 |               1
      9 | 2008-09-09 08:03:36 |               1
     10 | 2008-06-17 09:44:54 |              -1
(10 rows)
```

# Fungsi TIMESTAMP\$1CMP\$1TIMESTAMPTZ
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ"></a>

TIMESTAMP\$1CMP\$1TIMESTAMPTZ membandingkan nilai ekspresi stempel waktu dengan stempel waktu dengan ekspresi zona waktu. Jika stempel waktu dan stempel waktu dengan nilai zona waktu identik, fungsi kembali. `0` Jika stempel waktu lebih besar secara kronologis, fungsi kembali. `1` Jika stempel waktu dengan zona waktu lebih besar, fungsi kembali. `–1`

## Sintaksis
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-syntax"></a>

```
TIMESTAMP_CMP_TIMESTAMPTZ(timestamp, timestamptz)
```

## Argumen
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-arguments"></a>

 *stempel waktu*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`

 *timestamptz*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

## Jenis pengembalian
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-examples"></a>

Contoh berikut membandingkan stempel waktu dengan stempel waktu dengan zona waktu dan menunjukkan hasil perbandingan.

```
SELECT TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-01-24 06:43:29+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-02-18 02:36:48+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-02-18 02:36:48', '2008-01-24 06:43:29+00');

timestamp_cmp_timestamptz  | timestamp_cmp_timestamptz | timestamp_cmp_timestamptz 
---------------------------+---------------------------+--------------------------
             0             |            -1             |             1
```

# Fungsi TIMESTAMPTZ\$1CMP
<a name="r_TIMESTAMPTZ_CMP"></a>

TIMESTAMPTZ\$1CMP membandingkan nilai dua timestamp dengan nilai zona waktu dan mengembalikan bilangan bulat. Jika stempel waktu identik, fungsi kembali. `0` Jika stempel waktu pertama lebih besar secara kronologis, fungsi akan kembali. `1` Jika stempel waktu kedua lebih besar, fungsi kembali. `–1`

## Sintaksis
<a name="r_TIMESTAMPTZ_CMP-synopsis"></a>

```
TIMESTAMPTZ_CMP(timestamptz1, timestamptz2)
```

## Argumen
<a name="r_TIMESTAMPTZ_CMP-arguments"></a>

 *stempel waktuz1*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

 *stempel waktu*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

## Jenis pengembalian
<a name="r_TIMESTAMPTZ_CMP-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMPTZ_CMP-examples"></a>

Contoh berikut membandingkan stempel waktu dengan zona waktu dan menunjukkan hasil perbandingan.

```
SELECT TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29+00'), TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48+00'), TIMESTAMPTZ_CMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29+00');

timestamptz_cmp  | timestamptz_cmp | timestamptz_cmp
-----------------+-----------------+----------------
        0        |       -1        |       1
```

# Fungsi TIMESTAMPTZ\$1CMP\$1DATE
<a name="r_TIMESTAMPTZ_CMP_DATE"></a>

TIMESTAMPTZ\$1CMP\$1DATE membandingkan nilai stempel waktu dan tanggal. Jika nilai stempel waktu dan tanggal identik, fungsi kembali. `0` Jika stempel waktu lebih besar secara kronologis, fungsi kembali. `1` Jika tanggal lebih besar, fungsi kembali`–1`.

## Sintaksis
<a name="r_TIMESTAMPTZ_CMP_DATE-syntax"></a>

```
TIMESTAMPTZ_CMP_DATE(timestamptz, date)
```

## Argumen
<a name="r_TIMESTAMPTZ_CMP_DATE-arguments"></a>

 *timestamptz*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

 *tanggal*   
Kolom tipe data `DATE` atau ekspresi yang secara implisit mengevaluasi tipe. `DATE`

## Jenis pengembalian
<a name="r_TIMESTAMPTZ_CMP_DATE-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMPTZ_CMP_DATE-examples"></a>

Contoh berikut membandingkan LISTTIME sebagai stempel waktu dengan zona waktu dengan tanggal. `2008-06-18` Daftar yang dibuat setelah tanggal ini kembali`1`; daftar yang dibuat sebelum tanggal ini kembali`-1`. 

```
select listid, CAST(listtime as timestamptz) as tstz,
timestamp_cmp_date(tstz, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |          tstz          | timestamptz_cmp_date
--------+------------------------+----------------------
      1 | 2008-01-24 06:43:29+00 |              -1
      2 | 2008-03-05 12:25:29+00 |              -1
      3 | 2008-11-01 07:35:33+00 |               1
      4 | 2008-05-24 01:18:37+00 |              -1
      5 | 2008-05-17 02:29:11+00 |              -1
      6 | 2008-08-15 02:08:13+00 |               1
      7 | 2008-11-15 09:38:15+00 |               1
      8 | 2008-11-09 05:07:30+00 |               1
      9 | 2008-09-09 08:03:36+00 |               1
     10 | 2008-06-17 09:44:54+00 |              -1
(10 rows)
```

# Fungsi TIMESTAMPTZ\$1CMP\$1TIMESTAMP
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP"></a>

TIMESTAMPTZ\$1CMP\$1TIMESTAMP membandingkan nilai stempel waktu dengan ekspresi zona waktu dengan ekspresi stempel waktu. Jika stempel waktu dengan zona waktu dan nilai timestamp identik, fungsi kembali. `0` Jika stempel waktu dengan zona waktu lebih besar secara kronologis, fungsi kembali. `1` Jika stempel waktu lebih besar, fungsi kembali. `–1` 

## Sintaksis
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-syntax"></a>

```
TIMESTAMPTZ_CMP_TIMESTAMP(timestamptz, timestamp)
```

## Argumen
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-arguments"></a>

 *timestamptz*   
Kolom tipe data `TIMESTAMPTZ` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMPTZ`

 *stempel waktu*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`

## Jenis pengembalian
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-return-type"></a>

INTEGER

## Contoh
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-examples"></a>

Contoh berikut membandingkan stempel waktu dengan zona waktu dengan stempel waktu dan menunjukkan hasil perbandingan.

```
SELECT TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29');

timestamptz_cmp_timestamp  | timestamptz_cmp_timestamp | timestamptz_cmp_timestamp
---------------------------+---------------------------+---------------------------
              0            |            -1             |             1
```

# Fungsi TIMEZONE
<a name="r_TIMEZONE"></a>

TIMEZONE mengembalikan timestamp untuk zona waktu tertentu dan nilai timestamp.

Untuk informasi dan contoh tentang cara mengatur zona waktu, lihat[timezone](r_timezone_config.md).

Untuk informasi dan contoh tentang cara mengonversi zona waktu, lihat[CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md).

## Sintaksis
<a name="r_TIMEZONE-syntax"></a>

```
TIMEZONE('timezone', { timestamp | timestamptz })
```

## Argumen
<a name="r_TIMEZONE-arguments"></a>

*zona waktu*  
Zona waktu untuk nilai kembali. Zona waktu dapat ditentukan sebagai nama zona waktu (seperti **'Africa/Kampala'** atau**'Singapore'**) atau sebagai singkatan zona waktu (seperti **'UTC'** atau**'PDT'**). Untuk melihat daftar nama zona waktu yang didukung, jalankan perintah berikut.   

```
select pg_timezone_names();
```
 Untuk melihat daftar singkatan zona waktu yang didukung, jalankan perintah berikut.   

```
select pg_timezone_abbrevs();
```
Perhatikan bahwa Amazon Redshift menggunakan [Database Zona Waktu IANA sebagai sumber otoritatif spesifikasi zona waktu](https://www.iana.org/time-zones). Untuk informasi selengkapnya dan contoh tambahan, lihat [Catatan penggunaan zona waktu](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes).

**stempel waktu \$1 timestamptz**  
Ekspresi yang menghasilkan tipe TIMESTAMP atau TIMESTAMPTZ, atau nilai yang secara implisit dapat dipaksa ke stempel waktu atau stempel waktu dengan zona waktu.

## Jenis pengembalian
<a name="r_TIMEZONE-return-type"></a>

TIMESTAMPTZ bila digunakan dengan ekspresi TIMESTAMP. 

TIMESTAMP bila digunakan dengan ekspresi TIMESTAMPTZ. 

## Contoh
<a name="r_TIMEZONE-examples"></a>

Berikut ini mengembalikan timestamp untuk zona waktu UTC menggunakan timestamp `2008-06-17 09:44:54` dari zona waktu PST.

```
SELECT TIMEZONE('PST', '2008-06-17 09:44:54');

timezone
-----------------------
2008-06-17 17:44:54+00
```

Berikut ini mengembalikan timestamp untuk zona waktu PST menggunakan timestamp dengan zona waktu UTC. `2008-06-17 09:44:54+00`

```
SELECT TIMEZONE('PST', timestamptz('2008-06-17 09:44:54+00'));

timezone
-----------------------
2008-06-17 01:44:54
```

# Fungsi TO\$1TIMESTAMP
<a name="r_TO_TIMESTAMP"></a>

TO\$1TIMESTAMP mengonversi string TIMESTAMP ke TIMESTAMPTZ. Untuk daftar fungsi tanggal dan waktu tambahan untuk Amazon Redshift, lihat. [Fungsi tanggal dan waktu](Date_functions_header.md)

## Sintaksis
<a name="r_TO_TIMESTAMP-syntax"></a>

```
to_timestamp(timestamp, format)
```

```
to_timestamp (timestamp, format, is_strict)
```

## Argumen
<a name="r_TO_TIMESTAMP-arguments"></a>

*stempel waktu*  
*Sebuah string yang mewakili nilai timestamp dalam format yang ditentukan oleh format.* Jika argumen ini dibiarkan kosong, nilai stempel waktu defaultnya. `0001-01-01 00:00:00`

*format*  
Sebuah string literal yang mendefinisikan format nilai *timestamp*. Format yang menyertakan zona waktu (**TZ**,**tz**, atau**OF**) tidak didukung sebagai input. Untuk format stempel waktu yang valid, lihat. [String format datetime](r_FORMAT_strings.md)

*is\$1strict*  
Nilai Boolean opsional yang menentukan apakah kesalahan dikembalikan jika nilai timestamp masukan berada di luar jangkauan. Ketika *is\$1strict* disetel ke TRUE, kesalahan dikembalikan jika ada nilai di luar rentang. Ketika *is\$1strict* disetel ke FALSE, yang merupakan default, maka nilai overflow diterima.

## Jenis pengembalian
<a name="r_TO_TIMESTAMP-return-type"></a>

TIMESTAMPTZ

## Contoh
<a name="r_TO_TIMESTAMP-examples"></a>

Contoh berikut menunjukkan penggunaan fungsi TO\$1TIMESTAMP untuk mengonversi string TIMESTAMP ke TIMESTAMPTZ. 

```
select sysdate, to_timestamp(sysdate, 'YYYY-MM-DD HH24:MI:SS') as second;

timestamp                  | second
--------------------------   ----------------------
2021-04-05 19:27:53.281812 | 2021-04-05 19:27:53+00
```

Dimungkinkan untuk melewatkan TO\$1TIMESTAMP bagian dari tanggal. Bagian tanggal yang tersisa diatur ke nilai default. Waktu termasuk dalam output:

```
SELECT TO_TIMESTAMP('2017','YYYY');

to_timestamp
--------------------------
2017-01-01 00:00:00+00
```

Pernyataan SQL berikut mengonversi string '2011-12-18 24:38:15 'menjadi TIMESTAMPTZ. Hasilnya adalah TIMESTAMPTZ yang jatuh pada hari berikutnya karena jumlah jam lebih dari 24 jam:

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS');
         
to_timestamp
----------------------
2011-12-19 00:38:15+00
```

Pernyataan SQL berikut mengonversi string '2011-12-18 24:38:15 'menjadi TIMESTAMPTZ. Hasilnya adalah kesalahan karena nilai waktu dalam stempel waktu lebih dari 24 jam:

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS', TRUE);
         
ERROR:  date/time field time value out of range: 24:38:15.0
```

# Fungsi TRUNC
<a name="r_TRUNC_date"></a>

Mempotong a `TIMESTAMP` dan mengembalikan a. `DATE`

 Fungsi ini juga dapat memotong angka. Untuk informasi selengkapnya, lihat [Fungsi TRUNC](r_TRUNC.md).

## Sintaks
<a name="r_TRUNC_date-synopsis"></a>

```
TRUNC(timestamp)
```

## Argumen
<a name="r_TRUNC_date-arguments"></a>

 *stempel waktu*   
Kolom tipe data `TIMESTAMP` atau ekspresi yang secara implisit mengevaluasi tipe. `TIMESTAMP`  
Untuk mengembalikan nilai stempel waktu dengan `00:00:00` waktu, lemparkan hasil fungsi ke a. `TIMESTAMP`

## Jenis pengembalian
<a name="r_TRUNC_date-return-type"></a>

DATE

## Contoh
<a name="r_TRUNC_date-examples"></a>

Contoh berikut mengembalikan bagian tanggal dari hasil fungsi SYSDATE (yang mengembalikan stempel waktu). 

```
SELECT SYSDATE;

+----------------------------+
|         timestamp          |
+----------------------------+
| 2011-07-21 10:32:38.248109 |
+----------------------------+

SELECT TRUNC(SYSDATE);

+------------+
|   trunc    |
+------------+
| 2011-07-21 |
+------------+
```

Contoh berikut menerapkan fungsi TRUNC ke kolom. `TIMESTAMP` Jenis pengembalian adalah tanggal. 

```
SELECT TRUNC(starttime) FROM event
ORDER BY eventid LIMIT 1;

+------------+
|   trunc    |
+------------+
| 2008-01-25 |
+------------+
```

Contoh berikut mengembalikan nilai timestamp dengan `00:00:00` sebagai waktu dengan mentransmisikan hasil fungsi TRUNC ke a. `TIMESTAMP`

```
SELECT CAST((TRUNC(SYSDATE)) AS TIMESTAMP);

+---------------------+
|        trunc        |
+---------------------+
| 2011-07-21 00:00:00 |
+---------------------+
```

# Bagian tanggal untuk fungsi tanggal atau stempel waktu
<a name="r_Dateparts_for_datetime_functions"></a>

Tabel berikut mengidentifikasi nama bagian tanggal dan waktu bagian dan singkatan yang diterima sebagai argumen untuk fungsi berikut: 
+ DATEADD 
+ DATEDIFF 
+ DATE\$1PART 
+ EKSTRAK 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_Dateparts_for_datetime_functions.html)

## Variasi hasil dengan detik, milidetik, dan mikrodetik
<a name="r_Dateparts_for_datetime_functions-variations-in-results"></a>

Perbedaan kecil dalam hasil kueri terjadi ketika fungsi tanggal yang berbeda menentukan detik, milidetik, atau mikrodetik sebagai bagian tanggal: 
+ Fungsi EXTRACT mengembalikan bilangan bulat untuk bagian tanggal yang ditentukan saja, mengabaikan bagian tanggal tingkat yang lebih tinggi dan lebih rendah. Jika bagian tanggal yang ditentukan adalah detik, milidetik dan mikrodetik tidak termasuk dalam hasil. Jika bagian tanggal yang ditentukan adalah milidetik, detik dan mikrodetik tidak termasuk. Jika bagian tanggal yang ditentukan adalah mikrodetik, detik dan milidetik tidak termasuk. 
+ Fungsi DATE\$1PART mengembalikan bagian detik lengkap dari stempel waktu, terlepas dari bagian tanggal yang ditentukan, mengembalikan nilai desimal atau bilangan bulat sesuai kebutuhan. 

Misalnya, bandingkan hasil kueri berikut: 

```
create table seconds(micro timestamp);

insert into seconds values('2009-09-21 11:10:03.189717');

select extract(sec from micro) from seconds;
               
date_part
-----------
3
               
select date_part(sec, micro) from seconds;
   
pgdate_part
-------------
3.189717
```

## Catatan CENTURY, EPOCH, DECADE, dan MIL
<a name="r_Dateparts_for_datetime_functions-century"></a>

CENTURY atau CENTURY   
Amazon Redshift menafsirkan CENTURY untuk memulai dengan tahun *\$1\$1 \$11* dan diakhiri dengan tahun: `###0`   

```
select extract (century from timestamp '2000-12-16 12:21:13');
date_part
-----------
20

select extract (century from timestamp '2001-12-16 12:21:13');
date_part
-----------
21
```

EPOCH   
Implementasi Amazon Redshift EPOCH relatif terhadap 1970-01-01 00:00:00.000 000 terlepas dari zona waktu tempat cluster berada. Anda mungkin perlu mengimbangi hasil dengan perbedaan jam tergantung pada zona waktu di mana cluster berada.   
 Contoh berikut menunjukkan hal berikut:   

1.  Membuat tabel bernama EVENT\$1EXAMPLE berdasarkan tabel EVENT. Perintah CREATE AS ini menggunakan fungsi DATE\$1PART untuk membuat kolom tanggal (disebut PGDATE\$1PART secara default) untuk menyimpan nilai epoch untuk setiap peristiwa. 

1.  Memilih kolom dan tipe data EVENT\$1EXAMPLE dari PG\$1TABLE\$1DEF. 

1.  Memilih EVENTNAME, STARTTIME, dan PGDATE\$1PART dari tabel EVENT\$1EXAMPLE untuk melihat format tanggal dan waktu yang berbeda. 

1.  Memilih EVENTNAME dan STARTTIME dari EVENT EXAMPLE apa adanya. Mengkonversi nilai epoch di PGDATE\$1PART menggunakan interval 1 detik ke stempel waktu tanpa zona waktu, dan mengembalikan hasilnya dalam kolom bernama CONVERTED\$1TIMESTAMP. 

```
create table event_example
as select eventname, starttime, date_part(epoch, starttime) from event;

select "column", type from pg_table_def where tablename='event_example';

     column    |            type
---------------+-----------------------------
 eventname     | character varying(200)
 starttime     | timestamp without time zone
 pgdate_part   | double precision
(3 rows)
```

```
select eventname, starttime, pgdate_part from event_example;

   eventname          |      starttime      | pgdate_part
----------------------+---------------------+-------------
 Mamma Mia!           | 2008-01-01 20:00:00 |  1199217600
 Spring Awakening     | 2008-01-01 15:00:00 |  1199199600
 Nas                  | 2008-01-01 14:30:00 |  1199197800
 Hannah Montana       | 2008-01-01 19:30:00 |  1199215800
 K.D. Lang            | 2008-01-01 15:00:00 |  1199199600
 Spamalot             | 2008-01-02 20:00:00 |  1199304000
 Macbeth              | 2008-01-02 15:00:00 |  1199286000
 The Cherry Orchard   | 2008-01-02 14:30:00 |  1199284200
 Macbeth              | 2008-01-02 19:30:00 |  1199302200
 Demi Lovato          | 2008-01-02 19:30:00 |  1199302200

   
select eventname, 
starttime, 
timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp 
from event_example;

       eventname      |      starttime      | converted_timestamp
----------------------+---------------------+---------------------
 Mamma Mia!           | 2008-01-01 20:00:00 | 2008-01-01 20:00:00
 Spring Awakening     | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Nas                  | 2008-01-01 14:30:00 | 2008-01-01 14:30:00
 Hannah Montana       | 2008-01-01 19:30:00 | 2008-01-01 19:30:00
 K.D. Lang            | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Spamalot             | 2008-01-02 20:00:00 | 2008-01-02 20:00:00
 Macbeth              | 2008-01-02 15:00:00 | 2008-01-02 15:00:00
 The Cherry Orchard   | 2008-01-02 14:30:00 | 2008-01-02 14:30:00
 Macbeth              | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 Demi Lovato          | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 ...
```

DEKADE atau DEKADE   
Amazon Redshift menafsirkan DECADE atau DECADECADES DATEPART berdasarkan kalender umum. Misalnya, karena kalender umum dimulai dari tahun 1, dekade pertama (dekade 1) adalah 0001-01-01 hingga 0009-12-31, dan dekade kedua (dekade 2) adalah 0010-01-01 hingga 0019-12-31. Misalnya, dekade 201 membentang dari 2000-01-01 hingga 2009-12-31:   

```
select extract(decade from timestamp '1999-02-16 20:38:40');
date_part
-----------
200

select extract(decade from timestamp '2000-02-16 20:38:40');
date_part
-----------
201

select extract(decade from timestamp '2010-02-16 20:38:40');
date_part
-----------
202
```

MIL atau MILS   
Amazon Redshift menafsirkan MIL untuk memulai dengan hari pertama tahun *\$1001* dan diakhiri dengan hari terakhir tahun ini: `#000`   

```
select extract (mil from timestamp '2000-12-16 12:21:13');
date_part
-----------
2

select extract (mil from timestamp '2001-12-16 12:21:13');
date_part
-----------
3
```

# Fungsi hash
<a name="hash-functions"></a>

**Topics**
+ [Fungsi CHECKSUM](r_CHECKSUM.md)
+ [Fungsi FarmFingerPrint64](r_FARMFINGERPRINT64.md)
+ [Fungsi FUNC\$1 SHA1](FUNC_SHA1.md)
+ [Fungsi FNV\$1HASH](r_FNV_HASH.md)
+ [MD5 fungsi](r_MD5.md)
+ [Fungsi SHA](SHA.md)
+ [SHA1 fungsi](SHA1.md)
+ [SHA2 fungsi](SHA2.md)
+ [MURMUR3\$132\$1HASH](MURMUR3_32_HASH.md)

Fungsi hash adalah fungsi matematika yang mengubah nilai input numerik menjadi nilai lain.

# Fungsi CHECKSUM
<a name="r_CHECKSUM"></a>

Menghitung nilai checksum untuk membangun indeks hash. 

## Sintaksis
<a name="r_CHECKSUM-synopsis"></a>

```
CHECKSUM(expression)
```

## Pendapat
<a name="r_CHECKSUM-argument"></a>

 *ekspresi*   
Ekspresi input harus berupa tipe data VARCHAR, INTEGER, atau DECIMAL. 

## Jenis pengembalian
<a name="r_CHECKSUM-return-type"></a>

Fungsi CHECKSUM mengembalikan integer. 

## Contoh
<a name="r_CHECKSUM-example"></a>

Contoh berikut menghitung nilai checksum untuk kolom KOMISI: 

```
select checksum(commission)
from sales
order by salesid
limit 10;

checksum
----------
10920
1140
5250
2625
2310
5910
11820
2955
8865
975
(10 rows)
```

# Fungsi FarmFingerPrint64
<a name="r_FARMFINGERPRINT64"></a>

Menghitung nilai farmhash dari argumen input menggunakan fungsi. `Fingerprint64` 

## Sintaksis
<a name="r_FARMFINGERPRINT64-synopsis"></a>

```
farmFingerprint64(expression)
```

## Pendapat
<a name="r_FARMFINGERPRINT64-argument"></a>

 *ekspresi*   
Ekspresi input harus berupa tipe `VARBYTE` data `VARCHAR` atau atau. 

## Jenis pengembalian
<a name="r_FARMFINGERPRINT64-return-type"></a>

`farmFingerprint64`Fungsi mengembalikan a`BIGINT`. 

## Contoh
<a name="r_FARMFINGERPRINT64-example"></a>

Contoh berikut mengembalikan `farmFingerprint64` nilai `Amazon Redshift` yang input sebagai tipe `VARCHAR` data. 

```
SELECT farmFingerprint64('Amazon Redshift');
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

Contoh berikut mengembalikan `farmFingerprint64` nilai `Amazon Redshift` yang input sebagai tipe `VARBYTE` data. 

```
SELECT farmFingerprint64('Amazon Redshift'::varbyte);
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

# Fungsi FUNC\$1 SHA1
<a name="FUNC_SHA1"></a>

Sinonim dari fungsi. SHA1 

Lihat [SHA1 fungsi](SHA1.md). 

# Fungsi FNV\$1HASH
<a name="r_FNV_HASH"></a>

Menghitung fungsi hash non-kriptografi FNV-1a 64-bit untuk semua tipe data dasar.

## Sintaksis
<a name="r_FNV_HASH-synopsis"></a>

```
FNV_HASH(value [, seed])
```

## Argumen
<a name="r_FNV_HASH-argument-arguments"></a>

 *nilai*  
Nilai input yang akan di-hash. Amazon Redshift menggunakan representasi biner dari nilai untuk hash nilai input; misalnya, nilai INTEGER di-hash menggunakan 4 byte dan nilai BIGINT di-hash menggunakan 8 byte. Selain itu, hashing input CHAR dan VARCHAR tidak mengabaikan spasi tambahan.

 *benih*  
Bigint seed dari fungsi hash adalah opsional. Jika tidak diberikan, Amazon Redshift menggunakan seed FNV default. Ini memungkinkan menggabungkan hash dari beberapa kolom tanpa konversi atau penggabungan apa pun.

## Jenis pengembalian
<a name="r_FNV_HASH-return-type"></a>

BIGINT

## Contoh
<a name="r_FNV_HASH-example"></a>

Contoh berikut mengembalikan hash FNV dari sebuah angka, string 'Amazon Redshift', dan rangkaian keduanya.

```
select fnv_hash(1);
        fnv_hash
----------------------
 -5968735742475085980
(1 row)
```

```
select fnv_hash('Amazon Redshift');
      fnv_hash
---------------------
 7783490368944507294
(1 row)
```

```
select fnv_hash('Amazon Redshift', fnv_hash(1));
       fnv_hash
----------------------
 -2202602717770968555
(1 row)
```

## Catatan penggunaan
<a name="r_FNV_HASH-usage-notes"></a>
+ Untuk menghitung hash tabel dengan beberapa kolom, Anda dapat menghitung hash FNV dari kolom pertama dan meneruskannya sebagai benih ke hash kolom kedua. Kemudian, ia melewati hash FNV dari kolom kedua sebagai benih ke hash kolom ketiga.

  Contoh berikut menciptakan benih untuk hash tabel dengan beberapa kolom. 

  ```
  select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  ```
+ Properti yang sama dapat digunakan untuk menghitung hash dari rangkaian string. 

  ```
  select fnv_hash('abcd');
         fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```

  ```
  select fnv_hash('cd', fnv_hash('ab'));
        fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```
+ Fungsi hash menggunakan jenis input untuk menentukan jumlah byte untuk hash. Gunakan casting untuk menegakkan jenis tertentu, jika perlu.

  Contoh berikut menggunakan berbagai jenis input untuk menghasilkan hasil yang berbeda.

  ```
  select fnv_hash(1::smallint);
        fnv_hash
  --------------------
   589727492704079044
  (1 row)
  ```

  ```
  select fnv_hash(1);
         fnv_hash
  ----------------------
   -5968735742475085980
  (1 row)
  ```

  ```
  select fnv_hash(1::bigint);
         fnv_hash
  ----------------------
   -8517097267634966620
  (1 row)
  ```

# MD5 fungsi
<a name="r_MD5"></a>

Menggunakan fungsi hash MD5 kriptografi untuk mengubah string panjang variabel menjadi string 32-karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 128-bit. 

## Sintaksis
<a name="r_MD5-syntax"></a>

```
MD5(string)
```

## Argumen
<a name="r_MD5-arguments"></a>

 *tali*   
String panjang variabel.

## Jenis pengembalian
<a name="r_MD5-return-type"></a>

 MD5 Fungsi mengembalikan string 32-karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 128-bit.

## Contoh
<a name="r_MD5-examples"></a>

Contoh berikut menunjukkan nilai 128-bit untuk string 'Amazon Redshift': 

```
select md5('Amazon Redshift');
md5
----------------------------------
f7415e33f972c03abd4f3fed36748f7a
(1 row)
```

# Fungsi SHA
<a name="SHA"></a>

Sinonim dari fungsi. SHA1 

Lihat [SHA1 fungsi](SHA1.md). 

# SHA1 fungsi
<a name="SHA1"></a>

 SHA1 Fungsi ini menggunakan fungsi hash SHA1 kriptografi untuk mengubah string panjang variabel menjadi string 40 karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 160-bit.

## Sintaksis
<a name="SHA1-syntax"></a>

SHA1 adalah sinonim dari [Fungsi SHA](SHA.md) dan. [Fungsi FUNC\$1 SHA1](FUNC_SHA1.md) 

```
SHA1(string)
```

## Pendapat
<a name="SHA1-arguments"></a>

 *tali*   
String panjang variabel.

## Jenis pengembalian
<a name="SHA1-returm-type"></a>

 SHA1 Fungsi mengembalikan string 40 karakter yang merupakan representasi teks dari nilai heksadesimal dari checksum 160-bit. 

## Contoh
<a name="SHA1-example"></a>

Contoh berikut mengembalikan nilai 160-bit untuk kata 'Amazon Redshift': 

```
select sha1('Amazon Redshift');
```

# SHA2 fungsi
<a name="SHA2"></a>

 SHA2 Fungsi ini menggunakan fungsi hash SHA2 kriptografi untuk mengubah string panjang variabel menjadi string karakter. String karakter adalah representasi teks dari nilai heksadesimal checksum dengan jumlah bit yang ditentukan.

## Sintaksis
<a name="SHA2-syntax"></a>

```
SHA2(string, bits)
```

## Argumen
<a name="SHA2-arguments"></a>

 *tali*   
String panjang variabel.

 *bilangan bulat*   
Jumlah bit dalam fungsi hash. Nilai yang valid adalah 0 (sama dengan 256), 224, 256, 384, dan 512.

## Jenis pengembalian
<a name="SHA2-returm-type"></a>

 SHA2 Fungsi mengembalikan string karakter yang merupakan representasi teks dari nilai heksadesimal checksum atau string kosong jika jumlah bit tidak valid. 

## Contoh
<a name="SHA2-example"></a>

Contoh berikut mengembalikan nilai 256-bit untuk kata 'Amazon Redshift': 

```
select sha2('Amazon Redshift', 256);
```

# MURMUR3\$132\$1HASH
<a name="MURMUR3_32_HASH"></a>

Fungsi MURMUR3 \$132\$1HASH menghitung hash non-kriptografi Murmur3A 32-bit untuk semua tipe data umum termasuk tipe numerik dan string.

## Sintaksis
<a name="MURMUR3_32_HASH-syntax"></a>

```
MURMUR3_32_HASH(value [, seed])
```

## Argumen
<a name="MURMUR3_32_HASH-arguments"></a>

 *nilai*   
Nilai input untuk hash. Amazon Redshift hash representasi biner dari nilai input. Perilaku ini mirip dengan[Fungsi FNV\$1HASH](r_FNV_HASH.md), tetapi nilainya dikonversi ke representasi biner yang ditentukan oleh spesifikasi hash Murmur3 [32-bit Apache Iceberg](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements).

 *benih*   
Benih INT dari fungsi hash. Argumen ini opsional. Jika tidak diberikan, Amazon Redshift menggunakan seed default 0. Ini memungkinkan menggabungkan hash dari beberapa kolom tanpa konversi atau penggabungan apa pun.

## Jenis pengembalian
<a name="MURMUR3_32_HASH-return-type"></a>

Fungsi mengembalikan INT.

## Contoh
<a name="MURMUR3_32_HASH-example"></a>

Contoh berikut mengembalikan hash Murmur3 dari sebuah angka, string 'Amazon Redshift', dan rangkaian keduanya.

```
select MURMUR3_32_HASH(1);
    
    MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift');
    
    MURMUR3_32_HASH
----------------------
 -1563580564
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1));
    
    MURMUR3_32_HASH
----------------------
 -1346554171
(1 row)
```

## Catatan penggunaan
<a name="MURMUR3_32_HASH-usage-notes"></a>

Untuk menghitung hash tabel dengan beberapa kolom, Anda dapat menghitung hash Murmur3 dari kolom pertama dan meneruskannya sebagai benih ke hash kolom kedua. Kemudian, ia melewati hash Murmur3 dari kolom kedua sebagai benih ke hash kolom ketiga.

Contoh berikut menciptakan benih untuk hash tabel dengan beberapa kolom.

```
select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;
```

Properti yang sama dapat digunakan untuk menghitung hash dari rangkaian string.

```
select MURMUR3_32_HASH('abcd');
   
   MURMUR3_32_HASH
---------------------
 1139631978
(1 row)
```

```
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab'));
   
   MURMUR3_32_HASH
---------------------
 1711522338
(1 row)
```

Fungsi hash menggunakan jenis input untuk menentukan jumlah byte untuk hash. Gunakan casting untuk menegakkan jenis tertentu, jika perlu.

Contoh berikut menggunakan jenis input yang berbeda untuk menghasilkan hasil yang berbeda.

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(1));
   
   MURMUR3_32_HASH
--------------------
 -1193428387
(1 row)
```

```
select MURMUR3_32_HASH(1);
   
   MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(2));
   
   MURMUR3_32_HASH
----------------------
 1179621905
(1 row)
```

# HyperLogLog fungsi
<a name="hyperloglog-functions"></a>

Berikut ini, Anda dapat menemukan deskripsi untuk HyperLogLog fungsi SQL yang didukung Amazon Redshift.

**Topics**
+ [Fungsi HLL](r_HLL_function.md)
+ [Fungsi HLL\$1CREATE\$1SKETCH](r_HLL_CREATE_SKETCH.md)
+ [Fungsi HLL\$1CARDINALITY](r_HLL_CARDINALITY.md)
+ [Fungsi HLL\$1COMBINE](r_HLL_COMBINE.md)
+ [Fungsi HLL\$1COMBINE\$1SKETCHES](r_HLL_COMBINE_SKETCHES.md)

# Fungsi HLL
<a name="r_HLL_function"></a>

Fungsi HLL mengembalikan HyperLogLog kardinalitas nilai ekspresi masukan. Fungsi HLL bekerja dengan tipe data apa pun kecuali tipe data HLLSKETCH. Fungsi HLL mengabaikan nilai NULL. Ketika tidak ada baris dalam tabel atau semua baris adalah NULL, kardinalitas yang dihasilkan adalah 0.

## Sintaksis
<a name="r_HLL_function-synopsis"></a>

```
HLL (aggregate_expression)
```

## Pendapat
<a name="r_HLL_function-argument"></a>

 *aggregate\$1expression*   
Ekspresi valid apa pun yang memberikan nilai ke agregat, seperti nama kolom. Fungsi ini mendukung tipe data apa pun sebagai input kecuali HLLSKETCH, GEOMETRY, GEOGRAPHY, dan VARBYTE.

## Jenis pengembalian
<a name="r_HLL_function-return-type"></a>

Fungsi HLL mengembalikan BIGINT atau nilai. INT8 

## Contoh
<a name="r_HLL_function-examples"></a>

Contoh berikut mengembalikan kardinalitas kolom `an_int` dalam tabel. `a_table`

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll(an_int) AS cardinality FROM a_table;
cardinality
-------------
4
```

# Fungsi HLL\$1CREATE\$1SKETCH
<a name="r_HLL_CREATE_SKETCH"></a>

Fungsi HLL\$1CREATE\$1SKETCH mengembalikan tipe data HLLSKETCH yang merangkum nilai ekspresi masukan. Fungsi HLL\$1CREATE\$1SKETCH bekerja dengan tipe data apa pun dan mengabaikan nilai NULL. Ketika tidak ada baris dalam tabel atau semua baris adalah NULL, sketsa yang dihasilkan tidak memiliki pasangan nilai indeks seperti. `{"version":1,"logm":15,"sparse":{"indices":[],"values":[]}}`

## Sintaksis
<a name="r_HLL_CREATE_SKETCH-synopsis"></a>

```
HLL_CREATE_SKETCH (aggregate_expression)
```

## Pendapat
<a name="r_HLL_CREATE_SKETCH-argument"></a>

 *aggregate\$1expression*   
Ekspresi valid apa pun yang memberikan nilai ke agregat, seperti nama kolom. Nilai NULL diabaikan. Fungsi ini mendukung tipe data apa pun sebagai input kecuali HLLSKETCH, GEOMETRY, GEOGRAPHY, dan VARBYTE.

## Jenis pengembalian
<a name="r_HLL_CREATE_SKETCH-return-type"></a>

Fungsi HLL\$1CREATE\$1SKETCH mengembalikan nilai HLLSKETCH.

## Contoh
<a name="r_HLL_CREATE_SKETCH-examples"></a>

Contoh berikut mengembalikan jenis HLLSKETCH untuk kolom `an_int` dalam tabel. `a_table` Objek JSON digunakan untuk mewakili HyperLogLog sketsa jarang saat mengimpor, mengekspor, atau mencetak sketsa. Sebuah representasi string (dalam format Base64) digunakan untuk mewakili HyperLogLog sketsa padat.

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll_create_sketch(an_int) AS sketch FROM a_table;
sketch
-------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,47158030],"values":[1,2,1,1]}}
(1 row)
```

# Fungsi HLL\$1CARDINALITY
<a name="r_HLL_CARDINALITY"></a>

Fungsi HLL\$1CARDINALITY mengembalikan kardinalitas tipe data HLLSKETCH masukan.

## Sintaksis
<a name="r_HLL_CARDINALITY-synopsis"></a>

```
HLL_CARDINALITY (hllsketch_expression)
```

## Pendapat
<a name="r_HLL_CARDINALITY-argument"></a>

 *hllsketch\$1expression*   
Ekspresi valid apa pun yang mengevaluasi tipe HLLSKETCH, seperti nama kolom. Nilai input adalah tipe data HLLSKETCH.

## Jenis pengembalian
<a name="r_HLL_CARDINALITY-return-type"></a>

Fungsi HLL\$1CARDINALITY mengembalikan BIGINT atau nilai. INT8 

## Contoh
<a name="r_HLL_CARDINALITY-examples"></a>

Contoh berikut mengembalikan kardinalitas kolom `sketch` dalam tabel. `hll_table`

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_cardinality(sketch) AS cardinality FROM hll_table;
cardinality
-------------
6
4
(2 rows)
```

# Fungsi HLL\$1COMBINE
<a name="r_HLL_COMBINE"></a>

Fungsi agregat HLL\$1COMBINE mengembalikan tipe data HLLSKETCH yang menggabungkan semua nilai input HLLSKETCH. 

Kombinasi dua atau lebih HyperLogLog sketsa adalah HLLSKETCH baru yang merangkum informasi tentang penyatuan nilai berbeda yang diwakili oleh setiap sketsa input. Setelah menggabungkan sketsa, Amazon Redshift mengekstrak kardinalitas penyatuan dua atau lebih kumpulan data. Untuk informasi selengkapnya tentang cara menggabungkan beberapa sketsa, lihat[Contoh: Kembalikan HyperLogLog sketsa dari menggabungkan beberapa sketsa](r_HLL-examples.md#hll-examples-multiple-sketches).

## Sintaksis
<a name="r_HLL_COMBINE-synopsis"></a>

```
HLL_COMBINE (hllsketch_expression)
```

## Pendapat
<a name="r_HLL_COMBINE-argument"></a>

 *hllsketch\$1expression*   
Ekspresi valid apa pun yang mengevaluasi tipe HLLSKETCH, seperti nama kolom. Nilai input adalah tipe data HLLSKETCH.

## Jenis pengembalian
<a name="r_HLL_COMBINE-return-type"></a>

Fungsi HLL\$1COMBINE mengembalikan tipe HLLSKETCH.

## Contoh
<a name="r_HLL_COMBINE-examples"></a>

Contoh berikut mengembalikan nilai HLLSKETCH gabungan dalam tabel. `hll_table`

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_combine(sketch) AS sketches FROM hll_table;
sketches
----------------------------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,40314817,42650774,47158030],"values":[1,2,1,3,2,1]}}
(1 row)
```

# Fungsi HLL\$1COMBINE\$1SKETCHES
<a name="r_HLL_COMBINE_SKETCHES"></a>

HLL\$1COMBINE\$1SKETCHES adalah fungsi skalar yang mengambil input dua nilai HLLSKETCH dan menggabungkannya menjadi satu HLLSKETCH.

Kombinasi dua atau lebih HyperLogLog sketsa adalah HLLSKETCH baru yang merangkum informasi tentang penyatuan nilai berbeda yang diwakili oleh setiap sketsa input.

## Sintaksis
<a name="r_HLL_COMBINE_SKETCHES-synopsis"></a>

```
HLL_COMBINE_SKETCHES (hllsketch_expression1, hllsketch_expression2)
```

## Pendapat
<a name="r_HLL_COMBINE_SKETCHES-argument"></a>

 *hllsketch\$1expression1 dan *hllsketch\$1expression2**   
Ekspresi valid apa pun yang mengevaluasi tipe HLLSKETCH, seperti nama kolom.

## Jenis pengembalian
<a name="r_HLL_COMBINE_SKETCHES-return-type"></a>

Fungsi HLL\$1COMBINE\$1SKETCHES mengembalikan tipe HLLSKETCH.

## Contoh
<a name="r_HLL_COMBINE_SKETCHES-examples"></a>

Contoh berikut mengembalikan nilai HLLSKETCH gabungan dalam tabel. `hll_table`

```
WITH tbl1(x, y)
     AS (SELECT Hll_create_sketch(1),
                Hll_create_sketch(2)
         UNION ALL
         SELECT Hll_create_sketch(3),
                Hll_create_sketch(4)
         UNION ALL
         SELECT Hll_create_sketch(5),
                Hll_create_sketch(6)
         UNION ALL
         SELECT Hll_create_sketch(7),
                Hll_create_sketch(8)),
     tbl2(x, y)
     AS (SELECT Hll_create_sketch(9),
                Hll_create_sketch(10)
         UNION ALL
         SELECT Hll_create_sketch(11),
                Hll_create_sketch(12)
         UNION ALL
         SELECT Hll_create_sketch(13),
                Hll_create_sketch(14)
         UNION ALL
         SELECT Hll_create_sketch(15),
                Hll_create_sketch(16)
         UNION ALL
         SELECT Hll_create_sketch(NULL),
                Hll_create_sketch(NULL)),
     tbl3(x, y)
     AS (SELECT *
         FROM   tbl1
         UNION ALL
         SELECT *
         FROM   tbl2)
SELECT Hll_combine_sketches(x, y)
FROM   tbl3;
```

# Fungsi JSON
<a name="json-functions"></a>

**Topics**
+ [Fungsi JSON\$1PARSE](JSON_PARSE.md)
+ [Fungsi CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md)
+ [Fungsi JSON\$1SERIALIZE](JSON_SERIALIZE.md)
+ [Fungsi JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md)
+ [Fungsi JSON berbasis teks](text-json-functions.md)

**catatan**  
Kami menyarankan Anda menggunakan fungsi-fungsi berikut untuk bekerja dengan JSON:  
 [Fungsi JSON\$1PARSE](JSON_PARSE.md) 
 [Fungsi CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md) 
 [Fungsi JSON\$1SERIALIZE](JSON_SERIALIZE.md) 
 [Fungsi JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md) 
Dengan JSON\$1PARSE, Anda hanya perlu mengonversi teks JSON ke nilai tipe SUPER sekali saat konsumsi, setelah itu Anda dapat beroperasi pada nilai SUPER. Amazon Redshift mem-parsing nilai SUPER lebih efisien daripada VARCHAR, yang merupakan output untuk fungsi JSON berbasis teks. Untuk informasi lebih lanjut tentang bekerja dengan tipe data SUPER, buka[Data semi-terstruktur di Amazon Redshift](super-overview.md). 

Ketika Anda perlu menyimpan kumpulan pasangan kunci-nilai yang relatif kecil, Anda dapat menghemat ruang dengan menyimpan data dalam format JSON. Karena string JSON dapat disimpan dalam satu kolom, menggunakan JSON mungkin lebih efisien daripada menyimpan data Anda dalam format tabel. Misalnya, Anda memiliki tabel jarang, di mana Anda harus memiliki banyak kolom untuk sepenuhnya mewakili semua atribut yang mungkin, tetapi sebagian besar nilai kolom adalah NULL untuk setiap baris tertentu atau kolom tertentu. Dengan menggunakan JSON untuk penyimpanan, Anda mungkin dapat menyimpan data untuk baris dalam pasangan key:value dalam string JSON tunggal dan menghilangkan kolom tabel yang jarang diisi. 

Selain itu, Anda dapat dengan mudah memodifikasi string JSON untuk menyimpan pasangan key:value tambahan saat skema JSON Anda berubah tanpa perlu menambahkan kolom ke tabel. 

Kami merekomendasikan menggunakan JSON dengan hemat. JSON bukanlah pilihan yang baik untuk menyimpan kumpulan data yang lebih besar karena, dengan menyimpan data yang berbeda dalam satu kolom, JSON tidak menggunakan arsitektur penyimpanan kolom Amazon Redshift. Meskipun Amazon Redshift mendukung fungsi JSON melalui kolom CHAR dan VARCHAR, sebaiknya gunakan SUPER untuk memproses data dalam format serialisasi JSON. SUPER menggunakan representasi tanpa skema pasca-parse yang dapat secara efisien menanyakan data hierarkis. Untuk informasi selengkapnya tentang tipe data SUPER, lihat[Data semi-terstruktur di Amazon Redshift](super-overview.md).

JSON menggunakan string teks yang dikodekan UTF-8, sehingga string JSON dapat disimpan sebagai tipe data CHAR atau VARCHAR. 

String JSON harus benar diformat JSON, sesuai dengan aturan berikut: 
+ Tingkat root JSON dapat berupa objek JSON atau array JSON. Objek JSON adalah kumpulan pasangan kunci:nilai yang dipisahkan koma yang tidak berurutan yang diapit oleh kurawal kurawal. 

  Sebagai contoh, `{"one":1, "two":2} `.
+ Array JSON adalah sekumpulan nilai yang dipisahkan koma yang diurutkan yang diapit oleh tanda kurung. 

  Contohnya adalah sebagai berikut: `["first", {"one":1}, "second", 3, null] `
+ Array JSON menggunakan indeks berbasis nol; elemen pertama dalam array berada pada posisi 0. Dalam pasangan kunci JSON: nilai, kuncinya adalah string dalam tanda kutip ganda. 
+ Nilai JSON dapat berupa salah satu dari berikut ini: 
  + Objek JSON 
  + array 
  + string
    + Diwakili menggunakan tanda kutip ganda
  + number
    + Termasuk bilangan bulat, desimal, dan float
  + boolean
  + null 
+ Objek kosong dan array kosong adalah nilai JSON yang valid.
+ Bidang JSON peka huruf besar/kecil. 
+ Ruang putih antara elemen struktural JSON (seperti`{ }, [ ]`) diabaikan. 

Fungsi Amazon Redshift JSON dan perintah Amazon Redshift COPY menggunakan metode yang sama untuk bekerja dengan data berformat JSON. Untuk informasi selengkapnya tentang bekerja dengan JSON, lihat [COPY dari format JSON](copy-usage_notes-copy-from-json.md)

# Fungsi JSON\$1PARSE
<a name="JSON_PARSE"></a>

Fungsi JSON\$1PARSE mem-parsing data dalam format JSON dan mengubahnya menjadi representasi. `SUPER` 

Untuk menyerap ke dalam tipe `SUPER` data menggunakan perintah INSERT atau UPDATE, gunakan fungsi JSON\$1PARSE. Saat Anda menggunakan JSON\$1PARSE () untuk mengurai string JSON menjadi nilai, pembatasan tertentu berlaku. `SUPER` Untuk informasi tambahan, lihat [Opsi parsing untuk SUPER](super-configurations.md#parsing-options-super).

## Sintaksis
<a name="JSON_PARSE-synopsis"></a>

```
JSON_PARSE( {json_string | binary_value} )
```

## Argumen
<a name="JSON_PARSE-arguments"></a>

 *json\$1string*  
Ekspresi yang mengembalikan JSON serial sebagai tipe `VARBYTE` atau`VARCHAR`. 

 *binary\$1value*  
Nilai biner tipe VARBYTE.

## Jenis pengembalian
<a name="JSON_PARSE-return"></a>

`SUPER`

## Contoh
<a name="JSON_PARSE-examples"></a>

Untuk mengkonversi array JSON `[10001,10002,"abc"]` ke tipe `SUPER` data, gunakan contoh berikut.

```
SELECT JSON_PARSE('[10001,10002,"abc"]');

+---------------------+
|     json_parse      |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

Untuk memastikan bahwa fungsi mengubah array JSON menjadi tipe `SUPER` data, gunakan contoh berikut. Untuk informasi selengkapnya, lihat [Fungsi JSON\$1TYPEOF](r_json_typeof.md)

```
SELECT JSON_TYPEOF(JSON_PARSE('[10001,10002,"abc"]'));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

# Fungsi CAN\$1JSON\$1PARSE
<a name="CAN_JSON_PARSE"></a>

Fungsi CAN\$1JSON\$1PARSE mem-parsing data dalam format JSON dan mengembalikan `true` jika hasilnya dapat dikonversi ke nilai menggunakan fungsi JSON\$1PARSE. `SUPER`

## Sintaksis
<a name="CAN_JSON_PARSE-synopsis"></a>

```
CAN_JSON_PARSE( {json_string | binary_value} )
```

## Argumen
<a name="CAN_JSON_PARSE-arguments"></a>

 *json\$1string*  
Ekspresi yang mengembalikan JSON serial dalam `VARCHAR` bentuk. 

 *binary\$1value*  
Nilai biner tipe VARBYTE.

## Jenis pengembalian
<a name="CAN_JSON_PARSE-return"></a>

`BOOLEAN`

## Catatan penggunaan
<a name="CAN_JSON_PARSE-usage-notes"></a>
+ CAN\$1JSON\$1PARSE mengembalikan false untuk string kosong. Ia mengembalikan NULL ketika argumen masukan adalah null. 

## Contoh
<a name="CAN_JSON_PARSE-examples"></a>

 Contoh berikut menunjukkan CAN\$1JSON\$1PARSE berjalan pada array JSON terbentuk dengan benar menggunakan kondisi CASE. Ia mengembalikan true, sehingga Amazon Redshift menjalankan fungsi JSON\$1PARSE pada nilai contoh. 

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('[10001,10002,"abc"]')
            THEN JSON_PARSE('[10001,10002,"abc"]')
        END;

 case
---------------------
'[10001,10002,"abc"]'
```

 Contoh berikut menunjukkan CAN\$1JSON\$1PARSE berjalan pada nilai yang bukan format JSON menggunakan kondisi CASE. Ini mengembalikan false, jadi Amazon Redshift mengembalikan segmen dalam klausa ELSE dari kondisi CASE sebagai gantinya. 

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('This is a string.')
            THEN JSON_PARSE('This is a string.')
            ELSE 'This is not JSON.'
        END;

 case
---------------------
"This is not JSON."
```

# Fungsi JSON\$1SERIALIZE
<a name="JSON_SERIALIZE"></a>

Fungsi JSON\$1SERIALIZE membuat serial `SUPER` ekspresi menjadi representasi JSON tekstual untuk mengikuti RFC 8259. Untuk informasi lebih lanjut tentang RFC itu, lihat Format [Pertukaran Data Notasi JavaScript Objek (JSON)](https://tools.ietf.org/html/rfc8259).

Batas `SUPER` ukuran kira-kira sama dengan batas blok, dan `VARCHAR` batasnya lebih kecil dari batas `SUPER` ukuran. Oleh karena itu, fungsi JSON\$1SERIALIZE mengembalikan kesalahan ketika format JSON melebihi batas VARCHAR sistem. Untuk memeriksa ukuran `SUPER` ekspresi, lihat [JSON\$1SIZE](r_json_size.md) fungsinya.

## Sintaksis
<a name="JSON_SERIALIZE-synopsis"></a>

```
JSON_SERIALIZE(super_expression)
```

## Argumen
<a name="JSON_SERIALIZE-arguments"></a>

 *super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="JSON_SERIALIZE-return"></a>

`VARCHAR`

**catatan**  
Nilai VARCHAR yang dikembalikan selalu merupakan string JSON non-null. Jika *super\$1expression* adalah NULL, JSON\$1SERIALIZE mengembalikan string JSON. `'null'`

## Contoh
<a name="JSON_SERIALIZE-examples"></a>

Untuk membuat serial `SUPER` nilai ke string, gunakan contoh berikut.

```
SELECT JSON_SERIALIZE(JSON_PARSE('[10001,10002,"abc"]'));
   
+---------------------+
|   json_serialize    |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

# Fungsi JSON\$1SERIALIZE\$1TO\$1VARBYTE
<a name="JSON_SERIALIZE_TO_VARBYTE"></a>

Fungsi JSON\$1SERIALIZE\$1TO\$1VARBYTE mengonversi nilai menjadi string JSON yang mirip dengan JSON\$1SERIALIZE (), tetapi disimpan dalam `SUPER` nilai sebagai gantinya. `VARBYTE`

## Sintaksis
<a name="JSON_SERIALIZE_TO_VARBYTE-synopsis"></a>

```
JSON_SERIALIZE_TO_VARBYTE(super_expression)
```

## Argumen
<a name="JSON_SERIALIZE_TO_VARBYTE-arguments"></a>

 *super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="JSON_SERIALIZE_TO_VARBYTE-return"></a>

`VARBYTE`

## Contoh
<a name="JSON_SERIALIZE_TO_VARBYTE-examples"></a>

Untuk membuat serial `SUPER` nilai dan mengembalikan hasilnya dalam `VARBYTE` format, gunakan contoh berikut.

```
SELECT JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'));

+----------------------------------------+
|       json_serialize_to_varbyte        |
+----------------------------------------+
| 5b31303030312c31303030322c22616263225d |
+----------------------------------------+
```

Untuk membuat serial `SUPER` nilai dan melemparkan hasilnya ke `VARCHAR` format, gunakan contoh berikut. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md).

```
SELECT CAST((JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'))) AS VARCHAR);

+---------------------------+
| json_serialize_to_varbyte |
+---------------------------+
| [10001,10002,"abc"]       |
+---------------------------+
```

# Fungsi JSON berbasis teks
<a name="text-json-functions"></a>

Fungsi di bagian ini mengurai nilai JSON sebagai VARCHAR. Untuk mengurai JSON, kami sarankan Anda menggunakan fungsi berikut, yang mengurai nilai JSON sebagai SUPER. Amazon Redshift mem-parsing nilai SUPER lebih efisien daripada VARCHAR.
+  [Fungsi JSON\$1PARSE](JSON_PARSE.md) 
+  [Fungsi CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md) 
+  [Fungsi JSON\$1SERIALIZE](JSON_SERIALIZE.md) 
+  [Fungsi JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md) 

**Topics**
+ [fungsi IS\$1VALID\$1JSON](IS_VALID_JSON.md)
+ [Fungsi IS\$1VALID\$1JSON\$1ARRAY](IS_VALID_JSON_ARRAY.md)
+ [Fungsi JSON\$1ARRAY\$1LENGTH](JSON_ARRAY_LENGTH.md)
+ [Fungsi JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT](JSON_EXTRACT_ARRAY_ELEMENT_TEXT.md)
+ [Fungsi JSON\$1EXTRACT\$1PATH\$1TEXT](JSON_EXTRACT_PATH_TEXT.md)

# fungsi IS\$1VALID\$1JSON
<a name="IS_VALID_JSON"></a>

**catatan**  
CAN\$1JSON\$1PARSE dan fungsi terkaitnya mengurai nilai JSON sebagai SUPER, yang diurai Amazon Redshift lebih efisien daripada VARCHAR.  
 Alih-alih menggunakan IS\$1VALID\$1JSON, kami menyarankan Anda memvalidasi string JSON Anda menggunakan. [Fungsi CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md) 

Fungsi IS\$1VALID\$1JSON memvalidasi string JSON. Fungsi mengembalikan Boolean `true` jika string benar terbentuk JSON atau `false` jika string cacat. Untuk memvalidasi array JSON, gunakan [Fungsi IS\$1VALID\$1JSON\$1ARRAY](IS_VALID_JSON_ARRAY.md)

Untuk informasi selengkapnya, lihat [Fungsi JSON](json-functions.md). 

## Sintaks
<a name="IS_VALID_JSON-synopsis"></a>

```
IS_VALID_JSON('json_string')
```

## Argumen
<a name="IS_VALID_JSON-arguments"></a>

 *json\$1string*  
Sebuah string atau ekspresi yang mengevaluasi ke string JSON.

## Jenis pengembalian
<a name="IS_VALID_JSON-return"></a>

`BOOLEAN`

## Contoh
<a name="IS_VALID_JSON-examples"></a>

Untuk membuat tabel dan menyisipkan string JSON untuk pengujian, gunakan contoh berikut.

```
CREATE TABLE test_json(id int IDENTITY(0,1), json_strings VARCHAR);

-- Insert valid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{"a":2}'), 
('{"a":{"b":{"c":1}}}'), 
('{"a": [1,2,"b"]}');

-- Insert invalid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{{}}'), 
('{1:"a"}'), 
('[1,2,3]');
```

Untuk memvalidasi string dalam contoh sebelumnya, gunakan contoh berikut.

```
SELECT id, json_strings, IS_VALID_JSON(json_strings) 
FROM test_json
ORDER BY id;

+----+---------------------+---------------+
| id |    json_strings     | is_valid_json |
+----+---------------------+---------------+
|  0 | {"a":2}             | true          |
|  4 | {"a":{"b":{"c":1}}} | true          |
|  8 | {"a": [1,2,"b"]}    | true          |
| 12 | {{}}                | false         |
| 16 | {1:"a"}             | false         |
| 20 | [1,2,3]             | false         |
+----+---------------------+---------------+
```

# Fungsi IS\$1VALID\$1JSON\$1ARRAY
<a name="IS_VALID_JSON_ARRAY"></a>

**catatan**  
JSON\$1PARSE dan fungsi terkaitnya mengurai nilai JSON sebagai SUPER, yang diurai Amazon Redshift lebih efisien daripada VARCHAR.   
 Alih-alih menggunakan IS\$1VALID\$1JSON\$1ARRAY, kami sarankan Anda mengurai string JSON Anda menggunakan untuk mendapatkan nilai SUPER. [Fungsi JSON\$1PARSE](JSON_PARSE.md) Kemudian, gunakan [Fungsi IS\$1ARRAY](r_is_array.md) fungsi untuk mengkonfirmasi bahwa array terbentuk dengan benar. 

Fungsi IS\$1VALID\$1JSON\$1ARRAY memvalidasi array JSON. Fungsi mengembalikan Boolean `true` jika array benar terbentuk JSON atau `false` jika array cacat. Untuk memvalidasi string JSON, gunakan [fungsi IS\$1VALID\$1JSON](IS_VALID_JSON.md)

Untuk informasi selengkapnya, lihat [Fungsi JSON](json-functions.md). 

## Sintaks
<a name="IS_VALID_JSON_ARRAY-synopsis"></a>

```
IS_VALID_JSON_ARRAY('json_array') 
```

## Argumen
<a name="IS_VALID_JSON_ARRAY-arguments"></a>

 *json\$1array*  
Sebuah string atau ekspresi yang mengevaluasi ke array JSON.

## Jenis pengembalian
<a name="IS_VALID_JSON_ARRAY-return"></a>

`BOOLEAN`

## Contoh
<a name="IS_VALID_JSON_ARRAY-examples"></a>

Untuk membuat tabel dan menyisipkan string JSON untuk pengujian, gunakan contoh berikut.

```
CREATE TABLE test_json_arrays(id int IDENTITY(0,1), json_arrays VARCHAR);

-- Insert valid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('[]'), 
('["a","b"]'), 
('["a",["b",1,["c",2,3,null]]]');

-- Insert invalid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('{"a":1}'),
('a'),
('[1,2,]');
```

Untuk memvalidasi string dalam contoh sebelumnya, gunakan contoh berikut.

```
SELECT json_arrays, IS_VALID_JSON_ARRAY(json_arrays) 
FROM test_json_arrays ORDER BY id;

+------------------------------+---------------------+
|         json_arrays          | is_valid_json_array |
+------------------------------+---------------------+
| []                           | true                |
| ["a","b"]                    | true                |
| ["a",["b",1,["c",2,3,null]]] | true                |
| {"a":1}                      | false               |
| a                            | false               |
| [1,2,]                       | false               |
+------------------------------+---------------------+
```

# Fungsi JSON\$1ARRAY\$1LENGTH
<a name="JSON_ARRAY_LENGTH"></a>

**catatan**  
JSON\$1PARSE dan fungsi terkaitnya mengurai nilai JSON sebagai SUPER, yang diurai Amazon Redshift lebih efisien daripada VARCHAR.  
 Alih-alih menggunakan JSON\$1ARRAY\$1LENGTH, kami sarankan Anda mengurai string JSON Anda menggunakan untuk mendapatkan nilai SUPER. [Fungsi JSON\$1PARSE](JSON_PARSE.md) Kemudian, gunakan [Fungsi GET\$1ARRAY\$1LENGTH](get_array_length.md) untuk mendapatkan panjang array Anda. 

Fungsi JSON\$1ARRAY\$1LENGTH mengembalikan jumlah elemen dalam array luar string JSON. Jika argumen *null\$1if\$1invalid* disetel ke `true` dan string JSON tidak valid, fungsi kembali alih-alih mengembalikan kesalahan. `NULL`

Untuk informasi selengkapnya, lihat [Fungsi JSON](json-functions.md). 

## Sintaks
<a name="JSON_ARRAY_LENGTH-synopsis"></a>

```
JSON_ARRAY_LENGTH('json_array' [, null_if_invalid ] ) 
```

## Argumen
<a name="JSON_ARRAY_LENGTH-arguments"></a>

 *json\$1array*  
Array JSON yang diformat dengan benar.

 *null\$1if\$1invalid*  
(Opsional) `BOOLEAN` Nilai yang menentukan apakah akan kembali `NULL` jika input JSON string tidak valid alih-alih mengembalikan kesalahan. Untuk kembali `NULL` jika JSON tidak valid, tentukan `true` (). `t` Untuk mengembalikan kesalahan jika JSON tidak valid, tentukan `false` (). `f` Nilai default-nya `false`.

## Jenis pengembalian
<a name="JSON_ARRAY_LENGTH-return"></a>

`INTEGER`

## Contoh
<a name="JSON_ARRAY_LENGTH-examples"></a>

Untuk mengembalikan jumlah elemen dalam array, gunakan contoh berikut. 

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14]'); 

+-------------------+
| json_array_length |
+-------------------+
|                 5 |
+-------------------+
```

Untuk mengembalikan kesalahan karena JSON tidak valid, gunakan contoh berikut.

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14');
 
ERROR: invalid json array object [11,12,13,{"f1":21,"f2":[25,26]},14
```

Untuk mengatur *null\$1if\$1invalid* ke *true*, sehingga pernyataan mengembalikan `NULL` alih-alih mengembalikan kesalahan untuk JSON yang tidak valid, gunakan contoh berikut.

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14',true);

+-------------------+
| json_array_length |
+-------------------+
| NULL              |
+-------------------+
```

# Fungsi JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT"></a>

**catatan**  
JSON\$1PARSE dan fungsi terkaitnya mengurai nilai JSON sebagai SUPER, yang diurai Amazon Redshift lebih efisien daripada VARCHAR.  
Alih-alih menggunakan JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT, kami sarankan Anda mengurai string JSON Anda menggunakan untuk mendapatkan nilai SUPER. [Fungsi JSON\$1PARSE](JSON_PARSE.md) Kemudian, kueri elemen yang Anda inginkan menggunakan indeks array, menggunakan `value[element position]` sintaks. Untuk informasi lebih lanjut tentang menanyakan elemen array dalam nilai SUPER, buka. [Meminta data semi-terstruktur](query-super.md)

Fungsi JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT mengembalikan elemen array JSON dalam array terluar dari string JSON, menggunakan indeks berbasis nol. Elemen pertama dalam array berada pada posisi 0. Jika indeks negatif atau di luar batas, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT kembali. `NULL` Jika argumen *null\$1if\$1invalid* disetel ke `TRUE` dan string JSON tidak valid, fungsi kembali alih-alih mengembalikan kesalahan. `NULL`

Untuk informasi selengkapnya, lihat [Fungsi JSON](json-functions.md). 

## Sintaks
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-synopsis"></a>

```
JSON_EXTRACT_ARRAY_ELEMENT_TEXT('json string', pos [, null_if_invalid ] )
```

## Argumen
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-arguments"></a>

 *json\$1string*  
String JSON yang diformat dengan benar.

*pos*  
Sebuah `INTEGER` mewakili indeks dari elemen array yang akan dikembalikan, menggunakan indeks array berbasis nol.

*null\$1if\$1invalid*  
(Opsional) `BOOLEAN` Nilai yang menentukan apakah akan kembali `NULL` jika input JSON string tidak valid alih-alih mengembalikan kesalahan. Untuk kembali `NULL` jika JSON tidak valid, tentukan `true` (). `t` Untuk mengembalikan kesalahan jika JSON tidak valid, tentukan `false` (). `f` Nilai default-nya `false`.

## Jenis pengembalian
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-return"></a>

`VARCHAR`  
*Sebuah `VARCHAR` string yang mewakili elemen array JSON direferensikan oleh pos.*

## Contoh
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-examples"></a>

Untuk mengembalikan elemen array pada posisi 2, yang merupakan elemen ketiga dari indeks array berbasis nol, gunakan contoh berikut. 

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[111,112,113]', 2);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
|                             113 |
+---------------------------------+
```

Untuk mengembalikan kesalahan karena JSON tidak valid, gunakan contoh berikut.

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1);
 
ERROR: invalid json array object ["a",["b",1,["c",2,3,null,]]]
```

Untuk menyetel *null\$1if\$1invalid* ke *true*, sehingga pernyataan kembali `NULL` alih-alih mengembalikan kesalahan untuk JSON yang tidak valid, gunakan contoh berikut.

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1,true);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
| NULL                            |
+---------------------------------+
```

Perhatikan contoh pernyataan berikut. Jika string JSON yang disediakan atau indeks adalah NULL, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT mengembalikan NULL terlepas dari nilai parameter lainnya. 

```
--Statement where json_string is NULL.
SELECT json_extract_array_element_text(NULL, 0)

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where pos is NULL and json_string is invalid JSON.
SELECT json_extract_array_element_text('invalid_json', NULL);

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where json_string is NULL and null_if_invalid is FALSE.
SELECT json_extract_array_element_text(NULL, 0, FALSE);

 json_extract_array_element_text
---------------------------------
                            NULL
```

Perhatikan contoh pernyataan berikut. *Ketika *null\$1if\$1invalid TRUE, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT mengembalikan NULL ketika json\$1string JSON tidak valid*.* *Jika *null\$1if\$1invalid adalah FALSE* atau tidak disetel, fungsi mengembalikan kesalahan ketika json\$1string tidak valid.*

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_array_element_text('invalid_json', 0, TRUE);

 json_extract_array_element_text
---------------------------------
                            NULL
                            
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_array_element_text('invalid_json', 0);

ERROR:  JSON parsing error
```

Perhatikan contoh berikut, di mana *json\$1string* adalah JSON yang valid, dan *pos mengacu pada nilai* JSON. `null` *Dalam hal ini, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT mengembalikan NULL, terlepas dari nilai null\$1if\$1invalid.*

```
--Statement selecting a null value.
SELECT json_extract_array_element_text('[null]', 0);

  json_extract_array_element_text 
----------------------------------
                             NULL
```

# Fungsi JSON\$1EXTRACT\$1PATH\$1TEXT
<a name="JSON_EXTRACT_PATH_TEXT"></a>

**catatan**  
JSON\$1PARSE dan fungsi terkaitnya mengurai nilai JSON sebagai SUPER, yang diurai Amazon Redshift lebih efisien daripada VARCHAR.  
Alih-alih menggunakan JSON\$1EXTRACT\$1PATH\$1TEXT, kami sarankan Anda mengurai string JSON Anda menggunakan untuk mendapatkan nilai SUPER. [Fungsi JSON\$1PARSE](JSON_PARSE.md) Kemudian, kueri elemen yang Anda inginkan menggunakan `value.attribute` sintaks. Untuk informasi lebih lanjut tentang menanyakan elemen array dalam nilai SUPER, buka. [Meminta data semi-terstruktur](query-super.md)

Fungsi JSON\$1EXTRACT\$1PATH\$1TEXT mengembalikan nilai untuk pasangan kunci-nilai direferensikan oleh serangkaian elemen jalur dalam string JSON. Jalur JSON dapat bersarang hingga kedalaman lima tingkat. Elemen jalur peka huruf besar/kecil. Jika elemen path tidak ada dalam string JSON, JSON\$1EXTRACT\$1PATH\$1TEXT kembali. `NULL`

Jika argumen *null\$1if\$1invalid* disetel ke `TRUE` dan string JSON tidak valid, fungsi kembali alih-alih mengembalikan kesalahan. `NULL`

JSON\$1EXTRACT\$1PATH\$1TEXT memiliki maksimum ukuran data 64KB. Jadi, jika ada catatan JSON yang lebih besar dari 64KB, memprosesnya dengan JSON\$1EXTRACT\$1PATH\$1TEXT menghasilkan kesalahan. 

Untuk informasi tentang fungsi JSON tambahan, lihat[Fungsi JSON](json-functions.md). Untuk informasi lebih lanjut tentang bekerja dengan JSON, lihat[COPY dari format JSON](copy-usage_notes-copy-from-json.md).

## Sintaksis
<a name="JSON_EXTRACT_PATH_TEXT-synopsis"></a>

```
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
```

## Argumen
<a name="JSON_EXTRACT_PATH_TEXT-arguments"></a>

 *json\$1string*  
String JSON yang diformat dengan benar.

*path\$1elem*  
Sebuah elemen path dalam string JSON. Satu elemen jalur diperlukan. Elemen jalur tambahan dapat ditentukan, hingga lima tingkat dalam.

*null\$1if\$1invalid*  
(Opsional) `BOOLEAN` Nilai yang menentukan apakah akan kembali `NULL` jika input JSON string tidak valid alih-alih mengembalikan kesalahan. Untuk kembali `NULL` jika JSON tidak valid, tentukan `TRUE` (). `t` Untuk mengembalikan kesalahan jika JSON tidak valid, tentukan `FALSE` (). `f` Nilai default-nya `FALSE`.

Dalam string JSON, Amazon Redshift `\n` mengenali sebagai karakter baris baru `\t` dan sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan garis miring terbalik (). `\\` Untuk informasi selengkapnya, lihat [Karakter melarikan diri di JSON](copy-usage_notes-copy-from-json.md#copy-usage-json-escape-characters).

## Jenis pengembalian
<a name="JSON_EXTRACT_PATH_TEXT-return"></a>

`VARCHAR`  
Sebuah `VARCHAR` string yang mewakili nilai JSON direferensikan oleh elemen jalur.

## Contoh
<a name="JSON_EXTRACT_PATH_TEXT-examples"></a>

Untuk mengembalikan nilai untuk jalur`'f4', 'f6'`, gunakan contoh berikut.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6');

+------------------------+
| json_extract_path_text |
+------------------------+
| star                   |
+------------------------+
```

Untuk mengembalikan kesalahan karena JSON tidak valid, gunakan contoh berikut.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6');

ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}
```

Untuk menyetel *null\$1if\$1invalid* ke *TRUE*, sehingga pernyataan mengembalikan JSON yang tidak valid alih-alih mengembalikan kesalahan, gunakan `NULL` contoh berikut.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true);

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

Perhatikan contoh berikut, yang memilih nilai untuk jalur`'farm', 'barn', 'color'`, di mana nilai yang diambil berada di tingkat ketiga, gunakan contoh berikut. Sampel ini diformat dengan alat lint JSON, agar lebih mudah dibaca.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}', 'farm', 'barn', 'color');
+------------------------+
| json_extract_path_text |
+------------------------+
| red                    |
+------------------------+
```

Untuk kembali `NULL` karena `'color'` elemen hilang, gunakan contoh berikut. Sampel ini diformat dengan alat lint JSON.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {}
    }
}', 'farm', 'barn', 'color');

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

Jika JSON valid, mencoba mengekstrak elemen yang hilang kembali`NULL`.

Untuk mengembalikan nilai untuk jalur`'house', 'appliances', 'washing machine', 'brand'`, gunakan contoh berikut.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
  "house": {
    "address": {
      "street": "123 Any St.",
      "city": "Any Town",
      "state": "FL",
      "zip": "32830"
    },
    "bathroom": {
      "color": "green",
      "shower": true
    },
    "appliances": {
      "washing machine": {
        "brand": "Any Brand",
        "color": "beige"
      },
      "dryer": {
        "brand": "Any Brand",
        "color": "white"
      }
    }
  }
}', 'house', 'appliances', 'washing machine', 'brand');  

+------------------------+
| json_extract_path_text |
+------------------------+
| Any Brand              |
+------------------------+
```

Contoh berikut membuat tabel sampel dan mengisinya dengan nilai SUPER, lalu mengembalikan nilai untuk jalur `'f2'` untuk kedua baris.

```
CREATE TABLE json_example(id INT, json_text SUPER);

INSERT INTO json_example VALUES
(1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')),
(2, JSON_PARSE('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}'));

SELECT * FROM json_example;
id          | json_text
------------+--------------------------------------------
1           | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}
2           | {"farm":{"barn":{"color":"red","feed stocked":true}}}
 

SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example;
         
id          | json_text
------------+--------------------------------------------
1           | {"f3":1}
2           |
```

Perhatikan contoh pernyataan berikut. *Path\$1elem* yang disediakan adalah NULL, jadi JSON\$1EXTRACT\$1PATH\$1TEXT mengembalikan NULL terlepas dari nilai parameter lainnya. 

```
--Statement where path_elem is NULL and json_string is valid JSON.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}',NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where only one path_elem is NULL.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4',NULL);

 json_extract_path_text
------------------------
                   NULL
                   
--Statement where path_elem is NULL and json_string is invalid JSON.
SELECT json_extract_path_text('invalid_json', NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where path_elem is NULL and null_if_invalid is FALSE.
SELECT json_extract_path_text(NULL, 0, FALSE);

 json_extract_path_text
------------------------
                   NULL
```

Perhatikan contoh pernyataan berikut. *Ketika *null\$1if\$1invalid TRUE, JSON\$1EXTRACT\$1PATH\$1TEXT mengembalikan NULL ketika json\$1string JSON tidak valid*.* *Jika *null\$1if\$1invalid adalah FALSE* atau tidak disetel, fungsi mengembalikan kesalahan ketika json\$1string tidak valid.*

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_path_text('invalid_json', 0, TRUE);

 json_extract_path_text
------------------------
                   NULL
                                                    
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_path_text('invalid_json', 0, FALSE);

ERROR:  JSON parsing error
```

Pertimbangkan contoh berikut, di mana *json\$1string adalah JSON* yang valid, dan *path\$1elem* mengacu pada nilai JSON. `null` Dalam hal ini, JSON\$1EXTRACT\$1PATH\$1TEXT mengembalikan NULL. *Demikian pula, ketika *path\$1elem* mengacu pada nilai yang tidak ada, JSON\$1EXTRACT\$1PATH\$1TEXT mengembalikan NULL, terlepas dari nilai null\$1if\$1invalid.*

```
--Statement selecting a null value.
SELECT json_extract_path_text('[null]', 0);

  json_extract_path_text  
-------------------------
                    NULL   
                             
--Statement selecting a non-existing value.               
SELECT json_extract_path_text('{}', 'a');
       
  json_extract_path_text  
-------------------------
                    NULL
```

# Fungsi pembelajaran mesin
<a name="ml-function"></a>

Dengan menggunakan pembelajaran mesin Amazon Redshift (ML), Anda dapat melatih model ML menggunakan pernyataan SQL dan memanggilnya dalam kueri SQL untuk prediksi. Keterjelasan model Amazon Redshift mencakup nilai kepentingan fitur untuk membantu Anda memahami bagaimana setiap atribut dalam data pelatihan berkontribusi pada hasil yang diprediksi.

Berikut ini, Anda dapat menemukan deskripsi untuk fungsi pembelajaran mesin untuk SQL yang didukung Amazon Redshift.

**Topics**
+ [Fungsi EXPLAIN\$1MODEL](r_explain_model_function.md)

# Fungsi EXPLAIN\$1MODEL
<a name="r_explain_model_function"></a>

Fungsi EXPLAIN\$1MODEL mengembalikan tipe data SUPER yang berisi laporan penjelasan model dalam format JSON. Laporan penjelasan berisi informasi tentang nilai Shapley untuk semua fitur model.

Fungsi EXPLAIN\$1MODEL saat ini hanya mendukung model AUTO ON atau AUTO OFF. XGBoost

Ketika laporan penjelasan tidak tersedia, fungsi mengembalikan status yang ditampilkan pada kemajuan model. Ini termasuk`Waiting for training job to complete`,`Waiting for processing job to complete`, dan`Processing job failed`. 

Ketika Anda menjalankan pernyataan CREATE MODEL, status penjelasan menjadi`Waiting for training job to complete`. Ketika model telah dilatih dan permintaan penjelasan dikirim, status penjelasan menjadi`Waiting for processing job to complete`. Ketika penjelasan model berhasil diselesaikan, laporan penjelasan lengkap tersedia. Jika tidak, negara menjadi`Processing job failed`.

Ketika Anda menjalankan pernyataan CREATE MODEL, Anda dapat menggunakan `MAX_RUNTIME` parameter opsional untuk menentukan jumlah maksimum waktu pelatihan harus mengambil. Setelah pembuatan model mencapai jumlah waktu tersebut, Amazon Redshift berhenti membuat model. Jika Anda mencapai batas waktu itu saat membuat model autopilot, Amazon Redshift akan mengembalikan model terbaik sejauh ini. Keterjelasan model menjadi tersedia setelah pelatihan model selesai, jadi jika `MAX_RUNTIME` diatur ke jumlah waktu yang rendah, laporan penjelasan mungkin tidak tersedia. Waktu pelatihan bervariasi dan tergantung pada kompleksitas model, ukuran data, dan faktor lainnya.

## Sintaksis
<a name="r_explain_model_function-synopsis"></a>

```
EXPLAIN_MODEL ('schema_name.model_name')
```

## Pendapat
<a name="r_explain_model_function-argument"></a>

 *schema\$1name*   
Nama skema. Jika tidak ada schema\$1name yang ditentukan, maka skema saat ini dipilih.

 *nama\$1model*   
Nama modul. Nama model dalam skema harus unik.

## Jenis pengembalian
<a name="r_explain_model_function-return-type"></a>

Fungsi EXPLAIN\$1MODEL mengembalikan tipe data SUPER, seperti yang ditunjukkan berikut.

```
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05,"x1":0.10,"x2":0.30,"x3":0.15},"expected_value":0.50}}}}
```

## Contoh
<a name="r_explain_model_function-examples"></a>

Contoh berikut mengembalikan status penjelasan`waiting for training job to complete`.

```
select explain_model('customer_churn_auto_model');
                 explain_model
--------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

Ketika penjelasan model berhasil diselesaikan, laporan penjelasan lengkap tersedia sebagai berikut.

```
select explain_model('customer_churn_auto_model');
                                       explain_model
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05386043365892927,"x1":0.10801289723274592,"x2":0.23227865827017378,"x3":0.0676685133940455,"x4":0.0897097667672375,"x5":0.08502141653270926,"x6":0.07581993936077065,"x7":0.16462880604578135},"expected_value":0.8492974042892456}}}}
(1 row)
```

Karena fungsi EXPLAIN\$1MODEL mengembalikan tipe data SUPER, Anda dapat menanyakan laporan penjelasan. Dengan melakukan ini, Anda dapat mengekstrak`global_shap_values`,`expected_value`, atau nilai Shapley khusus fitur.

Contoh berikut ekstrak `global_shap_values` untuk model.

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values from (select explain_model('customer_churn_auto_model') as report) as json_table;
                                                       global_shap_values
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"state":0.10983770427197151,"account_length":0.1772441398408543,"area_code":0.08626823968639591,"phone":0.0736669595282712,"intl_plan":3.344907436910987,"vmail_plan":0.09646600597854467,"vmail_message":0.2064922655089351,"day_mins":2.015038015251777,"day_calls":0.13179511076780168,"day_charge":0.4941091720480879,"eve_mins":0.46081379198626105,"eve_calls":0.16913440417758477,"eve_charge":0.09651014369401761,"night_mins":0.44218153640050845,"night_calls":0.15311640089218997,"night_charge":0.13850366104495426,"intl_mins":0.7583662464883899,"intl_calls":0.47144468610485685,"intl_charge":0.10945894673611875,"cust_serv_calls":0.31822051038387733}
(1 row)
```

Contoh berikut ekstrak `global_shap_values` untuk fitur x0.

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values.x0 from (select explain_model('customer_churn_auto_model') as report) as json_table;
          x0
------------------------
  0.05386043365892927
(1 row)
```

Jika model dibuat dalam skema tertentu dan Anda memiliki akses ke model yang dibuat, maka Anda dapat meminta penjelasan model seperti yang ditunjukkan berikut.

```
-- Check the current schema
SHOW search_path;
   search_path
------------------
  $user, public
(1 row)         
-- If you have the privilege to access the model explanation
-- in `test_schema`
SELECT explain_model('test_schema.test_model_name');
                       explain_model
---------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

# Fungsi matematika
<a name="Math_functions"></a>

**Topics**
+ [Simbol operator matematika](r_OPERATOR_SYMBOLS.md)
+ [Fungsi ABS](r_ABS.md)
+ [Fungsi ACOS](r_ACOS.md)
+ [Fungsi ASIN](r_ASIN.md)
+ [Fungsi ATAN](r_ATAN.md)
+ [ATAN2 fungsi](r_ATAN2.md)
+ [Fungsi CBRT](r_CBRT.md)
+ [Fungsi CEILING (atau CEIL)](r_CEILING_FLOOR.md)
+ [Fungsi COS](r_COS.md)
+ [Fungsi COT](r_COT.md)
+ [Fungsi DERAJAT](r_DEGREES.md)
+ [Fungsi DEXP](r_DEXP.md)
+ [DLOG1 fungsi](r_DLOG1.md)
+ [DLOG10 fungsi](r_DLOG10.md)
+ [Fungsi EXP](r_EXP.md)
+ [Fungsi FLOOR](r_FLOOR.md)
+ [Fungsi LN](r_LN.md)
+ [Fungsi LOG](r_LOG.md)
+ [Fungsi MOD](r_MOD.md)
+ [Fungsi PI](r_PI.md)
+ [Fungsi POWER](r_POWER.md)
+ [Fungsi RADIANS](r_RADIANS.md)
+ [fungsi RANDOM](r_RANDOM.md)
+ [Fungsi ROUND](r_ROUND.md)
+ [Fungsi SIN](r_SIN.md)
+ [Fungsi SIGN](r_SIGN.md)
+ [Fungsi SQRT](r_SQRT.md)
+ [Fungsi TAN](r_TAN.md)
+ [Fungsi TRUNC](r_TRUNC.md)

Bagian ini menjelaskan operator matematika dan fungsi yang didukung di Amazon Redshift. 

# Simbol operator matematika
<a name="r_OPERATOR_SYMBOLS"></a>

 Tabel berikut mencantumkan operator matematika yang didukung. 

## Operator yang didukung
<a name="r_OPERATOR_SYMBOLS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_OPERATOR_SYMBOLS.html)

## Contoh
<a name="r_OPERATOR_SYMBOLS-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk menghitung komisi yang dibayarkan ditambah penanganan \$12,00 untuk transaksi tertentu, gunakan contoh berikut. 

```
SELECT
    commission,
    (commission + 2.00) AS comm
FROM
    sales
WHERE
    salesid = 10000;

+------------+-------+
| commission | comm  |
+------------+-------+
|      28.05 | 30.05 |
+------------+-------+
```

Untuk menghitung 20 persen dari harga jual untuk transaksi tertentu, gunakan contoh berikut. 

```
SELECT pricepaid, (pricepaid * .20) as twentypct 
FROM sales 
WHERE salesid=10000;

+-----------+-----------+
| pricepaid | twentypct |
+-----------+-----------+
|       187 |      37.4 |
+-----------+-----------+
```

Untuk memperkirakan penjualan tiket berdasarkan pola pertumbuhan berkelanjutan, gunakan contoh berikut. Dalam contoh ini, subquery mengembalikan jumlah tiket yang terjual pada tahun 2008. Hasil itu dikalikan secara eksponensial dengan tingkat pertumbuhan berkelanjutan 5% selama 10 tahun. 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid AND year=2008)^((5::float/100)*10) AS qty10years;

+------------------+
|    qty10years    |
+------------------+
| 587.664019657491 |
+------------------+
```

Untuk menemukan total harga yang dibayarkan dan komisi untuk penjualan dengan ID tanggal yang lebih besar dari atau sama dengan 2000, gunakan contoh berikut. Kemudian kurangi total komisi dari total harga yang dibayarkan. 

```
SELECT SUM(pricepaid) AS sum_price, dateid,
SUM(commission) AS sum_comm, (SUM(pricepaid) - SUM(commission)) AS value
FROM sales 
WHERE dateid >= 2000
GROUP BY dateid 
ORDER BY dateid 
LIMIT 10;

+-----------+--------+----------+-----------+
| sum_price | dateid | sum_comm |   value   |
+-----------+--------+----------+-----------+
|    305885 |   2000 | 45882.75 | 260002.25 |
|    316037 |   2001 | 47405.55 | 268631.45 |
|    358571 |   2002 | 53785.65 | 304785.35 |
|    366033 |   2003 | 54904.95 | 311128.05 |
|    307592 |   2004 |  46138.8 |  261453.2 |
|    333484 |   2005 |  50022.6 |  283461.4 |
|    317670 |   2006 |  47650.5 |  270019.5 |
|    351031 |   2007 | 52654.65 | 298376.35 |
|    313359 |   2008 | 47003.85 | 266355.15 |
|    323675 |   2009 | 48551.25 | 275123.75 |
+-----------+--------+----------+-----------+
```

# Fungsi ABS
<a name="r_ABS"></a>

 ABS menghitung nilai absolut dari suatu angka, di mana angka itu dapat berupa literal atau ekspresi yang mengevaluasi angka. 

## Sintaksis
<a name="r_ABS-synopsis"></a>

```
ABS(number)
```

## Argumen
<a name="r_ABS-arguments"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi angka. Itu bisa berupa`SMALLINT`,, `INTEGER``BIGINT`,`DECIMAL`,`FLOAT4`,`FLOAT8`, atau `SUPER` tipe.

## Jenis pengembalian
<a name="r_ABS-return-type"></a>

ABS mengembalikan tipe data yang sama dengan argumennya. 

## Contoh
<a name="r_ABS-examples"></a>

Untuk menghitung nilai absolut`-38`, gunakan contoh berikut. 

```
SELECT ABS(-38);

+-----+
| abs |
+-----+
|  38 |
+-----+
```

Untuk menghitung nilai absolut`(14-76)`, gunakan contoh berikut. 

```
SELECT ABS(14-76);

+-----+
| abs |
+-----+
|  62 |
+-----+
```

# Fungsi ACOS
<a name="r_ACOS"></a>

ACOS adalah fungsi trigonometri yang mengembalikan kosinus busur suatu angka. Nilai kembali dalam radian dan berada di antara `0` dan`PI`.

## Sintaksis
<a name="r_ACOS-synopsis"></a>

```
ACOS(number)
```

## Argumen
<a name="r_ACOS-arguments"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_ACOS-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_ACOS-examples"></a>

Untuk mengembalikan arc cosinus`-1`, gunakan contoh berikut. 

```
SELECT ACOS(-1);

+-------------------+
|       acos        |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Untuk mengubah kosinus busur `.5` ke jumlah derajat yang setara, gunakan contoh berikut. 

```
SELECT (ACOS(.5) * 180/(SELECT PI())) AS degrees;

+-------------------+
|      degrees      |
+-------------------+
| 60.00000000000001 |
+-------------------+
```

# Fungsi ASIN
<a name="r_ASIN"></a>

ASIN adalah fungsi trigonometri yang mengembalikan sinus busur dari suatu angka. Nilai kembali dalam radian dan berada di antara `PI/2` dan`-PI/2`. 

## Sintaksis
<a name="r_ASIN-synopsis"></a>

```
ASIN(number)
```

## Argumen
<a name="r_ASIN-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_ASIN-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_ASIN-examples"></a>

Untuk mengembalikan sinus busur`1`, gunakan contoh berikut. 

```
SELECT ASIN(1) AS halfpi;

+--------------------+
|       halfpi       |
+--------------------+
| 1.5707963267948966 |
+--------------------+
```

Untuk mengubah sinus busur `.5` ke jumlah derajat yang setara, gunakan contoh berikut. 

```
SELECT (ASIN(.5) * 180/(SELECT PI())) AS degrees;

+--------------------+
|      degrees       |
+--------------------+
| 30.000000000000004 |
+--------------------+
```

# Fungsi ATAN
<a name="r_ATAN"></a>

ATAN adalah fungsi trigonometri yang mengembalikan garis singgung busur dari suatu bilangan. Nilai kembali dalam radian dan berada di antara `-PI` dan`PI`.

## Sintaksis
<a name="r_ATAN-synopsis"></a>

```
ATAN(number)
```

## Argumen
<a name="r_ATAN-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_ATAN-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_ATAN-examples"></a>

Untuk mengembalikan garis singgung busur `1` dan kalikan dengan 4, gunakan contoh berikut.

```
SELECT ATAN(1) * 4 AS pi;
            
+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Untuk mengubah garis singgung busur `1` ke jumlah derajat yang setara, gunakan contoh berikut. 

```
SELECT (ATAN(1) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      45 |
+---------+
```

# ATAN2 fungsi
<a name="r_ATAN2"></a>

ATAN2 adalah fungsi trigonometri yang mengembalikan tangen busur dari satu angka dibagi dengan angka lain. Nilai kembali dalam radian dan berada di antara `PI/2` dan`-PI/2`. 

## Sintaksis
<a name="r_ATAN2-synopsis"></a>

```
ATAN2(number1, number2)
```

## Argumen
<a name="r_ATAN2-arguments"></a>

 *nomor1*   
Sebuah `DOUBLE PRECISION` angka. 

 *nomor2*   
Sebuah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_ATAN2-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_ATAN2-examples"></a>

Untuk mengembalikan garis singgung busur `2/2` dan kalikan dengan 4, gunakan contoh berikut. 

```
SELECT ATAN2(2,2) * 4 AS PI;

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Untuk mengubah garis singgung busur `1/0` (yang mengevaluasi ke 0) ke jumlah derajat yang setara, gunakan contoh berikut. 

```
SELECT (ATAN2(1,0) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      90 |
+---------+
```

# Fungsi CBRT
<a name="r_CBRT"></a>

 Fungsi CBRT adalah fungsi matematika yang menghitung akar kubus dari angka tertentu. 

## Sintaksis
<a name="r_CBRT-synopsis"></a>

```
CBRT(number)
```

## Argumen
<a name="r_CBRT-argument"></a>

CBRT mengambil `DOUBLE PRECISION` angka sebagai argumen. 

## Jenis pengembalian
<a name="r_CBRT-return-type"></a>

`DOUBLE PRECISION` 

## Contoh
<a name="r_CBRT-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk menghitung akar kubus dari komisi yang dibayarkan untuk transaksi tertentu, gunakan contoh berikut. 

```
SELECT CBRT(commission) FROM sales WHERE salesid=10000;

+--------------------+
|        cbrt        |
+--------------------+
| 3.0383953904884344 |
+--------------------+
```

# Fungsi CEILING (atau CEIL)
<a name="r_CEILING_FLOOR"></a>

Fungsi CEILING atau CEIL digunakan untuk membulatkan angka ke bilangan bulat berikutnya. ([Fungsi FLOOR](r_FLOOR.md)Membulatkan angka ke bawah ke bilangan bulat berikutnya.) 

## Sintaksis
<a name="r_CEILING_FLOOR-synopsis"></a>

```
{CEIL | CEILING}(number)
```

## Argumen
<a name="r_CEILING_FLOOR-arguments"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi ke angka. Itu bisa berupa`SMALLINT`,, `INTEGER``BIGINT`,`DECIMAL`,`FLOAT4`,`FLOAT8`, atau `SUPER` tipe.

## Jenis pengembalian
<a name="r_CEILING_FLOOR-return-type"></a>

CEILING dan CEIL mengembalikan tipe data yang sama dengan argumennya. 

Ketika input adalah `SUPER` tipe, output mempertahankan tipe dinamis yang sama dengan input sementara tipe statis tetap tipe SUPER. Ketika tipe dinamis `SUPER` bukan angka, Amazon Redshift mengembalikan nol.

## Contoh
<a name="r_CEILING_FLOOR-example"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk menghitung plafon komisi yang dibayarkan untuk transaksi penjualan tertentu, gunakan contoh berikut. 

```
SELECT CEILING(commission) FROM sales
WHERE salesid=10000;

+---------+
| ceiling |
+---------+
|      29 |
+---------+
```

# Fungsi COS
<a name="r_COS"></a>

COS adalah fungsi trigonometri yang mengembalikan kosinus suatu bilangan. Nilai kembalinya dalam radian dan berada di antara `-1` dan`1`, inklusif. 

## Sintaksis
<a name="r_COS-synopsis"></a>

```
COS(double_precision)
```

## Argumen
<a name="r_COS-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_COS-return-type"></a>

Fungsi COS mengembalikan `DOUBLE PRECISION` angka. 

## Contoh
<a name="r_COS-examples"></a>

Untuk mengembalikan kosinus`0`, gunakan contoh berikut. 

```
SELECT COS(0);

+-----+
| cos |
+-----+
|   1 |
+-----+
```

Untuk mengembalikan kosinus`pi`, gunakan contoh berikut. 

```
SELECT COS(PI());

+-----+
| cos |
+-----+
|  -1 |
+-----+
```

# Fungsi COT
<a name="r_COT"></a>

COT adalah fungsi trigonometri yang mengembalikan kotangen angka. Parameter input harus bukan nol. 

## Sintaksis
<a name="r_COT-synopsis"></a>

```
COT(number)
```

## Pendapat
<a name="r_COT-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_COT-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_COT-examples"></a>

Untuk mengembalikan kotangen 1, gunakan contoh berikut. 

```
SELECT COT(1);

+--------------------+
|        cot         |
+--------------------+
| 0.6420926159343306 |
+--------------------+
```

# Fungsi DERAJAT
<a name="r_DEGREES"></a>

Mengubah sudut dalam radian menjadi setara dalam derajat. 

## Sintaksis
<a name="r_DEGREES-synopsis"></a>

```
DEGREES(number)
```

## Pendapat
<a name="r_DEGREES-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_DEGREES-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_DEGREES-examples"></a>

Untuk mengembalikan derajat setara dengan 0,5 radian, gunakan contoh berikut. 

```
SELECT DEGREES(.5);

+-------------------+
|      degrees      |
+-------------------+
| 28.64788975654116 |
+-------------------+
```

Untuk mengkonversi PI radian ke derajat, gunakan contoh berikut. 

```
SELECT DEGREES(pi());

+---------+
| degrees |
+---------+
|     180 |
+---------+
```

# Fungsi DEXP
<a name="r_DEXP"></a>

Fungsi DEXP mengembalikan nilai eksponensial dalam notasi ilmiah untuk bilangan presisi ganda. Satu-satunya perbedaan antara fungsi DEXP dan EXP adalah bahwa parameter untuk DEXP harus a. `DOUBLE PRECISION` 

## Sintaksis
<a name="r_DEXP-synopsis"></a>

```
DEXP(number)
```

## Pendapat
<a name="r_DEXP-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_DEXP-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_DEXP-example"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Gunakan fungsi DEXP untuk memperkirakan penjualan tiket berdasarkan pola pertumbuhan berkelanjutan. Dalam contoh ini, subquery mengembalikan jumlah tiket yang terjual pada tahun 2008. Hasil itu dikalikan dengan hasil fungsi DEXP, yang menentukan tingkat pertumbuhan berkelanjutan 7% selama 10 tahun. 

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * DEXP((7::FLOAT/100)*10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# DLOG1 fungsi
<a name="r_DLOG1"></a>

 DLOG1 Fungsi mengembalikan logaritma natural dari parameter input. Sinonim dari. [Fungsi LN](r_LN.md) 

# DLOG10 fungsi
<a name="r_DLOG10"></a>

 DLOG10 Mengembalikan basis 10 logaritma dari parameter input.

Sinonim dari. [Fungsi LOG](r_LOG.md) 

## Sintaksis
<a name="r_DLOG10-synopsis"></a>

```
DLOG10(number)
```

## Pendapat
<a name="r_DLOG10-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_DLOG10-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_DLOG10-example"></a>

Untuk mengembalikan logaritma basis 10 dari angka 100, gunakan contoh berikut. 

```
SELECT DLOG10(100);

+--------+
| dlog10 |
+--------+
|      2 |
+--------+
```

# Fungsi EXP
<a name="r_EXP"></a>

Fungsi EXP mengimplementasikan fungsi eksponensial untuk ekspresi numerik, atau dasar logaritma natural,, `e` dinaikkan ke kekuatan ekspresi. Fungsi EXP adalah kebalikan dari. [Fungsi LN](r_LN.md) 

## Sintaksis
<a name="r_EXP-synopsis"></a>

```
EXP(expression)
```

## Pendapat
<a name="r_EXP-argument"></a>

 *ekspresi*   
Ekspresi harus berupa`INTEGER`,`DECIMAL`, atau tipe `DOUBLE PRECISION` data. 

## Jenis pengembalian
<a name="r_EXP-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_EXP-example"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Gunakan fungsi EXP untuk memperkirakan penjualan tiket berdasarkan pola pertumbuhan berkelanjutan. Dalam contoh ini, subquery mengembalikan jumlah tiket yang terjual pada tahun 2008. Hasil itu dikalikan dengan hasil fungsi EXP, yang menentukan tingkat pertumbuhan berkelanjutan 7% selama 10 tahun. 

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * EXP((7::FLOAT/100)*10) qty2018;

+-------------------+
|      qty2018      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# Fungsi FLOOR
<a name="r_FLOOR"></a>

Fungsi FLOOR membulatkan angka ke bawah ke bilangan bulat berikutnya. 

## Sintaksis
<a name="r_FLOOR-synopsis"></a>

```
FLOOR(number)
```

## Pendapat
<a name="r_FLOOR-argument"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi ke angka. Itu bisa berupa`SMALLINT`,, `INTEGER``BIGINT`,`DECIMAL`,`FLOAT4`,`FLOAT8`, atau `SUPER` tipe. 

## Jenis pengembalian
<a name="r_FLOOR-return-type"></a>

FLOOR mengembalikan tipe data yang sama sebagai argumennya. 

Ketika input adalah `SUPER` tipe, output mempertahankan tipe dinamis yang sama dengan input sementara tipe statis tetap `SUPER` tipe. Ketika tipe dinamis `SUPER` bukan angka, Amazon Redshift kembali. `NULL`

## Contoh
<a name="r_FLOOR-example"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk menunjukkan nilai komisi yang dibayarkan untuk transaksi penjualan tertentu sebelum dan sesudah menggunakan fungsi FLOOR, gunakan contoh berikut. 

```
SELECT commission 
FROM sales 
WHERE salesid=10000;

+------------+
| commission |
+------------+
|      28.05 |
+------------+

SELECT FLOOR(commission) 
FROM sales 
WHERE salesid=10000;

+-------+
| floor |
+-------+
|    28 |
+-------+
```

# Fungsi LN
<a name="r_LN"></a>

Mengembalikan logaritma natural dari parameter input.

Sinonim dari. [DLOG1 fungsi](r_DLOG1.md) 

## Sintaksis
<a name="r_LN-synopsis"></a>

```
LN(expression)
```

## Pendapat
<a name="r_LN-argument"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi.   
Fungsi ini mengembalikan kesalahan untuk beberapa tipe data jika ekspresi mereferensikan tabel buatan pengguna Amazon Redshift atau tabel sistem STL atau STV Amazon Redshift. 
Ekspresi dengan tipe data berikut menghasilkan kesalahan jika mereka mereferensikan tabel yang dibuat pengguna atau sistem. Ekspresi dengan tipe data ini berjalan secara eksklusif pada node pemimpin:   
+ `BOOLEAN` 
+ `CHAR` 
+ `DATE` 
+ `DECIMAL` atau `NUMERIC` 
+ `TIMESTAMP` 
+ `VARCHAR` 
Ekspresi dengan tipe data berikut berjalan dengan sukses pada tabel yang dibuat pengguna dan tabel sistem STL atau STV:   
+ `BIGINT` 
+ `DOUBLE PRECISION` 
+ `INTEGER` 
+ `REAL` 
+ `SMALLINT` 

## Jenis pengembalian
<a name="r_LN-return-type"></a>

Fungsi LN mengembalikan tipe yang sama dengan *ekspresi* input. 

## Contoh
<a name="r_LN-example"></a>

Untuk mengembalikan logaritma natural atau logaritma dasar `e` dari angka 2.718281828, gunakan contoh berikut. 

```
SELECT LN(2.718281828);

+--------------------+
|         ln         |
+--------------------+
| 0.9999999998311267 |
+--------------------+
```

Perhatikan bahwa jawabannya hampir sama dengan 1. 

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengembalikan logaritma natural dari nilai-nilai dalam kolom userid dalam tabel USERS, gunakan contoh berikut. 

```
SELECT username, LN(userid) FROM users ORDER BY userid LIMIT 10;

+----------+--------------------+
| username |         ln         |
+----------+--------------------+
| JSG99FHE |                  0 |
| PGL08LJI | 0.6931471805599453 |
| IFT66TXU | 1.0986122886681098 |
| XDZ38RDD | 1.3862943611198906 |
| AEB55QTM | 1.6094379124341003 |
| NDQ15VBM |  1.791759469228055 |
| OWY35QYB | 1.9459101490553132 |
| AZG78YIP | 2.0794415416798357 |
| MSD36KVR | 2.1972245773362196 |
| WKW41AIW |  2.302585092994046 |
+----------+--------------------+
```

# Fungsi LOG
<a name="r_LOG"></a>

Mengembalikan logaritma dari angka.

Jika Anda menggunakan fungsi ini untuk menghitung logaritma basis 10, Anda juga dapat menggunakannya. [DLOG10 fungsi](r_DLOG10.md) 

## Sintaksis
<a name="r_LOG-synopsis"></a>

```
LOG([base, ]argument)
```

## Parameter
<a name="r_LOG-argument"></a>

 *dasar*   
(Opsional) Dasar dari fungsi logaritma. Angka ini harus positif dan tidak bisa sama`1`. *Jika parameter ini dihilangkan, Amazon Redshift menghitung logaritma basis 10 argumen.*

 *argumen*   
Argumen fungsi logaritma. Angka ini harus positif. Jika nilai *argumen* adalah`1`, fungsi kembali`0`.

## Jenis pengembalian
<a name="r_LOG-return-type"></a>

Fungsi LOG mengembalikan `DOUBLE PRECISION` angka. 

## Contoh
<a name="r_LOG-example"></a>

Untuk menemukan logaritma basis 2 dari 100, gunakan contoh berikut. 

```
SELECT LOG(2, 100);
+-------------------+
|        log        |
+-------------------+
| 6.643856189774725 |
+-------------------+
```

Untuk menemukan logaritma basis 10 dari 100, gunakan contoh berikut. Perhatikan bahwa jika Anda menghilangkan parameter dasar, Amazon Redshift mengasumsikan basis 10.

```
SELECT LOG(100);
            
+-----+
| log |
+-----+
|   2 |
+-----+
```

# Fungsi MOD
<a name="r_MOD"></a>

Mengembalikan sisa dari dua angka, atau dikenal sebagai operasi *modulo*. Untuk menghitung hasilnya, parameter pertama dibagi dengan yang kedua.

## Sintaksis
<a name="r_MOD-synopsis"></a>

```
MOD(number1, number2)
```

## Argumen
<a name="r_MOD-arguments"></a>

 *nomor1*   
Parameter input pertama adalah`INTEGER`,`SMALLINT`,`BIGINT`, atau `DECIMAL` angka. Jika salah satu parameter adalah `DECIMAL` tipe, parameter lainnya juga harus berupa `DECIMAL` tipe. Jika salah satu parameter adalah`INTEGER`, parameter lainnya dapat berupa`INTEGER`,`SMALLINT`, atau`BIGINT`. Kedua parameter juga bisa `SMALLINT` atau`BIGINT`, tetapi satu parameter tidak bisa menjadi `SMALLINT` jika yang lain adalah a`BIGINT`. 

 *nomor2*   
Parameter kedua adalah`INTEGER`,`SMALLINT`,`BIGINT`, atau `DECIMAL` angka. Aturan tipe data yang sama berlaku untuk *number2* untuk *number1*. 

## Jenis pengembalian
<a name="r_MOD-return-type"></a>

Jenis pengembalian fungsi MOD adalah tipe numerik yang sama dengan parameter input, jika kedua parameter input adalah tipe yang sama. Jika salah satu parameter input adalah`INTEGER`, bagaimanapun, tipe pengembalian juga akan menjadi`INTEGER`. Jenis pengembalian yang valid adalah`DECIMAL`,`INT`,`SMALLINT`, dan`BIGINT`.

## Catatan penggunaan
<a name="r_MOD-usage-notes"></a>

Anda dapat menggunakan `%` sebagai operator modulo.

## Contoh
<a name="r_MOD-example"></a>

Untuk mengembalikan sisanya ketika angka dibagi dengan yang lain, gunakan contoh berikut.

```
SELECT MOD(10, 4);
               
+-----+
| mod |
+-----+
|   2 |
+-----+
```

Untuk mengembalikan `DECIMAL` hasil saat menggunakan fungsi MOD, gunakan contoh berikut.

```
SELECT MOD(10.5, 4);
               
+-----+
| mod |
+-----+
| 2.5 |
+-----+
```

Untuk mentransmisikan nomor sebelum menjalankan fungsi MOD, gunakan contoh berikut. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md).

```
SELECT MOD(CAST(16.4 AS INTEGER), 5);
               
+-----+
| mod |
+-----+
|   1 |
+-----+
```

Untuk memeriksa apakah parameter pertama genap dengan membaginya dengan 2, gunakan contoh berikut.

```
SELECT mod(5,2) = 0 AS is_even;
               
+---------+
| is_even |
+---------+
| false   |
+---------+
```

Untuk menggunakan*%* sebagai operator modulo, gunakan contoh berikut.

```
SELECT 11 % 4 as remainder;
               
 +-----------+
| remainder |
+-----------+
|         3 |
+-----------+
```

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengembalikan informasi untuk kategori bernomor ganjil dalam tabel CATEGORY, gunakan contoh berikut. 

```
SELECT catid, catname
FROM category
WHERE MOD(catid,2)=1
ORDER BY 1,2;

+-------+-----------+
| catid |  catname  |
+-------+-----------+
|     1 | MLB       |
|     3 | NFL       |
|     5 | MLS       |
|     7 | Plays     |
|     9 | Pop       |
|    11 | Classical |
+-------+-----------+
```

# Fungsi PI
<a name="r_PI"></a>

Fungsi PI mengembalikan nilai pi ke 14 tempat desimal. 

## Sintaksis
<a name="r_PI-synopsis"></a>

```
PI()
```

## Jenis pengembalian
<a name="r_PI-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_PI-examples"></a>

Untuk mengembalikan nilai pi, gunakan contoh berikut.

```
SELECT PI();

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# Fungsi POWER
<a name="r_POWER"></a>

 Fungsi POWER adalah fungsi eksponensial yang meningkatkan ekspresi numerik ke kekuatan ekspresi numerik kedua. Misalnya, 2 hingga daya ketiga dihitung sebagai`POWER(2,3)`, dengan hasil dari`8`. 

## Sintaksis
<a name="r_POWER-synopsis"></a>

```
{POW | POWER}(expression1, expression2)
```

## Argumen
<a name="r_POWER-arguments"></a>

 *ekspresi1*   
Ekspresi numerik yang akan dinaikkan. Harus berupa`INTEGER`,`DECIMAL`, atau tipe `FLOAT` data. 

 *ekspresi2*   
Kekuatan untuk meningkatkan *ekspresi1*. Harus berupa`INTEGER`,`DECIMAL`, atau tipe `FLOAT` data. 

## Jenis pengembalian
<a name="r_POWER-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_POWER-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Dalam contoh berikut, fungsi POWER digunakan untuk memperkirakan seperti apa penjualan tiket dalam 10 tahun ke depan, berdasarkan jumlah tiket yang terjual pada tahun 2008 (hasil subquery). Tingkat pertumbuhan ditetapkan pada 7% per tahun dalam contoh ini. 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100),10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 679353.7540885945 |
+-------------------+
```

Contoh berikut adalah variasi pada contoh sebelumnya, dengan tingkat pertumbuhan 7% per tahun tetapi intervalnya diatur ke bulan (120 bulan lebih dari 10 tahun). 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100/12),120) qty2010;

+-----------------+
|     qty2010     |
+-----------------+
| 694034.54678046 |
+-----------------+
```

# Fungsi RADIANS
<a name="r_RADIANS"></a>

Fungsi RADIANS mengubah sudut dalam derajat ke ekuivalennya dalam radian. 

## Sintaksis
<a name="r_RADIANS-synopsis"></a>

```
RADIANS(number)
```

## Pendapat
<a name="r_RADIANS-argument"></a>

 *jumlah*   
Parameter input adalah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_RADIANS-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_RADIANS-examples"></a>

Untuk mengembalikan radian setara 180 derajat, gunakan contoh berikut. 

```
SELECT RADIANS(180);

+-------------------+
|      radians      |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# fungsi RANDOM
<a name="r_RANDOM"></a>

Fungsi RANDOM menghasilkan nilai acak antara 0,0 (inklusif) dan 1,0 (eksklusif). 

## Sintaksis
<a name="r_RANDOM-synopsis"></a>

```
RANDOM()
```

## Jenis pengembalian
<a name="r_RANDOM-return-type"></a>

`DOUBLE PRECISION`

## Catatan penggunaan
<a name="r_RANDOM_usage_notes"></a>

Panggil RANDOM setelah menetapkan nilai seed dengan [SET](r_SET.md) perintah untuk menyebabkan RANDOM menghasilkan angka dalam urutan yang dapat diprediksi. 

## Contoh
<a name="r_RANDOM-examples"></a>

Untuk menghitung nilai acak antara 0 dan 99, gunakan contoh berikut. Jika angka acak adalah 0 hingga 1, kueri ini menghasilkan angka acak dari 0 hingga 100. 

```
SELECT CAST(RANDOM() * 100 AS INT);

+------+
| int4 |
+------+
|   59 |
+------+
```

Contoh ini menggunakan [SET](r_SET.md) perintah untuk menetapkan nilai SEED sehingga RANDOM menghasilkan urutan angka yang dapat diprediksi. 

Untuk mengembalikan tiga bilangan bulat RANDOM tanpa menetapkan nilai SEED, gunakan contoh berikut. 

```
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|    6 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   68 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   56 |
+------+
```

Untuk mengatur nilai SEED ke`.25`, dan mengembalikan tiga nomor RANDOM lagi, gunakan contoh berikut. 

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

Untuk mengatur ulang nilai SEED ke`.25`, dan memverifikasi bahwa RANDOM mengembalikan hasil yang sama dengan tiga panggilan sebelumnya, gunakan contoh berikut. 

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengambil sampel acak seragam 10 item dari tabel PENJUALAN, gunakan contoh berikut.

```
SELECT * 
FROM sales
ORDER BY RANDOM()
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|   45422 |  51114 |     5983 |   24482 |    4369 |   2118 |       1 |       195 |      29.25 | 2008-10-19 05:20:07 |
|   42481 |  47638 |     4573 |    6198 |    6479 |   1987 |       4 |      1140 |        171 | 2008-06-10 09:39:19 |
|   31494 |  34759 |    18895 |    4719 |    7753 |   2090 |       4 |      1024 |      153.6 | 2008-09-21 03:44:26 |
|  119388 | 136685 |    21815 |   41905 |    2071 |   1884 |       1 |       359 |      53.85 | 2008-02-27 10:43:10 |
|  166990 | 225037 |    18529 |    7628 |     746 |   2113 |       1 |      2009 |     301.35 | 2008-10-14 10:07:44 |
|   11146 |  12096 |    42685 |    6619 |    1876 |   2123 |       1 |        29 |       4.35 | 2008-10-24 06:23:54 |
|  148537 | 172056 |    15102 |   11787 |    6122 |   1923 |       2 |       480 |         72 | 2008-04-07 03:58:23 |
|   68945 |  78387 |     7359 |   18323 |    6636 |   1910 |       1 |       457 |      68.55 | 2008-03-25 08:31:03 |
|   52796 |  59576 |     9909 |   15102 |    7958 |   1951 |       1 |       479 |      71.85 | 2008-05-05 02:25:08 |
|   90684 | 103522 |    38052 |   21549 |    7384 |   2117 |       1 |       313 |      46.95 | 2008-10-18 05:43:11 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

Untuk mengambil sampel acak 10 item, tetapi pilih item secara proporsional dengan harganya, gunakan contoh berikut. Misalnya, item yang dua kali harga yang lain akan dua kali lebih mungkin muncul dalam hasil kueri.

```
SELECT * 
FROM sales
ORDER BY -LOG(RANDOM()) / pricepaid
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|  158340 | 208208 |    17082 |   42018 |    1211 |   2160 |       4 |      6852 |     1027.8 | 2008-11-30 12:21:43 |
|   53250 |  60069 |    12644 |    7066 |    7942 |   1838 |       4 |      1528 |      229.2 | 2008-01-12 11:24:56 |
|   22929 |  24938 |    47314 |    6503 |     179 |   2000 |       3 |       741 |     111.15 | 2008-06-23 08:04:50 |
|  164980 | 221181 |     1949 |   19670 |    1471 |   1906 |       1 |      1330 |      199.5 | 2008-03-21 07:59:51 |
|  159641 | 211179 |    44897 |   16652 |    7458 |   2128 |       1 |      1019 |     152.85 | 2008-10-29 02:02:15 |
|   73143 |  83439 |     5716 |    5727 |    7314 |   1903 |       1 |       248 |       37.2 | 2008-03-18 11:07:42 |
|   84778 |  96749 |    46608 |   32980 |    3883 |   1999 |       2 |       958 |      143.7 | 2008-06-22 12:13:31 |
|  171096 | 232929 |    43683 |    8536 |    8353 |   1870 |       1 |       929 |     139.35 | 2008-02-13 01:36:36 |
|   74212 |  84697 |    39809 |   15569 |    5525 |   2105 |       2 |       896 |      134.4 | 2008-10-06 11:47:50 |
|  158011 | 207556 |    25399 |   16881 |     232 |   2088 |       2 |      2526 |      378.9 | 2008-09-19 06:00:26 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

# Fungsi ROUND
<a name="r_ROUND"></a>

Fungsi ROUND membulatkan angka ke bilangan bulat atau desimal terdekat. 

Fungsi ROUND secara opsional dapat menyertakan argumen kedua sebagai `INTEGER` untuk menunjukkan jumlah tempat desimal untuk pembulatan, di kedua arah. Ketika Anda tidak memberikan argumen kedua, fungsi dibulatkan ke bilangan bulat terdekat. Ketika bilangan *bulat* argumen kedua ditentukan, fungsi membulatkan ke angka terdekat dengan presisi desimal *integer*. 

## Sintaksis
<a name="r_ROUND-synopsis"></a>

```
ROUND(number [ , integer ] )
```

## Argumen
<a name="r_ROUND-argument"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi angka. Itu bisa menjadi`DECIMAL`, `FLOAT8` atau `SUPER` tipe. Amazon Redshift dapat secara implisit mengonversi tipe data numerik lainnya. 

*bilangan bulat*  
(Opsional) An `INTEGER` yang menunjukkan jumlah tempat desimal untuk pembulatan di kedua arah. Tipe `SUPER` data tidak didukung untuk argumen ini.

## Jenis pengembalian
<a name="r_ROUND-return-type"></a>

ROUND mengembalikan tipe data numerik yang sama dengan *nomor* input. 

Ketika input adalah `SUPER` tipe, output mempertahankan tipe dinamis yang sama dengan input sementara tipe statis tetap `SUPER` tipe. Ketika tipe dinamis `SUPER` bukan angka, Amazon Redshift kembali. `NULL`

## Contoh
<a name="r_ROUND-examples"></a>

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk membulatkan komisi yang dibayarkan untuk transaksi tertentu ke nomor bulat terdekat, gunakan contoh berikut. 

```
SELECT commission, ROUND(commission)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    28 |
+------------+-------+
```

Untuk membulatkan komisi yang dibayarkan untuk transaksi tertentu ke tempat desimal pertama, gunakan contoh berikut. 

```
SELECT commission, ROUND(commission, 1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |  28.1 |
+------------+-------+
```

Untuk memperluas presisi dalam arah yang berlawanan seperti contoh sebelumnya, gunakan contoh berikut. 

```
SELECT commission, ROUND(commission, -1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    30 |
+------------+-------+
```

# Fungsi SIN
<a name="r_SIN"></a>

SIN adalah fungsi trigonometri yang mengembalikan sinus suatu angka. Nilai yang dikembalikan adalah antara `-1` dan`1`. 

## Sintaksis
<a name="r_SIN-synopsis"></a>

```
SIN(number)
```

## Pendapat
<a name="r_SIN-argument"></a>

 *jumlah*   
`DOUBLE PRECISION`Angka dalam radian. 

## Jenis pengembalian
<a name="r_SIN-return-type"></a>

`DOUBLE PRECISION` 

## Contoh
<a name="r_SIN-examples"></a>

Untuk mengembalikan sinus`-PI`, gunakan contoh berikut.

```
SELECT SIN(-PI());

+-------------------------+
|           sin           |
+-------------------------+
| -0.00000000000000012246 |
+-------------------------+
```

# Fungsi SIGN
<a name="r_SIGN"></a>

 Fungsi SIGN mengembalikan tanda (positif atau negatif) dari suatu angka. Hasil dari fungsi SIGN adalah `1` jika argumennya positif, `-1` jika argumennya negatif, atau `0` jika argumennya`0`. 

## Sintaksis
<a name="r_SIGN-synopsis"></a>

```
SIGN(number)
```

## Pendapat
<a name="r_SIGN-argument"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi angka. Itu bisa berupa`DECIMAL`,`FLOAT8`, atau `SUPER` tipe. Amazon Redshift dapat mengonversi tipe data lain sesuai aturan konversi implisit.

## Jenis pengembalian
<a name="r_SIGN-return-type"></a>

SIGN mengembalikan tipe data numerik yang sama dengan argumen masukan. Jika inputnya`DECIMAL`, outputnya adalah`DECIMAL(1,0)`. 

Ketika input adalah `SUPER` tipe, output mempertahankan tipe dinamis yang sama dengan input sementara tipe statis tetap `SUPER` tipe. Ketika tipe dinamis `SUPER` bukan angka, Amazon Redshift mengembalikan angka. `NULL`

## Contoh
<a name="r_SIGN-examples"></a>

Contoh berikut menunjukkan bahwa kolom `d` dalam tabel t2 memiliki `DOUBLE PRECISION` tipe karena inputnya `DOUBLE PRECISION` dan kolom `n` dalam tabel t2 memiliki `NUMERIC(1,0)` sebagai output sejak inputnya. `NUMERIC` 

```
CREATE TABLE t1(d DOUBLE PRECISION, n NUMERIC(12, 2));
INSERT INTO t1 VALUES (4.25, 4.25), (-4.25, -4.25);
CREATE TABLE t2 AS SELECT SIGN(d) AS d, SIGN(n) AS n FROM t1;
SELECT table_name, column_name, data_type FROM SVV_REDSHIFT_COLUMNS WHERE table_name='t1' OR table_name='t2';
 
+------------+-------------+-----------------------+
| table_name | column_name |       data_type       |
+------------+-------------+-----------------------+
| t1         | d           | double precision      |
| t1         | n           | numeric(12,2)         |
| t2         | d           | double precision      |
| t2         | n           | numeric(1,0)          |
| t1         | col1        | character varying(20) |
+------------+-------------+-----------------------+
```

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk menentukan tanda komisi yang dibayarkan untuk transaksi tertentu dari tabel PENJUALAN, gunakan contoh berikut. 

```
SELECT commission, SIGN(commission)
FROM sales WHERE salesid=10000;

+------------+------+
| commission | sign |
+------------+------+
|      28.05 |    1 |
+------------+------+
```

# Fungsi SQRT
<a name="r_SQRT"></a>

 Fungsi SQRT mengembalikan akar kuadrat dari nilai. `NUMERIC` Akar kuadrat adalah angka yang dikalikan dengan sendirinya untuk mendapatkan nilai yang diberikan.

## Sintaksis
<a name="r_SQRT-synopsis"></a>

```
SQRT(expression)
```

## Pendapat
<a name="r_SQRT-argument"></a>

 *ekspresi*   
Ekspresi harus memiliki`INTEGER`,`DECIMAL`, atau tipe `FLOAT` data, atau tipe data yang secara implisit mengkonversi ke tipe data tersebut. *Ekspresi* dapat mencakup fungsi. 

## Jenis pengembalian
<a name="r_SQRT-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_SQRT-examples"></a>

Untuk mengembalikan akar kuadrat dari 16, gunakan contoh berikut. 

```
SELECT SQRT(16);
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Untuk mengembalikan akar kuadrat string `16` menggunakan konversi tipe implisit, gunakan contoh berikut. 

```
SELECT SQRT('16');
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Untuk mengembalikan akar kuadrat 16.4 setelah menggunakan fungsi ROUND, gunakan contoh berikut. 

```
SELECT SQRT(ROUND(16.4));
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Untuk mengembalikan panjang radius ketika diberi luas lingkaran, gunakan contoh berikut. Ini menghitung radius dalam inci, misalnya, ketika diberi luas dalam inci persegi. Area dalam sampel adalah 20. 

```
SELECT SQRT(20/PI()) AS radius;
               
+--------------------+
|      radius        |
+--------------------+
| 2.5231325220201604 |
+--------------------+
```

Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengembalikan akar kuadrat untuk nilai KOMISI dari tabel PENJUALAN, gunakan contoh berikut. Kolom KOMISI adalah `DECIMAL` kolom. Contoh ini menunjukkan bagaimana Anda dapat menggunakan fungsi dalam kueri dengan logika kondisional yang lebih kompleks. 

```
SELECT SQRT(commission)
FROM sales WHERE salesid < 10 ORDER BY salesid;

+--------------------+
|        sqrt        |
+--------------------+
| 10.449880382090505 |
| 3.3763886032268267 |
|  7.245688373094719 |
|  5.123475382979799 |
|  4.806245936279167 |
|  7.687652437513028 |
| 10.871982339941507 |
| 5.4359911699707535 |
|   9.41541289588513 |
+--------------------+
```

Untuk mengembalikan akar kuadrat bulat untuk set nilai KOMISI yang sama, gunakan contoh berikut. 

```
SELECT ROUND(SQRT(commission))
FROM sales WHERE salesid < 10 ORDER BY salesid;

+-------+
| round |
+-------+
|    10 |
|     3 |
|     7 |
|     5 |
|     5 |
|     8 |
|    11 |
|     5 |
|     9 |
+-------+
```

# Fungsi TAN
<a name="r_TAN"></a>

TAN adalah fungsi trigonometri yang mengembalikan garis singgung suatu bilangan. Argumen masukan adalah angka (dalam radian). 

## Sintaksis
<a name="r_TAN-synopsis"></a>

```
TAN(number)
```

## Pendapat
<a name="r_TAN-argument"></a>

 *jumlah*   
Sebuah `DOUBLE PRECISION` angka. 

## Jenis pengembalian
<a name="r_TAN-return-type"></a>

`DOUBLE PRECISION`

## Contoh
<a name="r_TAN-examples"></a>

Untuk mengembalikan garis singgung nol, gunakan contoh berikut. 

```
SELECT TAN(0);

+-----+
| tan |
+-----+
|   0 |
+-----+
```

# Fungsi TRUNC
<a name="r_TRUNC"></a>

Fungsi TRUNC memotong angka ke bilangan bulat atau desimal sebelumnya. 

Fungsi TRUNC secara opsional dapat menyertakan argumen kedua sebagai `INTEGER` untuk menunjukkan jumlah tempat desimal untuk pembulatan, di kedua arah. Ketika Anda tidak memberikan argumen kedua, fungsi dibulatkan ke bilangan bulat terdekat. Ketika bilangan *bulat* argumen kedua ditentukan, fungsi membulatkan ke angka terdekat dengan presisi desimal *integer*. 

 Fungsi ini juga dapat memotong a `TIMESTAMP` dan mengembalikan a. `DATE` Untuk informasi selengkapnya, lihat [Fungsi TRUNC](r_TRUNC_date.md).

## Sintaks
<a name="r_TRUNC-synopsis"></a>

```
TRUNC(number [ , integer ])
```

## Argumen
<a name="r_TRUNC-arguments"></a>

 *jumlah*   
Angka atau ekspresi yang mengevaluasi angka. Itu bisa menjadi`DECIMAL`, `FLOAT8` atau `SUPER` tipe. Amazon Redshift dapat mengonversi tipe data lain sesuai aturan konversi implisit. 

 *bilangan bulat*  
(Opsional) An `INTEGER` yang menunjukkan jumlah tempat desimal presisi, di kedua arah. Jika tidak ada *bilangan bulat* yang disediakan, angka tersebut terpotong sebagai bilangan bulat; jika *bilangan bulat* ditentukan, angka tersebut dipotong ke tempat desimal yang ditentukan. Ini tidak didukung untuk tipe `SUPER` data.

## Jenis pengembalian
<a name="r_TRUNC-return-type"></a>

*TRUNC mengembalikan tipe data yang sama dengan nomor input.* 

Ketika input adalah `SUPER` tipe, output mempertahankan tipe dinamis yang sama dengan input sementara tipe statis tetap `SUPER` tipe. Ketika tipe dinamis `SUPER` bukan angka, Amazon Redshift kembali. `NULL`

## Contoh
<a name="r_TRUNC-examples"></a>

Beberapa contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk memotong komisi yang dibayarkan untuk transaksi penjualan tertentu, gunakan contoh berikut. 

```
SELECT commission, TRUNC(commission)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   111 |
+------------+-------+
```

Untuk memotong nilai komisi yang sama ke tempat desimal pertama, gunakan contoh berikut. 

```
SELECT commission, TRUNC(commission,1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 | 111.1 |
+------------+-------+
```

Untuk memotong komisi dengan nilai negatif untuk argumen kedua, gunakan contoh berikut. Perhatikan yang `111.15` dibulatkan ke bawah`110`. 

```
SELECT commission, TRUNC(commission,-1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   110 |
+------------+-------+
```

# Fungsi objek
<a name="Object_Functions"></a>

Berikut ini adalah fungsi objek SQL yang didukung Amazon Redshift untuk membuat dan mengoperasikan objek tipe SUPER:

**Topics**
+ [Fungsi GET\$1NUMBER\$1ATTRIBUTES](get_number_attributes.md)
+ [fungsi LOWER\$1ATTRIBUTE\$1NAMES](r_lower_attribute_names.md)
+ [Fungsi OBJECT](r_object_function.md)
+ [fungsi OBJECT\$1TRANSFORM](r_object_transform_function.md)
+ [Fungsi UPPER\$1ATTRIBUTE\$1NAMES](r_upper_attribute_names.md)

# Fungsi GET\$1NUMBER\$1ATTRIBUTES
<a name="get_number_attributes"></a>

Mengembalikan hitungan berapa banyak pasangan kunci-nilai ada di tingkat root dari objek kamus.

## Sintaksis
<a name="get_number_attributes-syntax"></a>

```
GET_NUMBER_ATTRIBUTES( super_expression )
```

## Argumen
<a name="get_number_attributes-arguments"></a>

 *super\$1ekspresi*   
Ekspresi SUPER dari bentuk kamus.

## Jenis pengembalian
<a name="get_number_attributes-return-type"></a>

Fungsi GET\$1NUMBER\$1ATTRIBUTES mengembalikan tipe INT.

## Catatan
<a name="get_number_attributes-note"></a>

Fungsi ini hanya menghitung atribut langsung dan tidak menyertakan pasangan dalam kamus bersarang.

## Contoh
<a name="get_number_attributes-example"></a>

Contoh berikut menunjukkan fungsi GET\$1NUMBER\$1ATTRIBUTES.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": 2, "c": 3}'));
 get_number_attributes
-----------------------
            3
(1 row)
```

Fungsi GET\$1NUMBER\$1ATTRIBUTES hanya beroperasi pada tingkat pertama kamus.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": {"c": 3}}'));
 get_number_attributes
-----------------------
            2
(1 row)
```

# fungsi LOWER\$1ATTRIBUTE\$1NAMES
<a name="r_lower_attribute_names"></a>

Mengonversi semua nama atribut yang berlaku dalam nilai SUPER ke huruf kecil, menggunakan rutin konversi kasus yang sama dengan. [Fungsi LOWER](r_LOWER.md) LOWER\$1ATTRIBUTE\$1NAMES mendukung karakter multibyte UTF-8, hingga maksimal empat byte per karakter. 

 Untuk mengonversi nama atribut SUPER menjadi huruf besar, gunakan. [Fungsi UPPER\$1ATTRIBUTE\$1NAMES](r_upper_attribute_names.md) 

## Sintaksis
<a name="r_lower_attribute_names-synopsis"></a>

```
LOWER_ATTRIBUTE_NAMES( super_expression )
```

## Argumen
<a name="r_lower_attribute_names-arguments"></a>

*super\$1ekspresi*  
Ekspresi SUPER.

## Jenis pengembalian
<a name="r_lower_attribute_names-return-type"></a>

`SUPER`

## Catatan penggunaan
<a name="r_lower_attribute_names-usage-notes"></a>

Di Amazon Redshift, pengidentifikasi kolom secara tradisional tidak peka huruf besar/kecil dan diubah menjadi huruf kecil. Jika Anda menyerap data dari format data case-sensitive seperti JSON, data tersebut mungkin berisi nama atribut mixed-case.

Pertimbangkan contoh berikut.

```
CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}');


SELECT s.AttributeName FROM t1;  

attributename
-------------
NULL


SELECT s."AttributeName" FROM t1;

attributename
-------------
NULL
```

Amazon Redshift mengembalikan NULL untuk kedua kueri. Untuk kueri`AttributeName`, gunakan LOWER\$1ATTRIBUTE\$1NAMES untuk mengonversi nama atribut data menjadi huruf kecil. Pertimbangkan contoh berikut.

```
CREATE TABLE t2 (s) AS SELECT LOWER_ATTRIBUTE_NAMES(s) FROM t1;


SELECT s.attributename FROM t2;

attributename
-------------
"Value"


SELECT s.AttributeName FROM t2; 

attributename
-------------
"Value"


SELECT s."attributename" FROM t2;

attributename
-------------
"Value"


SELECT s."AttributeName" FROM t2;

attributename
-------------
"Value"
```

Opsi terkait untuk bekerja dengan nama atribut objek kasus campuran adalah opsi `enable_case_sensitive_super_attribute` konfigurasi, yang memungkinkan Amazon Redshift mengenali kasus dalam nama atribut SUPER. Ini bisa menjadi solusi alternatif untuk menggunakan LOWER\$1ATTRIBUTE\$1NAMES. Untuk informasi lebih lanjut tentang`enable_case_sensitive_super_attribute`, kunjungi[enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md).

## Contoh
<a name="r_lower_attribute_names_examples"></a>

**Mengonversi nama atribut SUPER menjadi huruf kecil**  
Contoh berikut menggunakan LOWER\$1ATTRIBUTE\$1NAMES untuk mengonversi nama atribut dari semua nilai SUPER dalam tabel.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'A'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "B"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"C": "C"},
        "Subarray": [{"D": "D"}, "E"]
      }]'));

-- Convert all attribute names to lowercase.
UPDATE t SET s = LOWER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "A"
 3 | {"attributename":"B"}
 4 | [{"subobject":{"c":"C"},"subarray":[{"d":"D"}, "E"]}]
```

Amati bagaimana LOWER\$1ATTRIBUTE\$1NAMES berfungsi.
+  Nilai NULL dan nilai SUPER skalar seperti `"A"` tidak berubah. 
+  Dalam objek SUPER, semua nama atribut diubah menjadi huruf kecil, tetapi nilai atribut seperti `"B"` tetap tidak berubah. 
+  LOWER\$1ATTRIBUTE\$1NAMES berlaku secara rekursif ke objek SUPER apa pun yang bersarang di dalam array SUPER atau di dalam objek lain. 

**Menggunakan LOWER\$1ATTRIBUTE\$1NAMES pada objek SUPER dengan nama atribut duplikat**  
Jika objek SUPER berisi atribut yang namanya hanya berbeda dalam kasus mereka, LOWER\$1ATTRIBUTE\$1NAMES akan memunculkan kesalahan. Pertimbangkan contoh berikut.

```
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# Fungsi OBJECT
<a name="r_object_function"></a>

Menciptakan objek dari tipe data SUPER.

## Sintaksis
<a name="r_object_function-synopsis"></a>

```
OBJECT ( [ key1, value1 ], [ key2, value2 ...] )
```

## Argumen
<a name="r_object_function-arguments"></a>

*key1, key2*  
Ekspresi yang mengevaluasi string tipe VARCHAR.

*value1, value2*  
Ekspresi tipe data Amazon Redshift apa pun kecuali tipe datetime, karena Amazon Redshift tidak mentransmisikan tipe datetime ke tipe data SUPER. Untuk informasi selengkapnya tentang jenis datetime, lihat. [Jenis Datetime](r_Datetime_types.md)  
`value`ekspresi dalam suatu objek tidak harus dari tipe data yang sama.

## Jenis pengembalian
<a name="r_object_function-returns"></a>

`SUPER`

## Contoh
<a name="r_object_function_example"></a>

```
-- Creates an empty object.
select object();

object
--------
{}
(1 row)
            
-- Creates objects with different keys and values.
select object('a', 1, 'b', true, 'c', 3.14);

object
---------------------------
{"a":1,"b":true,"c":3.14}
(1 row)
               
select object('a', object('aa', 1), 'b', array(2,3), 'c', json_parse('{}'));
               
object
---------------------------------
{"a":{"aa":1},"b":[2,3],"c":{}}
(1 row)
            
-- Creates objects using columns from a table.
create table bar (k varchar, v super);
insert into bar values ('k1', json_parse('[1]')), ('k2', json_parse('{}'));
select object(k, v) from bar;

object
------------
{"k1":[1]}
{"k2":{}}
(2 rows)
            
-- Errors out because DATE type values can't be converted to SUPER type.
select object('k', '2008-12-31'::date);

ERROR:  OBJECT could not convert type date to super
```

# fungsi OBJECT\$1TRANSFORM
<a name="r_object_transform_function"></a>

Mengubah objek SUPER.

## Sintaksis
<a name="r_object_transform_function-synopsis"></a>

```
OBJECT_TRANSFORM(
  input
  [KEEP path1, ...]
  [SET
    path1, value1,
    ...,  ...
  ]
)
```

## Argumen
<a name="r_object_transform_function-arguments"></a>

*masukan*  
Ekspresi yang menyelesaikan objek tipe SUPER.

*JAGA*  
Semua nilai *jalur* yang ditentukan dalam klausa ini disimpan dan dibawa ke objek output.  
Klausul ini opsional.

*jalur1*, *jalan2*,...  
Literal string konstan, dalam format komponen jalur kutip ganda yang dibatasi oleh periode. Misalnya, `'"a"."b"."c"'` adalah nilai jalur yang valid. Ini berlaku untuk parameter jalur di kedua klausa KEEP dan SET.

*SET*  
*jalur* dan pasangan *nilai* untuk memodifikasi jalur keluar atau menambahkan jalur baru, dan mengatur nilai jalur itu di objek output.  
Klausul ini opsional.

*value1, *value2**,...  
Ekspresi yang menyelesaikan nilai tipe SUPER. Perhatikan bahwa tipe numerik, teks, dan Boolean dapat diselesaikan ke SUPER.

## Jenis pengembalian
<a name="r_object_transform_function-returns"></a>

`SUPER`

## Catatan penggunaan
<a name="r_object_transform_function-usage-notes"></a>

OBJECT\$1TRANSFORM mengembalikan objek tipe SUPER yang berisi nilai jalur dari *masukan* yang ditentukan dalam KEEP dan pasangan *jalur* dan *nilai* yang ditentukan dalam SET. 

*Jika KEEP dan SET kosong, OBJECT\$1TRANSFORM mengembalikan masukan.*

Jika *input* bukan *objek* tipe SUPER, OBJECT\$1TRANSFORM mengembalikan *masukan*, terlepas dari nilai KEEP atau SET.

## Contoh
<a name="r_object_transform_function-example"></a>

Contoh berikut mengubah objek SUPER menjadi objek SUPER lain.

```
CREATE TABLE employees (
    col_person SUPER
);

INSERT INTO employees
VALUES
    (
        json_parse('
            {
                "name": {
                    "first": "John",
                    "last": "Doe"
                },
                "age": 25,
                "ssn": "111-22-3333",
                "company": "Company Inc.",
                "country": "U.S."
            }
        ')
    ),
    (
        json_parse('
            {
                "name": {
                    "first": "Jane",
                    "last": "Appleseed"
                },
                "age": 34,
                "ssn": "444-55-7777",
                "company": "Organization Org.",
                "country": "Ukraine"
            }
        ')
    )
;

SELECT
    OBJECT_TRANSFORM(
        col_person
        KEEP
            '"name"."first"',
            '"age"',
            '"company"',
            '"country"'
        SET
            '"name"."first"', UPPER(col_person.name.first::TEXT),
            '"age"', col_person.age + 5,
            '"company"', 'Amazon'
    ) AS col_person_transformed
FROM employees;
    
--This result is formatted for ease of reading.
                  col_person_transformed
-------------------------------------------------------------
{
    "name": {
        "first": "JOHN"
    },
    "age": 30,
    "company": "Amazon",
    "country": "U.S."
}
{
    "name": {
        "first": "JANE"
    },
    "age": 39,
    "company": "Amazon",
    "country": "Ukraine"
}
```

# Fungsi UPPER\$1ATTRIBUTE\$1NAMES
<a name="r_upper_attribute_names"></a>

Mengonversi semua nama atribut yang berlaku dalam nilai SUPER ke huruf besar, menggunakan rutin konversi kasus yang sama seperti. [Fungsi UPPER](r_UPPER.md) UPPER\$1ATTRIBUTE\$1NAMES mendukung karakter multibyte UTF-8, hingga maksimal empat byte per karakter. 

 Untuk mengonversi nama atribut SUPER menjadi huruf kecil, gunakan. [fungsi LOWER\$1ATTRIBUTE\$1NAMES](r_lower_attribute_names.md) 

## Sintaksis
<a name="r_upper_attribute_names-synopsis"></a>

```
UPPER_ATTRIBUTE_NAMES( super_expression )
```

## Argumen
<a name="r_upper_attribute_names-arguments"></a>

*super\$1ekspresi*  
Ekspresi SUPER.

## Jenis pengembalian
<a name="r_upper_attribute_names-return-type"></a>

`SUPER`

## Contoh
<a name="r_upper_attribute_names_examples"></a>

**Mengonversi nama atribut SUPER ke huruf besar**  
Contoh berikut menggunakan UPPER\$1ATTRIBUTE\$1NAMES untuk mengonversi nama atribut dari semua nilai SUPER dalam tabel.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'a'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "b"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"c": "c"},
        "Subarray": [{"d": "d"}, "e"]
      }]'));

-- Convert all attribute names to uppercase.
UPDATE t SET s = UPPER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "a"
 3 | {"ATTRIBUTENAME":"B"}
 4 | [{"SUBOBJECT":{"C":"c"},"SUBARRAY":[{"D":"d"}, "e"]}]
```

Amati bagaimana UPPER\$1ATTRIBUTE\$1NAMES berfungsi.
+  Nilai NULL dan nilai SUPER skalar seperti `"a"` tidak berubah. 
+  Dalam objek SUPER, semua nama atribut diubah menjadi huruf besar, tetapi nilai atribut seperti `"b"` tetap tidak berubah. 
+  UPPER\$1ATTRIBUTE\$1NAMES berlaku secara rekursif ke objek SUPER apa pun yang bersarang di dalam array SUPER atau di dalam objek lain. 

**Menggunakan UPPER\$1ATTRIBUTE\$1NAMES pada objek SUPER dengan nama atribut duplikat**  
Jika objek SUPER berisi atribut yang namanya hanya berbeda dalam kasus mereka, UPPER\$1ATTRIBUTE\$1NAMES akan memunculkan kesalahan. Pertimbangkan contoh berikut.

```
SELECT UPPER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# Fungsi spasial
<a name="geospatial-functions"></a>

Hubungan antara objek geometri didasarkan pada Model Persimpangan Sembilan Diperpanjang Dimensi (DE-9IM). Model ini mendefinisikan predikat seperti sama, berisi, dan sampul. Untuk informasi lebih lanjut tentang definisi hubungan spasial, lihat [DE-9IM](https://en.wikipedia.org/wiki/DE-9IM) di Wikipedia.

Untuk informasi selengkapnya tentang cara menggunakan data spasial dengan Amazon Redshift, lihat. [Menanyakan data spasial di Amazon Redshift](geospatial-overview.md)

Amazon Redshift menyediakan fungsi spasial yang bekerja dengan `GEOMETRY` dan tipe `GEOGRAPHY` data. Berikut ini mencantumkan fungsi yang mendukung tipe `GEOGRAPHY` data:
+ [ST\$1daerah](ST_Area-function.md)
+ [ST\$1ASEWKT](ST_AsEWKT-function.md)
+ [ST\$1 JSON AsGeo](ST_AsGeoJSON-function.md)
+ [ST\$1 AsHex EWKB](ST_AsHexEWKB-function.md)
+ [ST\$1 AsHex WKB](ST_AsHexWKB-function.md)
+ [ST\$1 AsText](ST_AsText-function.md)
+ [ST\$1Jarak](ST_Distance-function.md)
+ [ST\$1 GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1 GeogFrom WKB](ST_GeogFromWKB-function.md)
+ [ST\$1length](ST_Length-function.md)
+ [ST\$1 NPoints](ST_NPoints-function.md)
+ [ST\$1perimeter](ST_Perimeter-function.md)

Berikut ini mencantumkan set lengkap fungsi spasial yang didukung oleh Amazon Redshift. 

**Topics**
+ [Tambahkan BBox](AddBBox-function.md)
+ [Jatuhkan BBox](DropBBox-function.md)
+ [GeometryType](GeometryType-function.md)
+ [H3\$1Batas](H3_Boundary-function.md)
+ [H3\$1Pusat](H3_Center-function.md)
+ [H3\$1 FromLongLat](H3_FromLongLat-function.md)
+ [H3\$1 FromPoint](H3_FromPoint-function.md)
+ [H3\$1 IsValid](H3_IsValid-function.md)
+ [H3\$1Polyfill](H3_Polyfill-function.md)
+ [Resolusi H3\$1](H3_Resolution-function.md)
+ [H3\$1 ToChildren](H3_ToChildren-function.md)
+ [H3\$1 ToParent](H3_ToParent-function.md)
+ [ST\$1 AddPoint](ST_AddPoint-function.md)
+ [ST\$1Angle](ST_Angle-function.md)
+ [ST\$1daerah](ST_Area-function.md)
+ [ST\$1 AsBinary](ST_AsBinary-function.md)
+ [St\$1AsewkB](ST_AsEWKB-function.md)
+ [ST\$1ASEWKT](ST_AsEWKT-function.md)
+ [ST\$1 JSON AsGeo](ST_AsGeoJSON-function.md)
+ [ST\$1 AsHex WKB](ST_AsHexWKB-function.md)
+ [ST\$1 AsHex EWKB](ST_AsHexEWKB-function.md)
+ [ST\$1 AsText](ST_AsText-function.md)
+ [St\$1azimuth](ST_Azimuth-function.md)
+ [ST\$1Batas](ST_Boundary-function.md)
+ [ST\$1Buffer](ST_Buffer-function.md)
+ [ST\$1Centroid](ST_Centroid-function.md)
+ [ST\$1Kumpulkan](ST_Collect-function.md)
+ [ST\$1berisi](ST_Contains-function.md)
+ [ST\$1 ContainsProperly](ST_ContainsProperly-function.md)
+ [ST\$1 ConvexHull](ST_ConvexHull-function.md)
+ [ST\$1 CoveredBy](ST_CoveredBy-function.md)
+ [ST\$1meliputi](ST_Covers-function.md)
+ [ST\$1salib](ST_Crosses-function.md)
+ [Dimensi ST\$1](ST_Dimension-function.md)
+ [ST\$1terputusnya](ST_Disjoint-function.md)
+ [ST\$1Jarak](ST_Distance-function.md)
+ [ST\$1 DistanceSphere](ST_DistanceSphere-function.md)
+ [ST\$1 DWithin](ST_DWithin-function.md)
+ [ST\$1 EndPoint](ST_EndPoint-function.md)
+ [ST\$1amplop](ST_Envelope-function.md)
+ [ST\$1sama](ST_Equals-function.md)
+ [ST\$1 ExteriorRing](ST_ExteriorRing-function.md)
+ [ST\$1Force2D](ST_Force2D-function.md)
+ [ST\$1Force3D](ST_Force3D-function.md)
+ [ST\$1Force3dm](ST_Force3DM-function.md)
+ [ST\$1Force3dz](ST_Force3DZ-function.md)
+ [ST\$1Force4D](ST_Force4D-function.md)
+ [ST\$1 GeoHash](ST_GeoHash-function.md)
+ [ST\$1 GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1 GeogFrom WKB](ST_GeogFromWKB-function.md)
+ [ST\$1Geometryn](ST_GeometryN-function.md)
+ [ST\$1 GeometryType](ST_GeometryType-function.md)
+ [ST\$1 GeomFrom EWKB](ST_GeomFromEWKB-function.md)
+ [ST\$1 GeomFrom EWKT](ST_GeomFromEWKT-function.md)
+ [ST\$1 GeomFromGeoHash](ST_GeomFromGeoHash-function.md)
+ [ST\$1 JSON GeomFromGeo](ST_GeomFromGeoJSON-function.md)
+ [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md)
+ [ST\$1 GeomFromText](ST_GeomFromText-function.md)
+ [ST\$1 GeomFrom WKB](ST_GeomFromWKB-function.md)
+ [ST\$1 GeoSquare](ST_GeoSquare-function.md)
+ [ST\$1 N InteriorRing](ST_InteriorRingN-function.md)
+ [ST\$1berpotongan](ST_Intersects-function.md)
+ [Persimpangan ST\$1](ST_Intersection-function.md)
+ [ST\$1 CCW IsPolygon](ST_IsPolygonCCW-function.md)
+ [ST\$1 CW IsPolygon](ST_IsPolygonCW-function.md)
+ [ST\$1 IsClosed](ST_IsClosed-function.md)
+ [ST\$1 IsCollection](ST_IsCollection-function.md)
+ [ST\$1 IsEmpty](ST_IsEmpty-function.md)
+ [ST\$1 IsRing](ST_IsRing-function.md)
+ [ST\$1 IsSimple](ST_IsSimple-function.md)
+ [ST\$1 IsValid](ST_IsValid-function.md)
+ [ST\$1length](ST_Length-function.md)
+ [ST\$1 LengthSphere](ST_LengthSphere-function.md)
+ [ST\$1Panjang2D](ST_Length2D-function.md)
+ [ST\$1 LineFromMultiPoint](ST_LineFromMultiPoint-function.md)
+ [ST\$1 LineInterpolatePoint](ST_LineInterpolatePoint-function.md)
+ [ST\$1M](ST_M-function.md)
+ [ST\$1 MakeEnvelope](ST_MakeEnvelope-function.md)
+ [ST\$1 MakeLine](ST_MakeLine-function.md)
+ [ST\$1 MakePoint](ST_MakePoint-function.md)
+ [ST\$1 MakePolygon](ST_MakePolygon-function.md)
+ [ST\$1 MemSize](ST_MemSize-function.md)
+ [ST\$1 MMax](ST_MMax-function.md)
+ [ST\$1 MMin](ST_MMin-function.md)
+ [ST\$1Multi](ST_Multi-function.md)
+ [ST\$1 NDims](ST_NDims-function.md)
+ [ST\$1 NPoints](ST_NPoints-function.md)
+ [ST\$1 NRings](ST_NRings-function.md)
+ [ST\$1 NumGeometries](ST_NumGeometries-function.md)
+ [ST\$1 NumInteriorRings](ST_NumInteriorRings-function.md)
+ [ST\$1 NumPoints](ST_NumPoints-function.md)
+ [ST\$1perimeter](ST_Perimeter-function.md)
+ [ST\$1Perimeter2D](ST_Perimeter2D-function.md)
+ [ST\$1titik](ST_Point-function.md)
+ [st\$1pointn](ST_PointN-function.md)
+ [ST\$1poin](ST_Points-function.md)
+ [ST\$1Poligon](ST_Polygon-function.md)
+ [ST\$1 RemovePoint](ST_RemovePoint-function.md)
+ [ST\$1terbalik](ST_Reverse-function.md)
+ [ST\$1 SetPoint](ST_SetPoint-function.md)
+ [ST\$1Setsrid](ST_SetSRID-function.md)
+ [ST\$1menyederhanakan](ST_Simplify-function.md)
+ [ST\$1SRID](ST_SRID-function.md)
+ [ST\$1 StartPoint](ST_StartPoint-function.md)
+ [ST\$1Touches](ST_Touches-function.md)
+ [ST\$1Transform](ST_Transform-function.md)
+ [ST\$1Union](ST_Union-function.md)
+ [ST\$1dalam](ST_Within-function.md)
+ [ST\$1X](ST_X-function.md)
+ [ST\$1 XMax](ST_XMax-function.md)
+ [ST\$1 XMin](ST_XMin-function.md)
+ [ST\$1Y](ST_Y-function.md)
+ [ST\$1 YMax](ST_YMax-function.md)
+ [ST\$1 YMin](ST_YMin-function.md)
+ [ST\$1Z](ST_Z-function.md)
+ [ST\$1 ZMax](ST_ZMax-function.md)
+ [ST\$1 ZMin](ST_ZMin-function.md)
+ [Mendukung BBox](SupportsBBox-function.md)

# Tambahkan BBox
<a name="AddBBox-function"></a>

Add BBox mengembalikan salinan geometri input yang mendukung pengkodean dengan kotak pembatas yang telah dihitung sebelumnya. Untuk informasi selengkapnya tentang dukungan untuk kotak pembatas, lihat[Kotak pembatas](spatial-terminology.md#spatial-terminology-bounding-box).

## Sintaksis
<a name="AddBBox-function-syntax"></a>

```
AddBBox(geom)
```

## Argumen
<a name="AddBBox-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="AddBBox-function-return"></a>

`GEOMETRY`

Jika *geom* adalah null, maka null dikembalikan.

## Contoh
<a name="AddBBox-function-examples"></a>

SQL berikut mengembalikan salinan geometri poligon input yang mendukung dikodekan dengan kotak pembatas. 

```
SELECT ST_AsText(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# Jatuhkan BBox
<a name="DropBBox-function"></a>

Drop BBox mengembalikan salinan geometri input yang tidak mendukung pengkodean dengan kotak pembatas yang telah dihitung sebelumnya. Untuk informasi selengkapnya tentang dukungan untuk kotak pembatas, lihat[Kotak pembatas](spatial-terminology.md#spatial-terminology-bounding-box).

## Sintaksis
<a name="DropBBox-function-syntax"></a>

```
DropBBox(geom)
```

## Argumen
<a name="DropBBox-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="DropBBox-function-return"></a>

`GEOMETRY`

Jika *geom* adalah null, maka null dikembalikan.

## Contoh
<a name="DropBBox-function-examples"></a>

SQL berikut mengembalikan salinan geometri poligon input yang tidak mendukung dikodekan dengan kotak pembatas. 

```
SELECT ST_AsText(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# GeometryType
<a name="GeometryType-function"></a>

GeometryType mengembalikan subtipe dari geometri masukan sebagai string. 

## Sintaksis
<a name="GeometryType-function-syntax"></a>

```
GeometryType(geom)
```

## Argumen
<a name="GeometryType-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="GeometryType-function-return"></a>

`VARCHAR`mewakili subtipe *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Nilai string yang dikembalikan untuk geometri 2D, 3DZ, 4D | Nilai string yang dikembalikan untuk geometri 3DM | Subtipe geometri | 
| --- | --- | --- | 
| `POINT` | `POINTM` | Dikembalikan jika *geom* adalah subtipe `POINT`  | 
| `LINESTRING` | `LINESTRINGM` | Dikembalikan jika *geom* adalah subtipe `LINESTRING`  | 
| `POLYGON` | `POLYGONM` | Dikembalikan jika *geom* adalah subtipe `POLYGON`  | 
| `MULTIPOINT` | `MULTIPOINTM` | Dikembalikan jika *geom* adalah subtipe `MULTIPOINT`  | 
| `MULTILINESTRING` | `MULTILINESTRINGM` | Dikembalikan jika *geom* adalah subtipe `MULTILINESTRING`  | 
| `MULTIPOLYGON` | `MULTIPOLYGONM` | Dikembalikan jika *geom* adalah subtipe `MULTIPOLYGON`  | 
| `GEOMETRYCOLLECTION` | `GEOMETRYCOLLECTIONM` | Dikembalikan jika *geom* adalah subtipe `GEOMETRYCOLLECTION`  | 

## Contoh
<a name="GeometryType-function-examples"></a>

SQL berikut mengkonversi teks terkenal (WKT) representasi poligon dan mengembalikan subtipe sebagai string. `GEOMETRY`

```
SELECT GeometryType(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
geometrytype
-------------
 POLYGON
```

# H3\$1Batas
<a name="H3_Boundary-function"></a>

H3\$1Boundary mengembalikan batas ID sel H3 dari indeks input. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_Boundary-function-syntax"></a>

```
H3_Boundary(index)
```

## Argumen
<a name="H3_Boundary-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau `VARCHAR` yang mewakili indeks sel H3. Atau, ekspresi yang mengevaluasi salah satu tipe data ini.

## Jenis pengembalian
<a name="H3_Boundary-function-return"></a>

`POLYGON`— mewakili poligon dengan pengidentifikasi sistem referensi spasial (SRID) dari. `0`

Jika *indeks* tidak valid, maka kesalahan dikembalikan.

## Contoh
<a name="H3_Boundary-function-examples"></a>

SQL berikut input a `VARCHAR` yang mewakili indeks sel H3, dan mengembalikan POLYGON dengan SRID 0 yang mewakili batas sel H3 input. Output dari H3\$1Boundary adalah input ke ST\$1AWEWKT untuk ditampilkan dalam representasi teks terkenal (EWKT) yang diperluas.

```
SELECT ST_AsEWKT(H3_Boundary('8025fffffffffff'));
```

```
 st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

SQL berikut input a `BIGINT` yang mewakili indeks sel H3, dan mengembalikan POLYGON dengan SRID 0 yang mewakili batas sel H3 input. Output dari H3\$1Boundary adalah input ke ST\$1AWEWKT untuk ditampilkan dalam representasi teks terkenal (EWKT) yang diperluas.

```
SELECT ST_AsEWKT(H3_Boundary(577129255373111295)); 
```

```
 st_asewkt
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

# H3\$1Pusat
<a name="H3_Center-function"></a>

H3\$1Center mengembalikan centroid dari ID sel H3 dari indeks input. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_Center-function-syntax"></a>

```
H3_Center(index)
```

## Argumen
<a name="H3_Center-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau `VARCHAR` yang mewakili indeks sel H3. Atau, ekspresi yang mengevaluasi salah satu tipe data ini.

## Jenis pengembalian
<a name="H3_Center-function-return"></a>

`POINT`— mewakili centroid sel H3 dengan pengidentifikasi sistem referensi spasial (SRID) dari. `0`

Jika *indeks* tidak valid, maka kesalahan dikembalikan.

## Contoh
<a name="H3_Center-function-examples"></a>

SQL berikut input a `VARCHAR` yang mewakili indeks sel H3, dan mengembalikan POINT dengan SRID dari 0 yang mewakili centroid dari sel H3 input.

```
SELECT H3_Center('8025fffffffffff');
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

SQL berikut input a `BIGINT` yang mewakili indeks sel H3, dan mengembalikan POINT dengan SRID 0 yang mewakili centroid dari sel H3 input.

```
SELECT H3_Center(577129255373111295);
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

SQL berikut input a `VARCHAR` yang mewakili indeks sel H3, dan mengembalikan POINT dengan SRID 0 yang mewakili centroid dari sel H3 input. Output dari H3\$1Center adalah input ke ST\$1AWEWKT untuk ditampilkan dalam representasi teks terkenal (EWKT) yang diperluas.

```
SELECT ST_AsEWKT(H3_Center('8075fffffffffff'));
```

```
 st_asewkt
-----------------------------------------
POINT(-5.24539029677733 2.30088211162675)
```

# H3\$1 FromLongLat
<a name="H3_FromLongLat-function"></a>

H3\$1 FromLongLat mengembalikan ID sel H3 yang sesuai dari bujur input, garis lintang, dan resolusi. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_FromLongLat-function-syntax"></a>

```
H3_FromLongLat(longitude, latitude, resolution)
```

## Argumen
<a name="H3_FromLongLat-function-arguments"></a>

 *bujur*   
Nilai tipe data `DOUBLE PRECISION` atau ekspresi yang mengevaluasi `DOUBLE PRECISION` tipe.

 *garis lintang*   
Nilai tipe data `DOUBLE PRECISION` atau ekspresi yang mengevaluasi `DOUBLE PRECISION` tipe.

 *resolusi*   
Nilai tipe data `INTEGER` atau ekspresi yang mengevaluasi `INTEGER` tipe. Nilai mewakili resolusi sistem grid H3. Nilai harus berupa bilangan bulat antara 0-15, inklusif. Dengan `0` menjadi yang paling kasar dan `15` menjadi yang terbaik. 

## Jenis pengembalian
<a name="H3_FromLongLat-function-return"></a>

`BIGINT`— mewakili ID sel H3.

Jika *resolusi* di luar batas, maka kesalahan dikembalikan.

## Contoh
<a name="H3_FromLongLat-function-examples"></a>

SQL berikut mengembalikan ID sel H3 dari bujur`0`, lintang`0`, dan resolusi. `10` 

```
SELECT H3_FromLongLat(0, 0, 10);
```

```
 h3_fromlonglat
-------------------
 623560421467684863
```

# H3\$1 FromPoint
<a name="H3_FromPoint-function"></a>

H3\$1 FromPoint mengembalikan ID sel H3 yang sesuai dari titik geometri input dan resolusi. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_FromPoint-function-syntax"></a>

```
H3_FromPoint(geom, resolution)
```

## Argumen
<a name="H3_FromPoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Geom* itu pasti a. `POINT`

 *resolusi*   
Nilai tipe data `INTEGER` atau ekspresi yang mengevaluasi `INTEGER` tipe. Nilai mewakili resolusi sistem grid H3. Nilai harus berupa bilangan bulat antara 0-15, inklusif. Dengan `0` menjadi yang paling kasar dan `15` menjadi yang terbaik. 

## Jenis pengembalian
<a name="H3_FromPoint-function-return"></a>

`BIGINT`— mewakili ID sel H3.

Jika *geom* bukan a`POINT`, maka kesalahan dikembalikan.

Jika *resolusi* di luar batas, maka kesalahan dikembalikan.

Jika *geom* kosong, maka NULL dikembalikan.

## Contoh
<a name="H3_FromPoint-function-examples"></a>

SQL berikut mengembalikan ID sel H3 dari titik`0,0`, dan resolusi. `10` 

```
SELECT H3_FromPoint(ST_GeomFromText('POINT(0 0)'), 10);
```

```
 h3_frompoint
-------------------
 623560421467684863
```

# H3\$1 IsValid
<a name="H3_IsValid-function"></a>

H3\$1 IsValid mengembalikan true jika input mewakili ID sel H3, jika tidak palsu. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_IsValid-function-syntax"></a>

```
H3_IsValid(index)
```

## Argumen
<a name="H3_IsValid-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau`VARCHAR`, atau ekspresi yang mengevaluasi salah satu tipe data ini.

## Jenis pengembalian
<a name="H3_IsValid-function-return"></a>

`BOOLEAN`— true jika input mewakili ID sel H3 yang valid, false sebaliknya.

Jika *indeks* adalah NULL, maka NULL dikembalikan.

## Contoh
<a name="H3_IsValid-function-examples"></a>

SQL berikut input VARCHAR yang mewakili ID sel H3, dan mengembalikan true.

```
SELECT H3_IsValid('8025fffffffffff');
```

```
 h3_isvalid
------------
 true
```

SQL berikut input BIGINT yang mewakili ID sel H3, dan mengembalikan true.

```
SELECT H3_IsValid(577129255373111295);
```

```
 h3_isvalid
------------
 true
```

SQL berikut memasukkan ID sel H3 yang tidak valid dan mengembalikan false.

```
SELECT H3_IsValid('');
```

```
 h3_isvalid
------------
 false
```

# H3\$1Polyfill
<a name="H3_Polyfill-function"></a>

H3\$1Polyfill mengembalikan sel H3 yang sesuai IDs yang sesuai dengan segi enam dan segi lima yang terkandung dalam poligon input dari resolusi yang diberikan. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_Polyfill-function-syntax"></a>

```
H3_Polyfill(geom, resolution)
```

## Argumen
<a name="H3_Polyfill-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Geom* itu pasti a. `POLYGON`

 *resolusi*   
Nilai tipe data `INTEGER` atau ekspresi yang mengevaluasi `INTEGER` tipe. Nilai mewakili resolusi sistem grid H3. Nilai harus berupa bilangan bulat antara 0-15, inklusif. Dengan `0` menjadi yang paling kasar dan `15` menjadi yang terbaik. 

## Jenis pengembalian
<a name="H3_Polyfill-function-return"></a>

`SUPER`— mewakili daftar sel IDs H3.

Jika *geom* bukan a`POLYGON`, maka kesalahan dikembalikan.

Jika *resolusi* di luar batas, maka kesalahan dikembalikan.

Jika *geom* kosong, maka NULL dikembalikan.

## Contoh
<a name="H3_Polyfill-function-examples"></a>

SQL berikut mengembalikan array tipe data SUPER sel H3 IDs dari poligon dan resolusi. `4` 

```
SELECT H3_Polyfill(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'), 4);
```

```
 h3_polyfill
----------------------------------------------------------------------------------------------------------------------------------------------------------
 [596538848238895103,596538805289222143,596538856828829695,596538813879156735,596537920525959167,596538685030137855,596538693620072447,596538839648960511]
```

# Resolusi H3\$1
<a name="H3_Resolution-function"></a>

H3\$1Resolution mengembalikan resolusi ID sel H3 dari indeks input. Resolusi adalah bilangan bulat dari 0 (paling kasar) hingga 15 (terbaik). Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_Resolution-function-syntax"></a>

```
H3_Resolution(index)
```

## Argumen
<a name="H3_Resolution-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau `VARCHAR` yang mewakili indeks sel H3, atau ekspresi yang mengevaluasi salah satu tipe data ini.

## Jenis pengembalian
<a name="H3_Resolution-function-return"></a>

`INTEGER`— mewakili resolusi input ID sel H3.

Jika *indeks* adalah NULL, maka NULL dikembalikan.

Jika *indeks* tidak valid, maka kesalahan dikembalikan.

## Contoh
<a name="H3_Resolution-function-examples"></a>

SQL berikut memasukkan VARCHAR yang mewakili indeks sel H3, dan mengembalikan INTEGER yang mewakili resolusi sel H3 input.

```
SELECT H3_Resolution('8025fffffffffff');
```

```
 h3_resolution
---------------
 0
```

SQL berikut memasukkan BIGINT yang mewakili indeks sel H3, dan mengembalikan INTEGER yang mewakili resolusi sel H3 input.

```
SELECT H3_Resolution(614553222213795839);
```

```
 h3_resolution
---------------
 8
```

# H3\$1 ToChildren
<a name="H3_ToChildren-function"></a>

H3\$1 ToChildren mengembalikan daftar sel H3 anak IDs pada resolusi tertentu untuk indeks H3 tertentu. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_ToChildren-function-syntax"></a>

```
H3_ToChildren(index, resolution)
```

## Argumen
<a name="H3_ToChildren-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau `VARCHAR` yang mewakili indeks sel H3, atau ekspresi yang mengevaluasi salah satu tipe data ini.

 *resolusi*   
Nilai tipe data `INTEGER` atau ekspresi yang mengevaluasi `INTEGER` tipe. Nilai mewakili resolusi sel anak-anak IDs. Nilai harus berupa bilangan bulat antara resolusi *indeks* input dan 15, inklusif.

## Jenis pengembalian
<a name="H3_ToChildren-function-return"></a>

`SUPER`— mewakili daftar sel IDs H3.

Jika *indeks* atau *resolusi* adalah NULL, maka NULL dikembalikan.

Jika *indeks* tidak valid, maka kesalahan dikembalikan.

Jika *resolusi* tidak antara resolusi *indeks* dan 15, inklusif, maka kesalahan dikembalikan.

Jika ukuran output melebihi batas ukuran SUPER maksimum, maka kesalahan dikembalikan.

## Contoh
<a name="H3_ToChildren-function-examples"></a>

SQL berikut memasukkan VARCHAR yang mewakili indeks sel H3, dan INTEGER yang mewakili resolusi yang diinginkan dari semua anak, dan mengembalikan array SUPER yang berisi anak-anak pada resolusi 6.

```
SELECT H3_ToChildren('85283473fffffff', 6);
```

```
 h3_tochildren                                                
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

SQL berikut memasukkan BIGINT yang mewakili indeks sel H3, dan INTEGER yang mewakili resolusi yang diinginkan dari semua anak, dan mengembalikan array SUPER yang berisi anak-anak pada resolusi 6.

```
SELECT H3_ToChildren(599686042433355775, 6);
```

```
 h3_tochildren                                              
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

Catatan: Perbedaan 7 atau kurang antara *resolusi* dan resolusi *indeks* aman.

Contoh berikut menunjukkan solusi untuk kueri yang melebihi batas ukuran SUPER. Ketika perbedaan resolusi antara indeks input H3 dan resolusi anak yang diinginkan terlalu besar (lebih besar dari 7). Prosedur ini memecahkan masalah dengan memperluas anak-anak secara bertahap dalam langkah-langkah yang lebih kecil (maksimum 5 tingkat resolusi sekaligus) dan menyimpan hasil akhir dalam tabel yang dibuat pengguna.

```
CREATE OR REPLACE PROCEDURE generate_h3_children()
LANGUAGE plpgsql
AS $$
BEGIN
    -- Drop and create h3_children table that will contain the results
    DROP TABLE IF EXISTS h3_children;
    CREATE TABLE h3_children (
        h3_index BIGINT,
        child_res INTEGER,
        children SUPER
    );

    -- Create temporary table for steps
    DROP TABLE IF EXISTS h3_steps;
    CREATE TABLE h3_steps (
        h3_index BIGINT,
        current_res INTEGER,
        target_res INTEGER,
        h3_array SUPER
    );

    -- Initial insert into h3_steps
    INSERT INTO h3_steps
    SELECT h3_index, H3_Resolution(h3_index), child_res, ARRAY(h3_index)
    FROM h3_indexes; -- Insert from your table with h3_index and child_res as columns

    -- Loop until we reach target resolution
    -- We expect at most 3 iterations considering that we can start at resolution
    -- 0 and target/child resolution equal to 15 (0 -> 5 -> 10 -> 15)
    WHILE EXISTS (
        SELECT 1
        FROM h3_steps h
        GROUP BY h3_index, target_res
        HAVING MAX(current_res) < target_res
    ) LOOP
        -- Populate the h3_steps table with the tables that need to
        -- reach closer to the target res
        INSERT INTO h3_steps
        SELECT
            h.h3_index,
            LEAST(h.current_res + 5, h.target_res), -- Do not exceed target res
            h.target_res,
            -- Take the children of the child cell at resolution current_res of the
            -- h3_index
            H3_ToChildren(c.child::BIGINT, LEAST(h.current_res + 5, h.target_res))
        FROM h3_steps h, UNNEST(h.h3_array) AS c(child)
        WHERE h.current_res < h.target_res
        AND h.current_res = (SELECT MAX(current_res)
                           FROM h3_steps
                           WHERE h3_index = h.h3_index
        );
    END LOOP;

    -- Store final results
    INSERT INTO h3_children
    SELECT h3_index AS h3_index, target_res AS child_res, h3_array AS children
    FROM h3_steps
    WHERE current_res = target_res;
END;
$$;

-- Create the source table for H3_ToChildren queries
CREATE TABLE h3_indexes (
    h3_index BIGINT,
    child_res INTEGER,
    PRIMARY KEY (h3_index, child_res)
);
INSERT INTO h3_indexes (h3_index, child_res)
VALUES (x'8001fffffffffff'::BIGINT, 11);

-- Execute the procedure
CALL generate_h3_children();

-- View results
SELECT * FROM h3_children;
```

# H3\$1 ToParent
<a name="H3_ToParent-function"></a>

H3\$1 ToParent mengembalikan ID sel H3 induk pada resolusi induk tertentu untuk indeks H3 tertentu. Untuk informasi tentang pengindeksan H3, lihat. [H3](spatial-terminology.md#spatial-terminology-h3)

## Sintaksis
<a name="H3_ToParent-function-syntax"></a>

```
H3_ToParent(index, resolution)
```

## Argumen
<a name="H3_ToParent-function-arguments"></a>

 *indeks*   
Nilai tipe data `BIGINT` atau `VARCHAR` yang mewakili indeks sel H3, atau ekspresi yang mengevaluasi salah satu tipe data ini.

 *resolusi*   
Nilai tipe data `INTEGER` atau ekspresi yang mengevaluasi `INTEGER` tipe. Nilai mewakili resolusi ID sel induk. Nilai harus antara 0 dan resolusi *indeks*, inklusif.

## Jenis pengembalian
<a name="H3_ToParent-function-return"></a>

`BIGINT`— mewakili ID sel H3 orang tua.

Jika *indeks* atau *resolusi* adalah NULL, maka NULL dikembalikan.

Jika *indeks* tidak valid, maka kesalahan dikembalikan.

Jika *resolusi* kurang dari 0 atau lebih besar dari resolusi *indeks*, maka kesalahan dikembalikan.

## Contoh
<a name="H3_ToParent-function-examples"></a>

SQL berikut memasukkan VARCHAR yang mewakili indeks sel H3, dan INTEGER yang mewakili resolusi yang diinginkan dari induk yang diinginkan, dan mengembalikan BIGINT yang mewakili induk pada resolusi 0 dari sel H3 input.

```
SELECT H3_ToParent('85283473fffffff', 0);
```

```
 h3_toparent
--------------------
 577199624117288959
```

SQL berikut memasukkan BIGINT yang mewakili indeks sel H3, dan INTEGER yang mewakili resolusi yang diinginkan dari induk yang diinginkan, dan mengembalikan BIGINT yang mewakili induk pada resolusi 0 dari sel H3 input.

```
SELECT H3_ToParent(646078419604526808, 8);
```

```
 h3_toparent
--------------------
 614553222213795839
```

# ST\$1 AddPoint
<a name="ST_AddPoint-function"></a>

ST\$1 AddPoint mengembalikan geometri linestring yang sama dengan geometri input dengan titik ditambahkan. Jika indeks disediakan, maka titik ditambahkan pada posisi indeks. Jika indeks -1 atau tidak disediakan, maka titik ditambahkan ke linestring. 

Indeks ini berbasis nol. Pengidentifikasi sistem referensi spasial (SRID) dari hasilnya sama dengan geometri input. 

Dimensi geometri yang dikembalikan sama dengan nilai *geom1*. *Jika *geom1* dan *geom2* memiliki dimensi yang berbeda, *geom2 diproyeksikan ke dimensi geom1*.*

## Sintaksis
<a name="ST_AddPoint-function-syntax"></a>

```
ST_AddPoint(geom1, geom2)
```

```
ST_AddPoint(geom1, geom2, index)
```

## Argumen
<a name="ST_AddPoint-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` Intinya bisa menjadi titik kosong.

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili posisi indeks berbasis nol. 

## Jenis pengembalian
<a name="ST_AddPoint-function-return"></a>

`GEOMETRY` 

Jika *geom1*, *geom2*, atau *indeks* adalah nol, maka null dikembalikan. 

Jika *geom2* adalah titik kosong, maka salinan *geom1* dikembalikan. 

Jika *geom1* bukan a`LINESTRING`, maka kesalahan dikembalikan. 

Jika *geom2* bukan a`POINT`, maka kesalahan dikembalikan. 

Jika *indeks* berada di luar jangkauan, maka kesalahan dikembalikan. Nilai yang valid untuk posisi indeks adalah -1 atau nilai antara 0 dan`ST_NumPoints(geom1)`. 

## Contoh
<a name="ST_AddPoint-function-examples"></a>

SQL berikut menambahkan titik ke linestring untuk membuatnya menjadi linestring tertutup. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_StartPoint(g))) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)
```

SQL berikut menambahkan titik ke posisi tertentu dalam linestring. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_SetSRID(ST_Point(5, 10), 4326), 3)) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 10,5 5,0 5)
```

# ST\$1Angle
<a name="ST_Angle-function"></a>

ST\$1angle mengembalikan sudut dalam radian antara titik-titik yang diukur searah jarum jam sebagai berikut:
+ Jika tiga titik dimasukkan, maka sudut yang dikembalikan P1-P2-P3 diukur seolah-olah sudut diperoleh dengan memutar dari P1 ke P3 sekitar P2 searah jarum jam. 
+ Jika empat titik dimasukkan, maka sudut searah jarum jam yang dikembalikan yang dibentuk oleh garis terarah P1-P2 dan P3-P4 dikembalikan. Jika input adalah kasus degenerasi (yaitu, P1 sama dengan P2, atau P3 sama dengan P4), maka null dikembalikan. 

Nilai kembali dalam radian dan dalam kisaran [0, 2π). 

ST\$1angle beroperasi pada proyeksi 2D dari geometri input.

## Sintaksis
<a name="ST_Angle-function-syntax"></a>

```
ST_Angle(geom1, geom2, geom3)
```

```
ST_Angle(geom1, geom2, geom3, geom4)
```

## Argumen
<a name="ST_Angle-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` 

 *geom3*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` 

 *geom4*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` 

## Jenis pengembalian
<a name="ST_Angle-function-return"></a>

`DOUBLE PRECISION`. 

*Jika *geom1* sama dengan *geom2, atau geom2* sama dengan *geom3*, maka nol dikembalikan.* 

Jika *geom1*, *geom2, geom3**, atau *geom4** adalah nol, maka nol dikembalikan. 

Jika salah satu dari *geom1*, *geom2*, *geom3, atau *geom4** adalah titik kosong, maka kesalahan dikembalikan. 

Jika *geom1*, *geom2, geom3**, dan *geom4** tidak memiliki nilai yang sama untuk pengenal sistem referensi spasial (SRID), maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Angle-function-examples"></a>

SQL berikut mengembalikan sudut dikonversi ke derajat tiga titik input. 

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
    45
```

SQL berikut mengembalikan sudut dikonversi ke derajat empat titik input. 

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0), ST_Point(2,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
   225
```

# ST\$1daerah
<a name="ST_Area-function"></a>

Untuk geometri input, ST\$1area mengembalikan area Cartesian dari proyeksi 2D. Satuan luas sama dengan satuan di mana koordinat geometri input dinyatakan. Untuk poin, linestrings, multipoint, dan multilinestrings, fungsi mengembalikan 0. Untuk koleksi geometri, ia mengembalikan jumlah area geometri dalam koleksi. 

Untuk geografi input, ST\$1area mengembalikan area geodesik dari proyeksi 2D dari geografi areal input yang dihitung pada spheroid yang ditentukan oleh SRID. Satuan panjangnya dalam meter persegi. Fungsi mengembalikan nol (0) untuk titik, multipoint, dan geografi linier. Ketika input adalah kumpulan geometri, fungsi mengembalikan jumlah area geografi areal dalam koleksi.

## Sintaksis
<a name="ST_Area-function-syntax"></a>

```
ST_Area(geo)
```

## Argumen
<a name="ST_Area-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_Area-function-return"></a>

`DOUBLE PRECISION`

Jika *geo* adalah null, maka null dikembalikan.

## Contoh
<a name="ST_Area-function-examples"></a>

SQL berikut mengembalikan area Cartesian dari multipoligon. 

```
SELECT ST_Area(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_area
---------
     100
```

SQL berikut mengembalikan area poligon dalam geografi. 

```
SELECT ST_Area(ST_GeogFromText('polygon((34 35, 28 30, 25 34, 34 35))'));
```

```
     st_area
------------------
 201824655743.383
```

SQL berikut mengembalikan nol untuk geografi linier. 

```
SELECT ST_Area(ST_GeogFromText('multipoint(0 0, 1 1, -21.32 121.2)'));
```

```
 st_area
---------
       0
```

# ST\$1 AsBinary
<a name="ST_AsBinary-function"></a>

ST\$1 AsBinary mengembalikan representasi biner terkenal heksadesimal (WKB) dari geometri input. Untuk geometri 3DZ, 3DM, dan 4D, ST\$1 AsBinary menggunakan nilai standar Open Geospatial Consortium (OGC) untuk tipe geometri. 

## Sintaksis
<a name="ST_AsBinary-function-syntax"></a>

```
ST_AsBinary(geom)
```

## Argumen
<a name="ST_AsBinary-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_AsBinary-function-return"></a>

`VARBYTE`

Jika *geom* adalah null, maka null dikembalikan.

## Contoh
<a name="ST_AsBinary-function-examples"></a>

SQL berikut mengembalikan representasi WKB heksadesimal dari poligon. 

```
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asbinary
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# St\$1AsewkB
<a name="ST_AsEWKB-function"></a>

ST\$1aseWKB mengembalikan representasi biner terkenal (EWKB) yang diperluas dari geometri input. Untuk geometri 3DZ, 3DM, dan 4D, ST\$1ASEWKB menggunakan nilai standar Open Geospatial Consortium (OGC) untuk tipe geometri.

## Sintaksis
<a name="ST_AsEWKB-function-syntax"></a>

```
ST_AsEWKB(geom)
```

## Argumen
<a name="ST_AsEWKB-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_AsEWKB-function-return"></a>

`VARBYTE`

Jika *geom* adalah null, maka null dikembalikan.

## Contoh
<a name="ST_AsEWKB-function-examples"></a>

SQL berikut mengembalikan representasi EWKB heksadesimal dari poligon. 

```
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1ASEWKT
<a name="ST_AsEWKT-function"></a>

ST\$1ASEWKT mengembalikan representasi teks terkenal yang diperluas (EWKT) dari geometri input atau geografi. Untuk geometri 3DZ, 3DM, dan 4D, ST\$1asewkt menambahkan Z, M, atau ZM ke nilai WKT untuk jenis geometri.

## Sintaksis
<a name="ST_AsEWKT-function-syntax"></a>

```
ST_AsEWKT(geo)
```

```
ST_AsEWKT(geo, precision)
```

## Argumen
<a name="ST_AsEWKT-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

 *presisi*   
Nilai tipe data`INTEGER`. Untuk geometri, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan 1-20. Jika *presisi* tidak ditentukan, defaultnya adalah 15. Untuk geografi, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan. Jika *presisi* tidak ditentukan, defaultnya adalah 15.

## Jenis pengembalian
<a name="ST_AsEWKT-function-return"></a>

`VARCHAR`

Jika *geo* adalah null, maka null dikembalikan. 

Jika *presisi* adalah nol, maka null dikembalikan. 

Jika hasilnya lebih besar dari 64-KB`VARCHAR`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_AsEWKT-function-examples"></a>

SQL berikut mengembalikan representasi EWKT dari linestring. 

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

SQL berikut mengembalikan representasi EWKT dari linestring. Koordinat geometri ditampilkan dengan enam digit presisi. 

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

SQL berikut mengembalikan representasi EWKT dari geografi. 

```
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                  st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

# ST\$1 JSON AsGeo
<a name="ST_AsGeoJSON-function"></a>

ST\$1 AsGeo JSON mengembalikan representasi GeoJSON dari geometri input atau geografi. Untuk informasi lebih lanjut tentang GeoJSON, lihat [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) di Wikipedia.

Untuk geometri 3DZ dan 4D, geometri output adalah proyeksi 3DZ dari input 3DZ atau geometri 4D. Artinya,, `x``y`, dan `z` koordinat hadir dalam output. Untuk geometri 3DM, geometri keluaran adalah proyeksi 2D dari geometri input 3DM. Artinya, hanya `x` dan `y` koordinat hadir dalam output.

Untuk geografi input, ST\$1 AsGeo JSON mengembalikan representasi GeoJSON dari geografi input. Koordinat geografi ditampilkan menggunakan presisi yang ditentukan. 

## Sintaksis
<a name="ST_AsGeoJSON-function-syntax"></a>

```
ST_AsGeoJSON(geo)
```

```
ST_AsGeoJSON(geo, precision)
```

## Argumen
<a name="ST_AsGeoJSON-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

 *presisi*   
Nilai tipe data`INTEGER`. Untuk geometri, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan 1-20. Jika *presisi* tidak ditentukan, defaultnya adalah 15. Untuk geografi, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan. Jika *presisi* tidak ditentukan, defaultnya adalah 15.

## Jenis pengembalian
<a name="ST_AsGeoJSON-function-return"></a>

`VARCHAR`

Jika *geo* adalah null, maka null dikembalikan. 

Jika *presisi* adalah nol, maka null dikembalikan. 

Jika hasilnya lebih besar dari 64-KB`VARCHAR`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_AsGeoJSON-function-examples"></a>

SQL berikut mengembalikan representasi GeoJSON dari linestring. 

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'));
```

```
st_asgeojson
----------------------------------------------------------------------------------------------------------------
 {"type":"LineString","coordinates":[[3.14159265358979,-6.28318530717959],[2.71828182845905,-1.41421356237309]]}
```

SQL berikut mengembalikan representasi GeoJSON dari linestring. Koordinat geometri ditampilkan dengan enam digit presisi. 

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'), 6);
```

```
st_asgeojson
-----------------------------------------------------------------------------
  {"type":"LineString","coordinates":[[3.14159,-6.28319],[2.71828,-1.41421]]}
```

SQL berikut mengembalikan representasi GeoJSON dari geografi. 

```
SELECT ST_AsGeoJSON(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                             st_asgeojson
----------------------------------------------------------------------
 {"type":"LineString","coordinates":[[110,40],[2,3],[-10,80],[-7,9]]}
```

# ST\$1 AsHex WKB
<a name="ST_AsHexWKB-function"></a>

ST\$1 AsHex WKB mengembalikan representasi biner terkenal heksadesimal (WKB) dari geometri input atau geografi menggunakan karakter heksadesimal ASCII (0-9, A-F). Untuk geometri atau geografi 3DZ, 3DM, dan 4D, ST\$1 AsHex WKB menggunakan nilai standar Open Geospatial Consortium (OGC) untuk jenis geometri atau geografi. 

## Sintaksis
<a name="ST_AsHexWKB-function-syntax"></a>

```
ST_AsHexWKB(geo)
```

## Argumen
<a name="ST_AsHexWKB-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_AsHexWKB-function-return"></a>

`VARCHAR`

Jika *geo* adalah null, maka null dikembalikan.

Jika hasilnya lebih besar dari 64-KB`VARCHAR`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_AsHexWKB-function-examples"></a>

SQL berikut mengembalikan representasi WKB heksadesimal dari poligon dalam geometri. 

```
SELECT ST_AsHexWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

SQL berikut mengembalikan representasi WKB heksadesimal dari poligon dalam geografi. 

```
SELECT ST_AsHexWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1 AsHex EWKB
<a name="ST_AsHexEWKB-function"></a>

ST\$1 AsHex EWKB mengembalikan representasi biner terkenal (EWKB) yang diperluas dari geometri input atau geografi menggunakan karakter heksadesimal ASCII (0-9, A-F). Untuk geometri atau geografi 3DZ, 3DM, dan 4D, ST\$1 AsHex EWKB menggunakan nilai WKB yang diperluas PostGIS untuk jenis geometri atau geografi.

## Sintaksis
<a name="ST_AsHexEWKB-function-syntax"></a>

```
ST_AsHexEWKB(geo)
```

## Argumen
<a name="ST_AsHexEWKB-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_AsHexEWKB-function-return"></a>

`VARCHAR`

Jika *geo* adalah null, maka null dikembalikan. 

Jika hasilnya lebih besar dari 64-KB`VARCHAR`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_AsHexEWKB-function-examples"></a>

SQL berikut mengembalikan representasi EWKB heksadesimal dari poligon dalam geometri. 

```
SELECT ST_AsHexEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

SQL berikut mengembalikan representasi EWKB heksadesimal dari poligon dalam geografi. 

```
SELECT ST_AsHexEWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1 AsText
<a name="ST_AsText-function"></a>

ST\$1 AsText mengembalikan representasi teks terkenal (WKT) dari geometri input atau geografi. Untuk geometri atau geografi 3DZ, 3DM, dan 4D, ST\$1ASEWKT menambahkan Z, M, atau ZM ke nilai WKT untuk jenis geometri atau geografi.

## Sintaksis
<a name="ST_AsText-function-syntax"></a>

```
ST_AsText(geo)
```

```
ST_AsText(geo, precision)
```

## Argumen
<a name="ST_AsText-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

 *presisi*   
Nilai tipe data`INTEGER`. Untuk geometri, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan 1-20. Jika *presisi* tidak ditentukan, defaultnya adalah 15. Untuk geogpraphies, koordinat *geo ditampilkan menggunakan presisi* yang ditentukan. Jika *presisi* tidak ditentukan, defaultnya adalah 15.

## Jenis pengembalian
<a name="ST_AsText-function-return"></a>

`VARCHAR`

Jika *geo* adalah null, maka null dikembalikan.

Jika *presisi* adalah nol, maka null dikembalikan.

Jika hasilnya lebih besar dari 64-KB`VARCHAR`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_AsText-function-examples"></a>

SQL berikut mengembalikan representasi WKT dari linestring. 

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_astext
--------------------------------
LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

SQL berikut mengembalikan representasi WKT dari linestring. Koordinat geometri ditampilkan dengan enam digit presisi. 

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_astext
----------------------------------------------
 LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

SQL berikut mengembalikan representasi WKT dari geografi. 

```
SELECT ST_AsText(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
             st_astext
------------------------------------
 LINESTRING(110 40,2 3,-10 80,-7 9)
```

# St\$1azimuth
<a name="ST_Azimuth-function"></a>

St\$1Azimuth mengembalikan azimuth Cartesian berbasis utara menggunakan proyeksi 2D dari dua titik input. 

## Sintaksis
<a name="ST_Azimuth-function-syntax"></a>

```
ST_Azimuth(point1, point2)
```

## Argumen
<a name="ST_Azimuth-function-arguments"></a>

 *poin1*   
`POINT`Nilai tipe data`GEOMETRY`. *Pengidentifikasi sistem referensi spasial (SRID) *point1 harus cocok dengan SRID point2*.* 

 *titik2*   
`POINT`Nilai tipe data`GEOMETRY`. *SRID *point2* harus cocok dengan SRID point1.* 

## Jenis pengembalian
<a name="ST_Azimuth-function-return"></a>

Angka yang merupakan sudut dalam radian tipe `DOUBLE PRECISION` data. Nilai berkisar dari 0 (inklusif) hingga 2 pi (eksklusif). 

Jika *point1* atau *point2* adalah titik kosong, maka kesalahan dikembalikan. 

Jika salah satu *point1* atau *point2* adalah null, maka null dikembalikan. 

Jika *point1* dan *point2* sama, maka null dikembalikan. 

Jika *point1* atau *point2* bukan titik, maka kesalahan dikembalikan. 

Jika *point1* dan *point2* tidak memiliki nilai untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Azimuth-function-examples"></a>

SQL berikut mengembalikan azimuth dari titik input. 

```
SELECT ST_Azimuth(ST_Point(1,2), ST_Point(5,6));
```

```
st_azimuth
-------------------
 0.7853981633974483
```

# ST\$1Batas
<a name="ST_Boundary-function"></a>

ST\$1Boundary mengembalikan batas geometri masukan sebagai berikut: 
+ Jika geometri input kosong (yaitu, tidak mengandung poin) itu dikembalikan apa adanya. 
+ Jika geometri input adalah titik atau multipoint nonempty, koleksi geometri kosong dikembalikan.
+ Jika input adalah linestring atau multilinestring, maka multipoint yang berisi semua titik pada batas dikembalikan. Multipoint mungkin kosong).
+ Jika input adalah poligon yang tidak memiliki cincin interior, maka linestring tertutup yang mewakili batasnya dikembalikan.
+ Jika input adalah poligon yang memiliki cincin interior, atau multipoligon, maka multilinestring dikembalikan. Multilinestring berisi semua batas semua cincin dalam geometri areal sebagai garis garis tertutup.

Untuk menentukan kesetaraan titik, ST\$1Boundary beroperasi pada proyeksi 2D dari geometri input. Jika geometri input kosong, salinannya dikembalikan dalam dimensi yang sama dengan input. Untuk geometri 3DM dan 4D yang tidak kosong, koordinatnya dijatuhkan. `m` Dalam kasus khusus multilinestring 3DZ dan 4D, `z` koordinat titik batas multilinestring dihitung sebagai rata-rata dari nilai-z yang berbeda dari titik batas linestring dengan proyeksi 2D yang sama.

## Sintaksis
<a name="ST_Boundary-function-syntax"></a>

```
ST_Boundary(geom)
```

## Argumen
<a name="ST_Boundary-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_Boundary-function-return"></a>

`GEOMETRY`

Jika *geom* adalah null, maka null dikembalikan.

Jika *geom* adalah a`GEOMETRYCOLLECTION`, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Boundary-function-examples"></a>

SQL berikut mengembalikan batas poligon masukan sebagai multilinestring. 

```
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))')));
```

```
st_asewkt
--------------------
 MULTILINESTRING((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))
```

# ST\$1Buffer
<a name="ST_Buffer-function"></a>

ST\$1Buffer mengembalikan geometri 2D yang mewakili semua titik yang jaraknya dari geometri input yang diproyeksikan pada bidang XY-Cartesian kurang dari atau sama dengan jarak input. 

## Sintaksis
<a name="ST_Buffer-function-syntax"></a>

```
ST_Buffer(geom, distance)
```

```
ST_Buffer(geom, distance, number_of_segments_per_quarter_circle)
```

## Argumen
<a name="ST_Buffer-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

 *jarak*   
Nilai tipe data `DOUBLE PRECISION` yang mewakili jarak (atau radius) buffer. 

 *number\$1of\$1segments\$1per\$1quarter\$1circle*   
Nilai tipe data`INTEGER`. Nilai ini menentukan jumlah titik untuk mendekati seperempat lingkaran di sekitar setiap simpul geometri input. Nilai negatif default ke nol. Defaultnya adalah 8.

## Jenis pengembalian
<a name="ST_Buffer-function-return"></a>

`GEOMETRY`

Fungsi ST\$1Buffer mengembalikan geometri dua dimensi (2D) di bidang XY-Cartesian.

Jika *geom* adalah a`GEOMETRYCOLLECTION`, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Buffer-function-examples"></a>

SQL berikut mengembalikan buffer dari input linestring. 

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('LINESTRING(1 2,5 2,5 8)'), 2));
```

```
               st_asewkt  
POLYGON((-1 2,-0.96157056080646 2.39018064403226,-0.847759065022573 2.76536686473018,-0.662939224605089 3.11114046603921,-0.414213562373093 3.4142135623731,-0.111140466039201 3.66293922460509,0.234633135269824 3.84775906502257,0.609819355967748 3.96157056080646,1 4,3 4,3 8,3.03842943919354 8.39018064403226,3.15224093497743 8.76536686473018,3.33706077539491 9.11114046603921,3.58578643762691 9.4142135623731,3.8888595339608 9.66293922460509,4.23463313526982 9.84775906502257,4.60981935596775 9.96157056080646,5 10,5.39018064403226 9.96157056080646,5.76536686473018 9.84775906502257,6.11114046603921 9.66293922460509,6.4142135623731 9.41421356237309,6.66293922460509 9.1111404660392,6.84775906502258 8.76536686473017,6.96157056080646 8.39018064403225,7 8,7 2,6.96157056080646 1.60981935596774,6.84775906502257 1.23463313526982,6.66293922460509 0.888859533960796,6.41421356237309 0.585786437626905,6.1111404660392 0.33706077539491,5.76536686473018 0.152240934977427,5.39018064403226 0.0384294391935391,5 0,1 0,0.609819355967744 0.0384294391935391,0.234633135269821 0.152240934977427,-0.111140466039204 0.337060775394909,-0.414213562373095 0.585786437626905,-0.662939224605091 0.888859533960796,-0.847759065022574 1.23463313526982,-0.961570560806461 1.60981935596774,-1 2))
```

SQL berikut mengembalikan buffer dari geometri titik input yang mendekati lingkaran. Karena perintah tidak menentukan jumlah segmen per seperempat lingkaran, fungsi menggunakan nilai default delapan segmen untuk memperkirakan lingkaran seperempat.

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2));
```

```
               st_asewkt
POLYGON((1 4,1.03842943919354 4.39018064403226,1.15224093497743 4.76536686473018,1.33706077539491 5.11114046603921,1.58578643762691 5.4142135623731,1.8888595339608 5.66293922460509,2.23463313526982 5.84775906502257,2.60981935596775 5.96157056080646,3 6,3.39018064403226 5.96157056080646,3.76536686473019 5.84775906502257,4.11114046603921 5.66293922460509,4.4142135623731 5.41421356237309,4.66293922460509 5.1111404660392,4.84775906502258 4.76536686473017,4.96157056080646 4.39018064403225,5 4,4.96157056080646 3.60981935596774,4.84775906502257 3.23463313526982,4.66293922460509 2.8888595339608,4.41421356237309 2.58578643762691,4.1111404660392 2.33706077539491,3.76536686473018 2.15224093497743,3.39018064403226 2.03842943919354,3 2,2.60981935596774 2.03842943919354,2.23463313526982 2.15224093497743,1.8888595339608 2.33706077539491,1.58578643762691 2.58578643762691,1.33706077539491 2.8888595339608,1.15224093497743 3.23463313526982,1.03842943919354 3.60981935596774,1 4))
```

SQL berikut mengembalikan buffer dari geometri titik input yang mendekati lingkaran. Karena perintah menentukan 3 sebagai jumlah segmen per seperempat lingkaran, fungsi menggunakan tiga segmen untuk memperkirakan lingkaran seperempat.

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2, 3));
```

```
               st_asewkt
POLYGON((1 4,1.26794919243112 5,2 5.73205080756888,3 6,4 5.73205080756888,4.73205080756888 5,5 4,4.73205080756888 3,4 2.26794919243112,3 2,2 2.26794919243112,1.26794919243112 3,1 4))
```

# ST\$1Centroid
<a name="ST_Centroid-function"></a>

ST\$1centroid mengembalikan titik yang mewakili centroid geometri sebagai berikut:
+ Untuk `POINT` geometri, ia mengembalikan titik yang koordinatnya adalah rata-rata koordinat titik dalam geometri. 
+ Untuk `LINESTRING` geometri, ia mengembalikan titik yang koordinatnya adalah rata-rata tertimbang dari titik tengah segmen geometri, di mana bobot adalah panjang segmen geometri.
+ Untuk `POLYGON` geometri, ia mengembalikan titik yang koordinatnya adalah rata-rata tertimbang sentroid triangulasi geometri areal di mana bobot adalah area segitiga dalam triangulasi.
+ Untuk koleksi geometri, ia mengembalikan rata-rata tertimbang sentroid geometri dimensi topologi maksimum dalam koleksi geometri.

## Sintaksis
<a name="ST_Centroid-function-syntax"></a>

```
ST_Centroid(geom)
```

## Argumen
<a name="ST_Centroid-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Centroid-function-return"></a>

`GEOMETRY` 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka null dikembalikan. 

## Contoh
<a name="ST_Centroid-function-examples"></a>

SQL berikut mengembalikan titik pusat dari linestring input. 

```
SELECT ST_AsEWKT(ST_Centroid(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326)))
```

```
                     st_asewkt
----------------------------------------------------
 SRID=4326;POINT(15.6965103455214 27.0206782881905)
```

# ST\$1Kumpulkan
<a name="ST_Collect-function"></a>

ST\$1Collect memiliki dua varian. Satu menerima dua geometri, dan satu menerima ekspresi agregat. 

Varian pertama ST\$1Collect menciptakan geometri dari geometri input. Urutan geometri input dipertahankan. Varian ini berfungsi sebagai berikut: 
+ Jika kedua geometri input adalah titik, maka a `MULTIPOINT` dengan dua titik dikembalikan. 
+ Jika kedua geometri input adalah linestring, maka a `MULTILINESTRING` dengan dua linestrings dikembalikan. 
+ Jika kedua geometri input adalah poligon, maka a `MULTIPOLYGON` dengan dua poligon dikembalikan. 
+ Jika tidak, a `GEOMETRYCOLLECTION` dengan dua geometri input dikembalikan. 

Varian kedua dari ST\$1Collect menciptakan geometri dari geometri dalam kolom geometri. Tidak ada urutan pengembalian geometri yang ditentukan. Tentukan klausa WITHIN GROUP (ORDER BY...) untuk menentukan urutan geometri yang dikembalikan. Varian ini berfungsi sebagai berikut: 
+ Jika semua baris non-Null dalam ekspresi agregat input adalah poin, maka multipoint yang berisi semua titik dalam ekspresi agregat dikembalikan. 
+ Jika semua baris non-Null dalam ekspresi agregat adalah linestring, maka multilinestring yang berisi semua linestring dalam ekspresi agregat dikembalikan. 
+ Jika semua baris non-Null dalam ekspresi agregat adalah poligon, hasilnya adalah multipoligon yang berisi semua poligon dalam ekspresi agregat dikembalikan. 
+ Jika tidak, a `GEOMETRYCOLLECTION` yang berisi semua geometri dalam ekspresi agregat dikembalikan. 

ST\$1Collect mengembalikan geometri dari dimensi yang sama dengan geometri masukan. Semua geometri input harus memiliki dimensi yang sama.

## Sintaksis
<a name="ST_Collect-function-syntax"></a>

```
ST_Collect(geom1, geom2)
```

```
ST_Collect(aggregate_expression)  [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
```

## Argumen
<a name="ST_Collect-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *aggregate\$1expression*   
Kolom tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 [DALAM KELOMPOK (PESANAN OLEH *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC]...])]   
Sebuah klausa opsional yang menentukan urutan dari nilai agregat. Klausa ORDER BY berisi daftar ekspresi pengurutan. Ekspresi sortir adalah ekspresi yang mirip dengan ekspresi pengurutan yang valid dalam daftar pilih kueri, seperti nama kolom. Anda dapat menentukan urutan ascending (`ASC`) atau descending (`DESC`). Nilai default-nya `ASC`. 

## Jenis pengembalian
<a name="ST_Collect-function-return"></a>

`GEOMETRY`dari subtipe`MULTIPOINT`,, `MULTILINESTRING``MULTIPOLYGON`, atau`GEOMETRYCOLLECTION`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika kedua *geom1* atau *geom2* adalah nol, maka null dikembalikan. 

Jika semua baris *aggregate\$1expression* adalah null, maka null dikembalikan. 

Jika *geom1* adalah nol, maka salinan *geom2* dikembalikan. Demikian juga, jika *geom2* adalah nol, maka salinan *geom1* dikembalikan.

Jika *geom1* dan *geom2* memiliki nilai SRID yang berbeda, maka kesalahan dikembalikan. 

Jika dua geometri dalam *aggregate\$1expression* memiliki nilai SRID yang berbeda, maka kesalahan dikembalikan. 

Jika geometri yang dikembalikan lebih besar dari ukuran maksimum a`GEOMETRY`, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* memiliki dimensi yang berbeda, maka kesalahan dikembalikan. 

Jika dua geometri dalam *aggregate\$1expression* memiliki dimensi yang berbeda, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Collect-function-examples"></a>

SQL berikut mengembalikan koleksi geometri yang berisi dua geometri input. 

```
SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
```

```
st_astext
-----------
 GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))
```

SQL berikut mengumpulkan semua geometri dari tabel ke dalam koleksi geometri. 

```
WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT NULL::geometry UNION ALL
SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326))
SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
```

```
st_astext
-----------
 SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))
```

SQL berikut mengumpulkan semua geometri dalam tabel dikelompokkan oleh kolom id dan diurutkan oleh ID ini. Dalam contoh ini, geometri yang dihasilkan dikelompokkan berdasarkan ID sebagai berikut: 
+ id 1 — poin dalam multipoint.
+ id 2 — linestrings dalam multilinestring.
+ id 3 — subtipe campuran dalam koleksi geometri.
+ id 4 — poligon dalam multipoligon.
+ id 5 — null dan hasilnya adalah null.

```
WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
```

```
 id |                                                 st_asewkt                                                 
----+-----------------------------------------------------------------------------------------------------------
  1 | SRID=4326;MULTIPOINT((1 2),(4 5))
  2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5))
  3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)))
  4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20)))
  5 |
```

SQL berikut mengumpulkan semua geometri dari tabel dalam koleksi geometri. Hasil diurutkan dalam urutan menurun menurut`id`, dan kemudian secara leksikografis berdasarkan koordinat x minimum dan maksimumnya. 

```
WITH tbl(id, g) AS (
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
```

```
                                                                                                                  st_asewkt                                                                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)
```

# ST\$1berisi
<a name="ST_Contains-function"></a>

ST\$1contains mengembalikan true jika proyeksi 2D dari geometri input pertama berisi proyeksi 2D dari geometri input kedua. Geometri `A` mengandung geometri `B` jika setiap titik masuk `B` adalah titik masuk`A`, dan interiornya memiliki persimpangan yang tidak kosong. 

ST\$1contains (`A`,`B`) setara dengan st\$1Within (,). `B` `A` 

## Sintaksis
<a name="ST_Contains-function-syntax"></a>

```
ST_Contains(geom1, geom2)
```

## Argumen
<a name="ST_Contains-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Nilai ini dibandingkan dengan *geom1* untuk menentukan apakah itu terkandung dalam geom1.* 

## Jenis pengembalian
<a name="ST_Contains-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Contains-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama berisi poligon kedua. 

```
SELECT ST_Contains(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_contains
-----------
 false
```

# ST\$1 ContainsProperly
<a name="ST_ContainsProperly-function"></a>

ST\$1 ContainsProperly mengembalikan nilai true jika kedua geometri input tidak kosong, dan semua titik proyeksi 2D dari geometri kedua adalah titik interior proyeksi 2D dari geometri pertama. 

## Sintaksis
<a name="ST_ContainsProperly-function-syntax"></a>

```
ST_ContainsProperly(geom1, geom2)
```

## Argumen
<a name="ST_ContainsProperly-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe tidak bisa. `GEOMETRYCOLLECTION` 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe tidak bisa. `GEOMETRYCOLLECTION` *Nilai ini dibandingkan dengan *geom1* untuk menentukan apakah semua titiknya adalah titik interior geom1.* 

## Jenis pengembalian
<a name="ST_ContainsProperly-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_ContainsProperly-function-examples"></a>

SQL berikut mengembalikan nilai-nilai ST\$1contains dan ST\$1 ContainsProperly di mana linestring input memotong interior dan batas poligon input (tapi bukan eksteriornya). Poligon berisi linestring tetapi tidak mengandung linestring dengan benar. 

```
WITH tmp(g1, g2) 
AS (SELECT ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('LINESTRING(5 5,10 5,10 6,5 5)')) SELECT ST_Contains(g1, g2), ST_ContainsProperly(g1, g2) 
FROM tmp;
```

```
 st_contains | st_containsproperly 
-------------+---------------------
 t           | f
```

# ST\$1 ConvexHull
<a name="ST_ConvexHull-function"></a>

ST\$1 ConvexHull mengembalikan geometri yang mewakili lambung cembung dari titik-titik nonempty yang terkandung dalam geometri masukan. 

Untuk input kosong, geometri yang dihasilkan sama dengan geometri input. Untuk semua input nonempty, fungsi beroperasi pada proyeksi 2D dari geometri input. Namun, dimensi geometri keluaran tergantung pada dimensi geometri input. Lebih khusus lagi, ketika geometri input adalah geometri 3DM atau 3D yang tidak kosong, koordinat dijatuhkan. `m` Artinya, dimensi geometri yang dikembalikan adalah 2D atau 3DZ, masing-masing. Jika input adalah geometri 2D atau 3DZ yang tidak kosong, geometri yang dihasilkan memiliki dimensi yang sama.

## Sintaksis
<a name="ST_ConvexHull-function-syntax"></a>

```
ST_ConvexHull(geom)
```

## Argumen
<a name="ST_ConvexHull-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_ConvexHull-function-return"></a>

`GEOMETRY`

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Jumlah titik pada lambung cembung | Subtipe geometri | 
| --- | --- | 
| 0 | Salinan *geom* dikembalikan.  | 
| 1 | `POINT`Subtipe dikembalikan.  | 
| 2 | `LINESTRING`Subtipe dikembalikan. Dua titik dari linestring yang dikembalikan diurutkan secara leksikografis. | 
| 3 atau lebih | `POLYGON`Subtipe tanpa cincin interior dikembalikan. Poligon berorientasi searah jarum jam, dan titik pertama dari cincin eksterior adalah titik terkecil secara leksikografis dari cincin. | 

## Contoh
<a name="ST_ConvexHull-function-examples"></a>

SQL berikut mengembalikan representasi teks terkenal yang diperluas (EWKT) dari linestring. Dalam hal ini, lambung cembung yang dikembalikan adalah poligon.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 0,0 1,1 1,0.5 0.5)'))) as output;
```

```
output
-------------
POLYGON((0 0,0 1,1 1,1 0,0 0))
```

SQL berikut mengembalikan representasi EWKT dari linestring. Dalam hal ini, lambung cembung yang dikembalikan adalah linestring.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 1,0.2 0.2,0.6 0.6,0.5 0.5)'))) as output;
```

```
output
-------------
LINESTRING(0 0,1 1)
```

SQL berikut mengembalikan representasi EWKT dari multipoint. Dalam hal ini, lambung cembung yang dikembalikan adalah sebuah titik.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(0 0,0 0,0 0)'))) as output;
```

```
output
-------------
POINT(0 0)
```

# ST\$1 CoveredBy
<a name="ST_CoveredBy-function"></a>

ST\$1 CoveredBy mengembalikan true jika proyeksi 2D dari geometri input pertama ditutupi oleh proyeksi 2D dari geometri input kedua. Geometri `A` ditutupi oleh geometri `B` jika keduanya tidak kosong dan setiap titik di dalamnya `A` adalah titik masuk. `B` 

ST\$1 CoveredBy (`A`,`B`) setara dengan ST\$1Covers (`B`,). `A` 

## Sintaksis
<a name="ST_CoveredBy-function-syntax"></a>

```
ST_CoveredBy(geom1, geom2)
```

## Argumen
<a name="ST_CoveredBy-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Nilai ini dibandingkan dengan *geom2* untuk menentukan apakah itu dicakup oleh geom2.* 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_CoveredBy-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_CoveredBy-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama ditutupi oleh poligon kedua. 

```
SELECT ST_CoveredBy(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_coveredby
-----------
 true
```

# ST\$1meliputi
<a name="ST_Covers-function"></a>

ST\$1Covers mengembalikan true jika proyeksi 2D dari geometri input pertama mencakup proyeksi 2D dari geometri input kedua. Geometri `A` mencakup geometri `B` jika keduanya tidak kosong dan setiap titik di dalamnya `B` adalah titik masuk. `A` 

ST\$1Covers (`A`,`B`) setara dengan ST\$1 CoveredBy (`B`,). `A` 

## Sintaksis
<a name="ST_Covers-function-syntax"></a>

```
ST_Covers(geom1, geom2)
```

## Argumen
<a name="ST_Covers-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Nilai ini dibandingkan dengan *geom1* untuk menentukan apakah itu mencakup geom1.* 

## Jenis pengembalian
<a name="ST_Covers-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Covers-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama mencakup poligon kedua. 

```
SELECT ST_Covers(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_covers
-----------
 false
```

# ST\$1salib
<a name="ST_Crosses-function"></a>

ST\$1Crosses mengembalikan true jika proyeksi 2D dari dua geometri masukan saling bersilangan. 

## Sintaksis
<a name="ST_Crosses-function-syntax"></a>

```
ST_Crosses(geom1, geom2)
```

## Argumen
<a name="ST_Crosses-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Crosses-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka kesalahan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

## Contoh
<a name="ST_Crosses-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama melintasi multipoint kedua. Dalam contoh ini, multipoint memotong interior dan eksterior poligon, itulah sebabnya ST\$1Crosses mengembalikan true.

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(5 5,0 0,-1 -1)'));
```

```
st_crosses              
-------------
 true
```

SQL berikut memeriksa apakah poligon pertama melintasi multipoint kedua. Dalam contoh ini, multipoint memotong bagian luar poligon tetapi bukan interiornya, itulah sebabnya ST\$1Crosses mengembalikan false.

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(0 0,-1 -1)'));
```

```
st_crosses              
-------------
 false
```

# Dimensi ST\$1
<a name="ST_Dimension-function"></a>

ST\$1dimension mengembalikan dimensi yang melekat dari geometri masukan. *Dimensi yang melekat* adalah nilai dimensi dari subtipe yang didefinisikan dalam geometri. 

Untuk input geometri 3DM, 3DZ, dan 4D, ST\$1dimension mengembalikan hasil yang sama seperti untuk input geometri 2D.

## Sintaksis
<a name="ST_Dimension-function-syntax"></a>

```
ST_Dimension(geom)
```

## Argumen
<a name="ST_Dimension-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Dimension-function-return"></a>

`INTEGER`mewakili dimensi yang melekat dari *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Nilai yang dikembalikan | Subtipe geometri | 
| --- | --- | 
| 0 | Dikembalikan jika *geom* adalah subtipe `POINT` atau `MULTIPOINT` | 
| 1 | Dikembalikan jika *geom* adalah `MULTILINESTRING` subtipe `LINESTRING` atau. | 
| 2 | Dikembalikan jika *geom* adalah subtipe `POLYGON` atau `MULTIPOLYGON` | 
| 0 | Dikembalikan jika *geom* adalah subtipe kosong `GEOMETRYCOLLECTION` | 
| Dimensi terbesar dari komponen koleksi | Dikembalikan jika *geom* adalah subtipe `GEOMETRYCOLLECTION` | 

## Contoh
<a name="ST_Dimension-function-examples"></a>

SQL berikut mengkonversi teks terkenal (WKT) representasi dari LINESTRING empat titik ke objek GEOMETRY dan mengembalikan dimensi linestring. 

```
SELECT ST_Dimension(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_dimension
-------------
1
```

# ST\$1terputusnya
<a name="ST_Disjoint-function"></a>

ST\$1disjoint mengembalikan true jika proyeksi 2D dari dua geometri input tidak memiliki titik yang sama. 

## Sintaksis
<a name="ST_Disjoint-function-syntax"></a>

```
ST_Disjoint(geom1, geom2)
```

## Argumen
<a name="ST_Disjoint-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Disjoint-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Disjoint-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama terputus dari poligon kedua. 

```
SELECT ST_Disjoint(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_Point(4, 4));
```

```
st_disjoint               
-----------
 true
```

# ST\$1Jarak
<a name="ST_Distance-function"></a>

Untuk geometri masukan, ST\$1distance mengembalikan jarak Euclidean minimum antara proyeksi 2D dari dua nilai geometri input. 

Untuk geometri 3DM, 3DZ, 4D, ST\$1distance mengembalikan jarak Euclidean antara proyeksi 2D dari dua nilai geometri input.

Untuk geografi masukan, ST\$1distance mengembalikan jarak geodesik dari dua titik 2D. Satuan jarak adalah dalam meter. Untuk geografi selain titik dan titik kosong kesalahan dikembalikan.

## Sintaksis
<a name="ST_Distance-function-syntax"></a>

```
ST_Distance(geo1, geo2)
```

## Argumen
<a name="ST_Distance-function-arguments"></a>

 *geo1*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau. Tipe data *geo1* harus sama dengan *geo2*.

 *geo2*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau. Tipe data *geo2* harus sama dengan *geo1*.

## Jenis pengembalian
<a name="ST_Distance-function-return"></a>

`DOUBLE PRECISION`dalam satuan yang sama dengan geometri input atau geografi.

Jika *geo1* atau *geo2* adalah nol atau kosong, maka null dikembalikan. 

Jika *geo1* dan *geo2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan dikembalikan. 

Jika *geo1* atau *geo2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Distance-function-examples"></a>

SQL berikut mengembalikan jarak antara dua poligon. 

```
SELECT ST_Distance(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 -3,-2 -1,0 -3,-1 -3))'));
```

```
  st_distance
-----------
1.4142135623731
```

SQL berikut mengembalikan jarak (dalam meter) antara Gerbang Brandenburg dan gedung Reichstag di Berlin menggunakan tipe data GEOGRAFI. 

```
SELECT ST_Distance(ST_GeogFromText('POINT(13.37761826722198 52.516411678282445)'), ST_GeogFromText('POINT(13.377950831464005 52.51705102546893)'));
```

```
   st_distance
------------------
 74.64129172609631
```

# ST\$1 DistanceSphere
<a name="ST_DistanceSphere-function"></a>

ST\$1 DistanceSphere mengembalikan jarak antara dua geometri titik yang terletak pada bola. 

## Sintaksis
<a name="ST_DistanceSphere-function-syntax"></a>

```
ST_DistanceSphere(geom1, geom2)
```

```
ST_DistanceSphere(geom1, geom2, radius)
```

## Argumen
<a name="ST_DistanceSphere-function-arguments"></a>

 *geom1*   
Nilai titik dalam derajat tipe data yang `GEOMETRY` terletak di bola. Koordinat pertama dari titik tersebut adalah nilai bujur. Koordinat kedua dari titik tersebut adalah nilai lintang. Untuk geometri 3DZ, 3DM, atau 4D, hanya dua koordinat pertama yang digunakan.

 *geom2*   
Nilai titik dalam derajat tipe data yang `GEOMETRY` terletak di bola. Koordinat pertama dari titik tersebut adalah nilai bujur. Koordinat kedua dari titik tersebut adalah nilai lintang. Untuk geometri 3DZ, 3DM, atau 4D, hanya dua koordinat pertama yang digunakan.

 *radius*   
Radius bola tipe data`DOUBLE PRECISION`. Jika tidak ada *radius* yang disediakan, bola default ke Bumi dan jari-jarinya dihitung dari representasi Sistem Geodetik Dunia (WGS) 84 dari ellipsoid. 

## Jenis pengembalian
<a name="ST_DistanceSphere-function-return"></a>

`DOUBLE PRECISION`dalam satuan yang sama dengan radius. Jika tidak ada radius yang disediakan, jaraknya dalam meter.

Jika *geom1* atau *geom2* adalah nol atau kosong, maka null dikembalikan. 

Jika tidak ada *radius* yang disediakan, maka hasilnya adalah dalam meter di sepanjang permukaan bumi. 

Jika *radius* adalah angka negatif, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* bukan titik, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_DistanceSphere-function-examples"></a>

Contoh SQL berikut menghitung jarak dalam kilometer antara dua titik di Bumi. 

```
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
```

```
  round
-----------
 13
```

Contoh SQL berikut menghitung jarak dalam kilometer antara tiga lokasi bandara di Jerman: Berlin Tegel (TXL), Munich International (MUC), dan Frankfurt International (FRA). 

```
WITH airports_raw(code,lon,lat) AS (
(SELECT 'MUC', 11.786111, 48.353889) UNION
(SELECT 'FRA', 8.570556, 50.033333) UNION
(SELECT 'TXL', 13.287778, 52.559722)),
airports1(code,location) AS (SELECT code, ST_Point(lon, lat) FROM airports_raw),
airports2(code,location) AS (SELECT * from airports1)
SELECT (airports1.code || ' <-> ' || airports2.code) AS airports,
round(ST_DistanceSphere(airports1.location, airports2.location) / 1000, 0) AS distance_in_km
FROM airports1, airports2 WHERE airports1.code < airports2.code ORDER BY 1;
```

```
  airports   | distance_in_km 
-------------+----------------
 FRA <-> MUC |            299
 FRA <-> TXL |            432
 MUC <-> TXL |            480
```

# ST\$1 DWithin
<a name="ST_DWithin-function"></a>

ST\$1 DWithin mengembalikan nilai true jika jarak Euclidean antara proyeksi 2D dari dua nilai geometri input tidak lebih besar dari nilai ambang batas. 

## Sintaksis
<a name="ST_DWithin-function-syntax"></a>

```
ST_DWithin(geom1, geom2, threshold)
```

## Argumen
<a name="ST_DWithin-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *ambang batas*   
Nilai tipe data`DOUBLE PRECISION`. Nilai ini ada dalam satuan argumen masukan. 

## Jenis pengembalian
<a name="ST_DWithin-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *ambang batas* negatif, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_DWithin-function-examples"></a>

SQL berikut memeriksa apakah jarak antara dua poligon berada dalam lima unit. 

```
SELECT ST_DWithin(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'),5);
```

```
st_dwithin
-----------
 true
```

# ST\$1 EndPoint
<a name="ST_EndPoint-function"></a>

ST\$1 EndPoint mengembalikan titik terakhir dari input linestring. Nilai pengidentifikasi sistem referensi spasial (SRID) dari hasilnya sama dengan nilai geometri input. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_EndPoint-function-syntax"></a>

```
ST_EndPoint(geom)
```

## Argumen
<a name="ST_EndPoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

## Jenis pengembalian
<a name="ST_EndPoint-function-return"></a>

`GEOMETRY` 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* bukan a`LINESTRING`, maka null dikembalikan. 

## Contoh
<a name="ST_EndPoint-function-examples"></a>

SQL berikut mengembalikan representasi teks terkenal yang diperluas (EWKT) dari empat titik `LINESTRING` ke `GEOMETRY` objek dan mengembalikan titik akhir dari linestring. 

```
SELECT ST_AsEWKT(ST_EndPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1amplop
<a name="ST_Envelope-function"></a>

ST\$1Envelope mengembalikan kotak batas minimum dari geometri masukan, sebagai berikut:
+ Jika geometri input kosong, geometri yang dikembalikan adalah salinan dari geometri input. 
+ Jika kotak pembatas minimum dari geometri input merosot ke suatu titik, geometri yang dikembalikan adalah sebuah titik. 
+ Jika kotak pembatas minimum dari geometri input adalah satu dimensi, garis garis dua titik dikembalikan.
+ Jika tidak ada yang sebelumnya benar, fungsi mengembalikan poligon berorientasi searah jarum jam yang simpulnya adalah sudut kotak pembatas minimum.

Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan geometri input. 

Untuk semua input nonempty, fungsi beroperasi pada proyeksi 2D dari geometri input. 

## Sintaksis
<a name="ST_Envelope-function-syntax"></a>

```
ST_Envelope(geom)
```

## Argumen
<a name="ST_Envelope-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Envelope-function-return"></a>

`GEOMETRY` 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_Envelope-function-examples"></a>

SQL berikut mengkonversi teks terkenal (WKT) representasi dari empat titik `LINESTRING` ke `GEOMETRY` objek dan mengembalikan poligon yang simpulnya adalah kotak pembatas minimum. 

```
SELECT ST_AsText(ST_Envelope(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))')));
```

```
    st_astext
------------------------------------
  POLYGON((0 0,0 10,20 10,20 0,0 0))
```

# ST\$1sama
<a name="ST_Equals-function"></a>

ST\$1equals mengembalikan true jika proyeksi 2D dari geometri masukan secara geometris sama. Geometri dianggap sama secara geometris jika mereka memiliki set titik yang sama dan interiornya memiliki persimpangan yang tidak kosong. 

## Sintaksis
<a name="ST_Equals-function-syntax"></a>

```
ST_Equals(geom1, geom2)
```

## Argumen
<a name="ST_Equals-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Nilai ini dibandingkan dengan *geom1* untuk menentukan apakah itu sama dengan geom1.* 

## Jenis pengembalian
<a name="ST_Equals-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Equals-function-examples"></a>

SQL berikut memeriksa apakah dua poligon secara geometris sama. 

```
SELECT ST_Equals(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_equals
-----------
 false
```

SQL berikut memeriksa apakah dua linestring secara geometris sama. 

```
SELECT ST_Equals(ST_GeomFromText('LINESTRING(1 0,10 0)'), ST_GeomFromText('LINESTRING(1 0,5 0,10 0)'));
```

```
st_equals
-----------
 true
```

# ST\$1 ExteriorRing
<a name="ST_ExteriorRing-function"></a>

ST\$1 ExteriorRing mengembalikan linestring tertutup yang mewakili cincin eksterior dari poligon masukan. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_ExteriorRing-function-syntax"></a>

```
ST_ExteriorRing(geom)
```

## Argumen
<a name="ST_ExteriorRing-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_ExteriorRing-function-return"></a>

`GEOMETRY`dari subtipe`LINESTRING`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* bukan poligon, maka null dikembalikan. 

Jika *geom* kosong, maka poligon kosong dikembalikan. 

## Contoh
<a name="ST_ExteriorRing-function-examples"></a>

SQL berikut mengembalikan cincin eksterior poligon sebagai linestring tertutup. 

```
SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))')));
```

```
st_asewkt
-----------
 LINESTRING(7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9)
```

# ST\$1Force2D
<a name="ST_Force2D-function"></a>

ST\$1Force2D mengembalikan geometri 2D dari geometri masukan. Untuk geometri 2D, salinan input dikembalikan. Untuk geometri 3DZ, 3DM, dan 4D, ST\$1Force2d memproyeksikan geometri ke bidang XY-Cartesian. Titik kosong dalam geometri input tetap titik kosong dalam geometri keluaran.

## Sintaksis
<a name="ST_Force2D-function-syntax"></a>

```
ST_Force2D(geom)
```

## Argumen
<a name="ST_Force2D-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Force2D-function-return"></a>

`GEOMETRY`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka geometri kosong dikembalikan. 

## Contoh
<a name="ST_Force2D-function-examples"></a>

SQL berikut mengembalikan geometri 2D dari geometri 3DZ. 

```
SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT((0 1),EMPTY,(2 3),(5 6))
```

# ST\$1Force3D
<a name="ST_Force3D-function"></a>

ST\$1Force3D adalah alias untuk St\$1Force3dz. Untuk informasi selengkapnya, lihat [ST\$1Force3dz](ST_Force3DZ-function.md). 

# ST\$1Force3dm
<a name="ST_Force3DM-function"></a>

ST\$1Force3dm mengembalikan geometri 3DM dari geometri input. Untuk geometri 2D, `m` koordinat titik tidak kosong dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 3DM, salinan geometri input dikembalikan. Untuk geometri 3DZ, geometri diproyeksikan ke bidang XY-kartesian, dan `m` koordinat titik-titik tidak kosong dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 4D, geometri diproyeksikan ke ruang XYM-Cartesian. Titik kosong dalam geometri input tetap titik kosong dalam geometri keluaran.

## Sintaksis
<a name="ST_Force3DM-function-syntax"></a>

```
ST_Force3DM(geom)
```

## Argumen
<a name="ST_Force3DM-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Force3DM-function-return"></a>

`GEOMETRY`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka geometri kosong dikembalikan. 

## Contoh
<a name="ST_Force3DM-function-examples"></a>

SQL berikut mengembalikan geometri 3DM dari geometri 3DZ. 

```
SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT M ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force3dz
<a name="ST_Force3DZ-function"></a>

ST\$1Force3dz mengembalikan geometri 3DZ dari geometri input. Untuk geometri 2D, `z` koordinat titik tidak kosong dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 3DM, geometri diproyeksikan pada bidang XY-Cartesian, dan `z` koordinat titik-titik tidak kosong dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 3DZ, salinan geometri input dikembalikan. Untuk geometri 4D, geometri diproyeksikan ke ruang XYZ-kartesian. Titik kosong dalam geometri input tetap titik kosong dalam geometri keluaran.

## Sintaksis
<a name="ST_Force3DZ-function-syntax"></a>

```
ST_Force3DZ(geom)
```

## Argumen
<a name="ST_Force3DZ-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Force3DZ-function-return"></a>

`GEOMETRY`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka geometri kosong dikembalikan. 

## Contoh
<a name="ST_Force3DZ-function-examples"></a>

SQL berikut mengembalikan geometri 3DZ dari geometri 3DM. 

```
SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT Z ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force4D
<a name="ST_Force4D-function"></a>

ST\$1Force4D mengembalikan geometri 4D dari geometri masukan. Untuk geometri 2D, `z` `m` koordinat dan titik nonempty dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 3DM, `z` koordinat titik nonempty dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 3DZ, `m` koordinat titik tidak kosong dalam geometri keluaran semuanya diatur ke. `0` Untuk geometri 4D, salinan geometri input dikembalikan. Titik kosong dalam geometri input tetap titik kosong dalam geometri keluaran.

## Sintaksis
<a name="ST_Force4D-function-syntax"></a>

```
ST_Force4D(geom)
```

## Argumen
<a name="ST_Force4D-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Force4D-function-return"></a>

`GEOMETRY`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka geometri kosong dikembalikan. 

## Contoh
<a name="ST_Force4D-function-examples"></a>

SQL berikut mengembalikan geometri 4D dari geometri 3DM. 

```
SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT ZM ((0 1 0 2),EMPTY,(2 3 0 4),(5 6 0 7))
```

# ST\$1 GeoHash
<a name="ST_GeoHash-function"></a>

ST\$1 GeoHash mengembalikan `geohash` representasi titik input dengan presisi yang ditentukan. Nilai presisi default adalah 20. Untuk informasi lebih lanjut tentang definisi geohash, lihat [Geohash](https://en.wikipedia.org/wiki/Geohash) di Wikipedia.

## Sintaksis
<a name="ST_GeoHash-function-syntax"></a>

```
ST_GeoHash(geom)
```

```
ST_GeoHash(geom, precision)
```

## Argumen
<a name="ST_GeoHash-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *presisi*   
Nilai tipe data`INTEGER`. Defaultnya adalah 20.

## Jenis pengembalian
<a name="ST_GeoHash-function-return"></a>

`GEOMETRY`

Fungsi mengembalikan `geohash` representasi dari titik input. 

Jika titik input kosong, fungsi mengembalikan null. 

Jika geometri input bukan titik, fungsi mengembalikan kesalahan. 

## Contoh
<a name="ST_GeoHash-function-examples"></a>

SQL berikut mengembalikan representasi geohash dari titik input. 

```
SELECT ST_GeoHash(ST_GeomFromText('POINT(45 -45)'), 25) AS geohash;
```

```
          geohash
---------------------------
 m000000000000000000000gzz
```

SQL berikut mengembalikan null karena titik input kosong. 

```
SELECT ST_GeoHash(ST_GeomFromText('POINT EMPTY'), 10) IS NULL AS result;
```

```
 result
---------
 true
```

# ST\$1 GeogFromText
<a name="ST_GeogFromText-function"></a>

ST\$1 GeogFromText membangun objek geografi dari teks terkenal (WKT) atau representasi teks terkenal yang diperluas (EWKT) dari geografi input. 

## Sintaksis
<a name="ST_GeogFromText-function-syntax"></a>

```
ST_GeogFromText(wkt_string)
```

## Argumen
<a name="ST_GeogFromText-function-arguments"></a>

 *wkt\$1string*   
Nilai tipe data `VARCHAR` yang merupakan representasi WKT atau EWKT dari suatu geografi.

## Jenis pengembalian
<a name="ST_GeogFromText-function-return"></a>

`GEOGRAPHY`

Jika nilai SRID diatur ke nilai yang diberikan dalam input. Jika SRID tidak disediakan, itu diatur ke`4326`. 

Jika *wkt\$1string* adalah null, maka null dikembalikan. 

Jika *wkt\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeogFromText-function-examples"></a>

SQL berikut membangun poligon dari objek geografi dengan nilai SRID. 

```
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
  st_asewkt
------------------------------------------------
 SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

SQL berikut membangun poligon dari objek geografi. Nilai SRID diatur ke`4326`.

```
SELECT ST_AsEWKT(ST_GeogFromText('POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

# ST\$1 GeogFrom WKB
<a name="ST_GeogFromWKB-function"></a>

ST\$1 GeogFrom WKB membangun objek geografi dari representasi biner terkenal heksadesimal (WKB) dari geografi input. 

## Sintaksis
<a name="ST_GeogFromWKB-function-syntax"></a>

```
ST_GeogFromWKB(wkb_string)
```

## Argumen
<a name="ST_GeogFromWKB-function-arguments"></a>

 *wkb\$1string*   
Nilai tipe data `VARCHAR` yang merupakan representasi WKB heksadesimal dari suatu geografi.

## Jenis pengembalian
<a name="ST_GeogFromWKB-function-return"></a>

`GEOGRAPHY`

Jika nilai SRID disediakan itu diatur ke nilai yang disediakan. Jika SRID tidak disediakan, itu diatur ke`4326`. 

Jika *wkb\$1string* adalah null, maka null dikembalikan. 

Jika *wkb\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeogFromWKB-function-examples"></a>

SQL berikut membangun geografi dari nilai WKB heksadesimal. 

```
SELECT ST_AsEWKT(ST_GeogFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1Geometryn
<a name="ST_GeometryN-function"></a>

ST\$1Geometryn mengembalikan geometri yang ditunjukkan oleh indeks input dari geometri masukan, sebagai berikut: 
+ Jika input adalah titik, linestring, atau poligon, maka geometri dikembalikan seolah-olah indeks sama dengan satu (1), dan nol jika indeks selain satu (1).
+ Jika input adalah koleksi multipoint, multilinestring, multipoligon, atau geometri, maka kumpulan titik, linestring, poligon, atau geometri dikembalikan seperti yang ditunjukkan oleh indeks input. 

Indeks ini berbasis satu. Pengidentifikasi sistem referensi spasial (SRID) dari hasilnya sama dengan geometri input. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_GeometryN-function-syntax"></a>

```
ST_GeometryN(geom, index)
```

## Argumen
<a name="ST_GeometryN-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili posisi indeks berbasis satu. 

## Jenis pengembalian
<a name="ST_GeometryN-function-return"></a>

`GEOMETRY` 

Jika *geom* atau *indeks* adalah nol, maka null dikembalikan. 

Jika *indeks* berada di luar jangkauan, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeometryN-function-examples"></a>

SQL berikut mengembalikan geometri dalam koleksi geometri. 

```
WITH tmp1(idx) AS (SELECT 1 UNION SELECT 2),
tmp2(g) AS (SELECT ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))
SELECT idx, ST_AsEWKT(ST_GeometryN(g, idx)) FROM tmp1, tmp2 ORDER BY idx;
```

```
 idx |          st_asewkt           
-----+------------------------------
   1 | POLYGON((0 0,10 0,0 10,0 0))
   2 | LINESTRING(20 10,20 0,10 0)
```

# ST\$1 GeometryType
<a name="ST_GeometryType-function"></a>

ST\$1 GeometryType mengembalikan subtipe dari geometri masukan sebagai string. 

Untuk input geometri 3DM, 3DZ, dan 4D, ST\$1 GeometryType mengembalikan hasil yang sama seperti untuk input geometri 2D.

## Sintaksis
<a name="ST_GeometryType-function-syntax"></a>

```
ST_GeometryType(geom)
```

## Argumen
<a name="ST_GeometryType-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_GeometryType-function-return"></a>

`VARCHAR`mewakili subtipe *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Nilai string yang dikembalikan | Subtipe geometri | 
| --- | --- | 
| `ST_Point` | Dikembalikan jika *geom* adalah subtipe `POINT`  | 
| `ST_LineString` | Dikembalikan jika *geom* adalah subtipe `LINESTRING`  | 
| `ST_Polygon` | Dikembalikan jika *geom* adalah subtipe `POLYGON`  | 
| `ST_MultiPoint` | Dikembalikan jika *geom* adalah subtipe `MULTIPOINT`  | 
| `ST_MultiLineString` | Dikembalikan jika *geom* adalah subtipe `MULTILINESTRING`  | 
| `ST_MultiPolygon` | Dikembalikan jika *geom* adalah subtipe `MULTIPOLYGON`  | 
| `ST_GeometryCollection` | Dikembalikan jika *geom* adalah subtipe `GEOMETRYCOLLECTION`  | 

## Contoh
<a name="ST_GeometryType-function-examples"></a>

SQL berikut mengembalikan subtipe dari geometri linestring input. 

```
SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_geometrytype
-------------
 ST_LineString
```

# ST\$1 GeomFrom EWKB
<a name="ST_GeomFromEWKB-function"></a>

ST\$1 GeomFrom EWKB membangun objek geometri dari representasi biner terkenal (EWKB) yang diperluas dari geometri input. 

ST\$1 GeomFrom EWKB menerima geometri 3DZ, 3DM, dan 4D yang ditulis dalam format heksadesimal WKB dan EWKB.

## Sintaksis
<a name="ST_GeomFromEWKB-function-syntax"></a>

```
ST_GeomFromEWKB(ewkb_string)
```

## Argumen
<a name="ST_GeomFromEWKB-function-arguments"></a>

 *ewkb\$1string*   
Nilai tipe data `VARCHAR` yang merupakan representasi EWKB heksadesimal dari geometri.

## Jenis pengembalian
<a name="ST_GeomFromEWKB-function-return"></a>

`GEOMETRY`

Jika *ewkb\$1string* adalah null, maka null dikembalikan. 

Jika *ewkb\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromEWKB-function-examples"></a>

SQL berikut membangun poligon dari nilai EWKB dan mengembalikan representasi EWKT dari poligon. 

```
SELECT ST_AsEWKT(ST_GeomFromEWKB('0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
--------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1 GeomFrom EWKT
<a name="ST_GeomFromEWKT-function"></a>

ST\$1 GeomFrom EWKT membangun objek geometri dari representasi teks terkenal yang diperluas (EWKT) dari geometri input. 

ST\$1 GeomFrom EWKT menerima 3DZ, 3DM, dan 4D di mana tipe geometri masing-masing diawali dengan Z, M, atau ZM.

## Sintaksis
<a name="ST_GeomFromEWKT-function-syntax"></a>

```
ST_GeomFromEWKT(ewkt_string)
```

## Argumen
<a name="ST_GeomFromEWKT-function-arguments"></a>

 *ewkt\$1string*   
Nilai tipe data `VARCHAR` atau ekspresi yang mengevaluasi `VARCHAR` tipe, yaitu representasi EWKT dari geometri.  
Anda dapat menggunakan kata kunci WKT `EMPTY` untuk menunjuk titik kosong, multipoint dengan titik kosong, atau koleksi geometri dengan titik kosong. Contoh berikut menciptakan titik kosong.   

```
ST_GeomFromEWKT('SRID=4326;POINT EMPTY');
```

## Jenis pengembalian
<a name="ST_GeomFromEWKT-function-return"></a>

`GEOMETRY`

Jika *ewkt\$1string* adalah null, maka null dikembalikan. 

Jika *ewkt\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromEWKT-function-examples"></a>

SQL berikut membangun multilinestring dari nilai EWKT dan mengembalikan geometri. Ini juga mengembalikan hasil st\$1Asewkt dari geometri. 

```
SELECT ST_GeomFromEWKT('SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))') as geom, ST_AsEWKT(geom);
```

```
                                                                                                                                                       geom                                                                                                                                                       |                          st_asewkt                           
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------
 0105000020E610000003000000010200000002000000000000000000F03F0000000000000000000000000000F03F00000000000000000102000000020000000000000000000040000000000000000000000000000008400000000000000000010200000003000000000000000000104000000000000000000000000000001440000000000000000000000000000018400000000000000000 | SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))
```

# ST\$1 GeomFromGeoHash
<a name="ST_GeomFromGeoHash-function"></a>

ST\$1 GeomFromGeoHash membangun objek geometri dari representasi geohash dari geometri input. ST\$1 GeomFromGeoHash mengembalikan geometri dua dimensi (2D) dengan pengidentifikasi referensi spasial (SRID) nol (0). Untuk informasi lebih lanjut tentang format geohash, lihat [Geohash](https://en.wikipedia.org/wiki/Geohash) di Wikipedia. 

## Sintaksis
<a name="ST_GeomFromGeoHash-function-syntax"></a>

```
ST_GeomFromGeoHash(geohash_string)
```

```
ST_GeomFromGeoHash(geohash_string, precision)
```

## Argumen
<a name="ST_GeomFromGeoHash-function-arguments"></a>

 *geohash\$1string*   
Nilai tipe data `VARCHAR` atau ekspresi yang mengevaluasi `VARCHAR` tipe, yaitu representasi geohash dari geometri.

 *presisi*   
Nilai tipe data `INTEGER` yang mewakili ketepatan geohash. Nilainya adalah jumlah karakter geohash yang akan digunakan sebagai presisi. *Jika nilai tidak ditentukan, kurang dari nol, atau lebih besar dari panjang *geohash\$1string. maka panjang geohash\$1string* digunakan.*

## Jenis pengembalian
<a name="ST_GeomFromGeoHash-function-return"></a>

`GEOMETRY`

Jika *geohash\$1string* adalah null, maka null dikembalikan. 

Jika *geohash\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromGeoHash-function-examples"></a>

SQL berikut mengembalikan poligon dengan presisi tinggi. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))
```

SQL berikut mengembalikan titik dengan presisi tinggi. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz00'));
```

```
 st_asewkt       
-----------------------
 POINT(-115.172816 36.114646)
```

SQL berikut mengembalikan poligon dengan presisi rendah. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qq'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

SQL berikut mengembalikan poligon dengan presisi 3. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 3));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

# ST\$1 JSON GeomFromGeo
<a name="ST_GeomFromGeoJSON-function"></a>

ST\$1 GeomFromGeo JSON membangun objek geometri dari representasi GeoJSON dari geometri input. Untuk informasi selengkapnya tentang format GeoJSON, lihat [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) di Wikipedia. 

Jika setidaknya ada satu titik dengan tiga atau lebih koordinat, geometri yang dihasilkan adalah 3DZ, di mana komponen Z adalah nol untuk titik-titik yang hanya memiliki dua koordinat. Jika semua titik dalam input GeoJSON berisi dua koordinat atau kosong, GeomFromGeo ST\$1 JSON mengembalikan geometri 2D. Geometri yang dikembalikan selalu memiliki pengenal referensi spasial (SRID) 4326.

## Sintaksis
<a name="ST_GeomFromGeoJSON-function-syntax"></a>

```
ST_GeomFromGeoJSON(geojson_string)
```

## Argumen
<a name="ST_GeomFromGeoJSON-function-arguments"></a>

 *geojson\$1string*   
Nilai tipe data `VARCHAR` atau`SUPER`, atau ekspresi yang mengevaluasi `VARCHAR` tipe, yang merupakan representasi GeoJSON dari geometri.

## Jenis pengembalian
<a name="ST_GeomFromGeoJSON-function-return"></a>

`GEOMETRY`

Jika *geojson\$1string* adalah null, maka null dikembalikan. 

Jika *geojson\$1string* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromGeoJSON-function-examples"></a>

SQL berikut mengembalikan geometri 2D diwakili dalam GeoJSON input. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1,2]}'));
```

```
 st_asewkt       
-----------------------
 SRID=4326;POINT(1 2)
```

SQL berikut mengembalikan geometri 3DZ diwakili dalam input GeoJSON. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}'));
```

```
 st_asewkt  
------------------------------------------
 SRID=4326;LINESTRING Z (1 2 3,4 5 6,7 8 9)
```

SQL berikut mengembalikan geometri 3DZ ketika hanya satu titik memiliki tiga koordinat sementara semua titik lainnya memiliki dua koordinat dalam input GeoJSON. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[0, 0],[0, 1, 8],[1, 0],[0, 0]]]}'));
```

```
 st_asewkt  
------------------------------------------------
 SRID=4326;POLYGON Z ((0 0 0,0 1 8,1 0 0,0 0 0))
```

# ST\$1 GeomFromGeoSquare
<a name="ST_GeomFromGeoSquare-function"></a>

ST\$1 GeomFromGeoSquare mengembalikan geometri yang mencakup area yang diwakili oleh nilai geosquare input. Geometri yang dikembalikan selalu dua dimensi. Untuk menghitung nilai geosquare, lihat. [ST\$1 GeoSquare](ST_GeoSquare-function.md)

## Sintaksis
<a name="ST_GeomFromGeoSquare-function-syntax"></a>

```
ST_GeomFromGeoSquare(geosquare)
```

```
ST_GeomFromGeoSquare(geosquare, max_depth)
```

## Argumen
<a name="ST_GeomFromGeoSquare-function-arguments"></a>

 *geosquare*   
Nilai tipe data `BIGINT` atau ekspresi yang mengevaluasi `BIGINT` tipe yang merupakan nilai geosquare yang menggambarkan urutan subdivisi yang dibuat pada domain awal untuk mencapai kuadrat yang diinginkan. Nilai ini dihitung oleh[ST\$1 GeoSquare](ST_GeoSquare-function.md).

 *max\$1depth*   
Nilai tipe data `INTEGER` yang mewakili jumlah maksimum subdivisi domain yang dibuat pada domain awal. Nilai harus lebih besar dari atau sama dengan`1`.

## Jenis pengembalian
<a name="ST_GeomFromGeoSquare-function-return"></a>

`GEOMETRY`

Jika *geosquare* tidak valid, fungsi mengembalikan kesalahan. 

Jika masukan *max\$1depth* tidak dalam jangkauan, fungsi mengembalikan kesalahan. 

## Contoh
<a name="ST_GeomFromGeoSquare-function-examples"></a>

SQL berikut mengembalikan geometri dari nilai geosquare.

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852));
```

```
 st_astext       
--------------------------------------------------------------------------------------------------------------------
 POLYGON((13.359375 52.3828125,13.359375 52.734375,13.7109375 52.734375,13.7109375 52.3828125,13.359375 52.3828125))
```

SQL berikut mengembalikan geometri dari nilai geosquare dan kedalaman maksimum. `3` 

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852, 3));
```

```
 st_astext       
--------------------------------------
 POLYGON((0 45,0 90,45 90,45 45,0 45))
```

SQL berikut pertama-tama menghitung nilai geosquare untuk Seattle dengan menentukan koordinat x sebagai bujur dan koordinat y sebagai garis lintang (-122.3, 47.6). Kemudian ia mengembalikan poligon untuk geosquare. Meskipun outputnya adalah geometri dua dimensi, dapat digunakan untuk menghitung data spasial dalam hal bujur dan lintang.

```
SELECT ST_AsText(ST_GeomFromGeoSquare(ST_GeoSquare(ST_Point(-122.3, 47.6))));
```

```
 st_astext
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((-122.335167014971 47.6080129947513,-122.335167014971 47.6080130785704,-122.335166931152 47.6080130785704,-122.335166931152 47.6080129947513,-122.335167014971 47.6080129947513))
```

# ST\$1 GeomFromText
<a name="ST_GeomFromText-function"></a>

ST\$1 GeomFromText membangun objek geometri dari representasi teks terkenal (WKT) dari geometri input. 

ST\$1 GeomFromText menerima 3DZ, 3DM, dan 4D di mana tipe geometri diawali dengan Z, M, atau ZM, masing-masing.

## Sintaksis
<a name="ST_GeomFromText-function-syntax"></a>

```
ST_GeomFromText(wkt_string)
```

```
ST_GeomFromText(wkt_string, srid)
```

## Argumen
<a name="ST_GeomFromText-function-arguments"></a>

 *wkt\$1string*   
Nilai tipe data `VARCHAR` yang merupakan representasi WKT dari geometri.  
Anda dapat menggunakan kata kunci WKT `EMPTY` untuk menunjuk titik kosong, multipoint dengan titik kosong, atau koleksi geometri dengan titik kosong. Contoh berikut menciptakan multipoint dengan satu kosong dan satu titik nonempty.   

```
ST_GeomFromEWKT('MULTIPOINT(1 0,EMPTY)');
```

 *srid*   
Nilai tipe data `INTEGER` yang merupakan pengidentifikasi referensi spasial (SRID). Jika nilai SRID disediakan, geometri yang dikembalikan memiliki nilai SRID ini. Jika tidak, nilai SRID dari geometri yang dikembalikan diatur ke nol (0).

## Jenis pengembalian
<a name="ST_GeomFromText-function-return"></a>

`GEOMETRY`

Jika *wkt\$1string* atau *srid* adalah null, maka null dikembalikan. 

Jika *srid* negatif, maka null dikembalikan. 

Jika *wkt\$1string* tidak valid, maka kesalahan dikembalikan. 

Jika *srid* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromText-function-examples"></a>

SQL berikut membangun objek geometri dari representasi WKT dan nilai SRID. 

```
SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326);
```

```
st_geomfromtext
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1 GeomFrom WKB
<a name="ST_GeomFromWKB-function"></a>

ST\$1 GeomFrom WKB membangun objek geometri dari representasi biner terkenal heksadesimal (WKB) dari geometri input. 

ST\$1 GeomFrom WKB menerima geometri 3DZ, 3DM, dan 4D yang ditulis dalam format heksadesimal WKB.

## Sintaksis
<a name="ST_GeomFromWKB-function-syntax"></a>

```
ST_GeomFromWKB(wkb_string)
```

```
ST_GeomFromWKB(wkb_string, srid)
```

## Argumen
<a name="ST_GeomFromWKB-function-arguments"></a>

 *wkb\$1string*   
Nilai tipe data `VARCHAR` yang merupakan representasi WKB heksadesimal dari geometri.

 *srid*   
Nilai tipe data `INTEGER` yang merupakan pengidentifikasi referensi spasial (SRID). Jika nilai SRID disediakan, geometri yang dikembalikan memiliki nilai SRID ini. Jika tidak, nilai SRID dari geometri yang dikembalikan diatur ke 0.

## Jenis pengembalian
<a name="ST_GeomFromWKB-function-return"></a>

`GEOMETRY`

Jika *wkb\$1string* atau *srid* adalah null, maka null dikembalikan. 

Jika *srid* negatif, maka null dikembalikan. 

Jika *wkb\$1string* tidak valid, maka kesalahan dikembalikan. 

Jika *srid* tidak valid, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_GeomFromWKB-function-examples"></a>

SQL berikut membangun poligon dari nilai WKB dan mengembalikan representasi WKT dari poligon. 

```
SELECT ST_AsText(ST_GeomFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));            
```

```
 st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1 GeoSquare
<a name="ST_GeoSquare-function"></a>

*ST\$1 GeoSquare secara rekursif membagi domain ([-180, 180], [-90, 90]) menjadi wilayah kuadrat yang sama yang disebut geosquares ke kedalaman tertentu.* Subdivisi didasarkan pada lokasi titik yang disediakan. Salah satu geosquares yang berisi titik dibagi lagi pada setiap langkah hingga mencapai kedalaman maksimum. Pemilihan geosquare ini stabil, yaitu hasil fungsi hanya bergantung pada argumen masukan. Fungsi mengembalikan nilai unik yang mengidentifikasi geosquare akhir di mana titik berada.

ST\$1 GeoSquare menerima TITIK di mana koordinat x mewakili garis bujur, dan koordinat y mewakili garis lintang. Bujur dan lintang terbatas pada [-180, 180] dan [-90, 90], masing-masing. Output ST\$1 GeoSquare dapat digunakan sebagai input ke [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md) fungsi.

Ada 360° di sekitar busur keliling khatulistiwa Bumi yang dibagi menjadi dua belahan (Timur dan Barat), masing-masing dengan 180° garis longitudinal (Meridian) dari Meridian 0°. Menurut konvensi, garis bujur timur adalah koordinat “\$1” (positif) ketika diproyeksikan ke sumbu x pada bidang Cartesian dan garis bujur barat adalah koordinat “-” (negatif) ketika diproyeksikan ke sumbu x pada bidang Cartesian. Ada 90° garis lintang utara dan selatan keliling khatulistiwa 0° Bumi, masing-masing paralel dengan keliling ekuator 0° Bumi. Menurut konvensi, garis lintang utara memotong sumbu y “\$1” (positif) ketika diproyeksikan ke bidang Cartesian, dan garis lintang selatan memotong sumbu y “-” (negatif) ketika diproyeksikan ke bidang Cartesian. Kisi bola yang dibentuk oleh persimpangan garis longitudinal dan garis lintang diubah menjadi kisi yang diproyeksikan ke bidang Cartesian dengan koordinat x positif dan negatif standar dan koordinat y positif dan negatif pada bidang Cartesian.

Tujuan ST\$1 GeoSquare adalah untuk menandai atau menandai titik tutup dengan nilai kode yang sama. Poin yang terletak di geosquare yang sama menerima nilai kode yang sama. Geosquare digunakan untuk mengkodekan koordinat geografis (lintang dan bujur) menjadi bilangan bulat. Wilayah yang lebih besar dibagi menjadi grid untuk menggambarkan area pada peta dengan resolusi yang bervariasi. Geosquare dapat digunakan untuk pengindeksan spasial, binning spasial, pencarian kedekatan, pencarian lokasi, dan membuat pengidentifikasi tempat yang unik. [ST\$1 GeoHash](ST_GeoHash-function.md)Fungsi ini mengikuti proses serupa membagi wilayah menjadi grid, tetapi memiliki pengkodean yang berbeda.

## Sintaksis
<a name="ST_GeoSquare-function-syntax"></a>

```
ST_GeoSquare(geom)
```

```
ST_GeoSquare(geom, max_depth)
```

## Argumen
<a name="ST_ST_GeoSquare-function-arguments"></a>

 *geom*   
Nilai POINT dari tipe data `GEOMETRY` atau ekspresi yang mengevaluasi subtipe POINT. Koordinat x (bujur) titik harus berada dalam kisaran: `-180` —`180`. Koordinat y (lintang) titik harus berada dalam kisaran: `-90` —`90`. 

 *max\$1depth*   
Nilai tipe data`INTEGER`. Jumlah maksimum kali domain yang berisi titik dibagi lagi secara rekursif. Nilai harus berupa bilangan bulat dari 1 — 32. Default-nya adalah 32. *Jumlah akhir sebenarnya dari subdivisi kurang dari atau sama dengan max\$1depth yang ditentukan.* 

## Jenis pengembalian
<a name="ST_GeoSquare-function-return"></a>

`BIGINT`

Fungsi mengembalikan nilai unik yang mengidentifikasi geosquare akhir di mana titik input berada. 

Jika input *geom* bukan titik, fungsi mengembalikan kesalahan. 

Jika titik input kosong, nilai yang dikembalikan bukan input yang valid ke [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md) fungsi. Gunakan [ST\$1 IsEmpty](ST_IsEmpty-function.md) fungsi untuk mencegah panggilan ke ST\$1 GeoSquare dengan titik kosong. 

Jika titik input tidak dalam jangkauan, fungsi mengembalikan kesalahan. 

Jika input *max\$1depth* berada di luar jangkauan, fungsi mengembalikan kesalahan. 

## Contoh
<a name="ST_ST_GeoSquare-function-examples"></a>

SQL berikut mengembalikan geosquare dari titik input. 

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5));
```

```
  st_geosquare
-----------------------
 -4410772491521635895
```

SQL berikut mengembalikan geosquare dari titik input dengan kedalaman maksimum. `10` 

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5), 10);
```

```
 st_geosquare
--------------
 797852
```

# ST\$1 N InteriorRing
<a name="ST_InteriorRingN-function"></a>

ST\$1 InteriorRing N mengembalikan linestring tertutup yang sesuai dengan cincin interior poligon input pada posisi indeks. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_InteriorRingN-function-syntax"></a>

```
ST_InteriorRingN(geom, index)
```

## Argumen
<a name="ST_InteriorRingN-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili posisi cincin indeks berbasis satu. 

## Jenis pengembalian
<a name="ST_InteriorRingN-function-return"></a>

`GEOMETRY`dari subtipe`LINESTRING`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom* atau *indeks* adalah nol, maka null dikembalikan. 

Jika *indeks* berada di luar jangkauan, maka null dikembalikan. 

Jika *geom* bukan poligon, maka null dikembalikan. 

Jika *geom* adalah poligon kosong, maka null dikembalikan. 

## Contoh
<a name="ST_InteriorRingN-function-examples"></a>

SQL berikut mengembalikan cincin kedua poligon sebagai linestring tertutup. 

```
SELECT ST_AsEWKT(ST_InteriorRingN(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'),2));
```

```
st_asewkt
-----------
 LINESTRING(12 14,15 14,13 11,12 14)
```

# ST\$1berpotongan
<a name="ST_Intersects-function"></a>

ST\$1Intersects mengembalikan true jika proyeksi 2D dari dua geometri input memiliki setidaknya satu titik yang sama. 

## Sintaksis
<a name="ST_Intersects-function-syntax"></a>

```
ST_Intersects(geom1, geom2)
```

## Argumen
<a name="ST_Intersects-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Intersects-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Intersects-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama memotong poligon kedua. 

```
SELECT ST_Intersects(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_GeomFromText('MULTIPOINT((4 4),(6 6))'));
```

```
st_intersects              
-------------
 true
```

# Persimpangan ST\$1
<a name="ST_Intersection-function"></a>

ST\$1Intersection mengembalikan geometri yang mewakili persimpangan titik-set dari dua geometri. Artinya, ia mengembalikan bagian dari dua geometri input yang dibagi di antara mereka. 

## Sintaksis
<a name="ST_Intersection-function-syntax"></a>

```
ST_Intersection(geom1, geom2)
```

## Argumen
<a name="ST_Intersection-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Intersection-function-return"></a>

`GEOMETRY`

Jika *geom1* dan *geom2* tidak berbagi ruang apa pun (mereka terpisah), maka geometri kosong dikembalikan. 

Jika *geom1* atau *geom2* kosong, maka geometri kosong dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

Jika *geom1* atau *geom2* bukan geometri dua dimensi (2D), maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Intersection-function-examples"></a>

SQL berikut mengembalikan geometri non-kosong yang mewakili persimpangan dua geometri input. 

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('polygon((0 0,100 100,0 200,0 0))'), ST_GeomFromText('polygon((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 10,5 5,0 0))
```

SQL berikut mengembalikan geometri kosong ketika melewati geometri input disjoint (non-intersecting). 

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('linestring(0 100,0 0)'), ST_GeomFromText('polygon((1 0,10 0,1 10,1 0))')));
```

```
    st_asewkt     
------------------
 LINESTRING EMPTY
```

# ST\$1 CCW IsPolygon
<a name="ST_IsPolygonCCW-function"></a>

ST\$1 IsPolygon CCW mengembalikan true jika proyeksi 2D dari poligon input atau multipoligon berlawanan arah jarum jam. Jika geometri input adalah titik, linestring, multipoint, atau multilinestring, maka true dikembalikan. Untuk koleksi geometri, ST\$1 IsPolygon CCW mengembalikan nilai true jika semua geometri dalam koleksi berlawanan arah jarum jam. 

## Sintaksis
<a name="ST_IsPolygonCCW-function-syntax"></a>

```
ST_IsPolygonCCW(geom)
```

## Argumen
<a name="ST_IsPolygonCCW-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsPolygonCCW-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsPolygonCCW-function-examples"></a>

SQL berikut memeriksa apakah poligon berlawanan arah jarum jam. 

```
SELECT ST_IsPolygonCCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1 CW IsPolygon
<a name="ST_IsPolygonCW-function"></a>

ST\$1 IsPolygon CW mengembalikan true jika proyeksi 2D dari poligon input atau multipoligon searah jarum jam. Jika geometri input adalah titik, linestring, multipoint, atau multilinestring, maka true dikembalikan. Untuk koleksi geometri, ST\$1 IsPolygon CW mengembalikan nilai true jika semua geometri dalam koleksi searah jarum jam. 

## Sintaksis
<a name="ST_IsPolygonCW-function-syntax"></a>

```
ST_IsPolygonCW(geom)
```

## Argumen
<a name="ST_IsPolygonCW-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsPolygonCW-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsPolygonCW-function-examples"></a>

SQL berikut memeriksa apakah poligon searah jarum jam. 

```
SELECT ST_IsPolygonCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1 IsClosed
<a name="ST_IsClosed-function"></a>

ST\$1 IsClosed mengembalikan true jika proyeksi 2D dari geometri input ditutup. Aturan berikut mendefinisikan geometri tertutup: 
+ Geometri input adalah titik atau multipoint. 
+ Geometri input adalah linestring, dan titik awal dan akhir dari linestring bertepatan. 
+ Geometri input adalah multilinestring nonempty dan semua linestringnya ditutup. 
+ Geometri masukan adalah poligon yang tidak kosong, semua cincin poligon tidak kosong, dan titik awal dan akhir dari semua cincinnya bertepatan. 
+ Geometri masukan adalah multipoligon nonempty dan semua poligon tertutup.
+ Geometri input adalah kumpulan geometri yang tidak kosong dan semua komponennya ditutup. 

## Sintaksis
<a name="ST_IsClosed-function-syntax"></a>

```
ST_IsClosed(geom)
```

## Argumen
<a name="ST_IsClosed-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsClosed-function-return"></a>

`BOOLEAN`

Jika *geom* adalah titik kosong, maka false dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsClosed-function-examples"></a>

SQL berikut memeriksa apakah poligon ditutup. 

```
SELECT ST_IsClosed(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isclosed
-----------
 true
```

# ST\$1 IsCollection
<a name="ST_IsCollection-function"></a>

ST\$1 IsCollection mengembalikan true jika geometri masukan adalah salah satu subtipe berikut:`GEOMETRYCOLLECTION`,,`MULTIPOINT`, `MULTILINESTRING` atau. `MULTIPOLYGON` 

## Sintaksis
<a name="ST_IsCollection-function-syntax"></a>

```
ST_IsCollection(geom)
```

## Argumen
<a name="ST_IsCollection-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsCollection-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsCollection-function-examples"></a>

SQL berikut memeriksa apakah poligon adalah koleksi. 

```
SELECT ST_IsCollection(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_iscollection
-----------
 false
```

# ST\$1 IsEmpty
<a name="ST_IsEmpty-function"></a>

ST\$1 IsEmpty mengembalikan true jika geometri masukan kosong. Geometri tidak kosong jika mengandung setidaknya satu titik tidak kosong. 

ST\$1 IsEmpty mengembalikan nilai true jika geometri masukan memiliki setidaknya satu titik nonempty. 

## Sintaksis
<a name="ST_IsEmpty-function-syntax"></a>

```
ST_IsEmpty(geom)
```

## Argumen
<a name="ST_IsEmpty-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsEmpty-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsEmpty-function-examples"></a>

SQL berikut memeriksa apakah poligon yang ditentukan kosong. 

```
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isempty
-----------
 false
```

# ST\$1 IsRing
<a name="ST_IsRing-function"></a>

ST\$1 IsRing mengembalikan true jika input linestring adalah cincin. Linestring adalah cincin jika tertutup dan sederhana. 

## Sintaksis
<a name="ST_IsRing-function-syntax"></a>

```
ST_IsRing(geom)
```

## Argumen
<a name="ST_IsRing-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Geometri harus berupa a. `LINESTRING`

## Jenis pengembalian
<a name="ST_IsRing-function-return"></a>

`BOOLEAN`

Jika *geom* bukan a`LINESTRING`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_IsRing-function-examples"></a>

SQL berikut memeriksa apakah linestring yang ditentukan adalah cincin. 

```
SELECT ST_IsRing(ST_GeomFromText('linestring(0 0, 1 1, 1 2, 0 0)'));
```

```
st_isring
-----------
 true
```

# ST\$1 IsSimple
<a name="ST_IsSimple-function"></a>

ST\$1 IsSimple mengembalikan true jika proyeksi 2D dari geometri input sederhana. Untuk informasi lebih lanjut tentang definisi geometri sederhana, lihat[Kesederhanaan geometris](spatial-terminology.md#spatial-terminology-simplicity). 

## Sintaksis
<a name="ST_IsSimple-function-syntax"></a>

```
ST_IsSimple(geom)
```

## Argumen
<a name="ST_IsSimple-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsSimple-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsSimple-function-examples"></a>

SQL berikut memeriksa apakah linestring yang ditentukan sederhana. Dalam contoh ini, ini tidak sederhana karena memiliki persimpangan diri. 

```
SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(0 0,10 0,5 5,5 -5)'));
```

```
 st_issimple
-----------
 false
```

# ST\$1 IsValid
<a name="ST_IsValid-function"></a>

ST\$1 IsValid mengembalikan true jika proyeksi 2D dari geometri input valid. Untuk informasi lebih lanjut tentang definisi geometri yang valid, lihat[Validitas geometris](spatial-terminology.md#spatial-terminology-validity). 

## Sintaksis
<a name="ST_IsValid-function-syntax"></a>

```
ST_IsValid(geom)
```

## Argumen
<a name="ST_IsValid-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_IsValid-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_IsValid-function-examples"></a>

SQL berikut memeriksa apakah poligon yang ditentukan valid. Dalam contoh ini, poligon tidak valid karena bagian dalam poligon tidak hanya terhubung. 

```
SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 0,10 5,5 10,0 5,5 0))'));
```

```
 st_isvalid
-----------
 false
```

# ST\$1length
<a name="ST_Length-function"></a>

Untuk geometri linier, ST\$1length mengembalikan panjang Cartesian dari proyeksi 2D. Satuan panjang sama dengan satuan di mana koordinat geometri input dinyatakan. Fungsi mengembalikan nol (0) untuk titik, multipoint, dan geometri areal. Ketika input adalah koleksi geometri, fungsi mengembalikan jumlah panjang geometri dalam koleksi. 

Untuk geografi, ST\$1length mengembalikan panjang geodesik proyeksi 2D dari geografi linier input yang dihitung pada spheroid yang ditentukan oleh SRID. Satuan panjangnya dalam meter. Fungsi mengembalikan nol (0) untuk titik, multipoint, dan geografi areal. Ketika input adalah kumpulan geometri, fungsi mengembalikan jumlah panjang geografi dalam koleksi.

## Sintaksis
<a name="ST_Length-function-syntax"></a>

```
ST_Length(geo)
```

## Argumen
<a name="ST_Length-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_Length-function-return"></a>

`DOUBLE PRECISION`

Jika *geo* adalah null, maka null dikembalikan.

Jika nilai SRID tidak ditemukan, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Length-function-examples"></a>

SQL berikut mengembalikan panjang Cartesian dari multilinestring. 

```
SELECT ST_Length(ST_GeomFromText('MULTILINESTRING((0 0,10 0,0 10),(10 0,20 0,20 10))'));
```

```
st_length
--------------------------------
  44.142135623731
```

SQL berikut mengembalikan panjang linestring dalam geografi. 

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;LINESTRING(5 0,6 0,4 0)'));
```

```
 st_length 
------------------
 333958.472379804
```

SQL berikut mengembalikan panjang titik dalam geografi. 

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;POINT(4 5)'));
```

```
 st_length 
-----------
 0
```

# ST\$1 LengthSphere
<a name="ST_LengthSphere-function"></a>

ST\$1 LengthSphere mengembalikan panjang geometri linier dalam meter. Untuk geometri titik, multipoint, dan areal, LengthSphere ST\$1 mengembalikan 0. Untuk koleksi geometri, ST\$1 LengthSphere mengembalikan panjang total geometri linier dalam koleksi dalam meter. 

ST\$1 LengthSphere menafsirkan koordinat setiap titik geometri input sebagai bujur dan garis lintang dalam derajat. Untuk geometri 3DZ, 3DM, atau 4D, hanya dua koordinat pertama yang digunakan.

## Sintaksis
<a name="ST_LengthSphere-function-syntax"></a>

```
ST_LengthSphere(geom)
```

## Argumen
<a name="ST_LengthSphere-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_LengthSphere-function-return"></a>

`DOUBLE PRECISION`panjangnya dalam meter. Perhitungan panjang didasarkan pada model bola Bumi yang radiusnya adalah radius rata-rata Bumi dari Sistem Geodetik Dunia (WGS) 84 model elipsoidal Bumi. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_LengthSphere-function-examples"></a>

Contoh SQL berikut menghitung panjang linestring dalam meter. 

```
SELECT ST_LengthSphere(ST_GeomFromText('LINESTRING(10 10,45 45)'));
```

```
 st_lengthsphere  
------------------
 5127736.08292556
```

# ST\$1Panjang2D
<a name="ST_Length2D-function"></a>

ST\$1length2D adalah alias untuk ST\$1length. Untuk informasi selengkapnya, lihat [ST\$1length](ST_Length-function.md). 

# ST\$1 LineFromMultiPoint
<a name="ST_LineFromMultiPoint-function"></a>

ST\$1 LineFromMultiPoint mengembalikan linestring dari geometri multipoint input. Urutan poin dipertahankan. Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan geometri input. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_LineFromMultiPoint-function-syntax"></a>

```
ST_LineFromMultiPoint(geom)
```

## Argumen
<a name="ST_LineFromMultiPoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `MULTIPOINT` 

## Jenis pengembalian
<a name="ST_LineFromMultiPoint-function-return"></a>

`GEOMETRY`

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka kosong `LINESTRING` dikembalikan. 

Jika *geom* berisi poin kosong, maka titik-titik kosong ini diabaikan. 

Jika *geom* bukan a`MULTIPOINT`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_LineFromMultiPoint-function-examples"></a>

SQL berikut menciptakan linestring dari multipoint. 

```
SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromText('MULTIPOINT(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
 st_asewkt
---------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5)
```

# ST\$1 LineInterpolatePoint
<a name="ST_LineInterpolatePoint-function"></a>

ST\$1 LineInterpolatePoint mengembalikan titik sepanjang garis pada jarak pecahan dari awal garis. 

Untuk menentukan kesetaraan titik, ST\$1 LineInterpolatePoint beroperasi pada proyeksi 2D dari geometri input. Jika geometri input kosong, salinannya dikembalikan dalam dimensi yang sama dengan input. Untuk geometri 3DZ, 3DM, dan 4D, `m` koordinat `z` atau adalah rata-rata `z` atau `m` koordinat segmen tempat titik berada.

## Sintaksis
<a name="ST_LineInterpolatePoint-function-syntax"></a>

```
ST_LineInterpolatePoint(geom, fraction)
```

## Argumen
<a name="ST_LineInterpolatePoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe adalah`LINESTRING`. 

 *fraksi*   
Nilai tipe data `DOUBLE PRECISION` yang mewakili posisi titik di sepanjang linestring untuk garis. Nilainya adalah pecahan dalam kisaran 0-1, inklusif. 

## Jenis pengembalian
<a name="ST_LineInterpolatePoint-function-return"></a>

`GEOMETRY`dari subtipe`POINT`. 

Jika *geom* atau *fraksi* adalah nol, maka null dikembalikan. 

Jika *geom* kosong, maka titik kosong dikembalikan. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *pecahan* berada di luar jangkauan, maka kesalahan dikembalikan. 

Jika *geom* bukan linestring, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_LineInterpolatePoint-function-examples"></a>

SQL berikut mengembalikan titik setengah jalan sepanjang linestring.

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.50));
```

```
st_asewkt
-----------
 POINT(5 5)
```

SQL berikut mengembalikan titik 90 persen dari jalan sepanjang linestring.

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.90));
```

```
st_asewkt
-----------
 POINT(9 9)
```

# ST\$1M
<a name="ST_M-function"></a>

ST\$1M mengembalikan `m` koordinat titik masukan. 

## Sintaksis
<a name="ST_M-function-syntax"></a>

```
ST_M(point)
```

## Argumen
<a name="ST_M-function-arguments"></a>

 *titik*   
`POINT`Nilai tipe data`GEOMETRY`. 

## Jenis pengembalian
<a name="ST_M-function-return"></a>

`DOUBLE PRECISION`nilai `m` koordinat.

Jika *titik* nol, maka null dikembalikan. 

Jika *titik adalah titik* 2D atau 3DZ, maka null dikembalikan. 

Jika *titik* adalah titik kosong, maka null dikembalikan. 

Jika *titik* bukan a`POINT`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_M-function-examples"></a>

SQL berikut mengembalikan `m` koordinat titik dalam geometri 3DM. 

```
SELECT ST_M(ST_GeomFromEWKT('POINT M (1 2 3)'));
```

```
st_m
-----------
 3
```

SQL berikut mengembalikan `m` koordinat titik dalam geometri 4D. 

```
SELECT ST_M(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_m
-----------
 4
```

# ST\$1 MakeEnvelope
<a name="ST_MakeEnvelope-function"></a>

ST\$1 MakeEnvelope mengembalikan geometri sebagai berikut:
+ Jika koordinat input menentukan titik, maka geometri yang dikembalikan adalah titik. 
+ Jika koordinat input menentukan garis, maka geometri yang dikembalikan adalah linestring. 
+ Jika tidak, geometri yang dikembalikan adalah poligon, di mana koordinat input menentukan sudut kiri bawah dan kanan atas kotak. 

Jika disediakan, nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan diatur ke nilai SRID masukan. 

## Sintaksis
<a name="ST_MakeEnvelope-function-syntax"></a>

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax)
```

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid)
```

## Argumen
<a name="ST_MakeEnvelope-function-arguments"></a>

 *xmin*   
Nilai tipe data`DOUBLE PRECISION`. Nilai ini adalah koordinat pertama dari sudut kiri bawah kotak. 

 *ymin*   
Nilai tipe data`DOUBLE PRECISION`. Nilai ini adalah koordinat kedua dari sudut kiri bawah kotak. 

 *xmax*   
Nilai tipe data`DOUBLE PRECISION`. Nilai ini adalah koordinat pertama dari sudut kanan atas kotak. 

 *ymax*   
Nilai tipe data`DOUBLE PRECISION`. Nilai ini adalah koordinat kedua dari sudut kanan atas kotak. 

 *srid*   
Nilai tipe data `INTEGER` yang mewakili pengidentifikasi sistem referensi spasial (SRID). Jika nilai SRID tidak disediakan, maka itu diatur ke nol. 

## Jenis pengembalian
<a name="ST_MakeEnvelope-function-return"></a>

`GEOMETRY`dari subtipe`POINT`,`LINESTRING`, atau`POLYGON`. 

SRID dari geometri yang dikembalikan disetel ke `srid` atau nol jika `srid` tidak disetel. 

Jika *xmin*, *ymin*, *xmax, *ymax**, atau *srid* adalah null, maka null dikembalikan.

Jika *srid* negatif, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_MakeEnvelope-function-examples"></a>

SQL berikut mengembalikan poligon yang mewakili amplop yang ditentukan oleh empat nilai koordinat masukan. 

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7));
```

```
 st_astext
---------------
 POLYGON((2 4,2 7,5 7,5 4,2 4))
```

SQL berikut mengembalikan poligon yang mewakili amplop yang ditentukan oleh empat nilai koordinat input dan nilai SRID. 

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7,4326));
```

```
 st_astext
----------------------------------
 SRID=4326;POLYGON((2 4,2 7,5 7,5 4,2 4))
```

# ST\$1 MakeLine
<a name="ST_MakeLine-function"></a>

ST\$1 MakeLine membuat linestring dari geometri input. 

Dimensi geometri yang dikembalikan sama dengan geometri input. Kedua geometri input harus memiliki dimensi yang sama.

## Sintaksis
<a name="ST_MakeLine-function-syntax"></a>

```
ST_MakeLine(geom1, geom2)
```

## Argumen
<a name="ST_MakeLine-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus`POINT`,`LINESTRING`, atau`MULTIPOINT`. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus`POINT`,`LINESTRING`, atau`MULTIPOINT`. 

## Jenis pengembalian
<a name="ST_MakeLine-function-return"></a>

`GEOMETRY`dari subtipe`LINESTRING`. 

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* adalah titik kosong atau berisi titik kosong, maka titik-titik kosong ini diabaikan. 

Jika *geom1* dan *geom2* kosong, maka kosong dikembalikan. `LINESTRING` 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Jika *geom1* dan *geom2* memiliki nilai SRID yang berbeda, maka kesalahan dikembalikan. 

Jika *geom1* atau *geom2* bukan,, atau `POINT` `LINESTRING``MULTIPOINT`, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* memiliki dimensi yang berbeda, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_MakeLine-function-examples"></a>

SQL berikut membangun linestring dari dua linestrings input. 

```
SELECT ST_MakeLine(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'), ST_GeomFromText('LINESTRING(88.29 39.07,88.42 39.26,88.27 39.31,88.29 39.07)'));
```

```
st_makeline
-----------
 010200000008000000C3F5285C8F52534052B81E85EB113D407B14AE47E15A5340C3F5285C8F423D40E17A14AE475153408FC2F5285C4F3D40C3F5285C8F52534052B81E85EB113D40C3F5285C8F125640295C8FC2F58843407B14AE47E11A5640E17A14AE47A14340E17A14AE4711564048E17A14AEA74340C3F5285C8F125640295C8FC2F5884340
```

# ST\$1 MakePoint
<a name="ST_MakePoint-function"></a>

ST\$1 MakePoint mengembalikan geometri titik yang nilai koordinatnya adalah nilai masukan. 

## Sintaksis
<a name="ST_MakePoint-function-syntax"></a>

```
ST_MakePoint(x, y)
```

```
ST_MakePoint(x, y, z)
```

```
ST_MakePoint(x, y, z, m)
```

## Argumen
<a name="ST_MakePoint-function-arguments"></a>

 *x*   
Nilai tipe data yang `DOUBLE PRECISION` mewakili koordinat pertama. 

 *y*   
Nilai tipe data yang `DOUBLE PRECISION` mewakili koordinat kedua. 

 *z*   
Nilai tipe data yang `DOUBLE PRECISION` mewakili koordinat ketiga. 

 *m*   
Nilai tipe data yang `DOUBLE PRECISION` mewakili koordinat keempat. 

## Jenis pengembalian
<a name="ST_MakePoint-function-return"></a>

`GEOMETRY`dari subtipe`POINT`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan diatur ke 0. 

Jika *x*, *y*, *z*, atau *m* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_MakePoint-function-examples"></a>

SQL berikut mengembalikan jenis `GEOMETRY` subtipe `POINT` dengan koordinat yang disediakan. 

```
SELECT ST_AsText(ST_MakePoint(1,3));
```

```
st_astext
-----------
 POINT(1 3)
```

SQL berikut mengembalikan jenis `GEOMETRY` subtipe `POINT` dengan koordinat yang disediakan. 

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3));
```

```
st_asewkt
----------------
 POINT Z (1 2 3)
```

SQL berikut mengembalikan jenis `GEOMETRY` subtipe `POINT` dengan koordinat yang disediakan. 

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3, 4));
```

```
st_asewkt
-------------------
 POINT ZM (1 2 3 4)
```

# ST\$1 MakePolygon
<a name="ST_MakePolygon-function"></a>

ST\$1 MakePolygon memiliki dua varian yang mengembalikan poligon. Satu mengambil geometri tunggal, dan yang lain mengambil dua geometri. 
+ Input dari varian pertama adalah linestring yang mendefinisikan cincin luar dari poligon keluaran.
+ Masukan dari varian kedua adalah linestring dan multilinestring. Keduanya kosong atau tertutup. 

  Batas cincin eksterior poligon keluaran adalah linestring input, dan batas-batas cincin interior poligon adalah garis garis dalam input multilinestring. Jika linestring input kosong, poligon kosong dikembalikan. Garis kosong di multilinestring diabaikan. Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dihasilkan adalah SRID umum dari dua geometri input.

Dimensi geometri yang dikembalikan sama dengan geometri input. Cincin eksterior dan cincin interior harus memiliki dimensi yang sama.

## Sintaksis
<a name="ST_MakePolygon-function-syntax"></a>

```
ST_MakePolygon(geom1)
```

```
ST_MakePolygon(geom1, geom2)
```

## Argumen
<a name="ST_MakePolygon-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` Nilai *linestring* harus ditutup atau kosong.

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `MULTILINESTRING` 

## Jenis pengembalian
<a name="ST_MakePolygon-function-return"></a>

`GEOMETRY`dari subtipe`POLYGON`. 

Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan SRID input. 

Jika *geom1*, atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* bukan linestring, maka kesalahan dikembalikan. 

Jika *geom2* bukan multilinestring, maka kesalahan dikembalikan. 

Jika *geom1* tidak ditutup, maka kesalahan dikembalikan. 

Jika *geom1* adalah satu titik atau tidak ditutup, maka kesalahan dikembalikan. 

Jika *geom2* berisi setidaknya satu linestring yang memiliki satu titik atau tidak ditutup, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* memiliki nilai SRID yang berbeda, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* memiliki dimensi yang berbeda, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_MakePolygon-function-examples"></a>

SQL berikut mengembalikan poligon dari linestring input. 

```
SELECT ST_AsText(ST_MakePolygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')));
```

```
 st_astext
---------------
POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

SQL berikut menciptakan poligon dari linestring tertutup dan multilinestring tertutup. Tali garis digunakan untuk cincin eksterior poligon. Garis garis dalam multilinestrings digunakan untuk cincin interior poligon. 

```
SELECT ST_AsEWKT(ST_MakePolygon(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,0 10,0 0)'), ST_GeomFromText('MULTILINESTRING((1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))')));
```

```
 st_astext
----------------------------------
POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))
```

# ST\$1 MemSize
<a name="ST_MemSize-function"></a>

ST\$1 MemSize mengembalikan jumlah ruang memori (dalam byte) yang digunakan oleh geometri input. Ukuran ini tergantung pada representasi internal Amazon Redshift dari geometri dan dengan demikian dapat berubah jika representasi internal berubah. Anda dapat menggunakan ukuran ini sebagai indikasi ukuran relatif objek geometri di Amazon Redshift. 

## Sintaksis
<a name="ST_MemSize-function-syntax"></a>

```
ST_MemSize(geom)
```

## Argumen
<a name="ST_MemSize-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_MemSize-function-return"></a>

`INTEGER`mewakili dimensi yang melekat dari *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_MemSize-function-examples"></a>

SQL berikut mengembalikan ukuran memori dari koleksi geometri. 

```
SELECT ST_MemSize(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))::varchar + ' bytes';
```

```
 ?column?  
-----------
 172 bytes
```

# ST\$1 MMax
<a name="ST_MMax-function"></a>

ST\$1 MMax mengembalikan `m` koordinat maksimum geometri input. 

## Sintaksis
<a name="ST_MMax-function-syntax"></a>

```
ST_MMax(geom)
```

## Argumen
<a name="ST_MMax-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_MMax-function-return"></a>

`DOUBLE PRECISION`nilai `m` koordinat maksimum.

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* adalah geometri 2D atau 3DZ, maka null dikembalikan. 

## Contoh
<a name="ST_MMax-function-examples"></a>

SQL berikut mengembalikan `m` koordinat terbesar dari linestring dalam geometri 3DM. 

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmax
-----------
  8
```

SQL berikut mengembalikan `m` koordinat terbesar dari linestring dalam geometri 4D. 

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmax
-----------
  11
```

# ST\$1 MMin
<a name="ST_MMin-function"></a>

ST\$1 MMin mengembalikan `m` koordinat minimum geometri input. 

## Sintaksis
<a name="ST_MMin-function-syntax"></a>

```
ST_MMin(geom)
```

## Argumen
<a name="ST_MMin-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_MMin-function-return"></a>

`DOUBLE PRECISION`nilai `m` koordinat minimum. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* adalah geometri 2D atau 3DZ, maka null dikembalikan. 

## Contoh
<a name="ST_MMin-function-examples"></a>

SQL berikut mengembalikan `m` koordinat terkecil dari linestring dalam geometri 3DM. 

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmin
-----------
  2
```

SQL berikut mengembalikan `m` koordinat terkecil dari linestring dalam geometri 4D. 

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmin
-----------
  3
```

# ST\$1Multi
<a name="ST_Multi-function"></a>

ST\$1multi mengkonversi geometri ke multitype yang sesuai. Jika geometri input sudah multitype atau koleksi geometri, salinannya dikembalikan. Jika geometri input adalah titik, linestring, atau poligon, maka multipoint, multilinestring, atau multipoligon, masing-masing, yang berisi geometri input dikembalikan. 

## Sintaksis
<a name="ST_Multi-function-syntax"></a>

```
ST_Multi(geom)
```

## Argumen
<a name="ST_Multi-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Multi-function-return"></a>

`GEOMETRY`dengan subtipe`MULTIPOINT`,, `MULTILINESTRING``MULTIPOLYGON`, atau`GEOMETRYCOLLECTION`. 

Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_Multi-function-examples"></a>

SQL berikut mengembalikan multipoint dari multipoint masukan. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('MULTIPOINT((1 2),(3 4))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2),(3 4))
```

SQL berikut mengembalikan multipoint dari titik input. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('POINT(1 2)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2))
```

SQL berikut mengembalikan koleksi geometri dari koleksi geometri input. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))
```

# ST\$1 NDims
<a name="ST_NDims-function"></a>

ST\$1 NDims mengembalikan dimensi koordinat geometri. ST\$1 NDims tidak mempertimbangkan dimensi topologi geometri. Sebaliknya, ia mengembalikan nilai konstan tergantung pada dimensi geometri. 

## Sintaksis
<a name="ST_NDims-function-syntax"></a>

```
ST_NDims(geom)
```

## Argumen
<a name="ST_NDims-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_NDims-function-return"></a>

`INTEGER`mewakili dimensi yang melekat dari *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Nilai yang dikembalikan | Dimensi geometri input | 
| --- | --- | 
| 2 | 2D | 
| 3 | 3DZ atau 3DM | 
| 4 | 4D | 

## Contoh
<a name="ST_NDims-function-examples"></a>

SQL berikut mengembalikan jumlah dimensi dari linestring 2D. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING(0 0,1 1,2 2,0 0)'));
```

```
st_ndims
-------------
 2
```

SQL berikut mengembalikan jumlah dimensi dari linestring 3DZ. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING Z(0 0 3,1 1 3,2 2 3,0 0 3)'));
```

```
st_ndims
-------------
 3
```

SQL berikut mengembalikan jumlah dimensi dari linestring 3DM. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING M(0 0 4,1 1 4,2 2 4,0 0 4)'));
```

```
st_ndims
-------------
 3
```

SQL berikut mengembalikan jumlah dimensi dari linestring 4D. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING ZM(0 0 3 4,1 1 3 4,2 2 3 4,0 0 3 4)'));
```

```
st_ndims
-------------
 4
```

# ST\$1 NPoints
<a name="ST_NPoints-function"></a>

ST\$1 NPoints mengembalikan jumlah titik nonempty dalam geometri input atau geografi. 

## Sintaksis
<a name="ST_NPoints-function-syntax"></a>

```
ST_NPoints(geo)
```

## Argumen
<a name="ST_NPoints-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_NPoints-function-return"></a>

`INTEGER`

Jika *geo* adalah titik kosong, maka `0` dikembalikan. 

Jika *geo* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_NPoints-function-examples"></a>

SQL berikut mengembalikan jumlah poin dalam linestring. 

```
SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_npoints
-------------
 4
```

SQL berikut mengembalikan jumlah poin dalam linestring dalam geografi. 

```
SELECT ST_NPoints(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
st_npoints
-------------
 4
```

# ST\$1 NRings
<a name="ST_NRings-function"></a>

ST\$1 NRings mengembalikan jumlah cincin dalam geometri masukan. 

## Sintaksis
<a name="ST_NRings-function-syntax"></a>

```
ST_NRings(geom)
```

## Argumen
<a name="ST_NRings-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_NRings-function-return"></a>

`INTEGER`

Jika *geom* adalah null, maka null dikembalikan. 

Nilai yang dikembalikan adalah sebagai berikut.


| Nilai yang dikembalikan | Subtipe geometri | 
| --- | --- | 
| 0 | Dikembalikan jika *geom* adalah`POINT`,, `LINESTRING``MULTIPOINT`, atau subtipe `MULTILINESTRING`  | 
| Jumlah cincin. | Dikembalikan jika *geom* adalah subtipe `POLYGON` atau `MULTIPOLYGON` | 
| Jumlah cincin di semua komponen | Dikembalikan jika *geom* adalah subtipe `GEOMETRYCOLLECTION` | 

## Contoh
<a name="ST_NRings-function-examples"></a>

SQL berikut mengembalikan jumlah cincin dalam multipoligon. 

```
SELECT ST_NRings(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((0 0,-10 0,0 -10,0 0)))'));
```

```
 st_nrings
-------------
 2
```

# ST\$1 NumGeometries
<a name="ST_NumGeometries-function"></a>

ST\$1 NumGeometries mengembalikan jumlah geometri dalam geometri masukan. 

## Sintaksis
<a name="ST_NumGeometries-function-syntax"></a>

```
ST_NumGeometries(geom)
```

## Argumen
<a name="ST_NumGeometries-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_NumGeometries-function-return"></a>

`INTEGER`mewakili jumlah geometri dalam *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* adalah geometri kosong tunggal, maka `0` dikembalikan. 

Jika *geom* adalah geometri tunggal yang tidak kosong, maka `1` dikembalikan. 

Jika *geom* adalah subtipe `GEOMETRYCOLLECTION` atau `MULTI` subtipe, maka jumlah geometri dikembalikan. 

## Contoh
<a name="ST_NumGeometries-function-examples"></a>

SQL berikut mengembalikan jumlah geometri dalam input multilinestring. 

```
SELECT ST_NumGeometries(ST_GeomFromText('MULTILINESTRING((0 0,1 0,0 5),(3 4,13 26))'));
```

```
st_numgeometries
-------------
 2
```

# ST\$1 NumInteriorRings
<a name="ST_NumInteriorRings-function"></a>

ST\$1 NumInteriorRings mengembalikan jumlah cincin dalam geometri poligon input. 

## Sintaksis
<a name="ST_NumInteriorRings-function-syntax"></a>

```
ST_NumInteriorRings(geom)
```

## Argumen
<a name="ST_NumInteriorRings-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_NumInteriorRings-function-return"></a>

`INTEGER`

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* bukan poligon, maka null dikembalikan. 

## Contoh
<a name="ST_NumInteriorRings-function-examples"></a>

SQL berikut mengembalikan jumlah cincin interior dalam poligon masukan. 

```
SELECT ST_NumInteriorRings(ST_GeomFromText('POLYGON((0 0,100 0,100 100,0 100,0 0),(1 1,1 5,5 1,1 1),(7 7,7 8,8 7,7 7))'));
```

```
 st_numinteriorrings
-------------
 2
```

# ST\$1 NumPoints
<a name="ST_NumPoints-function"></a>

ST\$1 NumPoints mengembalikan jumlah titik dalam geometri masukan. 

## Sintaksis
<a name="ST_NumPoints-function-syntax"></a>

```
ST_NumPoints(geom)
```

## Argumen
<a name="ST_NumPoints-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="ST_NumPoints-function-return"></a>

`INTEGER`

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* bukan dari subtipe`LINESTRING`, maka null dikembalikan. 

## Contoh
<a name="ST_NumPoints-function-examples"></a>

SQL berikut mengembalikan jumlah poin dalam input linestring. 

```
SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_numpoints
-------------
4
```

SQL berikut mengembalikan null karena input *geom* bukan dari subtipe. `LINESTRING` 

```
SELECT ST_NumPoints(ST_GeomFromText('MULTIPOINT(1 2,3 4)'));
```

```
st_numpoints
-------------
```

# ST\$1perimeter
<a name="ST_Perimeter-function"></a>

Untuk geometri areal input, ST\$1perimeter mengembalikan perimeter Cartesian (panjang batas) dari proyeksi 2D. Satuan perimeter sama dengan unit di mana koordinat geometri input dinyatakan. Fungsi mengembalikan nol (0) untuk titik, multipoint, dan geometri linier. Ketika input adalah koleksi geometri, fungsi mengembalikan jumlah perimeter geometri dalam koleksi. 

Untuk geografi input, ST\$1perimeter mengembalikan perimeter geodesik (panjang batas) dari proyeksi 2D dari geografi areal input yang dihitung pada spheroid yang ditentukan oleh SRID. Satuan perimeter dalam meter. Fungsi mengembalikan nol (0) untuk titik, multipoint, dan geografi linier. Ketika input adalah kumpulan geometri, fungsi mengembalikan jumlah perimeter geografi dalam koleksi.

## Sintaksis
<a name="ST_Perimeter-function-syntax"></a>

```
ST_Perimeter(geo)
```

## Argumen
<a name="ST_Perimeter-function-arguments"></a>

 *geo*   
Nilai tipe data `GEOMETRY` atau`GEOGRAPHY`, atau ekspresi yang mengevaluasi `GEOGRAPHY` tipe `GEOMETRY` atau.

## Jenis pengembalian
<a name="ST_Perimeter-function-return"></a>

`DOUBLE PRECISION`

Jika *geo* adalah null, maka null dikembalikan.

Jika nilai SRID tidak ditemukan, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Perimeter-function-examples"></a>

SQL berikut mengembalikan perimeter Cartesian dari multipoligon. 

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

SQL berikut mengembalikan perimeter Cartesian dari multipoligon. 

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

SQL berikut mengembalikan perimeter poligon dalam geografi. 

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;POLYGON((0 0,1 0,0 1,0 0))'));
```

```
 st_perimeter 
------------------
 378790.428393693
```

SQL berikut mengembalikan perimeter linestring dalam geografi. 

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;LINESTRING(5 0,10 0)'));
```

```
 st_perimeter 
--------------
 0
```

# ST\$1Perimeter2D
<a name="ST_Perimeter2D-function"></a>

ST\$1Perimeter2d adalah alias untuk ST\$1perimeter. Untuk informasi selengkapnya, lihat [ST\$1perimeter](ST_Perimeter-function.md). 

# ST\$1titik
<a name="ST_Point-function"></a>

ST\$1point mengembalikan geometri titik dari nilai koordinat masukan. 

## Sintaksis
<a name="ST_Point-function-syntax"></a>

```
ST_Point(x, y)
```

## Argumen
<a name="ST_Point-function-arguments"></a>

 *x*   
Nilai tipe data `DOUBLE PRECISION` yang mewakili koordinat pertama. 

 *y*   
Nilai tipe data `DOUBLE PRECISION` yang mewakili koordinat kedua. 

## Jenis pengembalian
<a name="ST_Point-function-return"></a>

`GEOMETRY`dari subtipe`POINT`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan diatur ke 0. 

Jika *x* atau *y* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_Point-function-examples"></a>

SQL berikut membangun geometri titik dari koordinat input. 

```
SELECT ST_AsText(ST_Point(5.0, 7.0));
```

```
st_astext
-------------
POINT(5 7)
```

# st\$1pointn
<a name="ST_PointN-function"></a>

ST\$1pointn mengembalikan titik dalam linestring seperti yang ditentukan oleh nilai indeks. Nilai indeks negatif dihitung mundur dari akhir linestring, sehingga -1 adalah titik terakhir. 

Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_PointN-function-syntax"></a>

```
ST_PointN(geom, index)
```

## Argumen
<a name="ST_PointN-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili indeks titik dalam linestring. 

## Jenis pengembalian
<a name="ST_PointN-function-return"></a>

`GEOMETRY`dari subtipe`POINT`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan diatur ke 0. 

Jika *geom* atau *indeks* adalah nol, maka null dikembalikan. 

Jika *indeks* berada di luar jangkauan, maka null dikembalikan. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* bukan a`LINESTRING`, maka null dikembalikan. 

## Contoh
<a name="ST_PointN-function-examples"></a>

SQL berikut mengembalikan representasi teks terkenal yang diperluas (EWKT) dari enam titik `LINESTRING` ke `GEOMETRY` objek dan mengembalikan titik pada indeks 5 dari linestring. 

```
SELECT ST_AsEWKT(ST_PointN(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)',4326), 5));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1poin
<a name="ST_Points-function"></a>

ST\$1points mengembalikan geometri multipoint yang berisi semua titik nonempty dalam geometri masukan. ST\$1points tidak menghapus titik yang digandakan dalam input, termasuk titik awal dan akhir geometri cincin.

## Sintaksis
<a name="ST_Points-function-syntax"></a>

```
ST_Points(geom)
```

## Argumen
<a name="ST_Points-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Points-function-return"></a>

`GEOMETRY`dari subtipe`MULTIPOINT`. 

*Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan geom.* 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka multipoint kosong dikembalikan. 

## Contoh
<a name="ST_Points-function-examples"></a>

Contoh SQL berikut membangun geometri multipoint dari geometri input. Hasilnya adalah geometri multipoint yang berisi titik-titik nonempty dalam geometri input.

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('LINESTRING(1 0,2 0,3 0)'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((1 0),(2 0),(3 0))
```

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('MULTIPOLYGON(((0 0,1 0,0 1,0 0)))'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((0 0),(1 0),(0 1),(0 0))
```

# ST\$1Poligon
<a name="ST_Polygon-function"></a>

ST\$1Polygon mengembalikan geometri poligon yang cincin luarnya adalah linestring input dengan nilai yang dimasukkan untuk pengenal sistem referensi spasial (SRID). 

Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_Polygon-function-syntax"></a>

```
ST_Polygon(linestring, srid)
```

## Argumen
<a name="ST_Polygon-function-arguments"></a>

 *linestring*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus `LINESTRING` yang mewakili linestring. Nilai *linestring* harus ditutup. 

 *srid*   
Nilai tipe data `INTEGER` yang mewakili SRID. 

## Jenis pengembalian
<a name="ST_Polygon-function-return"></a>

`GEOMETRY`dari subtipe`POLYGON`.

*Nilai SRID dari geometri yang dikembalikan diatur ke srid.* 

Jika *linestring* atau *srid* adalah null, maka null dikembalikan.

Jika *linestring* bukan linestring, maka kesalahan dikembalikan.

Jika *linestring* tidak ditutup, maka kesalahan dikembalikan.

Jika *srid* negatif, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Polygon-function-examples"></a>

SQL berikut membangun poligon dengan nilai SRID. 

```
SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),4356));
```

```
st_asewkt
-------------
 SRID=4356;POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

# ST\$1 RemovePoint
<a name="ST_RemovePoint-function"></a>

ST\$1 RemovePoint mengembalikan geometri linestring yang memiliki titik geometri input pada posisi indeks dihapus. 

Indeks ini berbasis nol. Pengidentifikasi sistem referensi spasial (SRID) hasilnya sama dengan geometri input. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_RemovePoint-function-syntax"></a>

```
ST_RemovePoint(geom, index)
```

## Argumen
<a name="ST_RemovePoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili posisi indeks berbasis nol. 

## Jenis pengembalian
<a name="ST_RemovePoint-function-return"></a>

`GEOMETRY` 

Jika *geom* atau *indeks* adalah nol, maka null dikembalikan. 

Jika *geom* bukan subtipe`LINESTRING`, maka kesalahan dikembalikan. 

Jika *indeks* berada di luar jangkauan, maka kesalahan dikembalikan. Nilai yang valid untuk posisi indeks adalah antara 0 dan `ST_NumPoints(geom)` minus 1. 

## Contoh
<a name="ST_RemovePoint-function-examples"></a>

SQL berikut menghapus poin terakhir dalam linestring. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_RemovePoint(g, ST_NumPoints(g) - 1)) FROM tmp;
```

```
   st_asewkt
-----------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5)
```

# ST\$1terbalik
<a name="ST_Reverse-function"></a>

ST\$1reverse membalikkan urutan simpul untuk geometri linier dan areal. Untuk geometri titik atau multipoint, salinan geometri asli dikembalikan. Untuk koleksi geometri, ST\$1reverse membalikkan urutan simpul untuk masing-masing geometri dalam koleksi.

Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_Reverse-function-syntax"></a>

```
ST_Reverse(geom)
```

## Argumen
<a name="ST_Reverse-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Reverse-function-return"></a>

`GEOMETRY` 

Pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan sama dengan geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_Reverse-function-examples"></a>

SQL berikut membalikkan urutan poin dalam linestring. 

```
SELECT ST_AsEWKT(ST_Reverse(ST_GeomFromText('LINESTRING(1 0,2 0,3 0,4 0)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;LINESTRING(4 0,3 0,2 0,1 0)
```

# ST\$1 SetPoint
<a name="ST_SetPoint-function"></a>

ST\$1 SetPoint mengembalikan linestring dengan koordinat diperbarui sehubungan dengan posisi input linestring seperti yang ditentukan oleh indeks. Koordinat baru adalah koordinat titik input. 

Dimensi geometri yang dikembalikan sama dengan nilai *geom1*. *Jika *geom1* dan *geom2* memiliki dimensi yang berbeda, *geom2 diproyeksikan ke dimensi geom1*.*

## Sintaksis
<a name="ST_SetPoint-function-syntax"></a>

```
ST_SetPoint(geom1, index, geom2)
```

## Argumen
<a name="ST_SetPoint-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

 *indeks*   
Nilai tipe data `INTEGER` yang mewakili posisi indeks. A `0` mengacu pada titik pertama dari linestring dari kiri, `1` mengacu pada titik kedua, dan seterusnya. Indeks bisa menjadi nilai negatif. A `-1` mengacu pada titik pertama dari linestring dari kanan, `-2` mengacu pada titik kedua dari linestring dari kanan, dan seterusnya. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `POINT` 

## Jenis pengembalian
<a name="ST_SetPoint-function-return"></a>

`GEOMETRY`

Jika *geom2* adalah titik kosong, maka *geom1* dikembalikan. 

Jika *geom1*, *geom2*, atau *indeks* adalah nol, maka null dikembalikan. 

Jika *geom1* bukan linestring, maka kesalahan dikembalikan. 

Jika *indeks* tidak berada dalam rentang indeks yang valid, maka kesalahan dikembalikan. 

Jika *geom2* bukan titik, maka kesalahan dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

## Contoh
<a name="ST_SetPoint-function-examples"></a>

SQL berikut mengembalikan linestring baru di mana kita mengatur titik kedua dari linestring input dengan titik yang ditentukan. 

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), 2, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,3 2,7 9,1 2)
```

Contoh SQL berikut mengembalikan linestring baru di mana kita mengatur titik ketiga dari kanan (indeks negatif) dari linestring dengan titik tertentu. 

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), -3, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,7 9,5 2,1 2)
```

# ST\$1Setsrid
<a name="ST_SetSRID-function"></a>

ST\$1SetsRid mengembalikan geometri yang sama dengan geometri input, kecuali diperbarui dengan input nilai untuk pengidentifikasi sistem referensi spasial (SRID). 

## Sintaksis
<a name="ST_SetSRID-function-syntax"></a>

```
ST_SetSRID(geom, srid)
```

## Argumen
<a name="ST_SetSRID-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *srid*   
Nilai tipe data `INTEGER` yang mewakili SRID. 

## Jenis pengembalian
<a name="ST_SetSRID-function-return"></a>

`GEOMETRY`

*Nilai SRID dari geometri yang dikembalikan diatur ke srid.* 

Jika *geom* atau *srid* adalah null, maka null dikembalikan.

Jika *srid* negatif, maka kesalahan dikembalikan.

## Contoh
<a name="ST_SetSRID-function-examples"></a>

SQL berikut menetapkan nilai SRID dari linestring.

```
SELECT ST_AsEWKT(ST_SetSRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),50));
```

```
st_asewkt
-------------
 SRID=50;LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)
```

# ST\$1menyederhanakan
<a name="ST_Simplify-function"></a>

ST\$1Simplify mengembalikan salinan sederhana dari geometri input menggunakan Ramer-Douglas-Peucker algoritma dengan toleransi yang diberikan. Topologi geometri input mungkin tidak dipertahankan. Untuk informasi lebih lanjut tentang algoritme, lihat Algoritma [Ramer—Douglas—Peucker](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm) di Wikipedia. 

Ketika ST\$1Simplify menghitung jarak untuk menyederhanakan geometri, ST\$1Simplify beroperasi pada proyeksi 2D dari geometri input. 

## Sintaksis
<a name="ST_Simplify-function-syntax"></a>

```
ST_Simplify(geom, tolerance)
```

## Argumen
<a name="ST_Simplify-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *toleransi*   
Nilai tipe data `DOUBLE PRECISION` yang mewakili tingkat toleransi Ramer-Douglas-Peucker algoritma. Jika *toleransi* adalah angka negatif, maka nol digunakan. 

## Jenis pengembalian
<a name="ST_Simplify-function-return"></a>

`GEOMETRY`. 

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input. 

Dimensi geometri yang dikembalikan sama dengan geometri input. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_Simplify-function-examples"></a>

SQL berikut menyederhanakan input linestring menggunakan toleransi jarak Euclidean 1 dengan algoritma. Ramer-Douglas-Peucker Satuan jarak sama dengan koordinat geometri.

```
SELECT ST_AsEWKT(ST_Simplify(ST_GeomFromText('LINESTRING(0 0,1 2,1 1,2 2,2 1)'), 1));
```

```
 st_asewkt
-----------
LINESTRING(0 0,1 2,2 1)
```

# ST\$1SRID
<a name="ST_SRID-function"></a>

ST\$1SRID mengembalikan pengenal sistem referensi spasial (SRID) dari geometri input. Untuk informasi lebih lanjut tentang SRID, lihat[Menanyakan data spasial di Amazon Redshift](geospatial-overview.md).

## Sintaksis
<a name="ST_SRID-function-syntax"></a>

```
ST_SRID(geom)
```

## Argumen
<a name="ST_SRID-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_SRID-function-return"></a>

`INTEGER`mewakili nilai SRID dari *geom*. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_SRID-function-examples"></a>

SQL berikut mengembalikan nilai SRID dari linestring yang diatur ke SRID. `4326`

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)',4326));
```

```
st_srid
-------------
 4326
```

SQL berikut mengembalikan nilai SRID dari linestring yang tidak diatur ketika dibangun. Ini menghasilkan nilai `0` SRID.

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_srid
-------------
 0
```

# ST\$1 StartPoint
<a name="ST_StartPoint-function"></a>

ST\$1 StartPoint mengembalikan titik pertama dari input linestring. Nilai pengidentifikasi sistem referensi spasial (SRID) dari hasilnya sama dengan nilai geometri input. Dimensi geometri yang dikembalikan sama dengan geometri input.

## Sintaksis
<a name="ST_StartPoint-function-syntax"></a>

```
ST_StartPoint(geom)
```

## Argumen
<a name="ST_StartPoint-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. Subtipe harus. `LINESTRING` 

## Jenis pengembalian
<a name="ST_StartPoint-function-return"></a>

`GEOMETRY` 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* bukan a`LINESTRING`, maka null dikembalikan. 

## Contoh
<a name="ST_StartPoint-function-examples"></a>

SQL berikut mengembalikan representasi teks terkenal yang diperluas (EWKT) dari empat titik `LINESTRING` ke `GEOMETRY` objek dan mengembalikan titik awal dari linestring. 

```
SELECT ST_AsEWKT(ST_StartPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 0)
```

# ST\$1Touches
<a name="ST_Touches-function"></a>

ST\$1Touches mengembalikan true jika proyeksi 2D dari dua geometri input menyentuh. Kedua geometri menyentuh jika mereka tidak kosong, berpotongan, dan tidak memiliki titik interior yang sama. 

## Sintaksis
<a name="ST_Touches-function-syntax"></a>

```
ST_Touches(geom1, geom2)
```

## Argumen
<a name="ST_Touches-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Touches-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Touches-function-examples"></a>

SQL berikut memeriksa apakah poligon menyentuh linestring. 

```
SELECT ST_Touches(ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))'), ST_GeomFromText('LINESTRING(20 10,20 0,10 0)'));
```

```
 st_touches              
-------------
 t
```

# ST\$1Transform
<a name="ST_Transform-function"></a>

ST\$1Transform mengembalikan geometri baru dengan koordinat yang ditransformasikan dalam sistem referensi spasial yang ditentukan oleh input spasial reference system identifier (SRID). 

## Sintaksis
<a name="ST_Transform-function-syntax"></a>

```
ST_Transform(geom, srid)
```

## Argumen
<a name="ST_Transform-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *srid*   
Nilai tipe data `INTEGER` yang mewakili SRID. 

## Jenis pengembalian
<a name="ST_Transform-function-return"></a>

`GEOMETRY`.

*Nilai SRID dari geometri yang dikembalikan diatur ke srid.* 

Jika *geom* atau *srid* adalah null, maka null dikembalikan.

Jika nilai SRID yang terkait dengan input *geom* tidak ada, maka kesalahan dikembalikan.

Jika *srid* tidak ada, maka kesalahan dikembalikan.

## Contoh
<a name="ST_Transform-function-examples"></a>

SQL berikut mengubah SRID dari koleksi geometri kosong. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 3857), 4326));
```

```
             st_asewkt
------------------------------------
 SRID=4326;GEOMETRYCOLLECTION EMPTY
```

SQL berikut mengubah SRID dari linestring. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326), 26918));
```

```
                                                                                            st_asewkt
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=26918;LINESTRING(73106.6977300955 15556182.9688576,14347201.5059964 1545178.32934967,1515090.41262989 9522193.25115316,10491250.83295 2575457.28410878,5672303.72135968 -5233682.61176205)
```

SQL berikut mengubah SRID poligon. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('POLYGON Z ((-10 10 -7, -65 10 -6, -10 64 -5, -10 10 -7), (-11 11 5, -11 12 6, -12 11 7, -11 11 5))', 6989), 6317));
```

```
                                                                                                                                                                                                                      st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=6317;POLYGON Z ((6186430.2771091 -1090834.57212608 1100247.33216237,2654831.67853801 -5693304.90741276 1100247.50581055,2760987.41750022 -486836.575101877 5709710.44137268,6186430.2771091 -1090834.57212608 1100247.33216237),(6146675.25029258 -1194792.63532103 1209007.1115113,6125027.87562215 -1190584.81194058 1317403.77865723,6124888.99555252 -1301885.3455052 1209007.49312929,6146675.25029258 -1194792.63532103 1209007.1115113))
```

# ST\$1Union
<a name="ST_Union-function"></a>

ST\$1union mengembalikan geometri yang mewakili penyatuan dua geometri. Artinya, ia menggabungkan geometri input untuk menghasilkan geometri yang dihasilkan tanpa tumpang tindih. 

## Sintaksis
<a name="ST_Union-function-syntax"></a>

```
ST_Union(geom1, geom2)
```

## Argumen
<a name="ST_Union-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Union-function-return"></a>

`GEOMETRY`

Nilai pengidentifikasi sistem referensi spasial (SRID) dari geometri yang dikembalikan adalah nilai SRID dari geometri input.

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* atau *geom2* kosong, maka geometri kosong dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai yang sama untuk pengidentifikasi sistem referensi spasial (SRID), maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, linestring, atau multilinestring, maka kesalahan dikembalikan. 

Jika *geom1* atau *geom2* bukan geometri dua dimensi (2D), maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Union-function-examples"></a>

SQL berikut mengembalikan geometri non-kosong yang mewakili penyatuan dua geometri input. 

```
SELECT ST_AsEWKT(ST_Union(ST_GeomFromText('POLYGON((0 0,100 100,0 200,0 0))'), ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 200,100 100,5 5,10 0,0 0))
```

# ST\$1dalam
<a name="ST_Within-function"></a>

ST\$1Within mengembalikan true jika proyeksi 2D dari geometri input pertama berada dalam proyeksi 2D dari geometri input kedua. 

Misalnya, geometri `A` berada dalam geometri `B` jika setiap titik masuk `A` adalah titik masuk `B` dan interiornya memiliki persimpangan yang tidak kosong. 

ST\$1Within (`A`,`B`) setara dengan ST\$1contains (,). `B` `A` 

## Sintaksis
<a name="ST_Within-function-syntax"></a>

```
ST_Within(geom1, geom2)
```

## Argumen
<a name="ST_Within-function-arguments"></a>

 *geom1*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. *Nilai ini dibandingkan dengan *geom2* untuk menentukan apakah berada dalam geom2.* 

 *geom2*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_Within-function-return"></a>

`BOOLEAN`

Jika *geom1* atau *geom2* adalah null, maka null dikembalikan. 

Jika *geom1* dan *geom2* tidak memiliki nilai pengenal sistem referensi spasial (SRID) yang sama, maka kesalahan akan dikembalikan. 

Jika *geom1* atau *geom2* adalah koleksi geometri, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Within-function-examples"></a>

SQL berikut memeriksa apakah poligon pertama berada dalam poligon kedua. 

```
SELECT ST_Within(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_within
-----------
 true
```

# ST\$1X
<a name="ST_X-function"></a>

ST\$1X mengembalikan koordinat pertama dari titik masukan. 

## Sintaksis
<a name="ST_X-function-syntax"></a>

```
ST_X(point)
```

## Argumen
<a name="ST_X-function-arguments"></a>

 *titik*   
`POINT`Nilai tipe data`GEOMETRY`. 

## Jenis pengembalian
<a name="ST_X-function-return"></a>

`DOUBLE PRECISION`nilai koordinat pertama.

Jika *titik* nol, maka null dikembalikan. 

Jika *titik* adalah titik kosong, maka null dikembalikan. 

Jika *titik* bukan a`POINT`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_X-function-examples"></a>

SQL berikut mengembalikan koordinat pertama dari suatu titik. 

```
SELECT ST_X(ST_Point(1,2));
```

```
st_x
-----------
 1.0
```

# ST\$1 XMax
<a name="ST_XMax-function"></a>

ST\$1 XMax mengembalikan koordinat pertama maksimum dari geometri input. 

## Sintaksis
<a name="ST_XMax-function-syntax"></a>

```
ST_XMax(geom)
```

## Argumen
<a name="ST_XMax-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_XMax-function-return"></a>

`DOUBLE PRECISION`nilai koordinat pertama maksimum. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_XMax-function-examples"></a>

SQL berikut mengembalikan koordinat pertama terbesar dari linestring. 

```
SELECT ST_XMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmax
-----------
 77.42
```

# ST\$1 XMin
<a name="ST_XMin-function"></a>

ST\$1 XMin mengembalikan koordinat pertama minimum dari geometri input. 

## Sintaksis
<a name="ST_XMin-function-syntax"></a>

```
ST_XMin(geom)
```

## Argumen
<a name="ST_XMin-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_XMin-function-return"></a>

`DOUBLE PRECISION`nilai koordinat pertama minimum. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_XMin-function-examples"></a>

SQL berikut mengembalikan koordinat pertama terkecil dari linestring. 

```
SELECT ST_XMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmin
-----------
 77.27
```

# ST\$1Y
<a name="ST_Y-function"></a>

ST\$1Y mengembalikan koordinat kedua dari titik masukan. 

## Sintaksis
<a name="ST_Y-function-syntax"></a>

```
ST_Y(point)
```

## Argumen
<a name="ST_Y-function-arguments"></a>

 *titik*   
`POINT`Nilai tipe data`GEOMETRY`. 

## Jenis pengembalian
<a name="ST_Y-function-return"></a>

`DOUBLE PRECISION`nilai koordinat kedua.

Jika *titik* nol, maka null dikembalikan. 

Jika *titik* adalah titik kosong, maka null dikembalikan. 

Jika *titik* bukan a`POINT`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Y-function-examples"></a>

SQL berikut mengembalikan koordinat kedua dari suatu titik. 

```
SELECT ST_Y(ST_Point(1,2));
```

```
st_y
-----------
 2.0
```

# ST\$1 YMax
<a name="ST_YMax-function"></a>

ST\$1 YMax mengembalikan koordinat maksimum kedua dari geometri input. 

## Sintaksis
<a name="ST_YMax-function-syntax"></a>

```
ST_YMax(geom)
```

## Argumen
<a name="ST_YMax-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_YMax-function-return"></a>

`DOUBLE PRECISION`nilai koordinat kedua maksimum.

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_YMax-function-examples"></a>

SQL berikut mengembalikan koordinat kedua terbesar dari linestring. 

```
SELECT ST_YMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymax
-----------
 29.31
```

# ST\$1 YMin
<a name="ST_YMin-function"></a>

ST\$1 YMin mengembalikan koordinat minimum kedua dari geometri input. 

## Sintaksis
<a name="ST_YMin-function-syntax"></a>

```
ST_YMin(geom)
```

## Argumen
<a name="ST_YMin-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_YMin-function-return"></a>

`DOUBLE PRECISION`nilai koordinat minimum kedua. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

## Contoh
<a name="ST_YMin-function-examples"></a>

SQL berikut mengembalikan koordinat kedua terkecil dari linestring. 

```
SELECT ST_YMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymin
-----------
 29.07
```

# ST\$1Z
<a name="ST_Z-function"></a>

ST\$1Z mengembalikan `z` koordinat titik masukan. 

## Sintaksis
<a name="ST_Z-function-syntax"></a>

```
ST_Z(point)
```

## Argumen
<a name="ST_Z-function-arguments"></a>

 *titik*   
`POINT`Nilai tipe data`GEOMETRY`. 

## Jenis pengembalian
<a name="ST_Z-function-return"></a>

`DOUBLE PRECISION`nilai `m` koordinat.

Jika *titik* nol, maka null dikembalikan. 

Jika *titik adalah titik* 2D atau 3DM, maka null dikembalikan. 

Jika *titik* adalah titik kosong, maka null dikembalikan. 

Jika *titik* bukan a`POINT`, maka kesalahan dikembalikan. 

## Contoh
<a name="ST_Z-function-examples"></a>

SQL berikut mengembalikan `z` koordinat titik dalam geometri 3DZ. 

```
SELECT ST_Z(ST_GeomFromEWKT('POINT Z (1 2 3)'));
```

```
st_z
-----------
 3
```

SQL berikut mengembalikan `z` koordinat titik dalam geometri 4D. 

```
SELECT ST_Z(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_z
-----------
 3
```

# ST\$1 ZMax
<a name="ST_ZMax-function"></a>

ST\$1 ZMax mengembalikan `z` koordinat maksimum geometri input. 

## Sintaksis
<a name="ST_ZMax-function-syntax"></a>

```
ST_ZMax(geom)
```

## Argumen
<a name="ST_ZMax-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_ZMax-function-return"></a>

`DOUBLE PRECISION`nilai `z` koordinat maksimum.

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* adalah geometri 2D atau 3DM, maka null dikembalikan. 

## Contoh
<a name="ST_ZMax-function-examples"></a>

SQL berikut mengembalikan `z` koordinat terbesar dari linestring dalam geometri 3DZ. 

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmax
-----------
  8
```

SQL berikut mengembalikan `z` koordinat terbesar dari linestring dalam geometri 4D. 

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmax
-----------
  10
```

# ST\$1 ZMin
<a name="ST_ZMin-function"></a>

ST\$1 ZMin mengembalikan `z` koordinat minimum geometri input. 

## Sintaksis
<a name="ST_ZMin-function-syntax"></a>

```
ST_ZMin(geom)
```

## Argumen
<a name="ST_ZMin-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe. 

## Jenis pengembalian
<a name="ST_ZMin-function-return"></a>

`DOUBLE PRECISION`nilai `z` koordinat minimum. 

Jika *geom* kosong, maka null dikembalikan. 

Jika *geom* adalah null, maka null dikembalikan. 

Jika *geom* adalah geometri 2D atau 3DM, maka null dikembalikan. 

## Contoh
<a name="ST_ZMin-function-examples"></a>

SQL berikut mengembalikan `z` koordinat terkecil dari linestring dalam geometri 3DZ. 

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmin
-----------
  2
```

SQL berikut mengembalikan `z` koordinat terkecil dari linestring dalam geometri 4D. 

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmin
-----------
  2
```

# Mendukung BBox
<a name="SupportsBBox-function"></a>

Mendukung BBox pengembalian true jika geometri input mendukung pengkodean dengan kotak pembatas yang telah dihitung sebelumnya. Untuk informasi selengkapnya tentang dukungan untuk kotak pembatas, lihat[Kotak pembatas](spatial-terminology.md#spatial-terminology-bounding-box).

## Sintaksis
<a name="SupportsBBox-function-syntax"></a>

```
SupportsBBox(geom)
```

## Argumen
<a name="SupportsBBox-function-arguments"></a>

 *geom*   
Nilai tipe data `GEOMETRY` atau ekspresi yang mengevaluasi `GEOMETRY` tipe.

## Jenis pengembalian
<a name="SupportsBBox-function-return"></a>

`BOOLEAN`

Jika *geom* adalah null, maka null dikembalikan.

## Contoh
<a name="SupportsBBox-function-examples"></a>

SQL berikut mengembalikan true karena geometri titik input mendukung dikodekan dengan kotak pembatas. 

```
SELECT SupportsBBox(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
t
```

SQL berikut mengembalikan false karena geometri titik input tidak mendukung dikodekan dengan kotak pembatas. 

```
SELECT SupportsBBox(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
f
```

# Fungsi string
<a name="String_functions_header"></a>

**Topics**
+ [\$1\$1 Operator (Penggabungan)](r_concat_op.md)
+ [Fungsi ASCII](r_ASCII.md)
+ [Fungsi BPCHARCMP](r_BPCHARCMP.md)
+ [Fungsi BTRIM](r_BTRIM.md)
+ [Fungsi BTTEXT\$1PATTERN\$1CMP](r_BTTEXT_PATTERN_CMP.md)
+ [Fungsi CHAR\$1LENGTH](r_CHAR_LENGTH.md)
+ [Fungsi CHARACTER\$1LENGTH](r_CHARACTER_LENGTH.md)
+ [Fungsi CHARINDEX](r_CHARINDEX.md)
+ [Fungsi CHR](r_CHR.md)
+ [Fungsi COLLATE](r_COLLATE.md)
+ [Fungsi CONCAT](r_CONCAT.md)
+ [CRC32 fungsi](crc32-function.md)
+ [Fungsi PERBEDAAN](DIFFERENCE.md)
+ [Fungsi INITCAP](r_INITCAP.md)
+ [Fungsi KIRI dan KANAN](r_LEFT.md)
+ [Fungsi LEN](r_LEN.md)
+ [Fungsi PANJANG](r_LENGTH.md)
+ [Fungsi LOWER](r_LOWER.md)
+ [Fungsi LPAD dan RPAD](r_LPAD.md)
+ [Fungsi LTRIM](r_LTRIM.md)
+ [Fungsi OCTETINDEX](OCTETINDEX.md)
+ [Fungsi OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fungsi POSISI](r_POSITION.md)
+ [Fungsi QUOTE\$1IDENT](r_QUOTE_IDENT.md)
+ [Fungsi QUOTE\$1LITERAL](r_QUOTE_LITERAL.md)
+ [Fungsi REGEXP\$1COUNT](REGEXP_COUNT.md)
+ [Fungsi REGEXP\$1INSTR](REGEXP_INSTR.md)
+ [Fungsi REGEXP\$1REPLACE](REGEXP_REPLACE.md)
+ [Fungsi REGEXP\$1SUBSTR](REGEXP_SUBSTR.md)
+ [Fungsi REPEAT](r_REPEAT.md)
+ [GANTI fungsi](r_REPLACE.md)
+ [Fungsi REPLICATE](r_REPLICATE.md)
+ [Fungsi REVERSE](r_REVERSE.md)
+ [Fungsi RTRIM](r_RTRIM.md)
+ [Fungsi SOUNDEX](SOUNDEX.md)
+ [Fungsi SPLIT\$1PART](SPLIT_PART.md)
+ [fungsi STRPOS](r_STRPOS.md)
+ [Fungsi STRTOL](r_STRTOL.md)
+ [Fungsi SUBSTRING](r_SUBSTRING.md)
+ [Fungsi TEXTLEN](r_TEXTLEN.md)
+ [FUNGSI TRANSLATE](r_TRANSLATE.md)
+ [Fungsi TRIM](r_TRIM.md)
+ [Fungsi UPPER](r_UPPER.md)

Fungsi string memproses dan memanipulasi string karakter atau ekspresi yang mengevaluasi string karakter. Ketika argumen *string* dalam fungsi ini adalah nilai literal, itu harus diapit dalam tanda kutip tunggal. Tipe data yang didukung termasuk CHAR dan VARCHAR. 

Bagian berikut menyediakan nama fungsi, sintaks, dan deskripsi untuk fungsi yang didukung. Semua offset menjadi string berbasis satu. 
<a name="string-functions-deprecated"></a>
**Fungsi khusus node pemimpin yang tidak digunakan lagi**  
Fungsi string berikut tidak digunakan lagi karena hanya berjalan pada node pemimpin. Untuk informasi selengkapnya, lihat [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md)
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# \$1\$1 Operator (Penggabungan)
<a name="r_concat_op"></a>

Menggabungkan dua ekspresi di kedua sisi `||` simbol dan mengembalikan ekspresi gabungan. 

Mirip dengan[Fungsi CONCAT](r_CONCAT.md). 

**catatan**  
Jika salah satu atau kedua ekspresi adalah nol, hasil penggabungan adalah. `NULL` 

## Sintaksis
<a name="r_concat_op-synopsis"></a>

```
expression1 || expression2
```

## Argumen
<a name="r_concat_op-arguments"></a>

 *ekspresi1*   
`CHAR`String, `VARCHAR` string, ekspresi biner, atau ekspresi yang mengevaluasi salah satu jenis ini. 

 *ekspresi2*   
`CHAR`String, `VARCHAR` string, ekspresi biner, atau ekspresi yang mengevaluasi salah satu jenis ini. 

## Jenis pengembalian
<a name="r_concat_op-return-type"></a>

 Jenis pengembalian string sama dengan jenis argumen masukan. Misalnya, menggabungkan dua string tipe `VARCHAR` mengembalikan string tipe. `VARCHAR`

## Contoh
<a name="r_concat_op-example"></a>

 Contoh berikut menggunakan tabel USERS dan VENUE dari database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk menggabungkan bidang FIRSTNAME dan LASTNAME dari tabel USERS dalam database sampel, gunakan contoh berikut.

```
SELECT (firstname || ' ' || lastname) as fullname
FROM users
ORDER BY 1
LIMIT 10;

+-----------------+
|    fullname     |
+-----------------+
| Aaron Banks     |
| Aaron Booth     |
| Aaron Browning  |
| Aaron Burnett   |
| Aaron Casey     |
| Aaron Cash      |
| Aaron Castro    |
| Aaron Dickerson |
| Aaron Dixon     |
| Aaron Dotson    |
+-----------------+
```

 Untuk menggabungkan kolom yang mungkin berisi nol, gunakan ekspresi. [Fungsi NVL dan COALESCE](r_NVL_function.md) Contoh berikut menggunakan NVL untuk mengembalikan `0` setiap kali ditemui`NULL`. 

```
SELECT (venuename || ' seats ' || NVL(venueseats, 0)) as seating
FROM venue
WHERE venuestate = 'NV' or venuestate = 'NC'
ORDER BY 1
LIMIT 10;

+-------------------------------------+
|               seating               |
+-------------------------------------+
| Ballys Hotel seats 0                |
| Bank of America Stadium seats 73298 |
| Bellagio Hotel seats 0              |
| Caesars Palace seats 0              |
| Harrahs Hotel seats 0               |
| Hilton Hotel seats 0                |
| Luxor Hotel seats 0                 |
| Mandalay Bay Hotel seats 0          |
| Mirage Hotel seats 0                |
| New York New York seats 0           |
+-------------------------------------+
```

# Fungsi ASCII
<a name="r_ASCII"></a>

Fungsi ASCII mengembalikan kode ASCII, atau titik kode Unicode, dari karakter pertama dalam string yang Anda tentukan. Fungsi kembali `0` jika string kosong. Ia kembali `NULL` jika string adalah null. 

## Sintaksis
<a name="r_ASCII-synopsis"></a>

```
ASCII('string')
```

## Pendapat
<a name="r_ASCII-arguments"></a>

 *tali*   
Sebuah `CHAR` string atau `VARCHAR` string. 

## Jenis pengembalian
<a name="r_ASCII-return-type"></a>

 INTEGER 

## Contoh
<a name="r_ASCII-examples"></a>

Untuk kembali`NULL`, gunakan contoh berikut. Fungsi NULLIF mengembalikan `NULL` jika dua argumen yang sama, sehingga argumen masukan untuk fungsi ASCII adalah. `NULL` Untuk informasi selengkapnya, lihat [Fungsi NULLIF](r_NULLIF_function.md).

```
SELECT ASCII(NULLIF('',''));

+-------+
| ascii |
+-------+
|  NULL |
+-------+
```

Untuk mengembalikan kode ASCII 0, gunakan contoh berikut. 

```
SELECT ASCII('');

+-------+
| ascii |
+-------+
|     0 |
+-------+
```

Untuk mengembalikan kode ASCII 97 untuk huruf pertama dari kata amazon, gunakan contoh berikut. 

```
SELECT ASCII('amazon');

+-------+
| ascii |
+-------+
|    97 |
+-------+
```

Untuk mengembalikan kode ASCII 65 untuk huruf pertama dari kata Amazon, gunakan contoh berikut.

```
SELECT ASCII('Amazon');

+-------+
| ascii |
+-------+
|    65 |
+-------+
```

# Fungsi BPCHARCMP
<a name="r_BPCHARCMP"></a>

Membandingkan nilai dari dua string dan mengembalikan integer. Jika string identik, fungsi kembali`0`. Jika string pertama lebih besar menurut abjad, fungsi kembali. `1` Jika string kedua lebih besar, fungsi kembali`-1`. 

Untuk karakter multibyte, perbandingan didasarkan pada pengkodean byte.

Sinonim dari. [Fungsi BTTEXT\$1PATTERN\$1CMP](r_BTTEXT_PATTERN_CMP.md) 

## Sintaksis
<a name="r_BPCHARCMP-synopsis"></a>

```
BPCHARCMP(string1, string2)
```

## Argumen
<a name="r_BPCHARCMP-arguments"></a>

 *senar1*   
Sebuah `CHAR` string atau `VARCHAR` string. 

 *senar2*   
Sebuah `CHAR` string atau `VARCHAR` string. 

## Jenis pengembalian
<a name="r_BPCHARCMP-return-type"></a>

 INTEGER 

## Contoh
<a name="r_BPCHARCMP-examples"></a>

 Contoh berikut menggunakan tabel USERS dari database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk menentukan apakah nama depan pengguna menurut abjad lebih besar dari nama belakang pengguna untuk sepuluh entri pertama dalam tabel USERS, gunakan contoh berikut. Untuk entri di mana string untuk FIRSTNAME kemudian menurut abjad dari string untuk LASTNAME, fungsi kembali. `1` Jika LASTNAME menurut abjad lebih lambat dari FIRSTNAME, fungsi kembali. `-1`

```
SELECT userid, firstname, lastname, BPCHARCMP(firstname, lastname)
FROM users
ORDER BY 1, 2, 3, 4
LIMIT 10;

+--------+-----------+-----------+-----------+
| userid | firstname | lastname  | bpcharcmp |
+--------+-----------+-----------+-----------+
|      1 | Rafael    | Taylor    |        -1 |
|      2 | Vladimir  | Humphrey  |         1 |
|      3 | Lars      | Ratliff   |        -1 |
|      4 | Barry     | Roy       |        -1 |
|      5 | Reagan    | Hodge     |         1 |
|      6 | Victor    | Hernandez |         1 |
|      7 | Tamekah   | Juarez    |         1 |
|      8 | Colton    | Roy       |        -1 |
|      9 | Mufutau   | Watkins   |        -1 |
|     10 | Naida     | Calderon  |         1 |
+--------+-----------+-----------+-----------+
```

Untuk mengembalikan semua entri dalam tabel USERS tempat fungsi kembali`0`, gunakan contoh berikut. Fungsi kembali `0` ketika FIRSTNAME identik dengan LASTNAME. 

```
SELECT userid, firstname, lastname,
BPCHARCMP(firstname, lastname)
FROM users 
WHERE BPCHARCMP(firstname, lastname)=0
ORDER BY 1, 2, 3, 4;

+--------+-----------+----------+-----------+
| userid | firstname | lastname | bpcharcmp |
+--------+-----------+----------+-----------+
|     62 | Chase     | Chase    |         0 |
|   4008 | Whitney   | Whitney  |         0 |
|  12516 | Graham    | Graham   |         0 |
|  13570 | Harper    | Harper   |         0 |
|  16712 | Cooper    | Cooper   |         0 |
|  18359 | Chase     | Chase    |         0 |
|  27530 | Bradley   | Bradley  |         0 |
|  31204 | Harding   | Harding  |         0 |
+--------+-----------+----------+-----------+
```

# Fungsi BTRIM
<a name="r_BTRIM"></a>

Fungsi BTRIM memangkas string dengan menghapus bagian depan dan belakang kosong atau dengan menghapus karakter utama dan belakang yang cocok dengan string tertentu opsional. 

## Sintaksis
<a name="r_BTRIM-synopsis"></a>

```
BTRIM(string [, trim_chars ] )
```

## Argumen
<a name="r_BTRIM-arguments"></a>

 *tali*   
String input VARCHAR yang akan dipangkas. 

 *trim\$1chars*   
String VARCHAR yang berisi karakter yang akan dicocokkan. 

## Jenis pengembalian
<a name="r_BTRIM-return-type"></a>

Fungsi BTRIM mengembalikan string VARCHAR. 

## Contoh
<a name="r_BTRIM-examples"></a>

Contoh berikut memangkas bagian depan dan belakang kosong dari string: `' abc '` 

```
select '     abc    ' as untrim, btrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    | abc
```

Contoh berikut menghapus string depan dan trailing dari `'xyz'` string. `'xyzaxyzbxyzcxyz'` Kejadian leading dan trailing `'xyz'` dihapus, tetapi kejadian yang internal di dalam string tidak dihapus. 

```
select 'xyzaxyzbxyzcxyz' as untrim,
btrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | axyzbxyzc
```

Contoh berikut menghapus bagian depan dan belakang dari string `'setuphistorycassettes'` yang cocok dengan salah satu karakter dalam daftar *trim\$1chars*. `'tes'` Apa pun `t``e`,, atau `s` yang terjadi sebelum karakter lain yang tidak ada dalam daftar *trim\$1chars* di awal atau akhir string input dihapus. 

```
SELECT btrim('setuphistorycassettes', 'tes');

     btrim      
-----------------
 uphistoryca
```

# Fungsi BTTEXT\$1PATTERN\$1CMP
<a name="r_BTTEXT_PATTERN_CMP"></a>

Sinonim untuk fungsi BPCHARCMP. 

Lihat [Fungsi BPCHARCMP](r_BPCHARCMP.md) untuk detail. 

# Fungsi CHAR\$1LENGTH
<a name="r_CHAR_LENGTH"></a>

Sinonim dari fungsi LEN. 

Lihat [Fungsi LEN](r_LEN.md). 

# Fungsi CHARACTER\$1LENGTH
<a name="r_CHARACTER_LENGTH"></a>

Sinonim dari fungsi LEN. 

Lihat [Fungsi LEN](r_LEN.md). 

# Fungsi CHARINDEX
<a name="r_CHARINDEX"></a>

Mengembalikan lokasi substring tertentu dalam string. 

Lihat [Fungsi POSISI](r_POSITION.md) dan [fungsi STRPOS](r_STRPOS.md) untuk fungsi serupa.

## Sintaksis
<a name="r_CHARINDEX-synopsis"></a>

```
CHARINDEX( substring, string )
```

## Argumen
<a name="charindex-arguments"></a>

 *substring*   
Substring untuk mencari di dalam *string*.

 *tali*   
String atau kolom yang akan dicari.

## Jenis pengembalian
<a name="charindex-return-type"></a>

 INTEGER   
Fungsi CHARINDEX mengembalikan yang `INTEGER` sesuai dengan posisi substring (berbasis satu, bukan berbasis nol). Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. CHARINDEX kembali `0` jika substring tidak ditemukan dalam string.

## Contoh
<a name="sub-charindex-usage-notes-examples"></a>

Untuk mengembalikan posisi string `fish` dalam kata`dog`, gunakan contoh berikut. 

```
SELECT CHARINDEX('fish', 'dog');

+-----------+
| charindex |
+-----------+
|         0 |
+-----------+
```

Untuk mengembalikan posisi string `fish` dalam kata`dogfish`, gunakan contoh berikut. 

```
SELECT CHARINDEX('fish', 'dogfish');

+-----------+
| charindex |
+-----------+
|         4 |
+-----------+
```

 Contoh berikut menggunakan tabel PENJUALAN dari database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengembalikan jumlah transaksi penjualan yang berbeda dengan komisi lebih dari 999.00 dari tabel PENJUALAN, gunakan contoh berikut. Perintah ini menghitung komisi lebih besar dari 999.00 dengan memeriksa apakah desimal lebih dari 4 tempat dari awal nilai komisi.

```
SELECT DISTINCT CHARINDEX('.', commission), COUNT (CHARINDEX('.', commission))
FROM sales 
WHERE CHARINDEX('.', commission) > 4 
GROUP BY CHARINDEX('.', commission)
ORDER BY 1,2;

+-----------+-------+
| charindex | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# Fungsi CHR
<a name="r_CHR"></a>

Fungsi CHR mengembalikan karakter yang cocok dengan nilai titik kode ASCII yang ditentukan oleh parameter input.

## Sintaksis
<a name="r_CHR-synopsis"></a>

```
CHR(number)
```

## Pendapat
<a name="r_CHR-argument"></a>

 *jumlah*   
Parameter input adalah `INTEGER` yang mewakili nilai titik kode ASCII.

## Jenis pengembalian
<a name="r_CHR-return-type"></a>

 CHAR   
Fungsi CHR mengembalikan `CHAR` string jika karakter ASCII cocok dengan nilai input. Jika nomor input tidak memiliki kecocokan ASCII, fungsi kembali. `NULL`

## Contoh
<a name="r_CHR-example"></a>

Untuk mengembalikan karakter yang sesuai dengan kode ASCII titik 0, gunakan contoh berikut. Perhatikan bahwa fungsi CHR kembali `NULL` untuk input`0`. 

```
SELECT CHR(0);

+-----+
| chr |
+-----+
|     |
+-----+
```

Untuk mengembalikan karakter yang sesuai dengan kode ASCII poin 65, gunakan contoh berikut.

```
SELECT CHR(65);

+-----+
| chr |
+-----+
| A   |
+-----+
```

Untuk mengembalikan nama peristiwa yang berbeda yang dimulai dengan huruf kapital A (ASCII code point 65), gunakan contoh berikut. Contoh berikut menggunakan tabel EVENT dari database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
SELECT DISTINCT eventname FROM event
WHERE SUBSTRING(eventname, 1, 1)=CHR(65) LIMIT 5;

+-----------------------+
|       eventname       |
+-----------------------+
| A Catered Affair      |
| As You Like It        |
| A Man For All Seasons |
| Alan Jackson          |
| Armando Manzanero     |
+-----------------------+
```

# Fungsi COLLATE
<a name="r_COLLATE"></a>

Fungsi COLLATE mengesampingkan pemeriksaan kolom string atau ekspresi. 

Untuk informasi tentang cara membuat tabel menggunakan pemeriksaan database, lihat[CREATE TABLE](r_CREATE_TABLE_NEW.md).

Untuk informasi tentang cara membuat database menggunakan pemeriksaan database, lihat. [BUAT BASIS DATA](r_CREATE_DATABASE.md)

## Sintaksis
<a name="r_COLLATE-synopsis"></a>

```
COLLATE( string, 'case_sensitive' | 'cs' | 'case_insensitive' | 'ci');
```

## Argumen
<a name="r_COLLATE-argument"></a>

 *tali*   
Kolom string atau ekspresi yang ingin Anda timpa.

 *'case\$1sensitive' \$1 'cs'* *\$1 '***case\$1insensitive' \$1 '*ci'*   
Sebuah konstanta string dari nama pemeriksaan. Amazon Redshift hanya mendukung nilai berikut untuk parameter ini:  
+  *case\$1sensitive* 
+  *cs* 
+  *case\$1insensitive* 
+  *ci* 
*case\$1sensitive* dan *cs* dapat dipertukarkan dan menghasilkan hasil yang sama. Demikian pula, *case\$1insensitive* dan *ci* dapat dipertukarkan dan menghasilkan hasil yang sama.

## Jenis pengembalian
<a name="r_COLLATE-return-type"></a>

Fungsi COLLATE mengembalikan`VARCHAR`,`CHAR`, atau `SUPER` tergantung pada jenis ekspresi input pertama. Fungsi ini hanya mengubah pengumpulan argumen input pertama dan tidak akan mengubah nilai outputnya.

## Contoh
<a name="r_COLLATE-example"></a>

Untuk membuat tabel T dan mendefinisikan col1 dalam tabel T sebagai`case_sensitive`, gunakan contoh berikut.

```
CREATE TABLE T ( col1 Varchar(20) COLLATE case_sensitive );

INSERT INTO T VALUES ('john'),('JOHN');
```

 Saat Anda menjalankan kueri pertama, Amazon Redshift hanya kembali. `john` Setelah fungsi COLLATE berjalan pada col1, pemeriksaan menjadi. `case_insensitive` Query kedua mengembalikan keduanya `john` dan`JOHN`. 

```
SELECT * FROM T WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
+------+

SELECT * FROM T WHERE COLLATE(col1, 'case_insensitive') = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+
```

Untuk membuat tabel A dan mendefinisikan col1 dalam tabel A sebagai`case_insensitive`, gunakan contoh berikut.

```
CREATE TABLE A ( col1 Varchar(20) COLLATE case_insensitive );

INSERT INTO A VALUES ('john'),('JOHN');
```

 Saat Anda menjalankan kueri pertama, Amazon Redshift mengembalikan keduanya dan`john`. `JOHN` Setelah fungsi COLLATE berjalan pada col1, pemeriksaan menjadi. `case_sensitive` Kueri kedua hanya mengembalikan`john`. 

```
SELECT * FROM A WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+

SELECT * FROM A WHERE COLLATE(col1, 'case_sensitive') = 'john';

+------+
| col1 |
+------+
| john |
+------+
```

# Fungsi CONCAT
<a name="r_CONCAT"></a>

Fungsi CONCAT menggabungkan dua ekspresi dan mengembalikan ekspresi yang dihasilkan. Untuk menggabungkan lebih dari dua ekspresi, gunakan fungsi CONCAT bersarang. Operator penggabungan (`||`) antara dua ekspresi menghasilkan hasil yang sama dengan fungsi CONCAT. 

## Sintaksis
<a name="r_CONCAT-synopsis"></a>

```
CONCAT ( expression1, expression2 )
```

## Argumen
<a name="r_CONCAT-arguments"></a>

 **ekspresi1, ekspresi2**   
Kedua argumen dapat berupa string karakter fixed-length, string karakter panjang variabel, ekspresi biner, atau ekspresi yang mengevaluasi salah satu input ini. 

## Jenis pengembalian
<a name="r_CONCAT-return-type"></a>

 CONCAT mengembalikan ekspresi. Tipe data ekspresi adalah tipe yang sama dengan argumen masukan. 

Jika ekspresi input dari jenis yang berbeda, Amazon Redshift mencoba untuk secara implisit mengetik cast salah satu ekspresi. Jika nilai tidak dapat dilemparkan, kesalahan dikembalikan.

## Catatan penggunaan
<a name="r_CONCAT-usage-notes"></a>
+ Untuk kedua fungsi CONCAT dan operator penggabungan, jika salah satu atau kedua ekspresi adalah nol, hasil penggabungan adalah nol.

## Contoh
<a name="r_CONCAT-examples"></a>

Contoh berikut menggabungkan dua literal karakter: 

```
SELECT CONCAT('December 25, ', '2008');

concat
-------------------
December 25, 2008
(1 row)
```

Kueri berikut, menggunakan `||` operator bukan CONCAT, menghasilkan hasil yang sama: 

```
SELECT 'December 25, '||'2008';

?column?
-------------------
December 25, 2008
(1 row)
```

Contoh berikut menggunakan fungsi CONCAT bersarang di dalam fungsi CONCAT lain untuk menggabungkan tiga string karakter: 

```
SELECT CONCAT('Thursday, ', CONCAT('December 25, ', '2008'));

concat
-----------------------------
Thursday, December 25, 2008
(1 row)
```

Untuk menggabungkan kolom yang mungkin berisi NULLs, gunakan[Fungsi NVL dan COALESCE](r_NVL_function.md), yang mengembalikan nilai yang diberikan ketika bertemu NULL. Contoh berikut menggunakan NVL untuk mengembalikan 0 setiap kali NULL ditemui. 

```
SELECT CONCAT(venuename, CONCAT(' seats ', NVL(venueseats, 0))) AS seating
FROM venue WHERE venuestate = 'NV' OR venuestate = 'NC'
ORDER BY 1
LIMIT 5;

seating                            
-----------------------------------
Ballys Hotel seats 0               
Bank of America Stadium seats 73298
Bellagio Hotel seats 0             
Caesars Palace seats 0             
Harrahs Hotel seats 0              
(5 rows)
```

Kueri berikut menggabungkan nilai CITY dan STATE dari tabel VENUE: 

```
SELECT CONCAT(venuecity, venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
-------------------
DenverCO
Kansas CityMO
East RutherfordNJ
LandoverMD
(4 rows)
```

Kueri berikut menggunakan fungsi CONCAT bersarang. Kueri menggabungkan nilai CITY dan STATE dari tabel VENUE tetapi membatasi string yang dihasilkan dengan koma dan spasi: 

```
SELECT CONCAT(CONCAT(venuecity,', '),venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
---------------------
Denver, CO
Kansas City, MO
East Rutherford, NJ
Landover, MD
(4 rows)
```

Contoh berikut menggabungkan dua ekspresi biner. Dimana `abc` adalah nilai biner (dengan representasi heksadesimal`616263`) dan `def` merupakan nilai biner (dengan representasi heksadesimal). `646566` Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari nilai biner.

```
SELECT CONCAT('abc'::VARBYTE, 'def'::VARBYTE);

concat
-------------------
616263646566
```

# CRC32 fungsi
<a name="crc32-function"></a>

CRC32 adalah fungsi yang digunakan untuk deteksi kesalahan. Fungsi ini menggunakan CRC32 algoritma untuk mendeteksi perubahan antara sumber dan data target. CRC32 Fungsi ini mengubah string panjang variabel menjadi string 8 karakter yang merupakan representasi teks dari nilai heksadesimal dari urutan biner 32 bit. Untuk mendeteksi perubahan antara sumber dan data target, gunakan CRC32 fungsi pada data sumber dan simpan output. Kemudian, gunakan CRC32 fungsi pada data target dan bandingkan output itu dengan output dari data sumber. Outputnya akan sama jika data tidak dimodifikasi, dan outputnya akan berbeda jika data dimodifikasi.

## Sintaksis
<a name="crc32-function-syntax"></a>

```
CRC32(string)
```

## Argumen
<a name="crc32-function-arguments"></a>

 *tali*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR`

## Jenis pengembalian
<a name="crc32-function-return-type"></a>

 CRC32 Fungsi mengembalikan string 8-karakter yang merupakan representasi teks dari nilai heksadesimal dari urutan biner 32-bit. CRC32 Fungsi Amazon Redshift didasarkan pada polinomial CRC-32C. 

## Contoh
<a name="crc32-function-example"></a>

Untuk menunjukkan nilai 8-bit untuk string`Amazon Redshift`. 

```
SELECT CRC32('Amazon Redshift');

+----------+
|  crc32   |
+----------+
| f2726906 |
+----------+
```

# Fungsi PERBEDAAN
<a name="DIFFERENCE"></a>

Fungsi DIFFERENCE membandingkan kode American Soundex dari dua string. Fungsi mengembalikan `INTEGER` untuk menunjukkan jumlah karakter yang cocok antara kode Soundex. 

 Kode Soundex adalah string yang panjangnya empat karakter. Kode Soundex mewakili bagaimana sebuah kata terdengar daripada bagaimana itu dieja. Misalnya, `Smith` dan `Smyth` memiliki kode Soundex yang sama. 

## Sintaksis
<a name="DIFFERENCE-synopsis"></a>

```
DIFFERENCE(string1, string2)
```

## Argumen
<a name="DIFFERENCE-arguments"></a>

 *senar1*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR`

 *senar2*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR`

## Jenis pengembalian
<a name="DIFFERENCE-return-type"></a>

 INTEGER   
Fungsi DIFFERENCE mengembalikan `INTEGER` nilai dari 0-4 yang menghitung jumlah karakter yang cocok dalam kode American Soundex dari dua string. Kode Soundex memiliki 4 karakter, sehingga fungsi DIFFERENCE kembali `4` ketika semua 4 karakter dari nilai kode American Soundex string adalah sama. PERBEDAAN kembali `0` jika salah satu dari dua string kosong. Fungsi kembali `1` jika string tidak mengandung karakter yang valid. Fungsi DIFFERENCE hanya mengkonversi huruf kecil abjad bahasa Inggris atau huruf besar ASCII karakter, termasuk a—z dan A—Z. PERBEDAAN mengabaikan karakter lain.

## Contoh
<a name="DIFFERENCE-examples"></a>

Untuk membandingkan nilai-nilai Soundex dari string `%` dan`@`, gunakan contoh berikut. Fungsi kembali `1` karena string tidak mengandung karakter yang valid.

```
SELECT DIFFERENCE('%', '@');

+------------+
| difference |
+------------+
|          1 |
+------------+
```

Untuk membandingkan nilai-nilai Soundex `Amazon` dan string kosong, gunakan contoh berikut. Fungsi kembali `0` karena salah satu dari dua string kosong.

```
SELECT DIFFERENCE('Amazon', '');

+------------+
| difference |
+------------+
|          0 |
+------------+
```

Untuk membandingkan nilai-nilai Soundex dari string `Amazon` dan`Ama`, gunakan contoh berikut. Fungsi kembali `2` karena 2 karakter dari nilai Soundex string adalah sama.

```
SELECT DIFFERENCE('Amazon', 'Ama');

+------------+
| difference |
+------------+
|          2 |
+------------+
```

Untuk membandingkan nilai-nilai Soundex dari string `Amazon` dan`+-*/%Amazon`, gunakan contoh berikut. Fungsi kembali `4` karena semua 4 karakter dari nilai Soundex string adalah sama. Perhatikan bahwa fungsi mengabaikan karakter yang tidak valid `+-*/%` dalam string kedua.

```
SELECT DIFFERENCE('Amazon', '+-*/%Amazon');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

Untuk membandingkan nilai-nilai Soundex dari string `AC/DC` dan`Ay See Dee See`, gunakan contoh berikut. Fungsi kembali `4` karena semua 4 karakter dari nilai Soundex string adalah sama.

```
SELECT DIFFERENCE('AC/DC', 'Ay See Dee See');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

# Fungsi INITCAP
<a name="r_INITCAP"></a>

Kapitalisasi huruf pertama dari setiap kata dalam string tertentu. INITCAP mendukung karakter multibyte UTF-8, hingga maksimal empat byte per karakter.

## Sintaksis
<a name="r_INITCAP-synopsis"></a>

```
INITCAP(string)
```

## Pendapat
<a name="r_INITCAP-argument"></a>

 *tali*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR` 

## Jenis pengembalian
<a name="r_INITCAP-return-type"></a>

VARCHAR

## Catatan penggunaan
<a name="r_INITCAP_usage_notes"></a>

Fungsi INITCAP membuat huruf pertama dari setiap kata dalam string huruf besar, dan huruf berikutnya dibuat (atau kiri) huruf kecil. Oleh karena itu, penting untuk memahami karakter mana (selain karakter spasi) yang berfungsi sebagai pemisah kata. Karakter *pemisah kata* adalah karakter non-alfanumerik, termasuk tanda baca, simbol, dan karakter kontrol. Semua karakter berikut adalah pemisah kata: 

```
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 
```

Tab, karakter baris baru, umpan formulir, umpan baris, dan pengembalian carriage juga merupakan pemisah kata.

## Contoh
<a name="r_INITCAP-examples"></a>

Contoh berikut menggunakan data dari tabel CATEGORY dan USERS dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk menggunakan huruf besar inisiasi setiap kata di kolom CATDESC, gunakan contoh berikut. 

```
SELECT catid, catdesc, INITCAP(catdesc)
FROM category
ORDER BY 1, 2, 3;

+-------+--------------------------------------------+--------------------------------------------+
| catid |                  catdesc                   |                  initcap                   |
+-------+--------------------------------------------+--------------------------------------------+
|     1 | Major League Baseball                      | Major League Baseball                      |
|     2 | National Hockey League                     | National Hockey League                     |
|     3 | National Football League                   | National Football League                   |
|     4 | National Basketball Association            | National Basketball Association            |
|     5 | Major League Soccer                        | Major League Soccer                        |
|     6 | Musical theatre                            | Musical Theatre                            |
|     7 | All non-musical theatre                    | All Non-Musical Theatre                    |
|     8 | All opera and light opera                  | All Opera And Light Opera                  |
|     9 | All rock and pop music concerts            | All Rock And Pop Music Concerts            |
|    10 | All jazz singers and bands                 | All Jazz Singers And Bands                 |
|    11 | All symphony, concerto, and choir concerts | All Symphony, Concerto, And Choir Concerts |
+-------+--------------------------------------------+--------------------------------------------+
```

Untuk menunjukkan bahwa fungsi INITCAP tidak mempertahankan karakter huruf besar ketika mereka tidak memulai kata-kata, gunakan contoh berikut. Misalnya, string `MLB` menjadi`Mlb`.

```
SELECT INITCAP(catname)
FROM category
ORDER BY catname;

+-----------+
|  initcap  |
+-----------+
| Classical |
| Jazz      |
| Mlb       |
| Mls       |
| Musicals  |
| Nba       |
| Nfl       |
| Nhl       |
| Opera     |
| Plays     |
| Pop       |
+-----------+
```

Untuk menunjukkan bahwa karakter non-alfanumerik selain spasi berfungsi sebagai pemisah kata, gunakan contoh berikut. Beberapa huruf di setiap string akan dikapitalisasi.

```
SELECT email, INITCAP(email)
FROM users
ORDER BY userid DESC LIMIT 5;

+------------------------------------+------------------------------------+
|               email                |              initcap               |
+------------------------------------+------------------------------------+
| urna.Ut@egetdictumplacerat.edu     | Urna.Ut@Egetdictumplacerat.Edu     |
| nibh.enim@egestas.ca               | Nibh.Enim@Egestas.Ca               |
| in@Donecat.ca                      | In@Donecat.Ca                      |
| sodales@blanditviverraDonec.ca     | Sodales@Blanditviverradonec.Ca     |
| sociis.natoque.penatibus@vitae.org | Sociis.Natoque.Penatibus@Vitae.Org |
+------------------------------------+------------------------------------+
```

# Fungsi KIRI dan KANAN
<a name="r_LEFT"></a>

Fungsi-fungsi ini mengembalikan jumlah karakter paling kiri atau paling kanan yang ditentukan dari string karakter.

Jumlahnya didasarkan pada jumlah karakter, bukan byte, sehingga karakter multibyte dihitung sebagai karakter tunggal.

## Sintaksis
<a name="r_LEFT-synopsis"></a>

```
LEFT( string,  integer )

RIGHT( string,  integer )
```

## Argumen
<a name="r_LEFT-arguments"></a>

 *tali*   
`CHAR`String, `VARCHAR` string, atau ekspresi apa pun yang mengevaluasi ke `CHAR` atau `VARCHAR` string.

 *bilangan bulat*   
Integer positif. 

## Jenis pengembalian
<a name="r_LEFT-return-type"></a>

VARCHAR

## Contoh
<a name="r_LEFT-example"></a>

Contoh berikut menggunakan data dari tabel EVENT dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengembalikan 5 karakter paling kiri dan paling kanan 5 dari nama acara yang memiliki peristiwa IDs antara 1000 dan 1005, gunakan contoh berikut. 

```
SELECT eventid, eventname,
LEFT(eventname,5) AS left_5,
RIGHT(eventname,5) AS right_5
FROM event
WHERE eventid BETWEEN 1000 AND 1005
ORDER BY 1;

+---------+----------------+--------+---------+
| eventid |   eventname    | left_5 | right_5 |
+---------+----------------+--------+---------+
|    1000 | Gypsy          | Gypsy  | Gypsy   |
|    1001 | Chicago        | Chica  | icago   |
|    1002 | The King and I | The K  | and I   |
|    1003 | Pal Joey       | Pal J  | Joey    |
|    1004 | Grease         | Greas  | rease   |
|    1005 | Chicago        | Chica  | icago   |
+---------+----------------+--------+---------+
```

# Fungsi LEN
<a name="r_LEN"></a>

Mengembalikan panjang string yang ditentukan sebagai jumlah karakter. 

## Sintaksis
<a name="r_LEN-synopsis"></a>

LEN adalah sinonim dari[Fungsi PANJANG](r_LENGTH.md),, [Fungsi CHAR\$1LENGTH](r_CHAR_LENGTH.md)[Fungsi CHARACTER\$1LENGTH](r_CHARACTER_LENGTH.md), dan. [Fungsi TEXTLEN](r_TEXTLEN.md) 

```
LEN(expression)
```

## Pendapat
<a name="r_LEN-argument"></a>

 *ekspresi*   
`CHAR`String, `VARCHAR` string, `VARBYTE` ekspresi, atau ekspresi yang secara implisit mengevaluasi ke`CHAR`,`VARCHAR`, atau tipe. `VARBYTE`

## Jenis pengembalian
<a name="r_LEN-return-type"></a>

 INTEGER   
Fungsi LEN mengembalikan integer yang menunjukkan jumlah karakter dalam string input.   
Jika string input adalah string karakter, fungsi LEN mengembalikan jumlah aktual karakter dalam string multi-byte, bukan jumlah byte. Misalnya, `VARCHAR(12)` kolom diperlukan untuk menyimpan tiga karakter Mandarin empat byte. Fungsi LEN akan kembali `3` untuk string yang sama. Untuk mendapatkan panjang string dalam byte, gunakan [OCTET\$1LENGTH](r_OCTET_LENGTH.md) fungsi.

## Catatan penggunaan
<a name="r_LEN_usage_notes"></a>

Jika *ekspresi* adalah `CHAR` string, spasi tambahan tidak dihitung. 

Jika *ekspresi* adalah `VARCHAR` string, spasi tambahan dihitung. 

## Contoh
<a name="r_LEN-example"></a>

Untuk mengembalikan jumlah byte dan jumlah karakter dalam string`français`, gunakan contoh berikut.

```
SELECT OCTET_LENGTH('français'), 
LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

Untuk mengembalikan jumlah byte dan jumlah karakter dalam string `français` tanpa menggunakan fungsi OCTET\$1LENGTH, gunakan contoh berikut. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md).

```
SELECT LEN(CAST('français' AS VARBYTE)) as bytes, LEN('français');

+-------+-----+
| bytes | len |
+-------+-----+
|     9 |   8 |
+-------+-----+
```

Untuk mengembalikan jumlah karakter dalam string tanpa spasi tambahan, `cat` dengan tiga spasi trailing, `cat ` dengan tiga spasi trailing dilemparkan sebagai `CHAR` panjang 6, dan `cat ` dengan tiga spasi trailing dilemparkan sebagai panjang 6, `VARCHAR` gunakan contoh berikut. `cat ` Perhatikan bahwa fungsi tidak menghitung spasi tambahan untuk `CHAR` string, tetapi itu menghitung spasi tambahan untuk string. `VARCHAR`

```
SELECT LEN('cat'), LEN('cat   '), LEN(CAST('cat   ' AS CHAR(6))) AS len_char, LEN(CAST('cat   ' AS VARCHAR(6))) AS len_varchar;

+-----+-----+----------+-------------+
| len | len | len_char | len_varchar |
+-----+-----+----------+-------------+
|   3 |   6 |        3 |           6 |
+-----+-----+----------+-------------+
```

Contoh berikut menggunakan data dari tabel VENUE dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengembalikan 10 nama tempat terpanjang di tabel VENUE, gunakan contoh berikut. 

```
SELECT venuename, LEN(venuename)
FROM venue
ORDER BY 2 DESC, 1
LIMIT 10;

+-----------------------------------------+-----+
|                venuename                | len |
+-----------------------------------------+-----+
| Saratoga Springs Performing Arts Center |  39 |
| Lincoln Center for the Performing Arts  |  38 |
| Nassau Veterans Memorial Coliseum       |  33 |
| Jacksonville Municipal Stadium          |  30 |
| Rangers BallPark in Arlington           |  29 |
| University of Phoenix Stadium           |  29 |
| Circle in the Square Theatre            |  28 |
| Hubert H. Humphrey Metrodome            |  28 |
| Oriole Park at Camden Yards             |  27 |
| Dick's Sporting Goods Park              |  26 |
+-----------------------------------------+-----+
```

# Fungsi PANJANG
<a name="r_LENGTH"></a>

Sinonim dari fungsi LEN. 

Lihat [Fungsi LEN](r_LEN.md). 

# Fungsi LOWER
<a name="r_LOWER"></a>

Mengkonversi string ke huruf kecil. LOWER mendukung karakter multibyte UTF-8, hingga maksimal empat byte per karakter.

## Sintaksis
<a name="r_LOWER-synopsis"></a>

```
LOWER(string)
```

## Pendapat
<a name="r_LOWER-argument"></a>

 *tali*   
`VARCHAR`String atau ekspresi apa pun yang mengevaluasi `VARCHAR` tipe.

## Jenis pengembalian
<a name="r_LOWER-return-type"></a>

 string   
Fungsi LOWER mengembalikan string yang merupakan tipe data yang sama dengan string input. Misalnya, jika input adalah `CHAR` string, fungsi akan mengembalikan `CHAR` string.

## Contoh
<a name="r_LOWER-examples"></a>

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk mengonversi `VARCHAR` string di kolom CATNAME menjadi huruf kecil, gunakan contoh berikut. 

```
SELECT catname, LOWER(catname) FROM category ORDER BY 1,2;

+-----------+-----------+
|  catname  |   lower   |
+-----------+-----------+
| Classical | classical |
| Jazz      | jazz      |
| MLB       | mlb       |
| MLS       | mls       |
| Musicals  | musicals  |
| NBA       | nba       |
| NFL       | nfl       |
| NHL       | nhl       |
| Opera     | opera     |
| Plays     | plays     |
| Pop       | pop       |
+-----------+-----------+
```

# Fungsi LPAD dan RPAD
<a name="r_LPAD"></a>

Fungsi-fungsi ini menambahkan atau menambahkan karakter ke string, berdasarkan panjang tertentu. 

## Sintaksis
<a name="r_LPAD-synopsis"></a>

```
LPAD(string1, length, [ string2 ])
```

```
RPAD(string1, length, [ string2 ])
```

## Argumen
<a name="r_LPAD-arguments"></a>

 *senar1*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR` 

 *panjang*   
Sebuah integer yang mendefinisikan panjang hasil dari fungsi. Panjang string didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. Jika *string1* lebih panjang dari panjang yang ditentukan, itu terpotong (di sebelah kanan). Jika *panjangnya* nol atau angka negatif, hasil fungsinya adalah string kosong.

 *senar2*   
*(Opsional) Satu atau lebih karakter yang ditambahkan atau ditambahkan ke string1.* Jika argumen ini tidak ditentukan, spasi digunakan. 

## Jenis pengembalian
<a name="r_LPAD-return-type"></a>

VARCHAR

## Contoh
<a name="r_LPAD-examples"></a>

Contoh berikut menggunakan data dari tabel EVENT dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Untuk memotong satu set nama acara tertentu menjadi 20 karakter dan menambahkan nama yang lebih pendek dengan spasi, gunakan contoh berikut. 

```
SELECT LPAD(eventname, 20) FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+---------------------+
|         lpad        |
+---------------------+
|              Salome |
|        Il Trovatore |
|       Boris Godunov |
|     Gotterdammerung |
|La Cenerentola (Cind |
+-----------------------+
```

Untuk memotong kumpulan nama acara yang sama menjadi 20 karakter tetapi menambahkan nama yang lebih pendek dengan`0123456789`, gunakan contoh berikut. 

```
SELECT RPAD(eventname, 20,'0123456789') FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+----------------------+
|         rpad         |
+----------------------+
| Boris Godunov0123456 |
| Gotterdammerung01234 |
| Il Trovatore01234567 |
| La Cenerentola (Cind |
| Salome01234567890123 |
+----------------------+
```

# Fungsi LTRIM
<a name="r_LTRIM"></a>

Memangkas karakter dari awal string. Menghapus string terpanjang yang hanya berisi karakter dalam daftar karakter trim. Pemangkasan selesai ketika karakter trim tidak muncul di string input.

## Sintaksis
<a name="r_LTRIM-synopsis"></a>

```
LTRIM( string [, trim_chars] )
```

## Argumen
<a name="r_LTRIM-arguments"></a>

 *tali*   
Sebuah kolom string, ekspresi, atau string literal yang akan dipangkas.

 *trim\$1chars*   
Sebuah kolom string, ekspresi, atau string literal yang mewakili karakter yang akan dipangkas dari awal *string*. Jika tidak ditentukan, spasi digunakan sebagai karakter trim.

## Jenis pengembalian
<a name="r_LTRIM-return-type"></a>

Fungsi LTRIM mengembalikan string karakter yang merupakan tipe data yang sama dengan *string* input (CHAR atau VARCHAR). 

## Contoh
<a name="r_LTRIM-example"></a>

Contoh berikut memangkas tahun dari `listime` kolom. Karakter trim dalam string literal `'2008-'` menunjukkan karakter yang akan dipangkas dari kiri. Jika Anda menggunakan karakter trim`'028-'`, Anda mencapai hasil yang sama. 

```
select listid, listtime, ltrim(listtime, '2008-')
from listing
order by 1, 2, 3
limit 10;            

listid |      listtime       |     ltrim
-------+---------------------+----------------
     1 | 2008-01-24 06:43:29 | 1-24 06:43:29
     2 | 2008-03-05 12:25:29 | 3-05 12:25:29
     3 | 2008-11-01 07:35:33 | 11-01 07:35:33
     4 | 2008-05-24 01:18:37 | 5-24 01:18:37
     5 | 2008-05-17 02:29:11 | 5-17 02:29:11
     6 | 2008-08-15 02:08:13 | 15 02:08:13
     7 | 2008-11-15 09:38:15 | 11-15 09:38:15
     8 | 2008-11-09 05:07:30 | 11-09 05:07:30
     9 | 2008-09-09 08:03:36 | 9-09 08:03:36
    10 | 2008-06-17 09:44:54 | 6-17 09:44:54
```

*LTRIM menghapus salah satu karakter di *trim\$1chars* ketika mereka muncul di awal string.* Contoh berikut memangkas karakter 'C', 'D', dan 'G' ketika mereka muncul di awal VENUENAME, yang merupakan kolom VARCHAR. 

```
select venueid, venuename, ltrim(venuename, 'CDG')
from venue
where venuename like '%Park'
order by 2
limit 7;             

venueid | venuename                  | btrim                    
--------+----------------------------+--------------------------
    121 | ATT Park                   | ATT Park                
    109 | Citizens Bank Park         | itizens Bank Park        
    102 | Comerica Park              | omerica Park             
      9 | Dick's Sporting Goods Park | ick's Sporting Goods Park
     97 | Fenway Park                | Fenway Park              
    112 | Great American Ball Park   | reat American Ball Park  
    114 | Miller Park                | Miller Park
```

Contoh berikut menggunakan karakter trim `2` yang diambil dari `venueid` kolom.

```
select ltrim('2008-01-24 06:43:29', venueid) 
from venue where venueid=2;              

ltrim
------------------
008-01-24 06:43:29
```

Contoh berikut tidak memangkas karakter apa pun `2` karena a ditemukan sebelum karakter `'0'` trim. 

```
select ltrim('2008-01-24 06:43:29', '0');              

ltrim
-------------------
2008-01-24 06:43:29
```

Contoh berikut menggunakan karakter trim spasi default dan memangkas dua spasi dari awal string. 

```
select ltrim('  2008-01-24 06:43:29');              

ltrim
-------------------
2008-01-24 06:43:29
```

# Fungsi OCTETINDEX
<a name="OCTETINDEX"></a>

Fungsi OCTETINDEX mengembalikan lokasi substring dalam string sebagai sejumlah byte.

## Sintaksis
<a name="OCTETINDEX-synopsis"></a>

```
OCTETINDEX(substring, string)
```

## Argumen
<a name="OCTETINDEX-arguments"></a>

 *substring*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR` 

 *tali*   
`CHAR`String, `VARCHAR` string, atau ekspresi yang secara implisit mengevaluasi ke atau tipe. `CHAR` `VARCHAR` 

## Jenis pengembalian
<a name="OCTETINDEX-return-type"></a>

 INTEGER   
Fungsi OCTETINDEX mengembalikan `INTEGER` nilai yang sesuai dengan posisi *substring* dalam *string* sebagai sejumlah byte, di mana karakter pertama dalam *string* dihitung sebagai 1. Jika *string* tidak mengandung karakter multibyte, hasilnya sama dengan hasil fungsi CHARINDEX. Jika *string* tidak mengandung *substring*, fungsi kembali`0`. Jika *substring* kosong, fungsi kembali`1`. 

## Contoh
<a name="OCTETINDEX-examples"></a>

Untuk mengembalikan posisi substring `q` dalam string`Amazon Redshift`, gunakan contoh berikut. Contoh ini kembali `0` karena *substring* tidak dalam *string*.

```
SELECT OCTETINDEX('q', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          0 |
+------------+
```

Untuk mengembalikan posisi substring kosong dalam string`Amazon Redshift`, gunakan contoh berikut. Contoh ini kembali `1` karena *substring* kosong.

```
SELECT OCTETINDEX('', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          1 |
+------------+
```

Untuk mengembalikan posisi substring `Redshift` dalam string`Amazon Redshift`, gunakan contoh berikut. *Contoh ini kembali `8` karena *substring* dimulai pada byte kedelapan dari string.*

```
SELECT OCTETINDEX('Redshift', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          8 |
+------------+
```

Untuk mengembalikan posisi substring `Redshift` dalam string`Amazon Redshift`, gunakan contoh berikut. Contoh ini kembali `21` karena enam karakter pertama dari *string* adalah karakter double-byte.

```
SELECT OCTETINDEX('Redshift', 'Άμαζον Amazon Redshift');

+------------+
| octetindex |
+------------+
|         21 |
+------------+
```

# Fungsi OCTET\$1LENGTH
<a name="r_OCTET_LENGTH"></a>

Mengembalikan panjang string yang ditentukan sebagai jumlah byte. 

## Sintaksis
<a name="r_OCTET_LENGTH-synopsis"></a>

```
OCTET_LENGTH(expression)
```

## Pendapat
<a name="r_OCTET_LENGTH-argument"></a>

 *ekspresi*   
`CHAR`String, `VARCHAR` string, `VARBYTE` ekspresi, atau ekspresi yang secara implisit mengevaluasi ke`CHAR`,`VARCHAR`, atau tipe. `VARBYTE` 

## Jenis pengembalian
<a name="r_OCTET_LENGTH-return-type"></a>

 INTEGER   
Fungsi OCTET\$1LENGTH mengembalikan integer yang menunjukkan jumlah byte dalam string input.   
Jika string input adalah string karakter, [LEN](r_LEN.md) fungsi mengembalikan jumlah aktual karakter dalam string multi-byte, bukan jumlah byte. Misalnya, `VARCHAR(12)` kolom diperlukan untuk menyimpan tiga karakter Mandarin empat byte. Fungsi OCTET\$1LENGTH akan kembali `12` untuk string itu, dan fungsi LEN akan kembali `3` untuk string yang sama.

## Catatan penggunaan
<a name="r_OCTET_LENGTH_usage_notes"></a>

Jika *ekspresi* adalah `CHAR` string, fungsi mengembalikan panjang `CHAR` string. Misalnya, output dari `CHAR(6)` input adalah a`CHAR(6)`. 

Jika *ekspresi* adalah `VARCHAR` string, spasi tambahan dihitung. 

## Contoh
<a name="r_OCTET_LENGTH-example"></a>

Untuk mengembalikan jumlah byte ketika string `francais` dengan tiga spasi trailing dilemparkan ke `CHAR` dan `VARCHAR` tipe, gunakan contoh berikut. Untuk informasi selengkapnya, lihat [Fungsi CAST](r_CAST_function.md).

```
SELECT OCTET_LENGTH(CAST('francais   ' AS CHAR(15))) AS octet_length_char, OCTET_LENGTH(CAST('francais   ' AS VARCHAR(15))) AS octet_length_varchar;

+-------------------+----------------------+
| octet_length_char | octet_length_varchar |
+-------------------+----------------------+
|                15 |                   11 |
+-------------------+----------------------+
```

Untuk mengembalikan jumlah byte dan jumlah karakter dalam string`français`, gunakan contoh berikut.

```
SELECT OCTET_LENGTH('français'), LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

Untuk mengembalikan jumlah byte ketika string `français` dilemparkan sebagai`VARBYTE`, gunakan contoh berikut.

```
SELECT OCTET_LENGTH(CAST('français' AS VARBYTE));

+--------------+
| octet_length |
+--------------+
|            9 |
+--------------+
```

# Fungsi POSISI
<a name="r_POSITION"></a>

Mengembalikan lokasi substring tertentu dalam string.

Lihat [Fungsi CHARINDEX](r_CHARINDEX.md) dan [fungsi STRPOS](r_STRPOS.md) untuk fungsi serupa.

## Sintaksis
<a name="position-synopsis"></a>

```
POSITION(substring IN string )
```

## Argumen
<a name="r_POSITION-arguments"></a>

 *substring*   
Substring untuk mencari di dalam *string*. 

 *tali*   
String atau kolom yang akan dicari. 

## Jenis pengembalian
<a name="position-return-type"></a>

Fungsi POSITION mengembalikan yang `INTEGER` sesuai dengan posisi substring (berbasis satu, bukan berbasis nol). Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. POSITION kembali `0` jika substring tidak ditemukan dalam string.

## Contoh
<a name="sub-r_POSITION_usage_notes-examples"></a>

Untuk mengembalikan posisi string `fish` dalam kata`dog`, gunakan contoh berikut. 

```
SELECT POSITION('fish' IN 'dog');

+-----------+
|  position |
+-----------+
|         0 |
+-----------+
```

Untuk mengembalikan posisi string `fish` dalam kata`dogfish`, gunakan contoh berikut. 

```
SELECT POSITION('fish' IN 'dogfish');

+-----------+
|  position |
+-----------+
|         4 |
+-----------+
```

 Contoh berikut menggunakan tabel PENJUALAN dari database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengembalikan jumlah transaksi penjualan yang berbeda dengan komisi lebih dari 999.00 dari tabel PENJUALAN, gunakan contoh berikut. Perintah ini menghitung komisi lebih besar dari 999.00 dengan memeriksa apakah desimal lebih dari 4 tempat dari awal nilai komisi.

```
SELECT DISTINCT POSITION('.' IN commission), COUNT (POSITION('.' IN commission))
FROM sales 
WHERE POSITION('.' IN commission) > 4 
GROUP BY POSITION('.' IN commission)
ORDER BY 1,2;

+-----------+-------+
|  position | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# Fungsi QUOTE\$1IDENT
<a name="r_QUOTE_IDENT"></a>

Fungsi QUOTE\$1IDENT mengembalikan string yang ditentukan sebagai string dengan tanda kutip ganda terkemuka dan tanda kutip ganda tertinggal. Output fungsi dapat digunakan sebagai identifier dalam pernyataan SQL. Fungsi ini menggandakan tanda kutip ganda yang disematkan dengan tepat. 

QUOTE\$1IDENT menambahkan tanda kutip ganda hanya jika diperlukan untuk membuat pengidentifikasi yang valid, ketika string berisi karakter non-pengenal atau sebaliknya akan dilipat ke huruf kecil. [Untuk selalu mengembalikan string yang dikutip tunggal, gunakan QUOTE\$1LITERAL.](r_QUOTE_LITERAL.md)

## Sintaksis
<a name="r_QUOTE_IDENT-synopsis"></a>

```
QUOTE_IDENT(string)
```

## Pendapat
<a name="r_QUOTE_IDENT-argument"></a>

 *tali*   
A `CHAR` atau `VARCHAR` string. 

## Jenis pengembalian
<a name="r_QUOTE_IDENT-return-type"></a>

*Fungsi QUOTE\$1IDENT mengembalikan jenis string yang sama dengan string input.* 

## Contoh
<a name="r_QUOTE_IDENT-example"></a>

Untuk mengembalikan string `"CAT"` dengan tanda kutip dua kali lipat, gunakan contoh berikut.

```
SELECT QUOTE_IDENT('"CAT"');

+-------------+
| quote_ident |
+-------------+
| """CAT"""   |
+-------------+
```

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengembalikan kolom CATNAME dikelilingi oleh tanda kutip, gunakan contoh berikut.

```
SELECT catid, QUOTE_IDENT(catname)
FROM category
ORDER BY 1,2;

+-------+-------------+
| catid | quote_ident |
+-------+-------------+
|     1 | "MLB"       |
|     2 | "NHL"       |
|     3 | "NFL"       |
|     4 | "NBA"       |
|     5 | "MLS"       |
|     6 | "Musicals"  |
|     7 | "Plays"     |
|     8 | "Opera"     |
|     9 | "Pop"       |
|    10 | "Jazz"      |
|    11 | "Classical" |
+-------+-------------+
```

# Fungsi QUOTE\$1LITERAL
<a name="r_QUOTE_LITERAL"></a>

Fungsi QUOTE\$1LITERAL mengembalikan string tertentu sebagai string dikutip tunggal sehingga dapat digunakan sebagai string literal dalam pernyataan SQL. Jika parameter input adalah angka, QUOTE\$1LITERAL memperlakukannya sebagai string. Dengan tepat menggandakan tanda kutip tunggal dan garis miring terbalik yang disematkan. 

## Sintaksis
<a name="r_QUOTE_LITERAL-synopsis"></a>

```
QUOTE_LITERAL(string)
```

## Pendapat
<a name="r_QUOTE_LITERAL-argument"></a>

 *tali*   
A `CHAR` atau `VARCHAR` string. 

## Jenis pengembalian
<a name="r_QUOTE_LITERAL-return-type"></a>

*Fungsi QUOTE\$1LITERAL mengembalikan `CHAR` atau `VARCHAR` string yang merupakan tipe data yang sama dengan string input.* 

## Contoh
<a name="r_QUOTE_LITERAL-example"></a>

Untuk mengembalikan string `''CAT''` dengan tanda kutip TUNGGAL, gunakan contoh berikut.

```
SELECT QUOTE_LITERAL('''CAT''');

+---------------+
| quote_literal |
+---------------+
| '''CAT'''     |
+---------------+
```

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengembalikan kolom CATNAME dikelilingi oleh tanda kutip tunggal, gunakan contoh berikut.

```
SELECT catid, QUOTE_LITERAL(catname)
FROM category
ORDER BY 1,2;

+-------+---------------+
| catid | quote_literal |
+-------+---------------+
|     1 | 'MLB'         |
|     2 | 'NHL'         |
|     3 | 'NFL'         |
|     4 | 'NBA'         |
|     5 | 'MLS'         |
|     6 | 'Musicals'    |
|     7 | 'Plays'       |
|     8 | 'Opera'       |
|     9 | 'Pop'         |
|    10 | 'Jazz'        |
|    11 | 'Classical'   |
+-------+---------------+
```

Untuk mengembalikan kolom CATID yang dikelilingi oleh tanda kutip tunggal, gunakan contoh berikut.

```
SELECT QUOTE_LITERAL(catid), catname
FROM category
ORDER BY 1,2;

+---------------+-----------+
| quote_literal |  catname  |
+---------------+-----------+
| '1'           | MLB       |
| '10'          | Jazz      |
| '11'          | Classical |
| '2'           | NHL       |
| '3'           | NFL       |
| '4'           | NBA       |
| '5'           | MLS       |
| '6'           | Musicals  |
| '7'           | Plays     |
| '8'           | Opera     |
| '9'           | Pop       |
+---------------+-----------+
```

# Fungsi REGEXP\$1COUNT
<a name="REGEXP_COUNT"></a>

Mencari string untuk pola ekspresi reguler dan mengembalikan integer yang menunjukkan berapa kali pola yang ditentukan terjadi dalam string. Jika tidak ada kecocokan yang ditemukan, maka fungsi kembali`0`. Untuk informasi selengkapnya tentang ekspresi reguler, lihat [Operator POSIX](pattern-matching-conditions-posix.md) dan [Ekspresi reguler](https://en.wikipedia.org/wiki/Regular_expression) di Wikipedia.

## Sintaksis
<a name="REGEXP_COUNT-synopsis"></a>

```
REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )
```

## Argumen
<a name="REGEXP_COUNT-arguments"></a>

 *source\$1string*   
A `CHAR` atau `VARCHAR` string. 

 *pola*   
Sebuah string UTF-8 literal yang mewakili pola ekspresi reguler. Untuk informasi selengkapnya, lihat [Operator POSIX](pattern-matching-conditions-posix.md).

 *posisi*   
(Opsional) Positif `INTEGER` yang menunjukkan posisi dalam *source\$1string* untuk mulai mencari. Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multibyte dihitung sebagai karakter tunggal. Nilai default-nya `1`. Jika *posisi* kurang dari`1`, pencarian dimulai pada karakter pertama *source\$1string*. Jika *posisi* lebih besar dari jumlah karakter di *source\$1string, hasilnya* adalah. `0`

 *parameter*   
(Opsional) Satu atau lebih string literal yang menunjukkan bagaimana fungsi cocok dengan pola. Nilai yang mungkin adalah sebagai berikut:  
+ c - Lakukan pencocokan peka huruf besar/kecil. Standarnya adalah menggunakan pencocokan peka huruf besar/kecil.
+ i — Lakukan pencocokan case-insensitive.
+ p — Menafsirkan pola dengan dialek Perl Compatible Regular Expression (PCRE). Untuk informasi selengkapnya tentang PCRE, lihat [Ekspresi Reguler Kompatibel Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) di Wikipedia.

## Jenis pengembalian
<a name="REGEXP_COUNT-return-type"></a>

INTEGER

## Contoh
<a name="REGEXP_COUNT-examples"></a>

Untuk menghitung berapa kali urutan tiga huruf terjadi, gunakan contoh berikut.

```
SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');

+--------------+
| regexp_count |
+--------------+
|            8 |
+--------------+
```

Untuk menghitung kemunculan string `FOX` menggunakan pencocokan case-insensitive, gunakan contoh berikut.

```
SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i');

+--------------+
| regexp_count |
+--------------+
|            1 |
+--------------+
```

Untuk menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil, gunakan contoh berikut. Contoh menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Contoh ini menghitung jumlah kemunculan kata-kata tersebut, dengan pencocokan peka huruf besar/kecil. 

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p');

+--------------+
| regexp_count |
+--------------+
|            2 |
+--------------+
```

Untuk menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil, gunakan contoh berikut. Ini menggunakan `?=` operator, yang memiliki konotasi khusus di PCRE. Contoh ini menghitung jumlah kemunculan kata-kata tersebut, tetapi berbeda dari contoh sebelumnya karena menggunakan pencocokan case-insensitive.

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip');

+--------------+
| regexp_count |
+--------------+
|            3 |
+--------------+
```

Contoh berikut menggunakan data dari tabel USERS dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk menghitung berapa kali nama domain tingkat atas adalah salah satu `org` atau`edu`, gunakan contoh berikut. 

```
SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_count |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |            1 |
| Suspendisse.tristique@nonnisiAenean.edu       |            1 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |            0 |
| sed@lacusUtnec.ca                             |            0 |
+-----------------------------------------------+--------------+
```

# Fungsi REGEXP\$1INSTR
<a name="REGEXP_INSTR"></a>

Mencari string untuk pola ekspresi reguler dan mengembalikan integer yang menunjukkan posisi awal atau posisi akhir dari substring yang cocok. Jika tidak ada kecocokan yang ditemukan, maka fungsi kembali`0`. REGEXP\$1INSTR mirip dengan fungsi [POSITION](r_POSITION.md), tetapi memungkinkan Anda mencari string untuk pola ekspresi reguler. Untuk informasi selengkapnya tentang ekspresi reguler, lihat [Operator POSIX](pattern-matching-conditions-posix.md) dan [Ekspresi reguler](https://en.wikipedia.org/wiki/Regular_expression) di Wikipedia.

## Sintaksis
<a name="REGEXP_INSTR-synopsis"></a>

```
REGEXP_INSTR( source_string, pattern [, position [, occurrence] [, option [, parameters ] ] ] ] )
```

## Argumen
<a name="REGEXP_INSTR-arguments"></a>

 *source\$1string*   
Ekspresi string, seperti nama kolom, yang akan dicari. 

 *pola*   
Sebuah string UTF-8 literal yang mewakili pola ekspresi reguler. Untuk informasi selengkapnya, lihat [Operator POSIX](pattern-matching-conditions-posix.md).

 *posisi*   
(Opsional) Positif `INTEGER` yang menunjukkan posisi dalam *source\$1string* untuk mulai mencari. Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multibyte dihitung sebagai karakter tunggal. Nilai default-nya `1`. Jika *posisi* kurang dari`1`, pencarian dimulai pada karakter pertama *source\$1string*. Jika *posisi* lebih besar dari jumlah karakter di *source\$1string, hasilnya* adalah. `0`

 *kejadian*   
(Opsional) Positif `INTEGER` yang menunjukkan kemunculan pola mana yang akan digunakan. REGEXP\$1INSTR melewatkan pertandingan pertama. `occurrence-1` Nilai default-nya `1`. Jika *kejadian* kurang dari `1` atau lebih besar dari jumlah karakter di *source\$1string*, pencarian diabaikan dan hasilnya adalah. `0`

 *pilihan*   
(Opsional) Nilai yang menunjukkan apakah akan mengembalikan posisi karakter pertama pertandingan (`0`) atau posisi karakter pertama setelah akhir pertandingan (`1`). Nilai bukan nol sama `1` dengan. Nilai default-nya adalah `0`. 

 *parameter*   
(Opsional) Satu atau lebih string literal yang menunjukkan bagaimana fungsi cocok dengan pola. Nilai yang mungkin adalah sebagai berikut:  
+ c - Lakukan pencocokan peka huruf besar/kecil. Standarnya adalah menggunakan pencocokan peka huruf besar/kecil. 
+ i — Lakukan pencocokan case-insensitive. 
+ e — Ekstrak substring menggunakan subexpression. 

  *Jika *pola* menyertakan subexpression, REGEXP\$1INSTR cocok dengan substring menggunakan subexpression pertama dalam pola.* REGEXP\$1INSTR hanya mempertimbangkan subexpression pertama; subexpressions tambahan diabaikan. Jika pola tidak memiliki subexpression, REGEXP\$1INSTR mengabaikan parameter 'e'. 
+ p — Menafsirkan pola dengan dialek Perl Compatible Regular Expression (PCRE). Untuk informasi selengkapnya tentang PCRE, lihat [Ekspresi Reguler Kompatibel Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) di Wikipedia.

## Jenis pengembalian
<a name="REGEXP_INSTR-return-type"></a>

Bilangan Bulat

## Contoh
<a name="REGEXP_INSTR-examples"></a>

Contoh berikut menggunakan data dari tabel USERS dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mencari `@` karakter yang memulai nama domain dan mengembalikan posisi awal kecocokan pertama, gunakan contoh berikut.

```
SELECT email, REGEXP_INSTR(email, '@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_instr |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |           21 |
| Suspendisse.tristique@nonnisiAenean.edu       |           22 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |           17 |
| sed@lacusUtnec.ca                             |            4 |
+-----------------------------------------------+--------------+
```

Untuk mencari varian kata `Center` dan mengembalikan posisi awal kecocokan pertama, gunakan contoh berikut.

```
SELECT venuename, REGEXP_INSTR(venuename,'[cC]ent(er|re)$')
FROM venue
WHERE REGEXP_INSTR(venuename,'[cC]ent(er|re)$') > 0
ORDER BY venueid LIMIT 4;

+-----------------------+--------------+
|       venuename       | regexp_instr |
+-----------------------+--------------+
| The Home Depot Center |           16 |
| Izod Center           |            6 |
| Wachovia Center       |           10 |
| Air Canada Centre     |           12 |
+-----------------------+--------------+
```

Untuk menemukan posisi awal dari kemunculan pertama string`FOX`, menggunakan logika pencocokan case-insensitive, gunakan contoh berikut. 

```
SELECT REGEXP_INSTR('the fox', 'FOX', 1, 1, 0, 'i');

+--------------+
| regexp_instr |
+--------------+
|            5 |
+--------------+
```

Untuk menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil, gunakan contoh berikut. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Contoh ini menemukan posisi awal dari kata kedua tersebut.

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'p');

+--------------+
| regexp_instr |
+--------------+
|           21 |
+--------------+
```

Untuk menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil, gunakan contoh berikut. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Contoh ini menemukan posisi awal dari kata kedua tersebut, tetapi berbeda dari contoh sebelumnya karena menggunakan pencocokan case-insensitive.

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'ip');

+--------------+
| regexp_instr |
+--------------+
|           15 |
+--------------+
```

# Fungsi REGEXP\$1REPLACE
<a name="REGEXP_REPLACE"></a>

Mencari string untuk pola ekspresi reguler dan menggantikan setiap kemunculan pola dengan string yang ditentukan. REGEXP\$1REPLACE mirip dengan[GANTI fungsi](r_REPLACE.md), tetapi memungkinkan Anda mencari string untuk pola ekspresi reguler. Untuk informasi selengkapnya tentang ekspresi reguler, lihat [Operator POSIX](pattern-matching-conditions-posix.md) dan [Ekspresi reguler](https://en.wikipedia.org/wiki/Regular_expression) di Wikipedia.

REGEXP\$1REPLACE mirip dengan [FUNGSI TRANSLATE](r_TRANSLATE.md) dan[GANTI fungsi](r_REPLACE.md), kecuali bahwa TRANSLATE membuat beberapa substitusi karakter tunggal dan REPLACE menggantikan satu seluruh string dengan string lain, sementara REGEXP\$1REPLACE memungkinkan Anda mencari string untuk pola ekspresi reguler.

## Sintaksis
<a name="REGEXP_REPLACE-synopsis"></a>

```
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
```

## Argumen
<a name="REGEXP_REPLACE-arguments"></a>

 *source\$1string*   
Ekspresi `CHAR` atau `VARCHAR` string, seperti nama kolom, yang akan dicari. 

 *pola*   
Sebuah string UTF-8 literal yang mewakili pola ekspresi reguler. Untuk informasi selengkapnya, lihat [Operator POSIX](pattern-matching-conditions-posix.md).

*replace\$1string*  
(Opsional) Ekspresi A `CHAR` atau `VARCHAR` string, seperti nama kolom, yang akan menggantikan setiap kemunculan pola. Defaultnya adalah string kosong (“”). 

 *posisi*   
(Opsional) Sebuah integer positif yang menunjukkan posisi dalam *source\$1string* untuk mulai mencari. Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multibyte dihitung sebagai karakter tunggal. Nilai default-nya `1`. Jika *posisi* kurang dari`1`, pencarian dimulai pada karakter pertama *source\$1string*. *Jika *posisi* lebih besar dari jumlah karakter di *source\$1string, hasilnya adalah source\$1string*.*

 *parameter*   
(Opsional) Satu atau lebih string literal yang menunjukkan bagaimana fungsi cocok dengan pola. Nilai yang mungkin adalah sebagai berikut:  
+ c - Lakukan pencocokan peka huruf besar/kecil. Standarnya adalah menggunakan pencocokan peka huruf besar/kecil.
+ i — Lakukan pencocokan case-insensitive.
+ p — Menafsirkan pola dengan dialek Perl Compatible Regular Expression (PCRE). Untuk informasi selengkapnya tentang PCRE, lihat [Ekspresi Reguler Kompatibel Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) di Wikipedia.

## Jenis pengembalian
<a name="REGEXP_REPLACE-return-type"></a>

VARCHAR

Jika salah satu *pola* atau *replace\$1string* adalah`NULL`, fungsi kembali. `NULL`

## Contoh
<a name="REGEXP_REPLACE-examples"></a>

Untuk mengganti semua kemunculan string `FOX` dalam nilai `quick brown fox` menggunakan pencocokan case-insensitive, gunakan contoh berikut.

```
SELECT REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 'i');

+---------------------+
|   regexp_replace    |
+---------------------+
| the quick brown fox |
+---------------------+
```

Contoh berikut menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Untuk mengganti setiap kemunculan kata seperti itu dengan nilainya`[hidden]`, gunakan contoh berikut.

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p');

+-------------------------------+
|        regexp_replace         |
+-------------------------------+
| [hidden] plain A1234 [hidden] |
+-------------------------------+
```

Contoh berikut menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Untuk mengganti setiap kemunculan kata seperti itu dengan nilai`[hidden]`, tetapi berbeda dari contoh sebelumnya karena menggunakan pencocokan case-insensitive, gunakan contoh berikut.

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip');

+----------------------------------+
|          regexp_replace          |
+----------------------------------+
| [hidden] plain [hidden] [hidden] |
+----------------------------------+
```

Contoh berikut menggunakan data dari tabel USERS dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk menghapus `@` dan nama domain dari alamat email, gunakan contoh berikut.

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.(org|gov|com|edu|ca)$')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+-----------------------+
|                     email                     |    regexp_replace     |
+-----------------------------------------------+-----------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut      |
| sed@lacusUtnec.ca                             | sed                   |
+-----------------------------------------------+-----------------------+
```

Untuk mengganti nama domain alamat email dengan`internal.company.com`, gunakan contoh berikut.

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.[[:alpha:]]{2,3}','@internal.company.com') 
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------------------------------------+
|                     email                     |               regexp_replace               |
+-----------------------------------------------+--------------------------------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique@internal.company.com |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut@internal.company.com      |
| sed@lacusUtnec.ca                             | sed@internal.company.com                   |
+-----------------------------------------------+--------------------------------------------+
```

# Fungsi REGEXP\$1SUBSTR
<a name="REGEXP_SUBSTR"></a>

Mengembalikan karakter dari string dengan mencarinya untuk pola ekspresi reguler. REGEXP\$1SUBSTR mirip dengan [Fungsi SUBSTRING](r_SUBSTRING.md) fungsinya, tetapi memungkinkan Anda mencari string untuk pola ekspresi reguler. Jika fungsi tidak dapat mencocokkan ekspresi reguler dengan karakter apa pun dalam string, ia mengembalikan string kosong. Untuk informasi selengkapnya tentang ekspresi reguler, lihat [Operator POSIX](pattern-matching-conditions-posix.md) dan [Ekspresi reguler](https://en.wikipedia.org/wiki/Regular_expression) di Wikipedia.

## Sintaksis
<a name="REGEXP_SUBSTR-synopsis"></a>

```
REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )
```

## Argumen
<a name="REGEXP_SUBSTR-arguments"></a>

 *source\$1string*   
Ekspresi string yang akan dicari. 

 *pola*   
Sebuah string UTF-8 literal yang mewakili pola ekspresi reguler. Untuk informasi selengkapnya, lihat [Operator POSIX](pattern-matching-conditions-posix.md).

 *posisi*   
Sebuah integer positif yang menunjukkan posisi dalam *source\$1string* untuk mulai mencari. Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. Default-nya adalah 1. Jika *posisi* kurang dari 1, pencarian dimulai pada karakter pertama *source\$1string*. Jika *posisi* lebih besar dari jumlah karakter di *source\$1string*, hasilnya adalah string kosong (“”).

 *kejadian*   
Sebuah bilangan bulat positif yang menunjukkan kemunculan pola yang akan digunakan. *REGEXP\$1SUBSTR melewatkan kejadian pertama -1 pertandingan.* Default-nya adalah 1. Jika *kejadian* kurang dari 1 atau lebih besar dari jumlah karakter di *source\$1string*, pencarian diabaikan dan hasilnya kosong.

 *parameter*   
Satu atau lebih string literal yang menunjukkan bagaimana fungsi cocok dengan pola. Nilai yang mungkin adalah sebagai berikut:  
+ c - Lakukan pencocokan peka huruf besar/kecil. Standarnya adalah menggunakan pencocokan peka huruf besar/kecil. 
+ i — Lakukan pencocokan case-insensitive. 
+ e — Ekstrak substring menggunakan subexpression. 

   *Jika *pola* menyertakan subexpression, REGEXP\$1SUBSTR cocok dengan substring menggunakan subexpression pertama dalam pola.* Sebuah subexpression adalah ekspresi dalam pola yang dikurung dengan tanda kurung. Misalnya, untuk pola `'This is a (\\w+)'` cocok ekspresi pertama dengan string `'This is a '` diikuti oleh sebuah kata. Alih-alih mengembalikan *pola*, REGEXP\$1SUBSTR dengan `e` parameter hanya mengembalikan string di dalam subexpression.

  REGEXP\$1SUBSTR hanya mempertimbangkan subexpression pertama; subexpressions tambahan diabaikan. Jika pola tidak memiliki subexpression, REGEXP\$1SUBSTR mengabaikan parameter 'e'. 
+ p — Menafsirkan pola dengan dialek Perl Compatible Regular Expression (PCRE). Untuk informasi selengkapnya tentang PCRE, lihat [Ekspresi Reguler Kompatibel Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) di Wikipedia.

## Jenis pengembalian
<a name="REGEXP_SUBSTR-return-type"></a>

VARCHAR

## Contoh
<a name="REGEXP_SUBSTR-examples"></a>

Contoh berikut mengembalikan bagian dari alamat email antara karakter @ dan ekstensi domain. `users`Data yang ditanyakan berasal dari data sampel Amazon Redshift. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
SELECT email, regexp_substr(email,'@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

                     email                     |      regexp_substr
-----------------------------------------------+--------------------------
 Suspendisse.tristique@nonnisiAenean.edu       | @nonnisiAenean
 amet.faucibus.ut@condimentumegetvolutpat.ca   | @condimentumegetvolutpat
 sed@lacusUtnec.ca                             | @lacusUtnec
 Cum@accumsan.com                              | @accumsan
```

Contoh berikut mengembalikan bagian dari input yang sesuai dengan kejadian pertama string `FOX` menggunakan pencocokan case-insensitive.

```
SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i');

 regexp_substr
---------------
 fox
```

Contoh berikut mengembalikan bagian dari input yang sesuai dengan kejadian kedua string `FOX` menggunakan pencocokan case-insensitive. Hasilnya kosong (non-null, panjang 0) karena tidak ada kejadian kedua.

```
SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i');

 regexp_substr
---------------
```

Contoh berikut mengembalikan bagian pertama dari input yang dimulai dengan huruf kecil. Ini secara fungsional identik dengan pernyataan SELECT yang sama tanpa `c` parameter.

```
SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c');

 regexp_substr
---------------
 abc
```

Contoh berikut menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Contoh ini mengembalikan bagian dari input yang sesuai dengan kata kedua tersebut.

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'p');

 regexp_substr
---------------
 a1234
```

Contoh berikut menggunakan pola yang ditulis dalam dialek PCRE untuk menemukan kata-kata yang mengandung setidaknya satu angka dan satu huruf kecil. Ini menggunakan `?=` operator, yang memiliki konotasi pandangan ke depan tertentu di PCRE. Contoh ini mengembalikan bagian input yang sesuai dengan kata kedua tersebut, tetapi berbeda dari contoh sebelumnya karena menggunakan pencocokan case-insensitive.

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'ip');

 regexp_substr
---------------
 A1234
```

Contoh berikut menggunakan subexpression untuk menemukan string kedua yang cocok dengan pola `'this is a (\\w+)'` menggunakan pencocokan case-insensitive. Ia mengembalikan subexpression di dalam tanda kurung.

```
SELECT regexp_substr(
               'This is a cat, this is a dog. This is a mouse.',
               'this is a (\\w+)', 1, 2, 'ie');
           
 regexp_substr
---------------
 dog
```

# Fungsi REPEAT
<a name="r_REPEAT"></a>

Mengulangi string jumlah yang ditentukan kali. Jika parameter input numerik, REPEAT memperlakukannya sebagai string. 

Sinonim untuk. [Fungsi REPLICATE](r_REPLICATE.md) 

## Sintaksis
<a name="r_REPEAT-synopsis"></a>

```
REPEAT(string, integer)
```

## Argumen
<a name="r_REPEAT-arguments"></a>

 *tali*   
Parameter input pertama adalah string yang akan diulang. 

 *bilangan bulat*   
Parameter kedua adalah `INTEGER` menunjukkan berapa kali untuk mengulangi string. 

## Jenis pengembalian
<a name="r_REPEAT-return-type"></a>

VARCHAR

## Contoh
<a name="r_REPEAT-examples"></a>

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengulang nilai kolom CATID dalam tabel CATEGORY tiga kali, gunakan contoh berikut. 

```
SELECT catid, REPEAT(catid,3)
FROM category
ORDER BY 1,2;

+-------+--------+
| catid | repeat |
+-------+--------+
|     1 |    111 |
|     2 |    222 |
|     3 |    333 |
|     4 |    444 |
|     5 |    555 |
|     6 |    666 |
|     7 |    777 |
|     8 |    888 |
|     9 |    999 |
|    10 | 101010 |
|    11 | 111111 |
+-------+--------+
```

Contoh berikut menunjukkan menghasilkan string hingga 16.000.000 byte:

```
SELECT 
    LEN(REPEAT('X', 5000000)) AS five_million_bytes,
    LEN(REPEAT('Y', 16000000)) AS sixteen_million_bytes;

 five_million_bytes  | sixteen_million_bytes
----------+-----------
 5000000  | 16000000
```

# GANTI fungsi
<a name="r_REPLACE"></a>

Menggantikan semua kemunculan satu set karakter dalam string yang ada dengan karakter tertentu lainnya. 

REPLACE mirip dengan [FUNGSI TRANSLATE](r_TRANSLATE.md) dan[Fungsi REGEXP\$1REPLACE](REGEXP_REPLACE.md), kecuali bahwa TRANSLATE membuat beberapa substitusi karakter tunggal dan REGEXP\$1REPLACE memungkinkan Anda mencari string untuk pola ekspresi reguler, sementara REPLACE mengganti satu seluruh string dengan string lain.

## Sintaksis
<a name="r_REPLACE-synopsis"></a>

```
REPLACE(string, old_chars, new_chars)
```

## Argumen
<a name="r_REPLACE-arguments"></a>

 *tali*   
`CHAR`atau `VARCHAR` string yang akan dicari pencarian 

 *old\$1chars*   
`CHAR`atau `VARCHAR` string untuk diganti. 

 *new\$1chars*   
Baru `CHAR` atau `VARCHAR` string menggantikan *old\$1string*. 

## Jenis pengembalian
<a name="r_REPLACE-return-type"></a>

VARCHAR  
Jika *old\$1chars atau *new\$1chars** adalah, pengembaliannya adalah. `NULL` `NULL` 

## Contoh
<a name="r_REPLACE-examples"></a>

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengonversi string `Shows` ke `Theatre` dalam bidang CATGROUP, gunakan contoh berikut. 

```
SELECT catid, catgroup, REPLACE(catgroup, 'Shows', 'Theatre')
FROM category
ORDER BY 1,2,3;

+-------+----------+----------+
| catid | catgroup | replace  |
+-------+----------+----------+
|     1 | Sports   | Sports   |
|     2 | Sports   | Sports   |
|     3 | Sports   | Sports   |
|     4 | Sports   | Sports   |
|     5 | Sports   | Sports   |
|     6 | Shows    | Theatre  |
|     7 | Shows    | Theatre  |
|     8 | Shows    | Theatre  |
|     9 | Concerts | Concerts |
|    10 | Concerts | Concerts |
|    11 | Concerts | Concerts |
+-------+----------+----------+
```

# Fungsi REPLICATE
<a name="r_REPLICATE"></a>

Sinonim untuk fungsi REPEAT. 

Lihat [Fungsi REPEAT](r_REPEAT.md). 

# Fungsi REVERSE
<a name="r_REVERSE"></a>

Fungsi REVERSE beroperasi pada string dan mengembalikan karakter dalam urutan terbalik. Misalnya, `reverse('abcde')` mengembalikan `edcba`. Fungsi ini bekerja pada tipe data numerik dan tanggal serta tipe data karakter; Namun, dalam banyak kasus memiliki nilai praktis untuk string karakter. 

## Sintaksis
<a name="r_REVERSE-synopsis"></a>

```
REVERSE( expression )
```

## Pendapat
<a name="r_REVERSE-argument"></a>

 *ekspresi*   
Ekspresi dengan karakter, tanggal, stempel waktu, atau tipe data numerik yang mewakili target pembalikan karakter. Semua ekspresi secara implisit dikonversi ke `VARCHAR` string. Trailing blank dalam `CHAR` string diabaikan. 

## Jenis pengembalian
<a name="r_REVERSE-return-type"></a>

VARCHAR

## Contoh
<a name="r_REVERSE-examples"></a>

Contoh berikut menggunakan data dari tabel USERS dan SALES dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk memilih lima nama kota yang berbeda dan nama terbalik yang sesuai dari tabel USERS, gunakan contoh berikut. 

```
SELECT DISTINCT city AS cityname, REVERSE(cityname)
FROM users 
ORDER BY city LIMIT 5;

+----------+----------+
| cityname | reverse  |
+----------+----------+
| Aberdeen | needrebA |
| Abilene  | enelibA  |
| Ada      | adA      |
| Agat     | tagA     |
| Agawam   | mawagA   |
+----------+----------+
```

Untuk memilih lima penjualan IDs dan IDs pemeran terbalik yang sesuai sebagai string karakter, gunakan contoh berikut. 

```
SELECT salesid, REVERSE(salesid)
FROM sales 
ORDER BY salesid DESC LIMIT 5;

+---------+---------+
| salesid | reverse |
+---------+---------+
|  172456 |  654271 |
|  172455 |  554271 |
|  172454 |  454271 |
|  172453 |  354271 |
|  172452 |  254271 |
+---------+---------+
```

# Fungsi RTRIM
<a name="r_RTRIM"></a>

Fungsi RTRIM memangkas satu set karakter tertentu dari akhir string. Menghapus string terpanjang yang hanya berisi karakter dalam daftar karakter trim. Pemangkasan selesai ketika karakter trim tidak muncul di string input.

## Sintaksis
<a name="r_RTRIM-synopsis"></a>

```
RTRIM( string, trim_chars )
```

## Argumen
<a name="r_RTRIM-arguments"></a>

 *tali*   
Sebuah kolom string, ekspresi, atau string literal yang akan dipangkas.

 *trim\$1chars*   
Sebuah kolom string, ekspresi, atau string literal yang mewakili karakter yang akan dipangkas dari akhir *string*. Jika tidak ditentukan, spasi digunakan sebagai karakter trim.

## Jenis pengembalian
<a name="r_RTRIM-return-type"></a>

String yang merupakan tipe data yang sama dengan argumen *string*.

## Contoh
<a name="r_RTRIM-example"></a>

Contoh berikut memangkas bagian depan dan belakang kosong dari string: `' abc '` 

```
select '     abc    ' as untrim, rtrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    |    abc
```

Contoh berikut menghapus string trailing dari `'xyz'` string. `'xyzaxyzbxyzcxyz'` Kejadian tertinggal `'xyz'` dihapus, tetapi kejadian yang internal di dalam string tidak dihapus. 

```
select 'xyzaxyzbxyzcxyz' as untrim,
rtrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | xyzaxyzbxyzc
```

Contoh berikut menghapus bagian trailing dari string `'setuphistorycassettes'` yang cocok dengan salah satu karakter dalam daftar *trim\$1chars*. `'tes'` Apa pun `t``e`,, atau `s` yang terjadi sebelum karakter lain yang tidak ada dalam daftar *trim\$1chars* di akhir string input dihapus. 

```
SELECT rtrim('setuphistorycassettes', 'tes');

     rtrim      
-----------------
 setuphistoryca
```

Contoh berikut memangkas karakter 'Park' dari akhir VENUENAME di mana ada: 

```
select venueid, venuename, rtrim(venuename, 'Park')
from venue
order by 1, 2, 3
limit 10;

venueid |         venuename          |          rtrim
--------+----------------------------+-------------------------
      1 | Toyota Park                | Toyota
      2 | Columbus Crew Stadium      | Columbus Crew Stadium
      3 | RFK Stadium                | RFK Stadium
      4 | CommunityAmerica Ballpark  | CommunityAmerica Ballp
      5 | Gillette Stadium           | Gillette Stadium
      6 | New York Giants Stadium    | New York Giants Stadium
      7 | BMO Field                  | BMO Field
      8 | The Home Depot Center      | The Home Depot Cente
      9 | Dick's Sporting Goods Park | Dick's Sporting Goods
     10 | Pizza Hut Park             | Pizza Hut
```

Perhatikan bahwa RTRIM menghapus salah satu karakter`P`,`a`,`r`, atau `k` ketika mereka muncul di akhir VENUENAME. 

# Fungsi SOUNDEX
<a name="SOUNDEX"></a>

Fungsi SOUNDEX mengembalikan nilai American Soundex yang terdiri dari huruf pertama dari string input diikuti oleh pengkodean 3 digit suara yang mewakili pengucapan bahasa Inggris dari string yang Anda tentukan. Misalnya, `Smith` dan `Smyth` memiliki nilai Soundex yang sama. 

## Sintaksis
<a name="SOUNDEX-synopsis"></a>

```
SOUNDEX(string)
```

## Argumen
<a name="SOUNDEX-arguments"></a>

 *tali*   
Anda menentukan `CHAR` atau `VARCHAR` string yang ingin Anda konversi ke nilai kode Soundex Amerika. 

## Jenis pengembalian
<a name="SOUNDEX-return-type"></a>

VARCHAR(4)

## Catatan penggunaan
<a name="r_SOUNDEX_usage_notes"></a>

Fungsi SOUNDEX hanya mengkonversi huruf kecil alfabet bahasa Inggris dan huruf besar ASCII karakter, termasuk a—z dan A—Z. SOUNDEX mengabaikan karakter lain. SOUNDEX mengembalikan nilai Soundex tunggal untuk string beberapa kata yang dipisahkan oleh spasi.

```
SELECT SOUNDEX('AWS Amazon');
            
+---------+
| soundex |
+---------+
| A252    |
+---------+
```

SOUNDEX mengembalikan string kosong jika string input tidak mengandung huruf bahasa Inggris.

```
SELECT SOUNDEX('+-*/%');

+---------+
| soundex |
+---------+
|         |
+---------+
```

## Contoh
<a name="SOUNDEX-examples"></a>

Untuk mengembalikan nilai Soundex untuk`Amazon`, gunakan contoh berikut.

```
SELECT SOUNDEX('Amazon');

+---------+
| soundex |
+---------+
| A525    |
+---------+
```

Untuk mengembalikan nilai Soundex untuk `smith` dan`smyth`, gunakan contoh berikut. Perhatikan bahwa nilai Soundex adalah sama.

```
SELECT SOUNDEX('smith'), SOUNDEX('smyth');

+-------+-------+
| smith | smyth |
+-------+-------+
| S530  | S530  |
+-------+-------+
```

# Fungsi SPLIT\$1PART
<a name="SPLIT_PART"></a>

Membagi string pada pembatas yang ditentukan dan mengembalikan bagian pada posisi yang ditentukan.

## Sintaksis
<a name="SPLIT_PART-synopsis"></a>

```
SPLIT_PART(string, delimiter, position)
```

## Argumen
<a name="SPLIT_PART-arguments"></a>

 *tali*   
Sebuah kolom string, ekspresi, atau string literal yang akan dibagi. String dapat berupa CHAR atau VARCHAR.

 *pembatas*   
*String pembatas menunjukkan bagian dari string input.*   
Jika *pembatas* adalah literal, lampirkan dalam tanda kutip tunggal. 

 *posisi*   
Posisi bagian *string* untuk kembali (menghitung dari 1). Harus bilangan bulat lebih besar dari 0. Jika *posisi* lebih besar dari jumlah bagian string, SPLIT\$1PART mengembalikan string kosong. Jika *pembatas* tidak ditemukan dalam *string*, maka nilai yang dikembalikan berisi isi dari bagian yang ditentukan, yang mungkin seluruh *string* atau nilai kosong.

## Jenis pengembalian
<a name="SPLIT_PART-return-type"></a>

*Sebuah string CHAR atau VARCHAR, sama dengan parameter string.*

## Contoh
<a name="SPLIT_PART-examples"></a>

Contoh berikut membagi string literal menjadi beberapa bagian menggunakan `$` pembatas dan mengembalikan bagian kedua.

```
select split_part('abc$def$ghi','$',2)

split_part
----------
def
```

Contoh berikut membagi string literal menjadi beberapa bagian menggunakan `$` pembatas. Ia mengembalikan string kosong karena bagian `4` tidak ditemukan.

```
select split_part('abc$def$ghi','$',4)

split_part
----------
```

Contoh berikut membagi string literal menjadi beberapa bagian menggunakan `#` pembatas. Ia mengembalikan seluruh string, yang merupakan bagian pertama, karena pembatas tidak ditemukan. 

```
select split_part('abc$def$ghi','#',1)

split_part
------------
abc$def$ghi
```

Contoh berikut membagi bidang timestamp LISTTIME menjadi komponen tahun, bulan, dan hari.

```
select listtime, split_part(listtime,'-',1) as year,
split_part(listtime,'-',2) as month, 
split_part(split_part(listtime,'-',3),' ',1) as day 
from listing limit 5;

      listtime       | year | month | day
---------------------+------+-------+------
 2008-03-05 12:25:29 | 2008 | 03    | 05
 2008-09-09 08:03:36 | 2008 | 09    | 09
 2008-09-26 05:43:12 | 2008 | 09    | 26
 2008-10-04 02:00:30 | 2008 | 10    | 04
 2008-01-06 08:33:11 | 2008 | 01    | 06
```

Contoh berikut memilih bidang timestamp LISTTIME dan membaginya pada `'-'` karakter untuk mendapatkan bulan (bagian kedua dari string LISTTIME), lalu menghitung jumlah entri untuk setiap bulan:

```
select split_part(listtime,'-',2) as month, count(*)
from listing
group by split_part(listtime,'-',2)
order by 1, 2;

 month | count
-------+-------
    01 | 18543
    02 | 16620
    03 | 17594
    04 | 16822
    05 | 17618
    06 | 17158
    07 | 17626
    08 | 17881
    09 | 17378
    10 | 17756
    11 | 12912
    12 | 4589
```

# fungsi STRPOS
<a name="r_STRPOS"></a>

Mengembalikan posisi substring dalam string tertentu. 

Lihat [Fungsi CHARINDEX](r_CHARINDEX.md) dan [Fungsi POSISI](r_POSITION.md) untuk fungsi serupa.

## Sintaksis
<a name="r_STRPOS-synopsis"></a>

```
STRPOS(string, substring )
```

## Argumen
<a name="r_STRPOS-arguments"></a>

 *tali*   
Parameter input pertama adalah `VARCHAR` string `CHAR` atau yang akan dicari. 

 *substring*   
Parameter kedua adalah substring untuk mencari di dalam *string*. 

## Jenis pengembalian
<a name="r_STRPOS-return-type"></a>

INTEGER  
Fungsi STRPOS mengembalikan yang `INTEGER` sesuai dengan posisi *substring* (berbasis satu, bukan berbasis nol). Posisi didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal.

## Catatan penggunaan
<a name="r_STRPOS_usage_notes"></a>

*STRPOS kembali `0` jika *substring* tidak ditemukan dalam string.* 

```
SELECT STRPOS('dogfish', 'fist');

+--------+
| strpos |
+--------+
|      0 |
+--------+
```

## Contoh
<a name="r_STRPOS-examples"></a>

Untuk menunjukkan posisi `fish` dalam`dogfish`, gunakan contoh berikut. 

```
SELECT STRPOS('dogfish', 'fish');

+--------+
| strpos |
+--------+
|      4 |
+--------+
```

Contoh berikut menggunakan data dari tabel PENJUALAN dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengembalikan jumlah transaksi penjualan dengan KOMISI lebih dari 999.00 dari tabel PENJUALAN, gunakan contoh berikut. 

```
SELECT DISTINCT STRPOS(commission, '.'),
COUNT (STRPOS(commission, '.'))
FROM sales
WHERE STRPOS(commission, '.') > 4
GROUP BY STRPOS(commission, '.')
ORDER BY 1, 2;

+--------+-------+
| strpos | count |
+--------+-------+
|      5 |   629 |
+--------+-------+
```

# Fungsi STRTOL
<a name="r_STRTOL"></a>

Mengkonversi ekspresi string dari sejumlah basis yang ditentukan ke nilai integer setara. Nilai yang dikonversi harus berada dalam kisaran 64-bit yang ditandatangani. 

## Sintaksis
<a name="r_STRTOL-syntax"></a>

```
STRTOL(num_string, base)
```

## Argumen
<a name="r_STRTOL-arguments"></a>

 *num\$1string*   
Ekspresi string dari angka yang akan dikonversi. Jika *num\$1string* kosong (`''`) atau dimulai dengan karakter null (`'\0'`), nilai yang dikonversi adalah. `0` Jika *num\$1string* adalah kolom yang berisi nilai NULL, STRTOL kembali. `NULL` String dapat dimulai dengan sejumlah spasi putih, secara opsional diikuti oleh tanda plus '`+`' atau minus `-` 'tunggal untuk menunjukkan positif atau negatif. Defaultnya adalah '`+`'. Jika *basisnya*`16`, string secara opsional dapat dimulai dengan '`0x`'. 

*dasar*  
`INTEGER`antara 2 dan 36.

## Jenis pengembalian
<a name="r_STRTOL-return-type"></a>

BIGINT  
Jika *num\$1string* adalah null, fungsi kembali. `NULL`

## Contoh
<a name="r_STRTOL-examples"></a>

Untuk mengonversi pasangan string dan nilai dasar menjadi bilangan bulat, gunakan contoh berikut.

```
SELECT STRTOL('0xf',16);

+--------+
| strtol |
+--------+
|     15 |
+--------+

SELECT STRTOL('abcd1234',16);

+------------+
|   strtol   |
+------------+
| 2882343476 |
+------------+

SELECT STRTOL('1234567', 10);

+---------+
| strtol  |
+---------+
| 1234567 |
+---------+

SELECT STRTOL('1234567', 8);

+--------+
| strtol |
+--------+
| 342391 |
+--------+

SELECT STRTOL('110101', 2);

+--------+
| strtol |
+--------+
|     53 |
+--------+

SELECT STRTOL('\0', 2);

+--------+
| strtol |
+--------+
|      0 |
+--------+
```

# Fungsi SUBSTRING
<a name="r_SUBSTRING"></a>

Mengembalikan subset dari string berdasarkan posisi awal yang ditentukan.

Jika input adalah string karakter, posisi awal dan jumlah karakter yang diekstraksi didasarkan pada karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. Jika input adalah ekspresi biner, posisi awal dan substring yang diekstraksi didasarkan pada byte. Anda tidak dapat menentukan panjang negatif, tetapi Anda dapat menentukan posisi awal negatif.

## Sintaksis
<a name="r_SUBSTRING-synopsis"></a>

```
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
```

```
SUBSTRING(character_string, start_position, number_characters )
```

```
SUBSTRING(binary_expression, start_byte, number_bytes )
```

```
SUBSTRING(binary_expression, start_byte )
```

## Argumen
<a name="r_SUBSTRING-arguments"></a>

 *character\$1string*   
String yang akan dicari. Tipe data non-karakter diperlakukan seperti string. 

 *start\$1position*   
Posisi dalam string untuk memulai ekstraksi, mulai dari 1. *Start\$1position* didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. Angka ini bisa negatif.

 *number\$1characters*   
Jumlah karakter untuk mengekstrak (panjang substring). *Number\$1characters* didasarkan pada jumlah karakter, bukan byte, sehingga karakter multi-byte dihitung sebagai karakter tunggal. Angka ini tidak bisa negatif.

 *binary\$1expression*   
Binary\$1expression dari tipe data VARBYTE yang akan dicari. 

 *start\$1byte*   
Posisi dalam ekspresi biner untuk memulai ekstraksi, mulai dari 1. Angka ini bisa negatif.

 *number\$1bytes*   
Jumlah byte untuk mengekstrak, yaitu, panjang substring. Angka ini tidak bisa negatif.

## Jenis pengembalian
<a name="r_SUBSTRING-return-type"></a>

VARCHAR atau VARBYTE tergantung pada input.

## Catatan Penggunaan
<a name="r_SUBSTRING_usage_notes"></a>

Berikut adalah beberapa contoh bagaimana Anda dapat menggunakan *start\$1position dan *number\$1characters** untuk mengekstrak substring dari berbagai posisi dalam string.

Contoh berikut mengembalikan string empat karakter dimulai dengan karakter keenam. 

```
select substring('caterpillar',6,4);
substring
-----------
pill
(1 row)
```

Jika *start\$1position* \$1 *number\$1characters* melebihi panjang *string*, SUBSTRING mengembalikan substring mulai dari *start\$1position* hingga akhir string. Contoh: 

```
select substring('caterpillar',6,8);
substring
-----------
pillar
(1 row)
```

Jika negatif atau 0, fungsi SUBSTRING mengembalikan substring yang dimulai pada karakter pertama string dengan panjang `start_position` `number_characters` \$1-1. `start_position` Contoh:

```
select substring('caterpillar',-2,6);
substring
-----------
cat
(1 row)
```

Jika `start_position` \$1 `number_characters` -1 kurang dari atau sama dengan nol, SUBSTRING mengembalikan string kosong. Contoh:

```
select substring('caterpillar',-5,4);
substring
-----------

(1 row)
```

## Contoh
<a name="r_SUBSTRING-examples"></a>

Contoh berikut mengembalikan bulan dari string LISTTIME dalam tabel LISTING: 

```
select listid, listtime,
substring(listtime, 6, 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

Contoh berikut sama seperti di atas, tetapi menggunakan opsi FROM... FOR: 

```
select listid, listtime,
substring(listtime from 6 for 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

Anda tidak dapat menggunakan SUBSTRING untuk mengekstrak awalan string yang mungkin berisi karakter multi-byte karena Anda perlu menentukan panjang string multi-byte berdasarkan jumlah byte, bukan jumlah karakter. *Untuk mengekstrak segmen awal string berdasarkan panjang dalam byte, Anda dapat CAST string sebagai VARCHAR (*byte\$1length) untuk memotong string, di mana byte\$1length* adalah panjang yang diperlukan.* Contoh berikut mengekstrak 5 byte pertama dari string`'Fourscore and seven'`.

```
select cast('Fourscore and seven' as varchar(5));

varchar
-------
Fours
```

Contoh berikut menunjukkan posisi awal negatif dari nilai biner`abc`. Karena posisi awal adalah -3, substring diekstraksi dari awal nilai biner. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari substring biner.

```
select substring('abc'::varbyte, -3);

 substring
-----------
 616263
```

Contoh berikut menunjukkan 1 untuk posisi awal dari nilai biner`abc`. Karena karena tidak ada panjang yang ditentukan, string diekstraksi dari posisi awal hingga akhir string. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari substring biner.

```
select substring('abc'::varbyte, 1);

 substring
-----------
 616263
```

Contoh berikut menunjukkan 3 untuk posisi awal dari nilai biner`abc`. Karena karena tidak ada panjang yang ditentukan, string diekstraksi dari posisi awal hingga akhir string. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari substring biner.

```
select substring('abc'::varbyte, 3);

 substring
-----------
 63
```

Contoh berikut menunjukkan 2 untuk posisi awal dari nilai biner`abc`. String diekstraksi dari posisi awal ke posisi 10, tetapi ujung string berada pada posisi 3. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari substring biner.

```
select substring('abc'::varbyte, 2, 10);

 substring
-----------
 6263
```

Contoh berikut menunjukkan 2 untuk posisi awal dari nilai biner`abc`. String diekstraksi dari posisi awal untuk 1 byte. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari substring biner.

```
select substring('abc'::varbyte, 2, 1);

 substring
-----------
 62
```

Contoh berikut mengembalikan nama depan `Ana` yang muncul setelah spasi terakhir dalam string input`Silva, Ana`.

```
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))

 reverse
-----------
 Ana
```

# Fungsi TEXTLEN
<a name="r_TEXTLEN"></a>

Sinonim dari fungsi LEN. 

Lihat [Fungsi LEN](r_LEN.md). 

# FUNGSI TRANSLATE
<a name="r_TRANSLATE"></a>

Untuk ekspresi tertentu, menggantikan semua kemunculan karakter tertentu dengan pengganti tertentu. *Karakter yang ada dipetakan ke karakter pengganti berdasarkan posisinya dalam argumen characters\$1to\$1replace dan *characters\$1to\$1substitusi*.* *Jika lebih banyak karakter ditentukan dalam argumen *characters\$1to\$1replace daripada dalam argumen characters\$1to\$1substitusi**, karakter tambahan dari argumen characters\$1to\$1replace* dihilangkan dalam nilai pengembalian.*

TRANSLATE mirip dengan [GANTI fungsi](r_REPLACE.md) dan[Fungsi REGEXP\$1REPLACE](REGEXP_REPLACE.md), kecuali bahwa REPLACE mengganti satu seluruh string dengan string lain dan REGEXP\$1REPLACE memungkinkan Anda mencari string untuk pola ekspresi reguler, sementara TRANSLATE membuat beberapa substitusi karakter tunggal.

Jika ada argumen nol, pengembaliannya adalah`NULL`.

## Sintaksis
<a name="r_TRANSLATE-synopsis"></a>

```
TRANSLATE( expression, characters_to_replace, characters_to_substitute )
```

## Argumen
<a name="r_TRANSLATE-arguments"></a>

 *ekspresi*   
Ekspresi yang akan diterjemahkan.

 *characters\$1to\$1replace*   
Sebuah string yang berisi karakter yang akan diganti.

 *characters\$1to\$1substitusi*   
Sebuah string yang berisi karakter untuk menggantikan.

## Jenis pengembalian
<a name="r_TRANSLATE-return-type"></a>

VARCHAR

## Contoh
<a name="r_TRANSLATE-examples"></a>

Untuk mengganti beberapa karakter dalam string, gunakan contoh berikut. 

```
SELECT TRANSLATE('mint tea', 'inea', 'osin');

+-----------+
| translate |
+-----------+
| most tin  |
+-----------+
```

Contoh berikut menggunakan data dari tabel USERS dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengganti tanda at (@) dengan titik untuk semua nilai dalam kolom, gunakan contoh berikut. 

```
SELECT email, TRANSLATE(email, '@', '.') as obfuscated_email
FROM users LIMIT 10;

+---------------------------------------+---------------------------------------+
|                 email                 |           obfuscated_email            |
+---------------------------------------+---------------------------------------+
| Cum@accumsan.com                      | Cum.accumsan.com                      |
| lorem.ipsum@Vestibulumante.com        | lorem.ipsum.Vestibulumante.com        |
| non.justo.Proin@ametconsectetuer.edu  | non.justo.Proin.ametconsectetuer.edu  |
| non.ante.bibendum@porttitortellus.org | non.ante.bibendum.porttitortellus.org |
| eros@blanditatnisi.org                | eros.blanditatnisi.org                |
| augue@Donec.ca                        | augue.Donec.ca                        |
| cursus@pedeacurna.edu                 | cursus.pedeacurna.edu                 |
| at@Duis.com                           | at.Duis.com                           |
| quam@facilisisvitaeorci.ca            | quam.facilisisvitaeorci.ca            |
| mi.lorem@nunc.edu                     | mi.lorem.nunc.edu                     |
+---------------------------------------+---------------------------------------+
```

 Untuk mengganti spasi dengan garis bawah dan menghapus periode untuk semua nilai dalam kolom, gunakan contoh berikut. 

```
SELECT city, TRANSLATE(city, ' .', '_') 
FROM users
WHERE city LIKE 'Sain%' OR city LIKE 'St%'
GROUP BY city
ORDER BY city;

+----------------+---------------+
|      city      |   translate   |
+----------------+---------------+
| Saint Albans   | Saint_Albans  |
| Saint Cloud    | Saint_Cloud   |
| Saint Joseph   | Saint_Joseph  |
| Saint Louis    | Saint_Louis   |
| Saint Paul     | Saint_Paul    |
| St. George     | St_George     |
| St. Marys      | St_Marys      |
| St. Petersburg | St_Petersburg |
| Stafford       | Stafford      |
| Stamford       | Stamford      |
| Stanton        | Stanton       |
| Starkville     | Starkville    |
| Statesboro     | Statesboro    |
| Staunton       | Staunton      |
| Steubenville   | Steubenville  |
| Stevens Point  | Stevens_Point |
| Stillwater     | Stillwater    |
| Stockton       | Stockton      |
| Sturgis        | Sturgis       |
+----------------+---------------+
```

# Fungsi TRIM
<a name="r_TRIM"></a>

Memangkas string dengan kosong atau karakter tertentu.

## Sintaksis
<a name="r_TRIM-synopsis"></a>

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

## Argumen
<a name="r_TRIM-arguments"></a>

 KEDUANYA \$1 MEMIMPIN \$1 TRAILING   
(Opsional) Menentukan di mana untuk memangkas karakter dari. Gunakan KEDUANYA untuk menghapus karakter utama dan belakang, gunakan LEADING untuk menghapus karakter utama saja, dan gunakan TRAILING untuk menghapus karakter tertinggal saja. Jika parameter ini dihilangkan, karakter utama dan belakang dipangkas.

 *trim\$1chars*   
(Opsional) Karakter yang akan dipangkas dari string. Jika parameter ini dihilangkan, blanko dipangkas.

 *tali*   
Tali yang akan dipangkas. 

## Jenis pengembalian
<a name="r_TRIM-return-type"></a>

Fungsi TRIM mengembalikan `CHAR` string `VARCHAR` atau. Jika Anda menggunakan fungsi TRIM dengan perintah SQL, Amazon Redshift secara implisit mengonversi hasilnya menjadi. `VARCHAR` Jika Anda menggunakan fungsi TRIM dalam daftar SELECT untuk fungsi SQL, Amazon Redshift tidak secara implisit mengonversi hasilnya, dan Anda mungkin perlu melakukan konversi eksplisit untuk menghindari kesalahan ketidakcocokan tipe data. Lihat [Fungsi CAST](r_CAST_function.md) dan [Fungsi CONVERT](r_CONVERT_function.md) fungsi untuk informasi tentang konversi eksplisit.

## Contoh
<a name="r_TRIM-example"></a>

Untuk memangkas bagian depan dan belakang kosong dari string` dog `, gunakan contoh berikut. 

```
SELECT TRIM('    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

Untuk memangkas bagian depan dan belakang kosong dari string` dog `, gunakan contoh berikut. 

```
SELECT TRIM(BOTH FROM '    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

Untuk menghapus tanda kutip ganda utama dari string`"dog"`, gunakan contoh berikut.

```
SELECT TRIM(LEADING '"' FROM'"dog"');

+-------+
| ltrim |
+-------+
| dog"  |
+-------+
```

Untuk menghapus tanda kutip ganda dari string`"dog"`, gunakan contoh berikut. 

```
SELECT TRIM(TRAILING '"' FROM'"dog"');

+-------+
| rtrim |
+-------+
| "dog  |
+-------+
```

*TRIM menghapus salah satu karakter dalam *trim\$1chars* ketika mereka muncul di awal atau akhir string.* Contoh berikut memangkas karakter 'C', 'D', dan 'G' ketika mereka muncul di awal atau akhir VENUENAME, yang merupakan kolom. `VARCHAR` Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
SELECT venueid, venuename, TRIM('CDG' FROM venuename)
FROM venue
WHERE venuename LIKE '%Park'
ORDER BY 2
LIMIT 7;

+---------+----------------------------+---------------------------+
| venueid |         venuename          |           btrim           |
+---------+----------------------------+---------------------------+
|     121 | AT&T Park                  | AT&T Park                 |
|     109 | Citizens Bank Park         | itizens Bank Park         |
|     102 | Comerica Park              | omerica Park              |
|       9 | Dick's Sporting Goods Park | ick's Sporting Goods Park |
|      97 | Fenway Park                | Fenway Park               |
|     112 | Great American Ball Park   | reat American Ball Park   |
|     114 | Miller Park                | Miller Park               |
+---------+----------------------------+---------------------------+
```

# Fungsi UPPER
<a name="r_UPPER"></a>

Mengkonversi string ke huruf besar. UPPER mendukung karakter multibyte UTF-8, hingga maksimal empat byte per karakter.

## Sintaksis
<a name="r_UPPER-synopsis"></a>

```
UPPER(string)
```

## Argumen
<a name="r_UPPER-arguments"></a>

 *tali*   
Parameter input adalah `VARCHAR` string atau tipe data lainnya, seperti`CHAR`, yang dapat secara implisit dikonversi ke. `VARCHAR` 

## Jenis pengembalian
<a name="r_UPPER-return-type"></a>

Fungsi UPPER mengembalikan string karakter yang merupakan tipe data yang sama dengan string input. Misalnya, fungsi akan mengembalikan `VARCHAR` string jika input adalah `VARCHAR` string.

## Contoh
<a name="r_UPPER-examples"></a>

Contoh berikut menggunakan data dari tabel CATEGORY dalam database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md). 

Untuk mengonversi bidang CATNAME menjadi huruf besar, gunakan yang berikut ini. 

```
SELECT catname, UPPER(catname) 
FROM category 
ORDER BY 1,2;

+-----------+-----------+
|  catname  |   upper   |
+-----------+-----------+
| Classical | CLASSICAL |
| Jazz      | JAZZ      |
| MLB       | MLB       |
| MLS       | MLS       |
| Musicals  | MUSICALS  |
| NBA       | NBA       |
| NFL       | NFL       |
| NHL       | NHL       |
| Opera     | OPERA     |
| Plays     | PLAYS     |
| Pop       | POP       |
+-----------+-----------+
```

# Fungsi informasi tipe SUPER
<a name="c_Type_Info_Functions"></a>

Berikut ini, Anda dapat menemukan deskripsi untuk fungsi informasi tipe untuk SQL yang didukung Amazon Redshift untuk memperoleh informasi dinamis dari input tipe data. `SUPER`

**Topics**
+ [Fungsi DECIMAL\$1PRECISION](r_decimal_precision.md)
+ [Fungsi DECIMAL\$1SCALE](r_decimal_scale.md)
+ [Fungsi IS\$1ARRAY](r_is_array.md)
+ [Fungsi IS\$1BIGINT](r_is_bigint.md)
+ [Fungsi IS\$1BOOLEAN](r_is_boolean.md)
+ [Fungsi IS\$1CHAR](r_is_char.md)
+ [Fungsi IS\$1DECIMAL](r_is_decimal.md)
+ [Fungsi IS\$1FLOAT](r_is_float.md)
+ [Fungsi IS\$1INTEGER](r_is_integer.md)
+ [fungsi IS\$1OBJECT](r_is_object.md)
+ [Fungsi IS\$1SCALAR](r_is_scalar.md)
+ [Fungsi IS\$1SMALLINT](r_is_smallint.md)
+ [Fungsi IS\$1VARCHAR](r_is_varchar.md)
+ [Fungsi JSON\$1SIZE](r_json_size.md)
+ [Fungsi JSON\$1TYPEOF](r_json_typeof.md)
+ [UKURAN](r_SIZE.md)

# Fungsi DECIMAL\$1PRECISION
<a name="r_decimal_precision"></a>

Memeriksa ketepatan jumlah total digit desimal maksimum yang akan disimpan. Angka ini mencakup digit kiri dan kanan dari titik desimal. Kisaran presisi adalah dari 1 hingga 38, dengan default 38.

## Sintaksis
<a name="r_decimal_precision-synopsis"></a>

```
DECIMAL_PRECISION(super_expression)
```

## Argumen
<a name="r_decimal_precision-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_decimal_precision-returns"></a>

`INTEGER`

## Contoh
<a name="r_decimal_precision_example"></a>

Untuk menerapkan fungsi DECIMAL\$1PRECISION ke tabel t, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_PRECISION(s) FROM t;

+-------------------+
| decimal_precision |
+-------------------+
|                 6 |
+-------------------+
```

# Fungsi DECIMAL\$1SCALE
<a name="r_decimal_scale"></a>

Memeriksa jumlah digit desimal yang akan disimpan di sebelah kanan titik desimal. Kisaran skala adalah dari 0 ke titik presisi, dengan default 0.

## Sintaksis
<a name="r_decimal_scale-synopsis"></a>

```
DECIMAL_SCALE(super_expression)
```

## Argumen
<a name="r_decimal_scale-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_decimal_scale-returns"></a>

`INTEGER`

## Contoh
<a name="r_decimal_scale_example"></a>

Untuk menerapkan fungsi DECIMAL\$1SCALE ke tabel t, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_SCALE(s) FROM t;

+---------------+
| decimal_scale |
+---------------+
|             5 |
+---------------+
```

# Fungsi IS\$1ARRAY
<a name="r_is_array"></a>

Memeriksa apakah variabel adalah array. Fungsi kembali `true` jika variabel adalah array. Fungsi ini juga mencakup array kosong. Jika tidak, fungsi kembali `false` untuk semua nilai lainnya, termasuk null.

## Sintaksis
<a name="r_is_array-synopsis"></a>

```
IS_ARRAY(super_expression)
```

## Argumen
<a name="r_is_array-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_array-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_array_example"></a>

Untuk memeriksa `[1,2]` apakah array menggunakan fungsi IS\$1ARRAY, gunakan contoh berikut.

```
SELECT IS_ARRAY(JSON_PARSE('[1,2]'));

+----------+
| is_array |
+----------+
| true     |
+----------+
```

# Fungsi IS\$1BIGINT
<a name="r_is_bigint"></a>

Memeriksa apakah suatu nilai adalah a`BIGINT`. Fungsi IS\$1BIGINT mengembalikan `true` jumlah skala 0 dalam rentang 64-bit. Jika tidak, fungsi kembali `false` untuk semua nilai lainnya, termasuk angka nol dan floating point.

Fungsi IS\$1BIGINT adalah superset dari IS\$1INTEGER.

## Sintaksis
<a name="r_is_bigint-synopsis"></a>

```
IS_BIGINT(super_expression)
```

## Argumen
<a name="r_is_bigint-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_bigint-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_bigint_example"></a>

Untuk memeriksa `5` apakah `BIGINT` menggunakan fungsi IS\$1BIGINT, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_BIGINT(s) FROM t;

+---+-----------+
| s | is_bigint |
+---+-----------+
| 5 | true      |
+---+-----------+
```

# Fungsi IS\$1BOOLEAN
<a name="r_is_boolean"></a>

Memeriksa apakah suatu nilai adalah a`BOOLEAN`. Fungsi IS\$1BOOLEAN kembali `true` untuk konstan JSON Booleans. Fungsi kembali `false` untuk nilai-nilai lain, termasuk null.

## Sintaksis
<a name="r_is_boolean-synopsis"></a>

```
IS_BOOLEAN(super_expression)
```

## Argumen
<a name="r_is_boolean-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_boolean-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_boolean_example"></a>

Untuk memeriksa `TRUE` apakah `BOOLEAN` menggunakan fungsi IS\$1BOOLEAN, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (TRUE);

SELECT s, IS_BOOLEAN(s) FROM t;

+------+------------+
|  s   | is_boolean |
+------+------------+
| true | true       |
+------+------------+
```

# Fungsi IS\$1CHAR
<a name="r_is_char"></a>

Memeriksa apakah suatu nilai adalah a`CHAR`. Fungsi IS\$1CHAR mengembalikan `true` untuk string yang hanya memiliki karakter ASCII, karena tipe CHAR hanya dapat menyimpan karakter yang ada dalam format ASCII. Fungsi mengembalikan `false` nilai lainnya.

## Sintaksis
<a name="r_is_char-synopsis"></a>

```
IS_CHAR(super_expression)
```

## Argumen
<a name="r_is_char-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_char-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_char_example"></a>

Untuk memeriksa `t` apakah `CHAR` menggunakan fungsi IS\$1CHAR, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('t');

SELECT s, IS_CHAR(s) FROM t;

+-----+---------+
|  s  | is_char |
+-----+---------+
| "t" | true    |
+-----+---------+
```

# Fungsi IS\$1DECIMAL
<a name="r_is_decimal"></a>

Memeriksa apakah suatu nilai adalah a`DECIMAL`. Fungsi IS\$1DECIMAL mengembalikan angka `true` yang bukan floating point. Fungsi kembali `false` untuk nilai-nilai lain, termasuk null. 

Fungsi IS\$1DECIMAL adalah superset dari IS\$1BIGINT.

## Sintaksis
<a name="r_is_decimal-synopsis"></a>

```
IS_DECIMAL(super_expression)
```

## Argumen
<a name="r_is_decimal-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_decimal-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_decimal_example"></a>

Untuk memeriksa `1.22` apakah `DECIMAL` menggunakan fungsi IS\$1DECIMAL, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (1.22);

SELECT s, IS_DECIMAL(s) FROM t;

+------+------------+
|  s   | is_decimal |
+------+------------+
| 1.22 | true       |
+------+------------+
```

# Fungsi IS\$1FLOAT
<a name="r_is_float"></a>

Memeriksa apakah suatu nilai adalah nomor floating point. Fungsi IS\$1FLOAT mengembalikan `true` untuk nomor floating point (`FLOAT4`dan). `FLOAT8` Fungsi mengembalikan `false` nilai lainnya.

Himpunan IS\$1DECIMAL himpunan IS\$1FLOAT terputus.

## Sintaksis
<a name="r_is_float-synopsis"></a>

```
IS_FLOAT(super_expression)
```

## Argumen
<a name="r_is_float-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_float-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_float_example"></a>

Untuk memeriksa `2.22::FLOAT` apakah `FLOAT` menggunakan fungsi IS\$1FLOAT, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES(2.22::FLOAT);

SELECT s, IS_FLOAT(s) FROM t;

+---------+----------+
|    s    | is_float |
+---------+----------+
| 2.22e+0 | true     |
+---------+----------+
```

# Fungsi IS\$1INTEGER
<a name="r_is_integer"></a>

Pengembalian `true` untuk jumlah skala 0 dalam rentang 32-bit, dan `false` untuk hal lain (termasuk angka nol dan floating point).

Fungsi IS\$1INTEGER adalah superset dari fungsi IS\$1SMALLINT.

## Sintaksis
<a name="r_is_integer-synopsis"></a>

```
IS_INTEGER(super_expression)
```

## Argumen
<a name="r_is_integer-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_integer-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_integer_example"></a>

Untuk memeriksa `5` apakah `INTEGER` menggunakan fungsi IS\$1INTEGER, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_INTEGER(s) FROM t;

+---+------------+
| s | is_integer |
+---+------------+
| 5 | true       |
+---+------------+
```

# fungsi IS\$1OBJECT
<a name="r_is_object"></a>

Memeriksa apakah variabel adalah objek. Fungsi IS\$1OBJECT mengembalikan `true` untuk objek, termasuk objek kosong. Fungsi kembali `false` untuk nilai-nilai lain, termasuk null.

## Sintaksis
<a name="r_is_object-synopsis"></a>

```
IS_OBJECT(super_expression)
```

## Argumen
<a name="r_is_object-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_object-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_object_example"></a>

Untuk memeriksa `{"name": "Joe"}` apakah objek menggunakan fungsi IS\$1OBJECT, gunakan contoh berikut.

```
CREATE TABLE t(s super);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_OBJECT(s) FROM t;

+----------------+-----------+
|       s        | is_object |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# Fungsi IS\$1SCALAR
<a name="r_is_scalar"></a>

Memeriksa apakah variabel adalah skalar. Fungsi IS\$1SCALAR mengembalikan `true` nilai apa pun yang bukan array atau objek. Fungsi kembali `false` untuk nilai-nilai lain, termasuk null.

Kumpulan IS\$1ARRAY, IS\$1OBJECT, dan IS\$1SCALAR mencakup semua nilai kecuali nol.

## Sintaksis
<a name="r_is_scalar-synopsis"></a>

```
IS_SCALAR(super_expression)
```

## Argumen
<a name="r_is_scalar-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_scalar-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_scalar_example"></a>

Untuk memeriksa `{"name": "Joe"}` apakah skalar menggunakan fungsi IS\$1SCALAR, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_SCALAR(s.name) FROM t;

+----------------+-----------+
|       s        | is_scalar |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# Fungsi IS\$1SMALLINT
<a name="r_is_smallint"></a>

Memeriksa apakah variabel adalah a`SMALLINT`. Fungsi IS\$1SMALLINT mengembalikan `true` jumlah skala 0 dalam rentang 16-bit. Fungsi mengembalikan `false` nilai lainnya, termasuk angka nol dan floating point.

## Sintaksis
<a name="r_is_smallint-synopsis"></a>

```
IS_SMALLINT(super_expression)
```

## Argumen
<a name="r_is_smallint-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Nilai yang ditampilkan
<a name="r_is_smallint-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_smallint_example"></a>

Untuk memeriksa `5` apakah `SMALLINT` menggunakan fungsi IS\$1SMALLINT, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_SMALLINT(s) FROM t;

+---+-------------+
| s | is_smallint |
+---+-------------+
| 5 | true        |
+---+-------------+
```

# Fungsi IS\$1VARCHAR
<a name="r_is_varchar"></a>

Memeriksa apakah variabel adalah a`VARCHAR`. Fungsi IS\$1VARCHAR mengembalikan `true` untuk semua string. Fungsi mengembalikan `false` nilai lainnya.

Fungsi IS\$1VARCHAR adalah superset dari fungsi IS\$1CHAR.

## Sintaksis
<a name="r_is_varchar-synopsis"></a>

```
IS_VARCHAR(super_expression)
```

## Argumen
<a name="r_is_varchar-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_is_varchar-returns"></a>

`BOOLEAN`

## Contoh
<a name="r_is_varchar_example"></a>

Untuk memeriksa `abc` apakah `VARCHAR` menggunakan fungsi IS\$1VARCHAR, gunakan contoh berikut.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('abc');

SELECT s, IS_VARCHAR(s) FROM t;

+-------+------------+
|   s   | is_varchar |
+-------+------------+
| "abc" | true       |
+-------+------------+
```

# Fungsi JSON\$1SIZE
<a name="r_json_size"></a>

Fungsi JSON\$1SIZE mengembalikan jumlah byte dalam `SUPER` ekspresi yang diberikan ketika diserialisasikan ke dalam string. 

## Sintaksis
<a name="r_json_size-synopsis"></a>

```
JSON_SIZE(super_expression)
```

## Argumen
<a name="r_json_size-arguments"></a>

*super\$1ekspresi*  
`SUPER`Konstanta atau ekspresi.

## Jenis pengembalian
<a name="r_json_size-returns"></a>

`INTEGER`  
Fungsi JSON\$1SIZE mengembalikan `INTEGER` menunjukkan jumlah byte dalam string input. Nilai ini berbeda dari jumlah karakter. Misalnya, karakter UTF-8, titik hitam, berukuran 3 byte meskipun 1 karakter.

## Catatan penggunaan
<a name="r_json_size-usage_notes"></a>

JSON\$1SIZE (x) secara fungsional identik dengan OCTET\$1LENGTH (JSON\$1SERIALIZE). Namun, perhatikan bahwa JSON\$1SERIALIZE mengembalikan kesalahan ketika `SUPER` ekspresi yang disediakan akan melebihi `VARCHAR` batas sistem saat diserialkan. JSON\$1SIZE tidak memiliki batasan ini.

## Contoh
<a name="r_json_size_example"></a>

Untuk mengembalikan panjang `SUPER` nilai serial ke string, gunakan contoh berikut.

```
SELECT JSON_SIZE(JSON_PARSE('[10001,10002,"⬤"]'));

+-----------+
| json_size |
+-----------+
|        19 |
+-----------+
```

Perhatikan bahwa `SUPER` ekspresi yang disediakan adalah 17 karakter, tetapi adalah karakter 3-byte, jadi JSON\$1SIZE kembali. `19`

# Fungsi JSON\$1TYPEOF
<a name="r_json_typeof"></a>

Fungsi skalar JSON\$1TYPEOF mengembalikan a `VARCHAR` dengan nilai boolean, nomor, string, objek, array, atau null, tergantung pada jenis dinamis dari nilai. `SUPER` 

## Sintaksis
<a name="r_json_typeof-synopsis"></a>

```
JSON_TYPEOF(super_expression)
```

## Argumen
<a name="r_json_typeof-arguments"></a>

*super\$1ekspresi*  
`SUPER`Ekspresi atau kolom.

## Jenis pengembalian
<a name="r_json_typeof-returns"></a>

`VARCHAR`

## Contoh
<a name="r_json_typeof_example"></a>

Untuk memeriksa jenis JSON untuk array `[1,2]` menggunakan fungsi JSON\$1TYPEOF, gunakan contoh berikut.

```
SELECT JSON_TYPEOF(ARRAY(1,2));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

Untuk memeriksa jenis JSON untuk objek `{"name":"Joe"}` menggunakan fungsi JSON\$1TYPEOF, gunakan contoh berikut.

```
SELECT JSON_TYPEOF(JSON_PARSE('{"name":"Joe"}'));

+-------------+
| json_typeof |
+-------------+
| object      |
+-------------+
```

# UKURAN
<a name="r_SIZE"></a>

 Mengembalikan ukuran biner dalam memori dari konstanta `SUPER` tipe atau ekspresi sebagai`INTEGER`. 

## Sintaksis
<a name="r_SIZE-synopsis"></a>

```
SIZE(super_expression)
```

## Argumen
<a name="r_SIZE-parameters"></a>

*super\$1ekspresi*  
 Konstanta `SUPER` tipe atau ekspresi. 

## Jenis pengembalian
<a name="r_SIZE-returns"></a>

`INTEGER`

## Contoh
<a name="r_SIZE-examples"></a>

 Untuk menggunakan SIZE untuk mendapatkan ukuran dalam memori dari beberapa `SUPER` jenis ekspresi, gunakan contoh berikut. 

```
CREATE TABLE test_super_size(a SUPER);
            
INSERT INTO test_super_size 
VALUES
  (null),
  (TRUE),
  (JSON_PARSE('[0,1,2,3]')),
  (JSON_PARSE('{"a":0,"b":1,"c":2,"d":3}'))
;

SELECT a, SIZE(a) 
FROM test_super_size 
ORDER BY 2, 1;

+---------------------------+------+
|             a             | size |
+---------------------------+------+
| true                      |    4 |
| NULL                      |    4 |
| [0,1,2,3]                 |   23 |
| {"a":0,"b":1,"c":2,"d":3} |   52 |
+---------------------------+------+
```

# Fungsi dan operator VARBYTE
<a name="varbyte-functions"></a>

Fungsi Amazon Redshift dan operator yang mendukung tipe data VARBYTE meliputi:
+ [Operator VARBYTE](r_VARBYTE_OPERATORS.md)
+ [DARI\$1HEX](r_FROM_HEX.md)
+ [DARI\$1VARBYTE](r_FROM_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [Fungsi PANJANG](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fungsi SUBSTRING](r_SUBSTRING.md)

# Operator VARBYTE
<a name="r_VARBYTE_OPERATORS"></a>

 Tabel berikut mencantumkan operator VARBYTE. Operator bekerja dengan nilai biner tipe data VARBYTE. Jika salah satu atau kedua input adalah nol, hasilnya adalah nol.

## Operator yang didukung
<a name="r_VARBYTE_OPERATORS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_VARBYTE_OPERATORS.html)

## Contoh
<a name="r_VARBYTE_OPERATORS-examples"></a>

Dalam contoh berikut, nilai `'a'::VARBYTE` is `61` dan nilai `'b'::VARBYTE` is`62`. Itu `::` melemparkan string ke tipe `VARBYTE` data. Untuk informasi selengkapnya tentang tipe data casting, lihat[PEMERAN](r_CAST_function.md).

Untuk membandingkan `'a'` jika kurang dari `'b'` menggunakan `<` operator, gunakan contoh berikut.

```
SELECT 'a'::VARBYTE < 'b'::VARBYTE AS less_than;
               
+-----------+
| less_than |
+-----------+
| true      |
+-----------+
```

Untuk membandingkan jika `'a'` sama `'b'` dengan menggunakan `=` operator, gunakan contoh berikut.

```
SELECT 'a'::VARBYTE = 'b'::VARBYTE AS equal;
               
+-------+
| equal |
+-------+
| false |
+-------+
```

Untuk menggabungkan dua nilai biner menggunakan `||` operator, gunakan contoh berikut.

```
SELECT 'a'::VARBYTE || 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

Untuk menggabungkan dua nilai biner menggunakan `+` operator, gunakan contoh berikut.

```
SELECT 'a'::VARBYTE + 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

Untuk meniadakan setiap bit dari nilai biner input menggunakan fungsi FROM\$1VARBYTE, gunakan contoh berikut. String `'a'` mengevaluasi. `01100001` Untuk informasi selengkapnya, lihat [DARI\$1VARBYTE](r_FROM_VARBYTE.md).

```
SELECT FROM_VARBYTE(~'a'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     10011110 |
+--------------+
```

Untuk menerapkan `&` operator pada dua nilai biner input, gunakan contoh berikut. String `'a'` mengevaluasi `01100001` dan `'b'` mengevaluasi. `01100010`

```
SELECT FROM_VARBYTE('a'::VARBYTE & 'b'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01100000 |
+--------------+
```

# Fungsi FROM\$1HEX
<a name="r_FROM_HEX"></a>

FROM\$1HEX mengkonversi heksadesimal ke nilai biner. 

## Sintaks
<a name="r_FROM_HEX-synopsis"></a>

```
FROM_HEX(hex_string)
```

## Argumen
<a name="r_FROM_HEX-arguments"></a>

 *hex\$1string*   
String heksadesimal tipe data `VARCHAR` atau `TEXT` yang akan dikonversi. Formatnya harus berupa nilai literal. 

## Jenis pengembalian
<a name="r_FROM_HEX-return-type"></a>

`VARBYTE`

## Contoh
<a name="r_FROM_HEX-examples"></a>

Untuk mengkonversi representasi heksadesimal `'6162'` ke nilai biner, gunakan contoh berikut. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari nilai biner.

```
SELECT FROM_HEX('6162');
               
+----------+
| from_hex |
+----------+
|     6162 |
+----------+
```

# Fungsi FROM\$1VARBYTE
<a name="r_FROM_VARBYTE"></a>

FROM\$1VARBYTE mengkonversi nilai biner ke string karakter dalam format yang ditentukan. 

## Sintaks
<a name="r_FROM_VARBYTE-synopsis"></a>

```
FROM_VARBYTE(binary_value, format)
```

## Argumen
<a name="r_FROM_VARBYTE-arguments"></a>

 *binary\$1value*   
Nilai biner dari tipe data`VARBYTE`. 

 *format*   
Format string karakter yang dikembalikan. Nilai valid yang tidak peka huruf besar/kecil adalah `hex``binary`,, `utf8` (juga `utf-8` dan`utf_8`), dan`base64`. 

## Jenis pengembalian
<a name="r_FROM_VARBYTE-return-type"></a>

`VARCHAR`

## Contoh
<a name="r_FROM_VARBYTE-examples"></a>

Untuk mengonversi nilai biner `'ab'` menjadi heksadesimal, gunakan contoh berikut. 

```
SELECT FROM_VARBYTE('ab', 'hex');
               
+--------------+
| from_varbyte |
+--------------+
|         6162 |
+--------------+
```

Untuk mengembalikan representasi biner`'4d'`, gunakan contoh berikut. Representasi biner dari `'4d'` adalah string karakter`01001101`.

```
SELECT FROM_VARBYTE(FROM_HEX('4d'), 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01001101 |
+--------------+
```

# Fungsi GETBIT
<a name="r_GETBIT"></a>

GETBIT mengembalikan nilai bit dari nilai biner pada indeks yang ditentukan. 

## Sintaks
<a name="r_GETBIT-synopsis"></a>

```
GETBIT(binary_value, index)
```

## Argumen
<a name="r_GETBIT-arguments"></a>

 *binary\$1value*   
Nilai biner dari tipe data`VARBYTE`. 

 *indeks*   
Nomor indeks bit dalam nilai biner yang dikembalikan. Nilai biner adalah array bit berbasis 0 yang diindeks dari bit paling kanan (bit paling tidak signifikan) ke bit paling kiri (bit paling signifikan).

## Jenis pengembalian
<a name="r_GETBIT-return-type"></a>

`INTEGER`

## Contoh
<a name="r_GETBIT-examples"></a>

Untuk mengembalikan bit pada indeks `2` nilai biner`from_hex('4d')`, gunakan contoh berikut. Representasi biner dari `'4d'` adalah`01001101`.

```
SELECT GETBIT(FROM_HEX('4d'), 2);
               
+--------+
| getbit |
+--------+
|      1 |
+--------+
```

Untuk mengembalikan bit di delapan lokasi indeks dari nilai biner yang dikembalikan oleh`from_hex('4d')`, gunakan contoh berikut. Representasi biner dari `'4d'` adalah`01001101`.

```
SELECT GETBIT(FROM_HEX('4d'), 7), GETBIT(FROM_HEX('4d'), 6),
  GETBIT(FROM_HEX('4d'), 5), GETBIT(FROM_HEX('4d'), 4),
  GETBIT(FROM_HEX('4d'), 3), GETBIT(FROM_HEX('4d'), 2),
  GETBIT(FROM_HEX('4d'), 1), GETBIT(FROM_HEX('4d'), 0);
               
+--------+--------+--------+--------+--------+--------+--------+--------+
| getbit | getbit | getbit | getbit | getbit | getbit | getbit | getbit |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      0 |      1 |      0 |      0 |      1 |      1 |      0 |      1 |
+--------+--------+--------+--------+--------+--------+--------+--------+
```

# Fungsi TO\$1HEX
<a name="r_TO_HEX"></a>

TO\$1HEX mengkonversi angka atau nilai biner ke representasi heksadesimal. 

## Sintaks
<a name="r_TO_HEX-synopsis"></a>

```
TO_HEX(value)
```

## Argumen
<a name="r_TO_HEX-arguments"></a>

 *nilai*   
Entah angka atau nilai biner (`VARBYTE`) yang akan dikonversi. 

## Jenis pengembalian
<a name="r_TO_HEX-return-type"></a>

`VARCHAR`

## Contoh
<a name="r_TO_HEX-examples"></a>

Untuk mengonversi angka ke representasi heksadesimal, gunakan contoh berikut. 

```
SELECT TO_HEX(2147676847);
               
+----------+
|  to_hex  |
+----------+
| 8002f2af |
+----------+
```

Untuk mengonversi `VARBYTE` representasi `'abc'` menjadi bilangan heksadesimal, gunakan contoh followign. 

```
SELECT TO_HEX('abc'::VARBYTE);
               
+--------+
| to_hex |
+--------+
| 616263 |
+--------+
```

Untuk membuat tabel, masukkan `VARBYTE` representasi `'abc'` ke nomor heksadesimal, dan pilih kolom dengan nilai, gunakan contoh berikut.

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT TO_HEX('abc'::VARBYTE);
SELECT vc FROM t;
 
+--------+
|   vc   |
+--------+
| 616263 |
+--------+
```

Untuk menunjukkan bahwa ketika `VARBYTE` mentransmisikan nilai `VARCHAR` ke format adalah UTF-8, gunakan contoh berikut.

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT 'abc'::VARBYTE::VARCHAR;

SELECT vc FROM t;

+-----+
| vc  |
+-----+
| abc |
+-----+
```

# Fungsi TO\$1VARBYTE
<a name="r_TO_VARBYTE"></a>

TO\$1VARBYTE mengkonversi string dalam format tertentu ke nilai biner. 

## Sintaks
<a name="r_TO_VARBYTE-synopsis"></a>

```
TO_VARBYTE(string, format)
```

## Argumen
<a name="r_TO_VARBYTE-arguments"></a>

 *tali*   
A `CHAR` atau `VARCHAR` string. 

 *format*   
Format string input. Nilai valid yang tidak peka huruf besar/kecil adalah `hex``binary`,, `utf8` (juga `utf-8` dan`utf_8`), dan`base64`. 

## Jenis pengembalian
<a name="r_TO_VARBYTE-return-type"></a>

`VARBYTE`

## Contoh
<a name="r_TO_VARBYTE-examples"></a>

Untuk mengkonversi hex `6162` ke nilai biner, gunakan contoh berikut. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari nilai biner.

```
SELECT TO_VARBYTE('6162', 'hex');
               
+------------+
| to_varbyte |
+------------+
|       6162 |
+------------+
```

Untuk mengembalikan representasi biner`4d`, gunakan contoh berikut. Representasi biner dari '4d' adalah`01001101`.

```
SELECT TO_VARBYTE('01001101', 'binary');
               
+------------+
| to_varbyte |
+------------+
|         4d |
+------------+
```

Untuk mengonversi string `'a'` di UTF-8 ke nilai biner, gunakan contoh berikut. Hasilnya secara otomatis ditampilkan sebagai representasi heksadesimal dari nilai biner.

```
SELECT TO_VARBYTE('a', 'utf8');
               
+------------+
| to_varbyte |
+------------+
|         61 |
+------------+
```

Untuk mengkonversi string `'4'` dalam heksadesimal ke nilai biner, gunakan contoh berikut. Jika panjang string heksadesimal adalah angka ganjil, maka a `0` ditambahkan untuk membentuk angka heksadesimal yang valid.

```
SELECT TO_VARBYTE('4', 'hex');
               
+------------+
| to_varbyte |
+------------+
|         04 |
+------------+
```

# Fungsi jendela
<a name="c_Window_functions"></a>

Dengan menggunakan fungsi jendela, Anda dapat membuat kueri bisnis analitik dengan lebih efisien. Fungsi jendela beroperasi pada partisi atau “jendela” dari kumpulan hasil, dan mengembalikan nilai untuk setiap baris di jendela itu. Sebaliknya, fungsi non-windowed melakukan perhitungan mereka sehubungan dengan setiap baris dalam set hasil. Tidak seperti fungsi grup yang menggabungkan baris hasil, fungsi jendela mempertahankan semua baris dalam ekspresi tabel. 

 Nilai yang dikembalikan dihitung dengan menggunakan nilai dari kumpulan baris di jendela itu. Untuk setiap baris dalam tabel, jendela mendefinisikan satu set baris yang digunakan untuk menghitung atribut tambahan. Sebuah jendela didefinisikan menggunakan spesifikasi jendela (klausa OVER), dan didasarkan pada tiga konsep utama: 
+  *Partisi jendela,* yang membentuk kelompok baris (klausa PARTISI) 
+  *Pengurutan jendela*, yang mendefinisikan urutan atau urutan baris dalam setiap partisi (klausa ORDER BY) 
+  *Bingkai jendela*, yang didefinisikan relatif terhadap setiap baris untuk lebih membatasi set baris (spesifikasi ROWS) 

Fungsi jendela adalah rangkaian operasi terakhir yang dilakukan dalam kueri kecuali klausa ORDER BY akhir. Semua bergabung dan semua klausa WHERE, GROUP BY, dan HAVING selesai sebelum fungsi jendela diproses. Oleh karena itu, fungsi jendela hanya dapat muncul di daftar pilih atau klausa ORDER BY. Anda dapat menggunakan beberapa fungsi jendela dalam satu kueri dengan klausa bingkai yang berbeda. Anda juga dapat menggunakan fungsi jendela dalam ekspresi skalar lainnya, seperti CASE. 

Fungsi jendela tidak dapat disarangkan. Misalnya, fungsi agregat [JUMLAH](r_SUM.md) dapat muncul di dalam fungsi jendela[JUMLAH](r_WF_SUM.md), tetapi fungsi jendela SUM tidak dapat muncul di dalam fungsi jendela lain SUM. Berikut ini tidak didukung karena fungsi jendela bersarang di fungsi jendela lain.

```
SELECT SUM(SUM(selectcol) OVER (PARTITION BY ordercol)) OVER (Partition by ordercol) FROM t;
```

## Ringkasan sintaks fungsi jendela
<a name="r_Window_function_synopsis"></a>

Fungsi jendela mengikuti sintaks standar, yaitu sebagai berikut.

```
function (expression) OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list [ frame_clause ] ] )
```

 Di sini, *fungsi* adalah salah satu fungsi yang dijelaskan dalam bagian ini.

*Expr\$1list* adalah sebagai berikut.

```
expression | column_name [, expr_list ]
```

 *Order\$1list* adalah sebagai berikut. 

```
expression | column_name [ ASC | DESC ] 
[ NULLS FIRST | NULLS LAST ]
[, order_list ]
```

 *Frame\$1clause* adalah sebagai berikut. 

```
ROWS
{ UNBOUNDED PRECEDING | unsigned_value PRECEDING | CURRENT ROW } |

{ BETWEEN
{ UNBOUNDED PRECEDING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW}
AND
{ UNBOUNDED FOLLOWING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW }}
```

### Pendapat
<a name="r_Window_function_synopsis-arguments"></a>

 *fungsi*   
Fungsi jendela. Untuk detailnya, lihat deskripsi fungsi individual. 

DI ATAS   
Klausul yang mendefinisikan spesifikasi jendela. Klausa OVER wajib untuk fungsi jendela, dan membedakan fungsi jendela dari fungsi SQL lainnya. 

PARTISI OLEH *expr\$1list*   
(Opsional) Klausa PARTITION BY membagi hasil yang ditetapkan menjadi partisi, seperti klausa GROUP BY. Jika klausa partisi hadir, fungsi dihitung untuk baris di setiap partisi. Jika tidak ada klausa partisi yang ditentukan, partisi tunggal berisi seluruh tabel, dan fungsi dihitung untuk tabel lengkap itu.   
Fungsi peringkat DENSE\$1RANK, NTILE, RANK, dan ROW\$1NUMBER memerlukan perbandingan global dari semua baris dalam kumpulan hasil. Ketika klausa PARTITION BY digunakan, pengoptimal kueri dapat menjalankan setiap agregasi secara paralel dengan menyebarkan beban kerja di beberapa irisan sesuai dengan partisi. Jika klausa PARTITION BY tidak ada, langkah agregasi harus dijalankan secara serial pada satu irisan, yang dapat memiliki dampak negatif yang signifikan pada kinerja, terutama untuk cluster besar.  
Amazon Redshift tidak mendukung literal string di klausa PARTITION BY.

PESANAN BERDASARKAN *order\$1list*   
(Opsional) Fungsi jendela diterapkan ke baris dalam setiap partisi yang diurutkan sesuai dengan spesifikasi pesanan di ORDER BY. *Klausa ORDER BY ini berbeda dari dan sama sekali tidak terkait dengan klausa ORDER BY di frame\$1clause.* Klausa ORDER BY dapat digunakan tanpa klausa PARTITION BY.   
Untuk fungsi peringkat, klausa ORDER BY mengidentifikasi ukuran untuk nilai peringkat. Untuk fungsi agregasi, baris yang dipartisi harus diurutkan sebelum fungsi agregat dihitung untuk setiap frame. Untuk selengkapnya tentang jenis fungsi jendela, lihat[Fungsi jendela](#c_Window_functions).  
Pengidentifikasi kolom atau ekspresi yang mengevaluasi ke pengidentifikasi kolom diperlukan dalam daftar urutan. Baik konstanta maupun ekspresi konstan tidak dapat digunakan sebagai pengganti nama kolom.   
Nilai NULLS diperlakukan sebagai grup mereka sendiri, diurutkan dan diberi peringkat sesuai dengan opsi NULLS FIRST atau NULLS LAST. Secara default, nilai NULL diurutkan dan diberi peringkat terakhir dalam urutan ASC, dan diurutkan dan diberi peringkat pertama dalam urutan DESC.  
Amazon Redshift tidak mendukung literal string dalam klausa ORDER BY.  
 Jika klausa ORDER BY dihilangkan, urutan baris adalah nondeterministik.   
Dalam sistem paralel apa pun seperti Amazon Redshift, ketika klausa ORDER BY tidak menghasilkan urutan data yang unik dan total, urutan baris tidak deterministik. Artinya, jika ekspresi ORDER BY menghasilkan nilai duplikat (urutan sebagian), urutan pengembalian baris tersebut mungkin berbeda dari satu proses Amazon Redshift ke yang berikutnya. Pada gilirannya, fungsi jendela mungkin mengembalikan hasil yang tidak terduga atau tidak konsisten. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](#r_Examples_order_by_WF). 

 *column\$1name*   
Nama kolom yang akan dipartisi oleh atau diurutkan oleh. 

ASC \$1 DESC   
Opsi yang mendefinisikan urutan pengurutan untuk ekspresi, sebagai berikut:   
+ ASC: naik (misalnya, rendah ke tinggi untuk nilai numerik dan 'A' ke 'Z' untuk string karakter). Jika tidak ada opsi yang ditentukan, data diurutkan dalam urutan menaik secara default.
+ DESC: turun (tinggi ke rendah untuk nilai numerik; 'Z' ke 'A' untuk string). 

NULLS PERTAMA \$1 NULLS TERAKHIR  
Opsi yang menentukan apakah NULLS harus diurutkan terlebih dahulu, sebelum nilai non-null, atau terakhir, setelah nilai non-null. Secara default, NULLS diurutkan dan diberi peringkat terakhir dalam urutan ASC, dan diurutkan dan diberi peringkat pertama dalam urutan DESC.

 *frame\$1clause*   
Untuk fungsi agregat, klausa bingkai lebih lanjut menyempurnakan kumpulan baris di jendela fungsi saat menggunakan ORDER BY. Ini memungkinkan Anda untuk memasukkan atau mengecualikan set baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait.  
Klausa bingkai tidak berlaku untuk fungsi peringkat. Selain itu, klausa bingkai tidak diperlukan ketika tidak ada klausa ORDER BY yang digunakan dalam klausa OVER untuk fungsi agregat. Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan.  
Ketika tidak ada klausa ORDER BY yang ditentukan, bingkai tersirat tidak dibatasi, setara dengan BARIS ANTARA TIDAK TERBATAS SEBELUMNYA DAN TIDAK TERBATAS BERIKUT. 

BARIS  
Klausa ini mendefinisikan bingkai jendela dengan menentukan offset fisik dari baris saat ini.  
Klausa ini menentukan baris di jendela atau partisi saat ini yang akan digabungkan dengan nilai dalam baris saat ini. Ini menggunakan argumen yang menentukan posisi baris, yang bisa sebelum atau sesudah baris saat ini. Titik referensi untuk semua bingkai jendela adalah baris saat ini. Setiap baris menjadi baris saat ini secara bergantian saat bingkai jendela meluncur ke depan di partisi.  
Bingkai dapat berupa serangkaian baris sederhana hingga dan termasuk baris saat ini.  

```
{UNBOUNDED PRECEDING | offset PRECEDING | CURRENT ROW}
```
Atau bisa juga satu set baris antara dua batas.  

```
BETWEEN
{ UNBOUNDED PRECEDING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
AND
{ UNBOUNDED FOLLOWING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
```
UNBOUNDED PRECEDING menunjukkan bahwa jendela dimulai pada baris pertama partisi; *offset* PRECEDING menunjukkan bahwa jendela memulai sejumlah baris yang setara dengan nilai offset sebelum baris saat ini. UNBOUNDED PRECEDING adalah default.  
ROW SAAT INI menunjukkan jendela dimulai atau berakhir pada baris saat ini.   
BERIKUT TIDAK TERBATAS menunjukkan bahwa jendela berakhir pada baris terakhir partisi; *offset* BERIKUT menunjukkan bahwa jendela mengakhiri sejumlah baris yang setara dengan nilai offset setelah baris saat ini.  
*offset* mengidentifikasi jumlah fisik baris sebelum atau sesudah baris saat ini. Dalam hal ini, *offset* harus berupa konstanta yang mengevaluasi nilai numerik positif. Misalnya, 5 BERIKUT mengakhiri bingkai lima baris setelah baris saat ini.  
Dimana BETWEEN tidak ditentukan, frame secara implisit dibatasi oleh baris saat ini. Misalnya, `ROWS 5 PRECEDING` sama dengan`ROWS BETWEEN 5 PRECEDING AND CURRENT ROW`. Juga, `ROWS UNBOUNDED FOLLOWING` sama dengan`ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING`.  
Anda tidak dapat menentukan bingkai di mana batas awal lebih besar dari batas akhir. Misalnya, Anda tidak dapat menentukan salah satu frame berikut.   

```
between 5 following and 5 preceding
between current row and 2 preceding
between 3 following and current row
```

## Urutan data yang unik untuk fungsi jendela
<a name="r_Examples_order_by_WF"></a>

Jika klausa ORDER BY untuk fungsi jendela tidak menghasilkan urutan data yang unik dan total, urutan baris adalah nondeterministik. Jika ekspresi ORDER BY menghasilkan nilai duplikat (urutan sebagian), urutan pengembalian baris tersebut dapat bervariasi dalam beberapa kali proses. Dalam hal ini, fungsi jendela juga dapat mengembalikan hasil yang tidak terduga atau tidak konsisten. 

Misalnya, kueri berikut mengembalikan hasil yang berbeda selama beberapa proses. Hasil yang berbeda ini terjadi karena `order by dateid` tidak menghasilkan urutan data yang unik untuk fungsi jendela SUM. 

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |   1730.00 |     1730.00
1827 |    708.00 |     2438.00
1827 |    234.00 |     2672.00
...

select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |    234.00 |      234.00
1827 |    472.00 |      706.00
1827 |    347.00 |     1053.00
...
```

 Dalam hal ini, menambahkan kolom ORDER BY kedua ke fungsi jendela dapat menyelesaikan masalah. 

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid, pricepaid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid | sumpaid
--------+-----------+---------
1827 |    234.00 |  234.00
1827 |    337.00 |  571.00
1827 |    347.00 |  918.00
...
```

## Fungsi yang didukung
<a name="r_Window_function_supported"></a>

Amazon Redshift mendukung dua jenis fungsi jendela: agregat dan peringkat.

Berikut ini adalah fungsi agregat yang didukung: 
+ [Fungsi jendela AVG](r_WF_AVG.md)
+ [Fungsi jendela COUNT](r_WF_COUNT.md)
+ [Fungsi jendela CUME\$1DIST](r_WF_CUME_DIST.md)
+ [Fungsi jendela DENSE\$1RANK](r_WF_DENSE_RANK.md)
+ [Fungsi jendela FIRST\$1VALUE](r_WF_first_value.md)
+ [Fungsi jendela LAG](r_WF_LAG.md) 
+ [Fungsi jendela LAST\$1VALUE](r_WF_last_value.md)
+ [Fungsi jendela LEAD](r_WF_LEAD.md) 
+ [Fungsi jendela LISTAGG](r_WF_LISTAGG.md) 
+ [Fungsi jendela MAX](r_WF_MAX.md) 
+ [Fungsi jendela MEDIAN](r_WF_MEDIAN.md) 
+ [Fungsi jendela MIN](r_WF_MIN.md) 
+ [Fungsi jendela NTH\$1VALUE](r_WF_NTH.md) 
+ [Fungsi jendela PERCENTILE\$1CONT](r_WF_PERCENTILE_CONT.md)
+ [Fungsi jendela PERCENTILE\$1DISC](r_WF_PERCENTILE_DISC.md)
+ [Fungsi jendela RATIO\$1TO\$1REPORT](r_WF_RATIO_TO_REPORT.md)
+ [Fungsi jendela STDDEV\$1SAMP dan STDDEV\$1POP](r_WF_STDDEV.md)(STDDEV\$1SAMP dan STDDEV adalah sinonim) 
+ [Fungsi jendela SUM](r_WF_SUM.md) 
+ [Fungsi jendela VAR\$1SAMP dan VAR\$1POP](r_WF_VARIANCE.md)(VAR\$1SAMP dan VARIANCE adalah sinonim)

Berikut ini adalah fungsi peringkat yang didukung: 
+ [Fungsi jendela DENSE\$1RANK](r_WF_DENSE_RANK.md) 
+ [Fungsi jendela NTILE](r_WF_NTILE.md) 
+ [Fungsi jendela PERCENT\$1RANK](r_WF_PERCENT_RANK.md)
+ [Fungsi jendela RANK](r_WF_RANK.md) 
+ [Fungsi jendela ROW\$1NUMBER](r_WF_ROW_NUMBER.md)

## Contoh tabel untuk contoh fungsi jendela
<a name="r_Window_function_example"></a>

Anda dapat menemukan contoh fungsi jendela tertentu dengan setiap deskripsi fungsi. Beberapa contoh menggunakan tabel bernama WINSALES, yang berisi 11 baris, seperti yang ditunjukkan berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/c_Window_functions.html)

Script berikut membuat dan mengisi tabel WINSALES sampel.

```
CREATE TABLE winsales(
  salesid int,
  dateid date,
  sellerid int,
  buyerid char(10),
  qty int,
  qty_shipped int);

INSERT INTO winsales VALUES
  (30001, '8/2/2003', 3, 'b', 10, 10),
  (10001, '12/24/2003', 1, 'c', 10, 10),
  (10005, '12/24/2003', 1, 'a', 30, null),	
  (40001, '1/9/2004', 4, 'a', 40, null),	
  (10006, '1/18/2004', 1, 'c', 10, null),	
  (20001, '2/12/2004', 2, 'b', 20, 20),
  (40005, '2/12/2004', 4, 'a', 10, 10),
  (20002, '2/16/2004', 2, 'c', 20, 20),
  (30003, '4/18/2004', 3, 'b', 15, null),
  (30004, '4/18/2004', 3, 'b', 20, null),	
  (30007, '9/7/2004', 3, 'c', 30, null);
```

# Fungsi jendela AVG
<a name="r_WF_AVG"></a>

 Fungsi jendela AVG mengembalikan rata-rata (rata-rata aritmatika) dari nilai ekspresi masukan. Fungsi AVG bekerja dengan nilai numerik dan mengabaikan nilai NULL.

## Sintaksis
<a name="r_WF_AVG-synopsis"></a>

```
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Argumen
<a name="r_WF_AVG-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi AVG dalam hal satu atau beberapa ekspresi.

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="c_Supported_data_types_wf_avg"></a>

Tipe argumen yang didukung oleh fungsi AVG adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, dan DOUBLE PRECISION.

Jenis pengembalian yang didukung oleh fungsi AVG adalah: 
+ BIGINT untuk argumen SMALLINT atau INTEGER
+ NUMERIK untuk argumen BIGINT
+ PRESISI GANDA untuk argumen floating point

## Contoh
<a name="r_WF_AVG-examples"></a>

Contoh berikut menghitung rata-rata bergulir dari jumlah yang dijual berdasarkan tanggal; pesan hasilnya berdasarkan ID tanggal dan ID penjualan: 

```
select salesid, dateid, sellerid, qty,
avg(qty) over
(order by dateid, salesid rows unbounded preceding) as avg
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | avg
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  16
40001 | 2004-01-09 |        4 |  40 |  22
10006 | 2004-01-18 |        1 |  10 |  20
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  18
20002 | 2004-02-16 |        2 |  20 |  18
30003 | 2004-04-18 |        3 |  15 |  18
30004 | 2004-04-18 |        3 |  20 |  18
30007 | 2004-09-07 |        3 |  30 |  19
(11 rows)
```

 Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

# Fungsi jendela COUNT
<a name="r_WF_COUNT"></a>

 Fungsi jendela COUNT menghitung baris yang ditentukan oleh ekspresi.

Fungsi COUNT memiliki dua variasi. COUNT (\$1) menghitung semua baris dalam tabel target apakah mereka termasuk nol atau tidak. COUNT (ekspresi) menghitung jumlah baris dengan nilai non-Null dalam kolom atau ekspresi tertentu.

## Sintaksis
<a name="r_WF_COUNT-synopsis"></a>

```
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Argumen
<a name="r_WF_COUNT-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi untuk menghitung. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi COUNT dalam hal satu atau lebih ekspresi.

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="c_Supported_data_types_wf_count"></a>

Fungsi COUNT mendukung semua tipe data argumen.

Jenis pengembalian yang didukung oleh fungsi COUNT adalah BIGINT.

## Contoh
<a name="r_WF_COUNT-examples"></a>

 Contoh berikut menunjukkan ID penjualan, kuantitas, dan jumlah semua baris dari awal jendela data: 

```
select salesid, qty,
count(*) over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | count
---------+-----+-----
10001 |  10 |   1
10005 |  30 |   2
10006 |  10 |   3
20001 |  20 |   4
20002 |  20 |   5
30001 |  10 |   6
30003 |  15 |   7
30004 |  20 |   8
30007 |  30 |   9
40001 |  40 |   10
40005 |  10 |   11
(11 rows)
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut menunjukkan bagaimana ID penjualan, kuantitas, dan jumlah baris non-null dari awal jendela data. (Dalam tabel WINSALES, kolom QTY\$1SHIPPED berisi beberapa.) NULLs 

```
select salesid, qty, qty_shipped,
count(qty_shipped)
over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | qty_shipped | count
---------+-----+-------------+-------
10001 |  10 |          10 |   1
10005 |  30 |             |   1
10006 |  10 |             |   1
20001 |  20 |          20 |   2
20002 |  20 |          20 |   3
30001 |  10 |          10 |   4
30003 |  15 |             |   4
30004 |  20 |             |   4
30007 |  30 |             |   4
40001 |  40 |             |   4
40005 |  10 |          10 |   5
(11 rows)
```

# Fungsi jendela CUME\$1DIST
<a name="r_WF_CUME_DIST"></a>

Menghitung distribusi kumulatif nilai dalam jendela atau partisi. Dengan asumsi urutan naik, distribusi kumulatif ditentukan menggunakan rumus ini:

`count of rows with values <= x / count of rows in the window or partition`

di mana *x* sama dengan nilai di baris kolom saat ini yang ditentukan dalam klausa ORDER BY. Dataset berikut menggambarkan penggunaan rumus ini:

```
Row#	Value	  Calculation    CUME_DIST
1        2500	   (1)/(5)	   0.2
2        2600	   (2)/(5)	   0.4
3        2800	   (3)/(5)	   0.6
4        2900	   (4)/(5)	   0.8
5        3100	   (5)/(5)	   1.0
```

Rentang nilai pengembalian adalah> 0 hingga 1, inklusif.

## Sintaksis
<a name="r_WF_CUME_DIST-synopsis"></a>

```
CUME_DIST ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_CUME_DIST-arguments"></a>

DI ATAS  
Sebuah klausa yang menentukan partisi jendela. Klausa OVER tidak dapat berisi spesifikasi bingkai jendela.

PARTISI OLEH *partition\$1expression*   
Tidak wajib. Ekspresi yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

PESANAN BERDASARKAN *order\$1list*   
Ekspresi untuk menghitung distribusi kumulatif. Ekspresi harus memiliki tipe data numerik atau secara implisit dapat dikonversi menjadi satu. Jika ORDER BY dihilangkan, nilai kembalinya adalah 1 untuk semua baris.   
Jika ORDER BY tidak menghasilkan urutan unik, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="r_WF_CUME_DIST-returns"></a>

FLOAT8

## Contoh
<a name="r_WF_CUME_DIST-examples"></a>

Contoh berikut menghitung distribusi kumulatif kuantitas untuk setiap penjual:

```
select sellerid, qty, cume_dist() 
over (partition by sellerid order by qty) 
from winsales;

sellerid   qty	   cume_dist
--------------------------------------------------
1         10.00	   0.33
1         10.64	   0.67
1         30.37	   1
3         10.04	   0.25
3         15.15	   0.5
3         20.75	   0.75
3         30.55	   1
2         20.09	   0.5
2         20.12	   1
4         10.12	   0.5
4         40.23	   1
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

# Fungsi jendela DENSE\$1RANK
<a name="r_WF_DENSE_RANK"></a>

Fungsi jendela DENSE\$1RANK menentukan peringkat nilai dalam sekelompok nilai, berdasarkan ekspresi ORDER BY dalam klausa OVER. Jika klausa PARTITION BY opsional ada, peringkat diatur ulang untuk setiap kelompok baris. Baris dengan nilai yang sama untuk kriteria peringkat menerima peringkat yang sama. Fungsi DENSE\$1RANK berbeda dari RANK dalam satu hal: jika dua atau lebih baris terikat, tidak ada celah dalam urutan nilai peringkat. Misalnya, jika dua baris diberi peringkat`1`, peringkat berikutnya adalah`2`. 

Anda dapat memiliki fungsi peringkat dengan klausa PARTITION BY dan ORDER BY yang berbeda dalam kueri yang sama. 

## Sintaksis
<a name="r_WF_DENSE_RANK-synopsis"></a>

```
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_DENSE_RANK-arguments"></a>

( )   
Fungsi ini tidak mengambil argumen, tetapi tanda kurung kosong diperlukan. 

DI ATAS   
Klausa jendela untuk fungsi DENSE\$1RANK. 

PARTISI OLEH *expr\$1list*   
(Opsional) Satu atau lebih ekspresi yang menentukan jendela. 

PESANAN BERDASARKAN *order\$1list*   
(Opsional) Ekspresi yang menjadi dasar nilai peringkat. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel. Jika ORDER BY dihilangkan, nilai kembalinya adalah `1` untuk semua baris.   
Jika ORDER BY tidak menghasilkan urutan unik, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="c_Supported_data_types_wf_dense_rank"></a>

`BIGINT`

## Contoh
<a name="r_WF_DENSE_RANK-examples"></a>

Contoh berikut menggunakan tabel sampel untuk fungsi jendela. Untuk informasi selengkapnya, lihat [Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

Contoh berikut memesan tabel dengan jumlah yang terjual dan memberikan peringkat padat dan peringkat reguler untuk setiap baris. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan. 

```
SELECT salesid, qty,
DENSE_RANK() OVER(ORDER BY qty DESC) AS d_rnk,
RANK() OVER(ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY 2,1;

+---------+-----+-------+-----+
| salesid | qty | d_rnk | rnk |
+---------+-----+-------+-----+
|   10001 |  10 |     5 |   8 |
|   10006 |  10 |     5 |   8 |
|   30001 |  10 |     5 |   8 |
|   40005 |  10 |     5 |   8 |
|   30003 |  15 |     4 |   7 |
|   20001 |  20 |     3 |   4 |
|   20002 |  20 |     3 |   4 |
|   30004 |  20 |     3 |   4 |
|   10005 |  30 |     2 |   2 |
|   30007 |  30 |     2 |   2 |
|   40001 |  40 |     1 |   1 |
+---------+-----+-------+-----+
```

Perhatikan perbedaan peringkat yang ditetapkan ke kumpulan baris yang sama saat fungsi DENSE\$1RANK dan RANK digunakan berdampingan dalam kueri yang sama.

Contoh berikut mempartisi tabel dengan sellerid, mengurutkan setiap partisi dengan kuantitas, dan memberikan peringkat padat untuk setiap baris. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan. 

```
SELECT salesid, sellerid, qty,
DENSE_RANK() OVER(PARTITION BY sellerid ORDER BY qty DESC) AS d_rnk
FROM winsales
ORDER BY 2,3,1;

+---------+----------+-----+-------+
| salesid | sellerid | qty | d_rnk |
+---------+----------+-----+-------+
|   10001 |        1 |  10 |     2 |
|   10006 |        1 |  10 |     2 |
|   10005 |        1 |  30 |     1 |
|   20001 |        2 |  20 |     1 |
|   20002 |        2 |  20 |     1 |
|   30001 |        3 |  10 |     4 |
|   30003 |        3 |  15 |     3 |
|   30004 |        3 |  20 |     2 |
|   30007 |        3 |  30 |     1 |
|   40005 |        4 |  10 |     2 |
|   40001 |        4 |  40 |     1 |
+---------+----------+-----+-------+
```

Untuk berhasil menggunakan contoh terakhir, gunakan perintah berikut untuk menyisipkan baris ke dalam tabel WINSALES. Baris ini memiliki buyerid, sellerid, dan qtysold yang sama dengan baris lainnya. Ini akan menyebabkan dua baris terikat pada contoh terakhir dan dengan demikian akan menunjukkan perbedaan antara fungsi DENSE\$1RANK dan RANK.

```
INSERT INTO winsales VALUES(30009, '2/2/2003', 3, 'b', 20, NULL);
```

Contoh berikut mempartisi tabel dengan buyerid dan sellerid, mengurutkan setiap partisi berdasarkan kuantitas, dan menetapkan peringkat padat dan peringkat reguler untuk setiap baris. Hasilnya diurutkan setelah fungsi jendela diterapkan. 

```
SELECT salesid, sellerid, qty, buyerid,
DENSE_RANK() OVER(PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS d_rnk,
RANK() OVER (PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY rnk;

+---------+----------+-----+---------+-------+-----+
| salesid | sellerid | qty | buyerid | d_rnk | rnk |
+---------+----------+-----+---------+-------+-----+
|   20001 |        2 |  20 | b       |     1 |   1 |
|   30007 |        3 |  30 | c       |     1 |   1 |
|   10006 |        1 |  10 | c       |     1 |   1 |
|   10005 |        1 |  30 | a       |     1 |   1 |
|   20002 |        2 |  20 | c       |     1 |   1 |
|   30009 |        3 |  20 | b       |     1 |   1 |
|   40001 |        4 |  40 | a       |     1 |   1 |
|   30004 |        3 |  20 | b       |     1 |   1 |
|   10001 |        1 |  10 | c       |     1 |   1 |
|   40005 |        4 |  10 | a       |     2 |   2 |
|   30003 |        3 |  15 | b       |     2 |   3 |
|   30001 |        3 |  10 | b       |     3 |   4 |
+---------+----------+-----+---------+-------+-----+
```

# Fungsi jendela FIRST\$1VALUE
<a name="r_WF_first_value"></a>

 Diberikan kumpulan baris yang diurutkan, FIRST\$1VALUE mengembalikan nilai ekspresi yang ditentukan sehubungan dengan baris pertama di bingkai jendela.

Untuk informasi tentang memilih baris terakhir dalam bingkai, lihat[Fungsi jendela LAST\$1VALUE](r_WF_last_value.md).

## Sintaksis
<a name="r_WF_first_value-synopsis"></a>

```
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Argumen
<a name="r_WF_first_value-arguments"></a>

 *ekspresi*   
 Kolom target atau ekspresi tempat fungsi beroperasi. 

ABAIKAN NULLS   
Ketika opsi ini digunakan dengan FIRST\$1VALUE, fungsi mengembalikan nilai pertama dalam frame yang tidak NULL (atau NULL jika semua nilai NULL).

RESPECT NULLS   
 Menunjukkan bahwa Amazon Redshift harus menyertakan nilai nol dalam penentuan baris mana yang akan digunakan. RESPECT NULLS didukung secara default jika Anda tidak menentukan IGNORE NULLS. 

DI ATAS   
Memperkenalkan klausa jendela untuk fungsi tersebut. 

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi dalam hal satu atau lebih ekspresi. 

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada klausa PARTITION BY yang ditentukan, ORDER BY mengurutkan seluruh tabel. Jika Anda menentukan klausa ORDER BY, Anda juga harus menentukan *frame\$1clause*.   
Hasil fungsi FIRST\$1VALUE tergantung pada urutan data. Hasilnya nondeterministik dalam kasus-kasus berikut:   
+ Ketika tidak ada klausa ORDER BY ditentukan dan partisi berisi dua nilai yang berbeda untuk ekspresi 
+ Ketika ekspresi mengevaluasi nilai yang berbeda yang sesuai dengan nilai yang sama dalam daftar ORDER BY. 

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis). 

## Jenis pengembalian
<a name="c_Supported_data_types_wf_first_value"></a>

Fungsi-fungsi ini mendukung ekspresi yang menggunakan tipe data Amazon Redshift primitif. Tipe pengembalian sama dengan tipe data *ekspresi*.

## Contoh
<a name="r_WF_first_value-examples"></a>

Contoh berikut menggunakan tabel VENUE dari sampel data TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Contoh berikut mengembalikan kapasitas tempat duduk untuk setiap tempat di meja VENUE, dengan hasil yang diurutkan berdasarkan kapasitas (tinggi ke rendah). Fungsi FIRST\$1VALUE digunakan untuk memilih nama tempat yang sesuai dengan baris pertama dalam bingkai: dalam hal ini, baris dengan jumlah kursi tertinggi. Hasilnya dipartisi berdasarkan status, jadi ketika nilai VENUESTATE berubah, nilai pertama yang baru dipilih. Bingkai jendela tidak terbatas sehingga nilai pertama yang sama dipilih untuk setiap baris di setiap partisi. 

Untuk California, `Qualcomm Stadium` memiliki jumlah kursi (`70561`) tertinggi, jadi nama ini adalah nilai pertama untuk semua baris di `CA` partisi. 

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |         first_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Qualcomm Stadium
CA         |      69843 | Monster Park                   | Qualcomm Stadium
CA         |      63026 | McAfee Coliseum                | Qualcomm Stadium
CA         |      56000 | Dodger Stadium                 | Qualcomm Stadium
CA         |      45050 | Angel Stadium of Anaheim       | Qualcomm Stadium
CA         |      42445 | PETCO Park                     | Qualcomm Stadium
CA         |      41503 | AT&T Park                      | Qualcomm Stadium
CA         |      22000 | Shoreline Amphitheatre         | Qualcomm Stadium
CO         |      76125 | INVESCO Field                  | INVESCO Field
CO         |      50445 | Coors Field                    | INVESCO Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Dolphin Stadium
FL         |      73800 | Jacksonville Municipal Stadium | Dolphin Stadium
FL         |      65647 | Raymond James Stadium          | Dolphin Stadium
FL         |      36048 | Tropicana Field                | Dolphin Stadium
...
```

Contoh berikut menunjukkan penggunaan opsi IGNORE NULLS dan bergantung pada penambahan baris baru ke tabel VENUE: 

```
insert into venue values(2000,null,'Stanford','CA',90000);
```

Baris baru ini berisi nilai NULL untuk kolom VENUENAME. Sekarang ulangi query FIRST\$1VALUE yang ditunjukkan sebelumnya di bagian ini: 

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |         venuename          | first_value
-----------+------------+----------------------------+-------------
CA         |      90000 | NULL                       | NULL
CA         |      70561 | Qualcomm Stadium           | NULL
CA         |      69843 | Monster Park               | NULL
...
```

Karena baris baru berisi nilai VENUESEATS tertinggi (`90000`) dan VENUENAME-nya adalah NULL, fungsi FIRST\$1VALUE mengembalikan NULL untuk partisi. `CA` Untuk mengabaikan baris seperti ini dalam evaluasi fungsi, tambahkan opsi IGNORE NULLS ke argumen fungsi: 

```
select venuestate, venueseats, venuename,
first_value(venuename) ignore nulls
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venuestate='CA')
order by venuestate;

venuestate | venueseats |         venuename          |   first_value
------------+------------+----------------------------+------------------
CA         |      90000 | NULL                       | Qualcomm Stadium
CA         |      70561 | Qualcomm Stadium           | Qualcomm Stadium
CA         |      69843 | Monster Park               | Qualcomm Stadium
...
```

# Fungsi jendela LAG
<a name="r_WF_LAG"></a>

 Fungsi jendela LAG mengembalikan nilai untuk baris pada offset tertentu di atas (sebelum) baris saat ini di partisi. 

## Sintaksis
<a name="r_WF_LAG-synopsis"></a>

```
LAG (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## Argumen
<a name="r_WF_LAG-arguments"></a>

 *value\$1expr*   
 Kolom target atau ekspresi tempat fungsi beroperasi. 

 *mengimbangi*   
 Parameter opsional yang menentukan jumlah baris sebelum baris saat ini untuk mengembalikan nilai untuk. Offset dapat berupa bilangan bulat konstan atau ekspresi yang mengevaluasi ke bilangan bulat. Jika Anda tidak menentukan offset, Amazon Redshift `1` menggunakan sebagai nilai default. Offset `0` menunjukkan baris saat ini. 

ABAIKAN NULLS   
Spesifikasi opsional yang menunjukkan bahwa Amazon Redshift harus melewati nilai nol dalam penentuan baris mana yang akan digunakan. Nilai nol disertakan jika IGNORE NULLS tidak terdaftar.   
Anda dapat menggunakan ekspresi NVL atau COALESCE untuk mengganti nilai null dengan nilai lain. Untuk informasi selengkapnya, lihat [Fungsi NVL dan COALESCE](r_NVL_function.md). 

RESPECT NULLS   
 Menunjukkan bahwa Amazon Redshift harus menyertakan nilai nol dalam penentuan baris mana yang akan digunakan. RESPECT NULLS didukung secara default jika Anda tidak menentukan IGNORE NULLS. 

DI ATAS   
Menentukan jendela partisi dan pemesanan. Klausa OVER tidak dapat berisi spesifikasi bingkai jendela. 

PARTISI OLEH *window\$1partition*   
Argumen opsional yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER. 

PESANAN DENGAN *window\$1ordering*   
Mengurutkan baris dalam setiap partisi. 

Fungsi jendela LAG mendukung ekspresi yang menggunakan salah satu tipe data Amazon Redshift. Jenis pengembalian sama dengan tipe *value\$1expr*. 

## Contoh
<a name="r_WF_LAG-examples"></a>

 Contoh berikut menunjukkan jumlah tiket yang dijual kepada pembeli dengan ID pembeli 3 dan waktu pembeli 3 membeli tiket. Untuk membandingkan setiap penjualan dengan penjualan sebelumnya untuk pembeli 3, kueri mengembalikan jumlah sebelumnya yang dijual untuk setiap penjualan. Karena tidak ada pembelian sebelum 1/16/2008, nilai jual kuantitas pertama sebelumnya adalah nol: 

```
select buyerid, saletime, qtysold,
lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold
from sales where buyerid = 3 order by buyerid, saletime;

buyerid |      saletime       | qtysold | prev_qtysold
---------+---------------------+---------+--------------
3 | 2008-01-16 01:06:09 |       1 |
3 | 2008-01-28 02:10:01 |       1 |            1
3 | 2008-03-12 10:39:53 |       1 |            1
3 | 2008-03-13 02:56:07 |       1 |            1
3 | 2008-03-29 08:21:39 |       2 |            1
3 | 2008-04-27 02:39:01 |       1 |            2
3 | 2008-08-16 07:04:37 |       2 |            1
3 | 2008-08-22 11:45:26 |       2 |            2
3 | 2008-09-12 09:11:25 |       1 |            2
3 | 2008-10-01 06:22:37 |       1 |            1
3 | 2008-10-20 01:55:51 |       2 |            1
3 | 2008-10-28 01:30:40 |       1 |            2
(12 rows)
```

# Fungsi jendela LAST\$1VALUE
<a name="r_WF_last_value"></a>

 Diberikan kumpulan baris yang diurutkan, fungsi LAST\$1VALUE mengembalikan nilai ekspresi sehubungan dengan baris terakhir dalam bingkai. 

Untuk informasi tentang memilih baris pertama dalam bingkai, lihat[Fungsi jendela FIRST\$1VALUE](r_WF_first_value.md).

## Sintaksis
<a name="r_WF_last_value-synopsis"></a>

```
LAST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Argumen
<a name="r_WF_last_value-arguments"></a>

 *ekspresi*   
 Kolom target atau ekspresi tempat fungsi beroperasi. 

ABAIKAN NULLS   
Fungsi mengembalikan nilai terakhir dalam frame yang tidak NULL (atau NULL jika semua nilai NULL). 

RESPECT NULLS   
Menunjukkan bahwa Amazon Redshift harus menyertakan nilai nol dalam penentuan baris mana yang akan digunakan. RESPECT NULLS didukung secara default jika Anda tidak menentukan IGNORE NULLS. 

DI ATAS   
Memperkenalkan klausa jendela untuk fungsi tersebut. 

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi dalam hal satu atau lebih ekspresi. 

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada klausa PARTITION BY yang ditentukan, ORDER BY mengurutkan seluruh tabel. Jika Anda menentukan klausa ORDER BY, Anda juga harus menentukan *frame\$1clause*.   
Hasilnya tergantung pada urutan data. Hasilnya nondeterministik dalam kasus-kasus berikut:   
+ Ketika tidak ada klausa ORDER BY ditentukan dan partisi berisi dua nilai yang berbeda untuk ekspresi 
+ Ketika ekspresi mengevaluasi nilai yang berbeda yang sesuai dengan nilai yang sama dalam daftar ORDER BY. 

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis). 

## Jenis pengembalian
<a name="c_Supported_data_types_wf_last_value"></a>

Fungsi-fungsi ini mendukung ekspresi yang menggunakan tipe data Amazon Redshift primitif. Tipe pengembalian sama dengan tipe data *ekspresi*.

## Contoh
<a name="r_WF_last_value-examples"></a>

Contoh berikut menggunakan tabel VENUE dari sampel data TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

Contoh berikut mengembalikan kapasitas tempat duduk untuk setiap tempat di meja VENUE, dengan hasil yang diurutkan berdasarkan kapasitas (tinggi ke rendah). Fungsi LAST\$1VALUE digunakan untuk memilih nama tempat yang sesuai dengan baris terakhir dalam bingkai: dalam hal ini, baris dengan jumlah kursi paling sedikit. Hasilnya dipartisi berdasarkan status, jadi ketika nilai VENUESTATE berubah, nilai terakhir yang baru dipilih. Bingkai jendela tidak terbatas sehingga nilai terakhir yang sama dipilih untuk setiap baris di setiap partisi. 

Untuk California, `Shoreline Amphitheatre` dikembalikan untuk setiap baris di partisi karena memiliki jumlah kursi terendah (`22000`). 

```
select venuestate, venueseats, venuename,
last_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |          last_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Shoreline Amphitheatre
CA         |      69843 | Monster Park                   | Shoreline Amphitheatre
CA         |      63026 | McAfee Coliseum                | Shoreline Amphitheatre
CA         |      56000 | Dodger Stadium                 | Shoreline Amphitheatre
CA         |      45050 | Angel Stadium of Anaheim       | Shoreline Amphitheatre
CA         |      42445 | PETCO Park                     | Shoreline Amphitheatre
CA         |      41503 | AT&T Park                      | Shoreline Amphitheatre
CA         |      22000 | Shoreline Amphitheatre         | Shoreline Amphitheatre
CO         |      76125 | INVESCO Field                  | Coors Field
CO         |      50445 | Coors Field                    | Coors Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Tropicana Field
FL         |      73800 | Jacksonville Municipal Stadium | Tropicana Field
FL         |      65647 | Raymond James Stadium          | Tropicana Field
FL         |      36048 | Tropicana Field                | Tropicana Field
...
```

# Fungsi jendela LEAD
<a name="r_WF_LEAD"></a>

 Fungsi jendela LEAD mengembalikan nilai untuk baris pada offset tertentu di bawah (setelah) baris saat ini di partisi. 

## Sintaksis
<a name="r_WF_LEAD-synopsis"></a>

```
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## Argumen
<a name="r_WF_LEAD-arguments"></a>

 *value\$1expr*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

 *mengimbangi*   
 Parameter opsional yang menentukan jumlah baris di bawah baris saat ini untuk mengembalikan nilai untuk. Offset dapat berupa bilangan bulat konstan atau ekspresi yang mengevaluasi ke bilangan bulat. Jika Anda tidak menentukan offset, Amazon Redshift `1` menggunakan sebagai nilai default. Offset `0` menunjukkan baris saat ini. 

ABAIKAN NULLS   
Spesifikasi opsional yang menunjukkan bahwa Amazon Redshift harus melewati nilai nol dalam penentuan baris mana yang akan digunakan. Nilai nol disertakan jika IGNORE NULLS tidak terdaftar.   
Anda dapat menggunakan ekspresi NVL atau COALESCE untuk mengganti nilai null dengan nilai lain. Untuk informasi selengkapnya, lihat [Fungsi NVL dan COALESCE](r_NVL_function.md). 

RESPECT NULLS   
 Menunjukkan bahwa Amazon Redshift harus menyertakan nilai nol dalam penentuan baris mana yang akan digunakan. RESPECT NULLS didukung secara default jika Anda tidak menentukan IGNORE NULLS. 

DI ATAS   
Menentukan jendela partisi dan pemesanan. Klausa OVER tidak dapat berisi spesifikasi bingkai jendela. 

PARTISI OLEH *window\$1partition*   
Argumen opsional yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER. 

PESANAN DENGAN *window\$1ordering*   
Mengurutkan baris dalam setiap partisi. 

Fungsi jendela LEAD mendukung ekspresi yang menggunakan salah satu tipe data Amazon Redshift. Jenis pengembalian sama dengan tipe *value\$1expr*. 

## Contoh
<a name="r_WF_LEAD-examples"></a>

 Contoh berikut memberikan komisi untuk acara-acara di tabel PENJUALAN yang tiketnya dijual pada 1 Januari 2008 dan 2 Januari 2008 dan komisi yang dibayarkan untuk penjualan tiket untuk penjualan berikutnya. Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm
FROM sales
WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59'
LIMIT 10;

+---------+------------+---------------------+-----------+
| eventid | commission |      saletime       | next_comm |
+---------+------------+---------------------+-----------+
|    1664 |       13.2 | 2008-01-09 01:00:21 |      69.6 |
|     184 |       69.6 | 2008-01-09 01:00:36 |     116.1 |
|    6870 |      116.1 | 2008-01-09 01:02:37 |      11.1 |
|    3718 |       11.1 | 2008-01-09 01:05:19 |     205.5 |
|    6772 |      205.5 | 2008-01-09 01:14:04 |      38.4 |
|    3074 |       38.4 | 2008-01-09 01:26:50 |     209.4 |
|    5254 |      209.4 | 2008-01-09 01:29:16 |      26.4 |
|    3724 |       26.4 | 2008-01-09 01:40:09 |      57.6 |
|    5303 |       57.6 | 2008-01-09 01:40:21 |      51.6 |
|    3678 |       51.6 | 2008-01-09 01:42:54 |      43.8 |
+---------+------------+---------------------+-----------+
```

 Contoh berikut memberikan perbedaan maksimum untuk komisi untuk acara di tabel PENJUALAN dan komisi yang dibayarkan untuk penjualan tiket untuk penjualan berikutnya untuk acara yang sama. Contoh ini menunjukkan cara menggunakan LEAD dengan klausa GROUP BY. Karena fungsi jendela tidak diizinkan dalam klausa agregat, contoh ini menggunakan subquery. Contoh berikut menggunakan database sampel TICKIT. Untuk informasi selengkapnya, lihat [Database sampel](c_sampledb.md).

```
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference
FROM
(
    SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff
    FROM sales JOIN event ON sales.eventid = event.eventid
)
GROUP BY eventid, eventname
ORDER BY eventid

LIMIT 10

| eventid | eventname                   | max_commission_difference |
+---------+-----------------------------+---------------------------+
| 1       | Gotterdammerung             | 7.95                      |
| 2       | Boris Godunov               | 227.85                    |
| 3       | Salome                      | 1350.9                    |
| 4       | La Cenerentola (Cinderella) | 790.05                    |
| 5       | Il Trovatore                | 214.05                    |
| 6       | L Elisir d Amore            | 510.9                     |
| 7       | Doctor Atomic               | 180.6                     |
| 9       | The Fly                     | 147                       |
| 10      | Rigoletto                   | 186.6                     |
+---------+-----------------------------+---------------------------+
```

# Fungsi jendela LISTAGG
<a name="r_WF_LISTAGG"></a>

Untuk setiap grup dalam kueri, fungsi jendela LISTAGG memerintahkan baris untuk grup tersebut sesuai dengan ekspresi ORDER BY, lalu menggabungkan nilai menjadi satu string. 

## Sintaksis
<a name="r_WF_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ] 
OVER ( [PARTITION BY partition_expression] )
```

## Argumen
<a name="r_WF_LISTAGG-arguments"></a>

DISTINCT  
(Opsional) Klausa yang menghilangkan nilai duplikat dari ekspresi yang ditentukan sebelum digabungkan. Spasi trailing diabaikan, sehingga string `'a'` dan `'a '` diperlakukan sebagai duplikat. LISTAGG menggunakan nilai pertama yang ditemui. Untuk informasi selengkapnya, lihat [Signifikansi trailing blanko](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

  


*aggregate\$1expression*   
 Ekspresi yang valid (seperti nama kolom) yang memberikan nilai untuk digabungkan. Nilai NULL dan string kosong diabaikan. 

 *pembatas*   
(Opsional) Konstanta string ke akan memisahkan nilai gabungan. Default-nya adalah NULL.

 DALAM GRUP (PESANAN BERDASARKAN *order\$1list*)   
(Opsional) Sebuah klausa yang menentukan urutan dari nilai agregat. Deterministik hanya jika ORDER BY menyediakan urutan unik. Defaultnya adalah menggabungkan semua baris dan mengembalikan satu nilai.

 DI ATAS   
 Sebuah klausa yang menentukan partisi jendela. Klausa OVER tidak dapat berisi urutan jendela atau spesifikasi bingkai jendela.

 PARTISI OLEH *partition\$1expression*   
(Opsional) Menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

## Pengembalian
<a name="r_WF_LISTAGG-data-types"></a>

Jika set hasil lebih besar dari 16.000.000 byte, maka LISTAGG mengembalikan kesalahan berikut:

```
Invalid operation: Result size exceeds LISTAGG limit
```

## Contoh
<a name="r_WF_LISTAGG-examples"></a>

Contoh berikut menggunakan tabel WINSALES. Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut mengembalikan daftar penjual IDs, diurutkan oleh ID penjual. 

```
select listagg(sellerid) 
within group (order by sellerid)
over() from winsales;

  listagg
------------
 11122333344
...
...
 11122333344
 11122333344
   (11 rows)
```

Contoh berikut mengembalikan daftar penjual IDs untuk pembeli B, dipesan berdasarkan tanggal. 

```
select listagg(sellerid) 
within group (order by dateid)
over () as seller
from winsales
where buyerid = 'b' ;

  seller
---------
    3233
    3233
    3233
    3233
```

Contoh berikut mengembalikan daftar tanggal penjualan yang dipisahkan koma untuk pembeli B.

```
select listagg(dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

             dates                                      
-------------------------------------------
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
```

Contoh berikut menggunakan DISTINCT untuk mengembalikan daftar tanggal penjualan unik untuk pembeli B.

```
select listagg(distinct dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

           dates
--------------------------------
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
```

Contoh berikut mengembalikan daftar penjualan yang dipisahkan koma IDs untuk setiap ID pembeli.

```
select buyerid, 
listagg(salesid,',')
within group (order by salesid)
over (partition by buyerid) as sales_id
from winsales
order by buyerid;

+---------+-------------------------+
| buyerid |        sales_id         |
+---------+-------------------------+
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
+---------+-------------------------+
```

Contoh berikut menunjukkan dukungan LISTAGG dengan hasil gabungan hingga 16.000.000 byte:

```
CREATE TABLE large_data (
    id INT,
    content VARCHAR(65535)
);

INSERT INTO large_data VALUES 
    (1, REPEAT('A', 65535)),
    (2, REPEAT('B', 65535)),
    (3, REPEAT('C', 65535));

SELECT LEN(LISTAGG(content, ',') WITHIN GROUP (ORDER BY id)) AS total_length
FROM large_data;

 total_length
--------------
       196607
```

# Fungsi jendela MAX
<a name="r_WF_MAX"></a>

 Fungsi jendela MAX mengembalikan maksimum nilai ekspresi masukan. Fungsi MAX bekerja dengan nilai numerik dan mengabaikan nilai NULL. 

## Sintaksis
<a name="r_WF_MAX-synopsis"></a>

```
MAX ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Argumen
<a name="r_WF_MAX-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
 Sebuah klausa yang menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi MAX dalam hal satu atau lebih ekspresi.

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="r_WF_MAX-data-types"></a>

Menerima tipe data apa pun sebagai input. Mengembalikan tipe data yang sama sebagai *ekspresi*.

## Contoh
<a name="r_WF_MAX-examples"></a>

Contoh berikut menunjukkan ID penjualan, kuantitas, dan kuantitas maksimum dari awal jendela data: 

```
select salesid, qty,
max(qty) over (order by salesid rows unbounded preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  30
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  30
30001 |  10 |  30
30003 |  15 |  30
30004 |  20 |  30
30007 |  30 |  30
40001 |  40 |  40
40005 |  10 |  40
(11 rows)
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut menunjukkan salesid, kuantitas, dan kuantitas maksimum dalam bingkai terbatas: 

```
select salesid, qty,
max(qty) over (order by salesid rows between 2 preceding and 1 preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  20
30001 |  10 |  20
30003 |  15 |  20
30004 |  20 |  15
30007 |  30 |  20
40001 |  40 |  30
40005 |  10 |  40
(11 rows)
```

# Fungsi jendela MEDIAN
<a name="r_WF_MEDIAN"></a>

Menghitung nilai median untuk rentang nilai di jendela atau partisi. Nilai NULL dalam rentang diabaikan.

MEDIAN adalah fungsi distribusi terbalik yang mengasumsikan model distribusi kontinu.

## Sintaksis
<a name="r_WF_MEDIAN-synopsis"></a>

```
MEDIAN ( median_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## Argumen
<a name="r_WF_MEDIAN-arguments"></a>

 *median\$1expression*   
Ekspresi, seperti nama kolom, yang memberikan nilai untuk menentukan median. Ekspresi harus memiliki tipe data numerik atau datetime atau secara implisit dapat dikonversi menjadi satu.

DI ATAS   
Sebuah klausa yang menentukan partisi jendela. Klausa OVER tidak dapat berisi urutan jendela atau spesifikasi bingkai jendela.

PARTISI OLEH *partition\$1expression*   
Tidak wajib. Ekspresi yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

## Jenis Data
<a name="r_WF_MEDIAN-data-types"></a>

Jenis pengembalian ditentukan oleh tipe data *median\$1expression*. Tabel berikut menunjukkan tipe kembali untuk setiap tipe data *median\$1expression*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_WF_MEDIAN.html)

## Catatan penggunaan
<a name="r_WF_MEDIAN-data-usage-notes"></a>

Jika argumen *median\$1expression* adalah tipe data DECIMAL yang didefinisikan dengan presisi maksimum 38 digit, ada kemungkinan MEDIAN akan mengembalikan hasil yang tidak akurat atau kesalahan. Jika nilai pengembalian fungsi MEDIAN melebihi 38 digit, hasilnya terpotong agar sesuai, yang menyebabkan hilangnya presisi. Jika, selama interpolasi, hasil antara melebihi presisi maksimum, luapan numerik terjadi dan fungsi mengembalikan kesalahan. Untuk menghindari kondisi ini, sebaiknya gunakan tipe data dengan presisi lebih rendah atau mentransmisikan argumen *median\$1expression* ke presisi yang lebih rendah. 

Misalnya, fungsi SUM dengan argumen DECIMAL mengembalikan presisi default 38 digit. Skala hasilnya sama dengan skala argumen. Jadi, misalnya, SUM kolom DECIMAL (5,2) mengembalikan tipe data DECIMAL (38,2).

Contoh berikut menggunakan fungsi SUM dalam argumen *median\$1expression* dari fungsi MEDIAN. Tipe data dari kolom PRICEPAID adalah DECIMAL (8,2), sehingga fungsi SUM mengembalikan DECIMAL (38,2).

```
select salesid, sum(pricepaid), median(sum(pricepaid)) 
over() from sales where salesid < 10 group by salesid;
```

Untuk menghindari potensi kehilangan presisi atau kesalahan luapan, lemparkan hasilnya ke tipe data DECIMAL dengan presisi lebih rendah, seperti yang ditunjukkan contoh berikut.

```
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) 
over() from sales where salesid < 10 group by salesid;
```

## Contoh
<a name="r_WF_MEDIAN-examples"></a>

 Contoh berikut menghitung jumlah penjualan rata-rata untuk setiap penjual: 

```
select sellerid, qty, median(qty) 
over (partition by sellerid) 
from winsales
order by sellerid;


sellerid	qty	median
---------------------------
1		10	10.0
1		10	10.0
1		30	10.0
2		20	20.0
2		20	20.0
3		10	17.5
3		15	17.5
3		20	17.5
3		30	17.5
4		10	25.0
4		40	25.0
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

# Fungsi jendela MIN
<a name="r_WF_MIN"></a>

 Fungsi jendela MIN mengembalikan minimum nilai ekspresi masukan. Fungsi MIN bekerja dengan nilai numerik dan mengabaikan nilai NULL. 

## Sintaksis
<a name="r_WF_MIN-synopsis"></a>

```
MIN ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Argumen
<a name="r_WF_MIN-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi MIN dalam hal satu atau lebih ekspresi.

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="r_WF_MIN-data-types"></a>

Menerima tipe data apa pun sebagai input. Mengembalikan tipe data yang sama sebagai *ekspresi*.

## Contoh
<a name="r_WF_MIN-examples"></a>

Contoh berikut menunjukkan ID penjualan, kuantitas, dan kuantitas minimum dari awal jendela data: 

```
select salesid, qty,
min(qty) over
(order by salesid rows unbounded preceding)
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  10
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  10
40001 |  40 |  10
40005 |  10 |  10
(11 rows)
```

 Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

Contoh berikut menunjukkan ID penjualan, kuantitas, dan kuantitas minimum dalam bingkai terbatas: 

```
select salesid, qty,
min(qty) over
(order by salesid rows between 2 preceding and 1 preceding) as min
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  20
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  15
40001 |  40 |  20
40005 |  10 |  30
(11 rows)
```

# Fungsi jendela NTH\$1VALUE
<a name="r_WF_NTH"></a>

 Fungsi jendela NTH\$1VALUE mengembalikan nilai ekspresi dari baris tertentu dari bingkai jendela relatif terhadap baris pertama jendela. 

## Sintaksis
<a name="r_WF_NTH-synopsis"></a>

```
NTH_VALUE (expr, offset)
[ IGNORE NULLS | RESPECT NULLS ]
OVER
( [ PARTITION BY window_partition ]
[ ORDER BY window_ordering 
                        frame_clause ] )
```

## Argumen
<a name="r_WF_NTH-arguments"></a>

 *expr*   
 Kolom target atau ekspresi tempat fungsi beroperasi. 

 *mengimbangi*   
 Menentukan nomor baris relatif terhadap baris pertama di jendela untuk mengembalikan ekspresi. *Offset* dapat berupa konstanta atau ekspresi dan harus berupa bilangan bulat positif yang lebih besar dari 0. 

ABAIKAN NULLS   
Spesifikasi opsional yang menunjukkan bahwa Amazon Redshift harus melewati nilai nol dalam penentuan baris mana yang akan digunakan. Nilai nol disertakan jika IGNORE NULLS tidak terdaftar. 

RESPECT NULLS   
 Menunjukkan bahwa Amazon Redshift harus menyertakan nilai nol dalam penentuan baris mana yang akan digunakan. RESPECT NULLS didukung secara default jika Anda tidak menentukan IGNORE NULLS. 

DI ATAS   
Menentukan partisi jendela, pemesanan, dan bingkai jendela. 

PARTISI OLEH *window\$1partition*   
Menetapkan rentang catatan untuk setiap grup dalam klausa OVER. 

PESANAN DENGAN *window\$1ordering*   
Mengurutkan baris dalam setiap partisi. Jika ORDER BY dihilangkan, bingkai default terdiri dari semua baris di partisi. 

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis). 

Fungsi jendela NTH\$1VALUE mendukung ekspresi yang menggunakan salah satu tipe data Amazon Redshift. Jenis pengembalian sama dengan tipe *expr*. 

## Contoh
<a name="r_WF_NTH-examples"></a>

Contoh berikut menunjukkan jumlah kursi di tempat terbesar ketiga di California, Florida, dan New York dibandingkan dengan jumlah kursi di tempat lain di negara bagian tersebut: 

```
select venuestate, venuename, venueseats,
nth_value(venueseats, 3)
ignore nulls
over(partition by venuestate order by venueseats desc
rows between unbounded preceding and unbounded following)
as third_most_seats
from (select * from venue where venueseats > 0 and
venuestate in('CA', 'FL', 'NY'))
order by venuestate;

venuestate |           venuename            | venueseats | third_most_seats
------------+--------------------------------+------------+------------------
CA         | Qualcomm Stadium               |      70561 |            63026
CA         | Monster Park                   |      69843 |            63026
CA         | McAfee Coliseum                |      63026 |            63026
CA         | Dodger Stadium                 |      56000 |            63026
CA         | Angel Stadium of Anaheim       |      45050 |            63026
CA         | PETCO Park                     |      42445 |            63026
CA         | AT&T Park                      |      41503 |            63026
CA         | Shoreline Amphitheatre         |      22000 |            63026
FL         | Dolphin Stadium                |      74916 |            65647
FL         | Jacksonville Municipal Stadium |      73800 |            65647
FL         | Raymond James Stadium          |      65647 |            65647
FL         | Tropicana Field                |      36048 |            65647
NY         | Ralph Wilson Stadium           |      73967 |            20000
NY         | Yankee Stadium                 |      52325 |            20000
NY         | Madison Square Garden          |      20000 |            20000
(15 rows)
```

# Fungsi jendela NTILE
<a name="r_WF_NTILE"></a>

 Fungsi jendela NTILE membagi baris yang diurutkan dalam partisi ke dalam jumlah kelompok peringkat yang ditentukan dengan ukuran yang sama mungkin dan mengembalikan grup tempat baris tertentu jatuh ke dalamnya. 

## Sintaksis
<a name="r_WF_NTILE-synopsis"></a>

```
NTILE (expr)
OVER ( 
[ PARTITION BY expression_list ] 
[ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_NTILE-arguments"></a>

 *expr*   
Jumlah kelompok peringkat dan harus menghasilkan nilai integer positif (lebih besar dari 0) untuk setiap partisi. Argumen *expr* tidak boleh dibatalkan. 

DI ATAS   
 Sebuah klausa yang menentukan jendela partisi dan pemesanan. Klausa OVER tidak dapat berisi spesifikasi bingkai jendela. 

PARTISI OLEH *window\$1partition*   
Tidak wajib. Rentang catatan untuk setiap grup dalam klausa OVER. 

PESANAN DENGAN *window\$1ordering*   
Tidak wajib. Ekspresi yang mengurutkan baris dalam setiap partisi. Jika klausa ORDER BY dihilangkan, perilaku peringkatnya sama.  
Jika ORDER BY tidak menghasilkan urutan unik, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="r_WF_NTILE-return-type"></a>

BIGINT

## Contoh
<a name="r_WF_NTILE-examples"></a>

 Contoh berikut peringkat ke dalam empat kelompok peringkat harga yang dibayarkan untuk tiket Hamlet pada 26 Agustus 2008. Hasil set adalah 17 baris, dibagi hampir merata di antara peringkat 1 sampai 4: 

```
select eventname, caldate, pricepaid, ntile(4)
over(order by pricepaid desc) from sales, event, date
where sales.eventid=event.eventid and event.dateid=date.dateid and eventname='Hamlet'
and caldate='2008-08-26'
order by 4;

eventname |  caldate   | pricepaid | ntile
-----------+------------+-----------+-------
Hamlet    | 2008-08-26 |   1883.00 |     1
Hamlet    | 2008-08-26 |   1065.00 |     1
Hamlet    | 2008-08-26 |    589.00 |     1
Hamlet    | 2008-08-26 |    530.00 |     1
Hamlet    | 2008-08-26 |    472.00 |     1
Hamlet    | 2008-08-26 |    460.00 |     2
Hamlet    | 2008-08-26 |    355.00 |     2
Hamlet    | 2008-08-26 |    334.00 |     2
Hamlet    | 2008-08-26 |    296.00 |     2
Hamlet    | 2008-08-26 |    230.00 |     3
Hamlet    | 2008-08-26 |    216.00 |     3
Hamlet    | 2008-08-26 |    212.00 |     3
Hamlet    | 2008-08-26 |    106.00 |     3
Hamlet    | 2008-08-26 |    100.00 |     4
Hamlet    | 2008-08-26 |     94.00 |     4
Hamlet    | 2008-08-26 |     53.00 |     4
Hamlet    | 2008-08-26 |     25.00 |     4
(17 rows)
```

# Fungsi jendela PERCENT\$1RANK
<a name="r_WF_PERCENT_RANK"></a>

Menghitung peringkat persen dari baris yang diberikan. Peringkat persen ditentukan dengan menggunakan rumus ini:

`(x - 1) / (the number of rows in the window or partition - 1)`

dimana *x* adalah pangkat dari baris saat ini. Dataset berikut menggambarkan penggunaan rumus ini:

```
Row#	Value	Rank	Calculation	PERCENT_RANK
1	15	1	(1-1)/(7-1)	0.0000
2	20	2	(2-1)/(7-1)	0.1666
3	20	2	(2-1)/(7-1)	0.1666
4	20	2	(2-1)/(7-1)	0.1666
5	30	5	(5-1)/(7-1)	0.6666
6	30	5	(5-1)/(7-1)	0.6666
7	40	7	(7-1)/(7-1)	1.0000
```

Rentang nilai pengembalian adalah 0 hingga 1, inklusif. Baris pertama dalam set apa pun memiliki PERCENT\$1RANK 0.

## Sintaksis
<a name="r_WF_PERCENT_RANK-synopsis"></a>

```
PERCENT_RANK ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_PERCENT_RANK-arguments"></a>

( )   
Fungsi ini tidak mengambil argumen, tetapi tanda kurung kosong diperlukan. 

DI ATAS  
Sebuah klausa yang menentukan partisi jendela. Klausa OVER tidak dapat berisi spesifikasi bingkai jendela.

PARTISI OLEH *partition\$1expression*   
Tidak wajib. Ekspresi yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

PESANAN BERDASARKAN *order\$1list*   
Tidak wajib. Ekspresi untuk menghitung peringkat persen. Ekspresi harus memiliki tipe data numerik atau secara implisit dapat dikonversi menjadi satu. Jika ORDER BY dihilangkan, nilai kembalinya adalah 0 untuk semua baris.  
Jika ORDER BY tidak menghasilkan urutan unik, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="r_WF_PERCENT_RANK-return-type"></a>

FLOAT8

## Contoh
<a name="r_WF_PERCENT_RANK-examples"></a>

Contoh berikut menghitung peringkat persen dari jumlah penjualan untuk setiap penjual:

```
select sellerid, qty, percent_rank() 
over (partition by sellerid order by qty) 
from winsales;

sellerid	qty		percent_rank
----------------------------------------
1		10.00		0.0
1		10.64		0.5
1		30.37		1.0
3		10.04		0.0
3		15.15		0.33
3		20.75		0.67
3		30.55		1.0
2		20.09		0.0
2		20.12		1.0
4		10.12		0.0
4		40.23		1.0
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

# Fungsi jendela PERCENTILE\$1CONT
<a name="r_WF_PERCENTILE_CONT"></a>

PERCENTILE\$1CONT adalah fungsi distribusi terbalik yang mengasumsikan model distribusi kontinu. Dibutuhkan nilai persentil dan spesifikasi sortir, dan mengembalikan nilai interpolasi yang akan jatuh ke dalam nilai persentil yang diberikan sehubungan dengan spesifikasi sortir. 

PERCENTILE\$1CONT menghitung interpolasi linier antara nilai setelah mengurutkannya. Menggunakan nilai persentil `(P)` dan jumlah baris bukan nol `(N)` dalam grup agregasi, fungsi menghitung nomor baris setelah mengurutkan baris sesuai dengan spesifikasi pengurutan. Nomor baris ini `(RN)` dihitung sesuai dengan `RN = (1+ (P*(N-1))` rumus. Hasil akhir dari fungsi agregat dihitung dengan interpolasi linier antara nilai-nilai dari baris pada nomor baris dan. `CRN = CEILING(RN)` `FRN = FLOOR(RN)` 

Hasil akhirnya adalah sebagai berikut.

Jika `(CRN = FRN = RN)` maka hasilnya adalah `(value of expression from row at RN)` 

Jika tidak, hasilnya adalah sebagai berikut:

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

Anda hanya dapat menentukan klausa PARTITION dalam klausa OVER. Jika PARTITION ditentukan, untuk setiap baris, PERCENTILE\$1CONT mengembalikan nilai yang akan jatuh ke dalam persentil yang ditentukan di antara satu set nilai dalam partisi yang diberikan. 

## Sintaksis
<a name="r_WF_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## Argumen
<a name="r_WF_PERCENTILE_CONT-arguments"></a>

 *persentil*   
Konstanta numerik antara 0 dan 1. Null diabaikan dalam perhitungan.

DALAM GRUP (ORDER BY *expr)*   
Menentukan numerik atau date/time nilai-nilai untuk mengurutkan dan menghitung persentil atas. 

DI ATAS   
Menentukan partisi jendela. Klausa OVER tidak dapat berisi urutan jendela atau spesifikasi bingkai jendela.

PARTISI OLEH *expr*   
Argumen opsional yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

## Pengembalian
<a name="r_WF_PERCENTILE_CONT-returns"></a>

Tipe pengembalian ditentukan oleh tipe data ekspresi ORDER BY dalam klausa WITHIN GROUP. Tabel berikut menunjukkan tipe pengembalian untuk setiap tipe data ekspresi ORDER BY.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_WF_PERCENTILE_CONT.html)

## Catatan penggunaan
<a name="r_WF_PERCENTILE_CONT-usage-notes"></a>

Jika ekspresi ORDER BY adalah tipe data DECIMAL yang ditentukan dengan presisi maksimum 38 digit, ada kemungkinan bahwa PERCENTILE\$1CONT akan mengembalikan hasil yang tidak akurat atau kesalahan. Jika nilai pengembalian fungsi PERCENTILE\$1CONT melebihi 38 digit, hasilnya terpotong agar sesuai, yang menyebabkan hilangnya presisi. Jika, selama interpolasi, hasil antara melebihi presisi maksimum, luapan numerik terjadi dan fungsi mengembalikan kesalahan. Untuk menghindari kondisi ini, sebaiknya gunakan tipe data dengan presisi lebih rendah atau mentransmisikan ekspresi ORDER BY ke presisi yang lebih rendah. 

Misalnya, fungsi SUM dengan argumen DECIMAL mengembalikan presisi default 38 digit. Skala hasilnya sama dengan skala argumen. Jadi, misalnya, SUM kolom DECIMAL (5,2) mengembalikan tipe data DECIMAL (38,2). 

Contoh berikut menggunakan fungsi SUM dalam klausa ORDER BY dari fungsi PERCENTILE\$1CONT. Tipe data dari kolom PRICEPAID adalah DECIMAL (8,2), sehingga fungsi SUM mengembalikan DECIMAL (38,2). 

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid) desc) over()
from sales where salesid < 10 group by salesid;
```

Untuk menghindari potensi kehilangan presisi atau kesalahan luapan, lemparkan hasilnya ke tipe data DECIMAL dengan presisi lebih rendah, seperti yang ditunjukkan contoh berikut.

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid)::decimal(30,2) desc) over()
from sales where salesid < 10 group by salesid;
```

## Contoh
<a name="r_WF_PERCENTILE_CONT-examples"></a>

Contoh berikut menggunakan tabel WINSALES. Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over() as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        1 |  10 |   20.0
        1 |  10 |   20.0
        3 |  10 |   20.0
        4 |  10 |   20.0
        3 |  15 |   20.0
        2 |  20 |   20.0
        3 |  20 |   20.0
        2 |  20 |   20.0
        3 |  30 |   20.0
        1 |  30 |   20.0
        4 |  40 |   20.0
(11 rows)
```

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over(partition by sellerid) as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        2 |  20 |   20.0
        2 |  20 |   20.0
        4 |  10 |   25.0
        4 |  40 |   25.0
        1 |  10 |   10.0
        1 |  10 |   10.0
        1 |  30 |   10.0
        3 |  10 |   17.5
        3 |  15 |   17.5
        3 |  20 |   17.5
        3 |  30 |   17.5
(11 rows)
```

Contoh berikut menghitung PERCENTILE\$1CONT dan PERCENTILE\$1DISC dari penjualan tiket untuk penjual di negara bagian Washington. 

```
SELECT sellerid, state, sum(qtysold*pricepaid) sales, 
percentile_cont(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over(),
percentile_disc(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over()
from sales s, users u 
where s.sellerid = u.userid and state = 'WA' and sellerid < 1000
group by sellerid, state;

 sellerid | state |  sales  | percentile_cont | percentile_disc
----------+-------+---------+-----------------+-----------------
      127 | WA    | 6076.00 |         2044.20 |         1531.00
      787 | WA    | 6035.00 |         2044.20 |         1531.00
      381 | WA    | 5881.00 |         2044.20 |         1531.00
      777 | WA    | 2814.00 |         2044.20 |         1531.00
       33 | WA    | 1531.00 |         2044.20 |         1531.00
      800 | WA    | 1476.00 |         2044.20 |         1531.00
        1 | WA    | 1177.00 |         2044.20 |         1531.00
(7 rows)
```

# Fungsi jendela PERCENTILE\$1DISC
<a name="r_WF_PERCENTILE_DISC"></a>

PERCENTILE\$1DISC adalah fungsi distribusi terbalik yang mengasumsikan model distribusi diskrit. Dibutuhkan nilai persentil dan spesifikasi semacam dan mengembalikan elemen dari set yang diberikan. 

Untuk nilai persentil yang diberikan P, PERCENTILE\$1DISC mengurutkan nilai ekspresi dalam klausa ORDER BY dan mengembalikan nilai dengan nilai distribusi kumulatif terkecil (sehubungan dengan spesifikasi pengurutan yang sama) yang lebih besar dari atau sama dengan P. 

Anda hanya dapat menentukan klausa PARTITION dalam klausa OVER. 

## Sintaksis
<a name="r_WF_PERCENTILE_DISC-synopsis"></a>

```
PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## Argumen
<a name="r_WF_PERCENTILE_DISC-arguments"></a>

 *persentil*   
Konstanta numerik antara 0 dan 1. Null diabaikan dalam perhitungan.

DALAM GRUP (ORDER BY *expr)*   
Menentukan numerik atau date/time nilai-nilai untuk mengurutkan dan menghitung persentil atas. 

DI ATAS   
Menentukan partisi jendela. Klausa OVER tidak dapat berisi urutan jendela atau spesifikasi bingkai jendela.

PARTISI OLEH *expr*   
Argumen opsional yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

## Pengembalian
<a name="r_WF_PERCENTILE_DISC-returns"></a>

Tipe data yang sama dengan ekspresi ORDER BY dalam klausa WITHIN GROUP.

## Contoh
<a name="r_WF_PERCENTILE_DISC-examples"></a>

Contoh berikut menggunakan tabel WINSALES. Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

```
SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER() AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 3        | 10  | 20     |
| 1        | 10  | 20     |
| 1        | 10  | 20     |
| 4        | 10  | 20     |
| 3        | 15  | 20     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 3        | 20  | 20     |
| 1        | 30  | 20     |
| 3        | 30  | 20     |
| 4        | 40  | 20     |
+----------+-----+--------+

SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 4        | 10  | 10     |
| 4        | 40  | 10     |
| 3        | 10  | 15     |
| 3        | 15  | 15     |
| 3        | 20  | 15     |
| 3        | 30  | 15     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 1        | 10  | 10     |
| 1        | 10  | 10     |
| 1        | 30  | 10     |
+----------+-----+--------+
```

Untuk menemukan PERCENTILE\$1DISC (0,25) dan PERCENTILE\$1DISC (0,75) untuk kuantitas saat dipartisi oleh ID penjual, gunakan contoh berikut.

```
SELECT sellerid, qty, PERCENTILE_DISC(0.25) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile1 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile1 |
+----------+-----+-----------+
| 4        | 10  | 10        |
| 4        | 40  | 10        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 3        | 10  | 10        |
| 3        | 15  | 10        |
| 3        | 20  | 10        |
| 3        | 30  | 10        |
| 1        | 10  | 10        |
| 1        | 10  | 10        |
| 1        | 30  | 10        |
+----------+-----+-----------+

SELECT sellerid, qty, PERCENTILE_DISC(0.75) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile3 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile3 |
+----------+-----+-----------+
| 3        | 10  | 20        |
| 3        | 15  | 20        |
| 3        | 20  | 20        |
| 3        | 30  | 20        |
| 4        | 10  | 40        |
| 4        | 40  | 40        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 1        | 10  | 30        |
| 1        | 10  | 30        |
| 1        | 30  | 30        |
+----------+-----+-----------+
```

# Fungsi jendela RANK
<a name="r_WF_RANK"></a>

 Fungsi jendela RANK menentukan peringkat nilai dalam sekelompok nilai, berdasarkan ekspresi ORDER BY dalam klausa OVER. Jika klausa PARTITION BY opsional ada, peringkat diatur ulang untuk setiap kelompok baris. Baris dengan nilai yang sama untuk kriteria peringkat menerima peringkat yang sama. Amazon Redshift menambahkan jumlah baris terikat ke peringkat terikat untuk menghitung peringkat berikutnya dan dengan demikian peringkat mungkin bukan angka berurutan. Misalnya, jika dua baris diberi peringkat 1, peringkat berikutnya adalah 3. 

 RANK berbeda dari [Fungsi jendela DENSE\$1RANK](r_WF_DENSE_RANK.md) dalam satu hal: Untuk DENSE\$1RANK, jika dua atau lebih baris mengikat, tidak ada celah dalam urutan nilai peringkat. Misalnya, jika dua baris diberi peringkat 1, peringkat berikutnya adalah 2.

Anda dapat memiliki fungsi peringkat dengan klausa PARTITION BY dan ORDER BY yang berbeda dalam kueri yang sama. 

## Sintaksis
<a name="r_WF_RANK-synopsis"></a>

```
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_RANK-arguments"></a>

( )   
Fungsi ini tidak mengambil argumen, tetapi tanda kurung kosong diperlukan. 

DI ATAS   
Jendela klausa untuk fungsi RANK.

PARTISI OLEH *expr\$1list*   
Tidak wajib. Satu atau lebih ekspresi yang menentukan jendela. 

PESANAN BERDASARKAN *order\$1list*   
Tidak wajib. Mendefinisikan kolom yang menjadi dasar nilai peringkat. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel. Jika ORDER BY dihilangkan, nilai kembalinya adalah 1 untuk semua baris.   
Jika ORDER BY tidak menghasilkan urutan unik, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="c_Supported_data_types_wf_rank"></a>

INTEGER

## Contoh
<a name="r_WF_RANK-examples"></a>

Contoh berikut memesan tabel berdasarkan kuantitas yang dijual (naik default), dan menetapkan peringkat untuk setiap baris. Nilai peringkat 1 adalah nilai peringkat tertinggi. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan: 

```
select salesid, qty,
rank() over (order by qty) as rnk
from winsales
order by 2,1;

salesid | qty | rnk
--------+-----+-----
10001 |  10 |  1
10006 |  10 |  1
30001 |  10 |  1
40005 |  10 |  1
30003 |  15 |  5
20001 |  20 |  6
20002 |  20 |  6
30004 |  20 |  6
10005 |  30 |  9
30007 |  30 |  9
40001 |  40 |  11
(11 rows)
```

Perhatikan bahwa klausa ORDER BY luar dalam contoh ini menyertakan kolom 2 dan 1 untuk memastikan bahwa Amazon Redshift mengembalikan hasil yang diurutkan secara konsisten setiap kali kueri ini dijalankan. Misalnya, baris dengan penjualan IDs 10001 dan 10006 memiliki nilai QTY dan RNK yang identik. Memesan hasil akhir yang ditetapkan oleh kolom 1 memastikan bahwa baris 10001 selalu jatuh sebelum 10006. Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

Dalam contoh berikut, urutan dibalik untuk fungsi window (`order by qty desc`). Sekarang nilai peringkat tertinggi berlaku untuk nilai QTY terbesar. 

```
select salesid, qty,
rank() over (order by qty desc) as rank
from winsales
order by 2,1;

 salesid | qty | rank
---------+-----+-----
   10001 |  10 |   8
   10006 |  10 |   8
   30001 |  10 |   8
   40005 |  10 |   8
   30003 |  15 |   7
   20001 |  20 |   4
   20002 |  20 |   4
   30004 |  20 |   4
   10005 |  30 |   2
   30007 |  30 |   2
   40001 |  40 |   1
(11 rows)
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut mempartisi tabel oleh SELLERID dan mengurutkan setiap partisi dengan kuantitas (dalam urutan menurun) dan menetapkan peringkat untuk setiap baris. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan. 

```
select salesid, sellerid, qty, rank() over
(partition by sellerid
order by qty desc) as rank
from winsales
order by 2,3,1;

salesid | sellerid | qty | rank
--------+----------+-----+-----
  10001 |        1 |  10 |  2
  10006 |        1 |  10 |  2
  10005 |        1 |  30 |  1
  20001 |        2 |  20 |  1
  20002 |        2 |  20 |  1
  30001 |        3 |  10 |  4
  30003 |        3 |  15 |  3
  30004 |        3 |  20 |  2
  30007 |        3 |  30 |  1
  40005 |        4 |  10 |  2
  40001 |        4 |  40 |  1
(11 rows)
```

# Fungsi jendela RATIO\$1TO\$1REPORT
<a name="r_WF_RATIO_TO_REPORT"></a>

Menghitung rasio nilai dengan jumlah nilai di jendela atau partisi. Rasio terhadap nilai laporan ditentukan dengan menggunakan rumus:

`value of `**ratio\$1expression ratio\$1expression `argument for the current row / sum of`** `argument for the window or partition`

Dataset berikut menggambarkan penggunaan rumus ini:

```
Row#	Value	Calculation	RATIO_TO_REPORT
1	2500	(2500)/(13900)	0.1798
2	2600	(2600)/(13900)	0.1870
3	2800	(2800)/(13900)	0.2014
4	2900	(2900)/(13900)	0.2086
5	3100	(3100)/(13900)	0.2230
```

Rentang nilai pengembalian adalah 0 hingga 1, inklusif. Jika *ratio\$1expression* adalah NULL, maka nilai kembaliannya adalah. `NULL` Jika nilai dalam *partition\$1expression* unik, maka fungsi akan kembali `1` untuk nilai itu.

## Sintaksis
<a name="r_WF_RATIO_TO_REPORT-synopsis"></a>

```
RATIO_TO_REPORT ( ratio_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## Argumen
<a name="r_WF_RATIO_TO_REPORT-arguments"></a>

*ratio\$1expression*   
Ekspresi, seperti nama kolom, yang memberikan nilai untuk menentukan rasio. Ekspresi harus memiliki tipe data numerik atau secara implisit dapat dikonversi menjadi satu.  
Anda tidak dapat menggunakan fungsi analitik lainnya di *ratio\$1expression*.

DI ATAS  
Sebuah klausa yang menentukan partisi jendela. Klausa OVER tidak dapat berisi urutan jendela atau spesifikasi bingkai jendela.

PARTISI OLEH *partition\$1expression*   
Tidak wajib. Ekspresi yang menetapkan rentang catatan untuk setiap grup dalam klausa OVER.

## Jenis pengembalian
<a name="r_WF_RATIO_TO_REPORT-return-type"></a>

FLOAT8

## Contoh
<a name="r_WF_RATIO_TO_REPORT-examples"></a>

Contoh berikut menggunakan tabel WINSALES. Untuk informasi tentang cara membuat tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

Contoh berikut menghitung ratio-to-report nilai setiap baris kuantitas penjual dengan total jumlah semua penjual.

```
select sellerid, qty, ratio_to_report(qty) 
over()
from winsales
order by sellerid;

sellerid  qty    ratio_to_report
--------------------------------------
1         30     0.13953488372093023	
1         10     0.046511627906976744	
1         10     0.046511627906976744	
2         20     0.09302325581395349	
2         20     0.09302325581395349	
3         30     0.13953488372093023	
3         20     0.09302325581395349	
3         15     0.06976744186046512	
3         10     0.046511627906976744	
4         10     0.046511627906976744	
4         40     0.18604651162790697
```

Contoh berikut menghitung rasio jumlah penjualan untuk setiap penjual dengan partisi.

```
select sellerid, qty, ratio_to_report(qty) 
over(partition by sellerid) 
from winsales;

sellerid   qty    ratio_to_report
-------------------------------------------
2          20     0.5	
2          20     0.5	
4          40     0.8	
4          10     0.2	
1          10     0.2	
1          30     0.6	
1          10     0.2	
3          10     0.13333333333333333	
3          15     0.2	
3          20     0.26666666666666666	
3          30     0.4
```

# Fungsi jendela ROW\$1NUMBER
<a name="r_WF_ROW_NUMBER"></a>

Menetapkan nomor urut dari baris saat ini dalam sekelompok baris, dihitung dari 1, berdasarkan ekspresi ORDER BY dalam klausa OVER. Jika klausa PARTITION BY opsional ada, nomor urut diatur ulang untuk setiap kelompok baris. Baris dengan nilai yang sama untuk ekspresi ORDER BY menerima nomor baris yang berbeda secara nondeterministik. 

## Sintaksis
<a name="r_WF_ROW_NUMBER-synopsis"></a>

```
ROW_NUMBER() OVER(
  [ PARTITION BY expr_list ]
  [ ORDER BY order_list ]
)
```

## Argumen
<a name="r_WF_ROW_NUMBER-arguments"></a>

( )   
Fungsi ini tidak mengambil argumen, tetapi tanda kurung kosong diperlukan. 

DI ATAS   
Klausul fungsi jendela untuk fungsi ROW\$1NUMBER. 

PARTISI OLEH *expr\$1list*   
Tidak wajib. Satu atau lebih ekspresi kolom yang membagi hasil menjadi set baris. 

PESANAN BERDASARKAN *order\$1list*   
Tidak wajib. Satu atau lebih ekspresi kolom yang mendefinisikan urutan baris dalam satu set. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.   
Jika ORDER BY tidak menghasilkan urutan unik atau dihilangkan, urutan baris adalah nondeterministik. Untuk informasi selengkapnya, lihat [Urutan data yang unik untuk fungsi jendela](c_Window_functions.md#r_Examples_order_by_WF). 

## Jenis pengembalian
<a name="c_Supported_data_types_r_WF_ROW_NUMBER"></a>

BIGINT

## Contoh
<a name="r_WF_ROW_NUMBER-examples"></a>

Contoh berikut menggunakan `WINSALES` tabel. Untuk deskripsi `WINSALES` tabel, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut mengurutkan tabel dengan QTY (dalam urutan menaik), lalu menetapkan nomor baris untuk setiap baris. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan. 

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
   ORDER BY qty ASC) AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10006 |        1 |  10 |   3
   40005 |        4 |  10 |   4
   30003 |        3 |  15 |   5
   20001 |        2 |  20 |   6
   20002 |        2 |  20 |   7
   30004 |        3 |  20 |   8
   10005 |        1 |  30 |   9
   30007 |        3 |  30 |  10
   40001 |        4 |  40 |  11
```

Contoh berikut mempartisi tabel oleh SELLERID dan memerintahkan setiap partisi dengan QTY (dalam urutan menaik), kemudian menetapkan nomor baris untuk setiap baris. Hasilnya diurutkan setelah hasil fungsi jendela diterapkan. 

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
  PARTITION BY sellerid
  ORDER BY qty ASC) AS row_by_seller
FROM winsales
ORDER BY 2,4;

 salesid | sellerid | qty | row_by_seller
---------+----------+-----+-----
   10001 |        1 |  10 |   1
   10006 |        1 |  10 |   2
   10005 |        1 |  30 |   3
   20001 |        2 |  20 |   1
   20002 |        2 |  20 |   2
   30001 |        3 |  10 |   1
   30003 |        3 |  15 |   2
   30004 |        3 |  20 |   3
   30007 |        3 |  30 |   4
   40005 |        4 |  10 |   1
   40001 |        4 |  40 |   2
```

Contoh berikut menunjukkan hasil ketika tidak menggunakan klausa opsional. 

```
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER() AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10005 |        1 |  30 |   3
   40001 |        4 |  40 |   4
   10006 |        1 |  10 |   5
   20001 |        2 |  20 |   6
   40005 |        4 |  10 |   7
   20002 |        2 |  20 |   8
   30003 |        3 |  15 |   9
   30004 |        3 |  20 |  10
   30007 |        3 |  30 |  11
```

# Fungsi jendela STDDEV\$1SAMP dan STDDEV\$1POP
<a name="r_WF_STDDEV"></a>

Fungsi jendela STDDEV\$1SAMP dan STDDEV\$1POP mengembalikan sampel dan standar deviasi populasi dari satu set nilai numerik (integer, desimal, atau floating-point). Lihat juga [Fungsi STDDEV\$1SAMP dan STDDEV\$1POP](r_STDDEV_functions.md).

STDDEV\$1SAMP dan STDDEV adalah sinonim untuk fungsi yang sama.

## Sintaksis
<a name="r_WF_STDDEV-synopsis"></a>

```
STDDEV_SAMP | STDDEV | STDDEV_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Argumen
<a name="r_WF_STDDEV-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi dalam hal satu atau lebih ekspresi. 

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="c_Supported_data_types_wf_stddev"></a>

Jenis argumen yang didukung oleh fungsi STDDEV adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, dan DOUBLE PRECISION.

Terlepas dari tipe data ekspresi, tipe pengembalian fungsi STDDEV adalah nomor presisi ganda.

## Contoh
<a name="r_wf_stddev-examples"></a>

Contoh berikut menunjukkan bagaimana menggunakan fungsi STDDEV\$1POP dan VAR\$1POP sebagai fungsi jendela. Kueri menghitung varians populasi dan deviasi standar populasi untuk nilai PRICEPAID dalam tabel PENJUALAN. 

```
select salesid, dateid, pricepaid,
round(stddev_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as stddevpop,
round(var_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as varpop
from sales
order by 2,1;

salesid | dateid | pricepaid | stddevpop | varpop
--------+--------+-----------+-----------+---------
  33095 |   1827 |    234.00 |         0 |       0
  65082 |   1827 |    472.00 |       119 |   14161
  88268 |   1827 |    836.00 |       248 |   61283
  97197 |   1827 |    708.00 |       230 |   53019
 110328 |   1827 |    347.00 |       223 |   49845
 110917 |   1827 |    337.00 |       215 |   46159
 150314 |   1827 |    688.00 |       211 |   44414
 157751 |   1827 |   1730.00 |       447 |  199679
 165890 |   1827 |   4192.00 |      1185 | 1403323
...
```

Fungsi standar deviasi dan varians sampel dapat digunakan dengan cara yang sama. 

# Fungsi jendela SUM
<a name="r_WF_SUM"></a>

 Fungsi jendela SUM mengembalikan jumlah kolom input atau nilai ekspresi. Fungsi SUM bekerja dengan nilai numerik dan mengabaikan nilai NULL.

## Sintaksis
<a name="r_WF_SUM-synopsis"></a>

```
SUM ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Argumen
<a name="r_WF_SUM-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi SUM dalam hal satu atau lebih ekspresi.

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="c_Supported_data_types_wf_sum"></a>

Tipe argumen yang didukung oleh fungsi SUM adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, dan DOUBLE PRECISION.

Jenis pengembalian yang didukung oleh fungsi SUM adalah: 
+ BIGINT untuk argumen SMALLINT atau INTEGER
+ NUMERIK untuk argumen BIGINT
+ PRESISI GANDA untuk argumen floating-point

## Contoh
<a name="r_WF_SUM-examples"></a>

Contoh berikut membuat jumlah kumulatif (bergulir) jumlah penjualan yang diurutkan berdasarkan tanggal dan ID penjualan: 

```
select salesid, dateid, sellerid, qty,
sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  20
10005 | 2003-12-24 |        1 |  30 |  50
40001 | 2004-01-09 |        4 |  40 |  90
10006 | 2004-01-18 |        1 |  10 | 100
20001 | 2004-02-12 |        2 |  20 | 120
40005 | 2004-02-12 |        4 |  10 | 130
20002 | 2004-02-16 |        2 |  20 | 150
30003 | 2004-04-18 |        3 |  15 | 165
30004 | 2004-04-18 |        3 |  20 | 185
30007 | 2004-09-07 |        3 |  30 | 215
(11 rows)
```

 Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example).

Contoh berikut membuat jumlah kumulatif (bergulir) jumlah penjualan berdasarkan tanggal, mempartisi hasil dengan ID penjual, dan memesan hasil berdasarkan tanggal dan ID penjualan dalam partisi: 

```
select salesid, dateid, sellerid, qty,
sum(qty) over (partition by sellerid
order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  40
40001 | 2004-01-09 |        4 |  40 |  40
10006 | 2004-01-18 |        1 |  10 |  50
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  50
20002 | 2004-02-16 |        2 |  20 |  40
30003 | 2004-04-18 |        3 |  15 |  25
30004 | 2004-04-18 |        3 |  20 |  45
30007 | 2004-09-07 |        3 |  30 |  75
(11 rows)
```

Contoh berikut memberi nomor semua baris secara berurutan dalam kumpulan hasil, diurutkan oleh kolom SELLERID dan SALESID: 

```
select salesid, sellerid, qty,
sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid |  qty | rownum
--------+----------+------+--------
10001 |        1 |   10 |     1
10005 |        1 |   30 |     2
10006 |        1 |   10 |     3
20001 |        2 |   20 |     4
20002 |        2 |   20 |     5
30001 |        3 |   10 |     6
30003 |        3 |   15 |     7
30004 |        3 |   20 |     8
30007 |        3 |   30 |     9
40001 |        4 |   40 |    10
40005 |        4 |   10 |    11
(11 rows)
```

Untuk deskripsi tabel WINSALES, lihat[Contoh tabel untuk contoh fungsi jendela](c_Window_functions.md#r_Window_function_example). 

Contoh berikut memberi nomor semua baris secara berurutan dalam kumpulan hasil, partisi hasil dengan SELLERID, dan urutkan hasilnya berdasarkan SELLERID dan SALESID dalam partisi: 

```
select salesid, sellerid, qty,
sum(1) over (partition by sellerid
order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid | qty | rownum
---------+----------+-----+--------
10001 |        1 |  10 |      1
10005 |        1 |  30 |      2
10006 |        1 |  10 |      3
20001 |        2 |  20 |      1
20002 |        2 |  20 |      2
30001 |        3 |  10 |      1
30003 |        3 |  15 |      2
30004 |        3 |  20 |      3
30007 |        3 |  30 |      4
40001 |        4 |  40 |      1
40005 |        4 |  10 |      2
(11 rows)
```

# Fungsi jendela VAR\$1SAMP dan VAR\$1POP
<a name="r_WF_VARIANCE"></a>

 Fungsi jendela VAR\$1SAMP dan VAR\$1POP mengembalikan sampel dan varians populasi dari sekumpulan nilai numerik (integer, desimal, atau floating-point). Lihat juga [Fungsi VAR\$1SAMP dan VAR\$1POP](r_VARIANCE_functions.md).

VAR\$1SAMP dan VARIANCE adalah sinonim untuk fungsi yang sama. 

## Sintaksis
<a name="r_WF_VARIANCE-synopsis"></a>

```
VAR_SAMP | VARIANCE | VAR_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Argumen
<a name="r_WF_VARIANCE-arguments"></a>

 *ekspresi*   
Kolom target atau ekspresi tempat fungsi beroperasi. 

SEMUA   
Dengan argumen ALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALL adalah default. DISTINCT tidak didukung.

DI ATAS   
Menentukan klausa jendela untuk fungsi agregasi. Klausa OVER membedakan fungsi agregasi jendela dari fungsi agregasi set normal.

PARTISI OLEH *expr\$1list*   
Mendefinisikan jendela untuk fungsi dalam hal satu atau lebih ekspresi. 

PESANAN BERDASARKAN *order\$1list*   
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.

 *frame\$1clause*   
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari kata kunci ROWS dan penentu terkait. Lihat [Ringkasan sintaks fungsi jendela](c_Window_functions.md#r_Window_function_synopsis).

## Jenis Data
<a name="c_Supported_data_types_wf_variance"></a>

Jenis argumen yang didukung oleh fungsi VARIANCE adalah SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, dan DOUBLE PRECISION.

Terlepas dari tipe data ekspresi, tipe pengembalian fungsi VARIANCE adalah angka presisi ganda.

# Fungsi administrasi sistem
<a name="r_System_administration_functions"></a>

**Topics**
+ [CHANGE\$1QUERY\$1PRIORITY](r_CHANGE_QUERY_PRIORITY.md)
+ [CHANGE\$1SESSION\$1PRIORITY](r_CHANGE_SESSION_PRIORITY.md)
+ [CHANGE\$1USER\$1PRIORITY](r_CHANGE_USER_PRIORITY.md)
+ [CURRENT\$1SETTING](r_CURRENT_SETTING.md)
+ [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md)
+ [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md)
+ [REBOOT\$1CLUSTER](r_REBOOT_CLUSTER.md)
+ [SET\$1CONFIG](r_SET_CONFIG.md)

Amazon Redshift mendukung beberapa fungsi administrasi sistem.

# CHANGE\$1QUERY\$1PRIORITY
<a name="r_CHANGE_QUERY_PRIORITY"></a>

CHANGE\$1QUERY\$1PRIORITY memungkinkan pengguna super untuk memodifikasi prioritas kueri yang sedang berjalan atau menunggu dalam manajemen beban kerja (WLM).

Fungsi ini memungkinkan pengguna super untuk segera mengubah prioritas kueri apa pun dalam sistem. Hanya satu kueri, pengguna, atau sesi yang dapat dijalankan dengan prioritas`CRITICAL`.

## Sintaksis
<a name="r_CHANGE_QUERY_PRIORITY-synopsis"></a>

```
CHANGE_QUERY_PRIORITY(query_id, priority)
```

## Argumen
<a name="r_CHANGE_QUERY_PRIORITY-argument"></a>

 *query\$1id*   
Query identifier dari query yang prioritasnya diubah. Membutuhkan `INTEGER` nilai.

 *prioritas*   
Prioritas baru yang akan ditugaskan ke kueri. Argumen ini harus berupa string dengan nilai`CRITICAL`,`HIGHEST`,`HIGH`,`NORMAL`,`LOW`, atau`LOWEST`. 

## Tipe Pengembalian
<a name="r_CHANGE_QUERY_PRIORITY-return-type"></a>

Tidak ada

## Contoh
<a name="r_CHANGE_QUERY_PRIORITY-example"></a>

Untuk menampilkan kolom `query_priority` dalam tabel sistem STV\$1WLM\$1QUERY\$1STATE, gunakan contoh berikut.

```
SELECT query, service_class, query_priority, state 
FROM stv_wlm_query_state WHERE service_class = 101;

+-------+---------------+----------------+---------+
| query | service_class | query_priority |  state  |
+-------+---------------+----------------+---------+
|  1076 |           101 | Lowest         | Running |
|  1075 |           101 | Lowest         | Running |
+-------+---------------+----------------+---------+
```

Untuk menampilkan hasil superuser yang menjalankan fungsi `change_query_priority` untuk mengubah prioritas`CRITICAL`, gunakan contoh berikut.

```
SELECT CHANGE_QUERY_PRIORITY(1076, 'Critical');
            
+-------------------------------------------------------------------------------+
|                             change_query_priority                             |
+-------------------------------------------------------------------------------+
| Succeeded to change query priority. Priority changed from Lowest to Critical. |
+-------------------------------------------------------------------------------+
```

# CHANGE\$1SESSION\$1PRIORITY
<a name="r_CHANGE_SESSION_PRIORITY"></a>

CHANGE\$1SESSION\$1PRIORITY memungkinkan pengguna super untuk segera mengubah prioritas sesi apa pun dalam sistem. Hanya satu sesi, pengguna, atau kueri yang dapat dijalankan dengan prioritas`CRITICAL`.

## Sintaksis
<a name="r_CHANGE_SESSION_PRIORITY-synopsis"></a>

```
CHANGE_SESSION_PRIORITY(pid, priority)
```

## Argumen
<a name="r_CHANGE_SESSION_PRIORITY-argument"></a>

 *pid*   
Pengidentifikasi proses sesi yang prioritasnya diubah. Nilai `-1` mengacu pada sesi saat ini. Membutuhkan `INTEGER` nilai.

 *prioritas*   
Prioritas baru yang akan ditugaskan ke sesi. Argumen ini harus berupa string dengan nilai`CRITICAL`,`HIGHEST`,`HIGH`,`NORMAL`,`LOW`, atau`LOWEST`. 

## Jenis pengembalian
<a name="r_CHANGE_SESSION_PRIORITY-return-type"></a>

Tidak ada

## Contoh
<a name="r_CHANGE_SESSION_PRIORITY-example"></a>

Untuk mengembalikan pengidentifikasi proses proses server yang menangani sesi saat ini, gunakan contoh berikut.

```
SELECT pg_backend_pid();
               
+----------------+
| pg_backend_pid |
+----------------+
|          30311 |
+----------------+
```

Dalam contoh ini, prioritas diubah menjadi `LOWEST` untuk sesi saat ini.

```
SELECT CHANGE_SESSION_PRIORITY(30311, 'Lowest');
               
+---------------------------------------------------------------------------------------+
|                                change_session_priority                                |
+---------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority to lowest. |
+---------------------------------------------------------------------------------------+
```

Dalam contoh ini, prioritas diubah menjadi `HIGH` untuk sesi saat ini.

```
SELECT CHANGE_SESSION_PRIORITY(-1, 'High');

+-------------------------------------------------------------------------------------------------+
|                                     change_session_priority                                     |
+-------------------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority from lowest to high. |
+-------------------------------------------------------------------------------------------------+
```

Untuk membuat prosedur tersimpan yang mengubah prioritas sesi, gunakan contoh berikut. Izin untuk menjalankan prosedur tersimpan ini diberikan kepada pengguna database`test_user`.

```
CREATE OR REPLACE PROCEDURE sp_priority_low(pid IN int, result OUT varchar)
AS $$
BEGIN
  SELECT CHANGE_SESSION_PRIORITY(pid, 'low') into result;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
GRANT EXECUTE ON PROCEDURE sp_priority_low(int) TO test_user;
```

Kemudian pengguna database bernama `test_user` memanggil prosedur.

```
CALL sp_priority_low(pg_backend_pid()); 

+------------------------------------------------------+
|                        result                        |
+------------------------------------------------------+
| Success. Change session (pid:13155) priority to low. |
+------------------------------------------------------+
```

# CHANGE\$1USER\$1PRIORITY
<a name="r_CHANGE_USER_PRIORITY"></a>

CHANGE\$1USER\$1PRIORITY memungkinkan pengguna super untuk memodifikasi prioritas semua kueri yang dikeluarkan oleh pengguna yang sedang berjalan atau menunggu dalam manajemen beban kerja (WLM). Hanya satu pengguna, sesi, atau kueri yang dapat dijalankan dengan prioritas`CRITICAL`.

## Sintaksis
<a name="r_CHANGE_USER_PRIORITY-synopsis"></a>

```
CHANGE_USER_PRIORITY(user_name, priority)
```

## Argumen
<a name="r_CHANGE_USER_PRIORITY-argument"></a>

 *user\$1name*   
Nama pengguna database yang prioritas kuerinya diubah. 

 *prioritas*   
Prioritas baru yang akan ditetapkan untuk semua pertanyaan yang dikeluarkan oleh`user_name`. Argumen ini harus berupa string dengan nilai`CRITICAL`,`HIGHEST`, `HIGH``NORMAL`,`LOW`,`LOWEST`, atau`RESET`. Hanya pengguna super yang dapat mengubah prioritas menjadi`CRITICAL`. Mengubah prioritas untuk `RESET` menghapus pengaturan prioritas untuk`user_name`.

## Jenis pengembalian
<a name="r_CHANGE_USER_PRIORITY-return-type"></a>

Tidak ada

## Contoh
<a name="r_CHANGE_USER_PRIORITY-example"></a>

Untuk mengubah prioritas pengguna `analysis_user``LOWEST`, gunakan contoh berikut.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'lowest');

+-------------------------------------------------------------------------------------+
|                                change_user_priority                                 |
+-------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority to lowest. |
+-------------------------------------------------------------------------------------+
```

Untuk mengubah prioritas`LOW`, gunakan contoh berikut.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'low');

+----------------------------------------------------------------------------------------------+
|                                     change_user_priority                                     |
+----------------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority from Lowest to low. |
+----------------------------------------------------------------------------------------------+
```

Untuk mengatur ulang prioritas, gunakan contoh berikut.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'reset');

+-------------------------------------------------------+
|                 change_user_priority                  |
+-------------------------------------------------------+
| Succeeded to reset priority for user (analysis_user). |
+-------------------------------------------------------+
```

# CURRENT\$1SETTING
<a name="r_CURRENT_SETTING"></a>

 CURRENT\$1SETTING mengembalikan nilai saat ini dari parameter konfigurasi yang ditentukan.

Fungsi ini setara dengan [MEMPERLIHATKAN](r_SHOW.md) perintah.

## Sintaksis
<a name="r_CURRENT_SETTING-synopsis"></a>

```
current_setting('parameter')
```

Pernyataan berikut mengembalikan nilai saat ini dari variabel konteks sesi tertentu.

```
current_setting('variable_name')
current_setting('variable_name'[, error_if_undefined])
```

## Pendapat
<a name="r_CURRENT_SETTING-argument"></a>

 *parameter*   
Nilai parameter untuk ditampilkan. Untuk daftar parameter konfigurasi, lihat [Referensi konfigurasi](cm_chap_ConfigurationRef.md)

 *variable\$1name*   
Nama variabel yang akan ditampilkan. Ini harus berupa konstanta string untuk variabel konteks sesi.

 *error\$1if\$1undefined*   
(Opsional) Nilai boolean yang menentukan perilaku jika nama variabel tidak ada. Saat error\$1if\$1undefined disetel ke`TRUE`, yang merupakan default, Amazon Redshift memunculkan kesalahan. Saat error\$1if\$1undefined disetel ke, Amazon Redshift kembali. `FALSE` `NULL` Amazon Redshift mendukung parameter *error\$1if\$1undefined* hanya untuk variabel konteks sesi. Ini tidak dapat digunakan ketika input adalah parameter konfigurasi.

## Jenis pengembalian
<a name="r_CURRENT_SETTING-return-type"></a>

Mengembalikan `CHAR` atau `VARCHAR` string.

## Contoh
<a name="r_CURRENT_SETTING-example"></a>

Untuk mengembalikan pengaturan saat ini untuk `query_group` parameter, gunakan contoh berikut.

```
SELECT CURRENT_SETTING('query_group');

+-----------------+
| current_setting |
+-----------------+
| unset           |
+-----------------+
```

Untuk mengembalikan pengaturan saat ini untuk variabel`app_context.user_id`, gunakan contoh berikut.

```
SELECT CURRENT_SETTING('app_context.user_id', FALSE);
```

# PG\$1CANCEL\$1BACKEND
<a name="PG_CANCEL_BACKEND"></a>

Membatalkan kueri. PG\$1CANCEL\$1BACKEND secara fungsional setara dengan perintah. [CANCEL (BATALKAN)](r_CANCEL.md) Anda dapat membatalkan kueri yang saat ini dijalankan oleh pengguna Anda. Superusers dapat membatalkan kueri apa pun.

## Sintaksis
<a name="PG_CANCEL_BACKEND-synopsis"></a>

```
pg_cancel_backend( pid )
```

## Argumen
<a name="PG_CANCEL_BACKEND-arguments"></a>

 *pid*   
ID proses (PID) dari kueri yang akan dibatalkan. Anda tidak dapat membatalkan kueri dengan menentukan ID kueri; Anda harus menentukan ID proses kueri. Membutuhkan `INTEGER` nilai.

## Jenis pengembalian
<a name="PG_CANCEL_BACKEND-return-type"></a>

Tidak ada

## Catatan penggunaan
<a name="PG_CANCEL_BACKEND-usage-notes"></a>

Jika kueri dalam beberapa sesi menahan kunci pada tabel yang sama, Anda dapat menggunakan [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) fungsi untuk mengakhiri salah satu sesi, yang memaksa setiap transaksi yang sedang berjalan di sesi yang dihentikan untuk melepaskan semua kunci dan memutar kembali transaksi. Kueri tabel katalog PG\$1\$1LOCKS untuk melihat kunci yang saat ini dipegang. Jika Anda tidak dapat membatalkan kueri karena berada di blok transaksi (BEGIN... END), Anda dapat mengakhiri sesi di mana kueri berjalan dengan menggunakan fungsi PG\$1TERMINATE\$1BACKEND. 

## Contoh
<a name="PG_CANCEL_BACKEND-example"></a>

Untuk membatalkan kueri yang sedang berjalan, pertama-tama ambil ID proses untuk kueri yang ingin Anda batalkan. Untuk menentukan proses IDs untuk semua query yang sedang berjalan, jalankan perintah berikut. 

```
SELECT pid, TRIM(starttime) AS start, 
duration, TRIM(user_name) AS user,
SUBSTRING(query,1,40) AS querytxt
FROM stv_recents
WHERE status = 'Running';

+-----+------------------------+----------+--------+-----------------------------+
| pid |       starttime        | duration |  user  |          querytxt           |
+-----+------------------------+----------+--------+-----------------------------+
| 802 | 2013-10-14 09:19:03.55 |      132 | dwuser | select venuename from venue |
| 834 | 2013-10-14 08:33:49.47 |  1250414 | dwuser | select * from listing;      |
| 964 | 2013-10-14 08:30:43.29 |   326179 | dwuser | select sellerid from sales  |
+-----+------------------------+----------+--------+-----------------------------+
```

Untuk membatalkan kueri dengan ID proses 802, gunakan contoh berikut.

```
SELECT PG_CANCEL_BACKEND(802);
```

# PG\$1TERMINATE\$1BACKEND
<a name="PG_TERMINATE_BACKEND"></a>

Mengakhiri sesi. Anda dapat mengakhiri sesi yang dimiliki oleh pengguna Anda. Superuser dapat mengakhiri sesi apa pun.

## Sintaksis
<a name="PG_TERMINATE_BACKEND-synopsis"></a>

```
pg_terminate_backend( pid )
```

## Argumen
<a name="PG_TERMINATE_BACKEND-arguments"></a>

*pid*  
ID proses sesi yang akan dihentikan. Membutuhkan `INTEGER` nilai.

## Jenis pengembalian
<a name="PG_TERMINATE_BACKEND-return-type"></a>

Tidak ada

## Catatan penggunaan
<a name="PG_TERMINATE_BACKEND-usage-notes"></a>

 Jika Anda hampir mencapai batas untuk koneksi bersamaan, gunakan PG\$1TERMINATE\$1BACKEND untuk menghentikan sesi idle dan membebaskan koneksi. Untuk informasi selengkapnya, lihat [Batas di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html). 

Jika kueri dalam beberapa sesi menahan kunci pada tabel yang sama, Anda dapat menggunakan PG\$1TERMINATE\$1BACKEND untuk menghentikan salah satu sesi, yang memaksa setiap transaksi yang sedang berjalan di sesi yang dihentikan untuk melepaskan semua kunci dan memutar kembali transaksi. Kueri tabel katalog PG\$1LOCKS untuk melihat kunci yang saat ini dipegang. 

Jika kueri tidak berada dalam blok transaksi (BEGIN... END), Anda dapat membatalkan kueri dengan menggunakan [CANCEL (BATALKAN)](r_CANCEL.md) perintah atau [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md) fungsi. 

## Contoh
<a name="PG_TERMINATE_BACKEND-example"></a>

Untuk menanyakan tabel SVV\$1TRANSACTIONS untuk melihat semua kunci yang berlaku untuk transaksi saat ini, gunakan contoh berikut.

```
SELECT * FROM svv_transactions;

+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| txn_owner | txn_db |  xid  | pid  |      txn_start      |    lock_mode    | lockable_object_type | relation | granted |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    51940 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    52000 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |   108623 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | ExclusiveLock   | transactionid        |          | true    |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
```

Untuk mengakhiri sesi memegang kunci, gunakan contoh berikut.

```
SELECT PG_TERMINATE_BACKEND(8585); 
```

# REBOOT\$1CLUSTER
<a name="r_REBOOT_CLUSTER"></a>

Reboot cluster Amazon Redshift tanpa menutup koneksi ke cluster. Anda harus menjadi superuser database untuk menjalankan perintah ini.

Setelah soft reboot ini selesai, cluster Amazon Redshift mengembalikan kesalahan ke aplikasi pengguna dan mengharuskan aplikasi pengguna untuk mengirim ulang transaksi atau kueri apa pun yang terganggu oleh soft reboot.

## Sintaksis
<a name="r_REBOOT_CLUSTER-synopsis"></a>

```
SELECT REBOOT_CLUSTER();
```

# SET\$1CONFIG
<a name="r_SET_CONFIG"></a>

Menetapkan parameter konfigurasi ke pengaturan baru.

 Fungsi ini setara dengan perintah SET di SQL.

## Sintaksis
<a name="r_SET_CONFIG-synopsis"></a>

```
SET_CONFIG('parameter', 'new_value' , is_local)
```

Pernyataan berikut menetapkan variabel konteks sesi ke pengaturan baru.

```
set_config('variable_name', 'new_value' , is_local)
```

## Pendapat
<a name="r_SET_CONFIG-parameters"></a>

 *parameter*   
Parameter untuk diatur.

 *variable\$1name*   
Nama variabel yang akan ditetapkan.

 *new\$1value*   
Nilai baru dari parameter.

 *is\$1lokal*   
Jika benar, nilai parameter hanya berlaku untuk transaksi saat ini. Nilai yang valid adalah `true` atau `1` dan `false` atau`0`. 

## Jenis pengembalian
<a name="r_SET_CONFIG-return-type"></a>

Mengembalikan `CHAR` atau `VARCHAR` string.

## Contoh
<a name="r_SET_CONFIG-examples"></a>

Untuk mengatur nilai `query_group` parameter hanya `test` untuk transaksi saat ini, gunakan contoh berikut. 

```
SELECT SET_CONFIG('query_group', 'test', true);

+------------+
| set_config |
+------------+
| test       |
+------------+
```

Untuk mengatur variabel konteks sesi, gunakan contoh berikut. 

```
SELECT SET_CONFIG(‘app.username’, ‘cuddy’, FALSE);
```

# Fungsi informasi sistem
<a name="r_System_information_functions"></a>

Amazon Redshift mendukung berbagai fungsi informasi sistem.

**Topics**
+ [SAAT INI\$1 AWS\$1ACCOUNT](r_CURRENT_AWS_ACCOUNT.md)
+ [CURRENT\$1DATABASE](r_CURRENT_DATABASE.md)
+ [CURRENT\$1NAMESPACE](r_CURRENT_NAMESPACE.md)
+ [CURRENT\$1SCHEMA](r_CURRENT_SCHEMA.md)
+ [SKEMA SAAT INI](r_CURRENT_SCHEMAS.md)
+ [CURRENT\$1SESSION\$1ARN](r_CURRENT_SESSION_ARN.md)
+ [CURRENT\$1USER](r_CURRENT_USER.md)
+ [CURRENT\$1USER\$1ID](r_CURRENT_USER_ID.md)
+ [DEFAULT\$1IAM\$1ROLE](r_DEFAULT_IAM_ROLE.md)
+ [GET\$1MOUNTED\$1ROLE](GET_MOUNTED_ROLE.md)
+ [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)
+ [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md)
+ [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md)
+ [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md)
+ [LAST\$1USER\$1QUERY\$1ID](LAST_USER_QUERY_ID.md)
+ [PG\$1BACKEND\$1PID](PG_BACKEND_PID.md)
+ [PG\$1GET\$1COLS](PG_GET_COLS.md)
+ [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md)
+ [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md)
+ [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md)
+ [PG\$1GET\$1SESSION\$1ROLES](PG_GET_SESSION_ROLES.md)
+ [PG\$1LAST\$1COPY\$1COUNT](PG_LAST_COPY_COUNT.md)
+ [PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1ID](PG_LAST_UNLOAD_ID.md)
+ [PG\$1LAST\$1QUERY\$1ID](PG_LAST_QUERY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1COUNT](PG_LAST_UNLOAD_COUNT.md)
+ [Fungsi SLICE\$1NUM](r_SLICE_NUM.md)
+ [USER](r_USER.md)
+ [ROLE\$1IS\$1MEMBER\$1OF](r_ROLE_IS_MEMBER_OF.md)
+ [USER\$1IS\$1MEMBER\$1OF](r_USER_IS_MEMBER_OF.md)
+ [VERSI](r_VERSION.md)

# SAAT INI\$1 AWS\$1ACCOUNT
<a name="r_CURRENT_AWS_ACCOUNT"></a>

Mengembalikan AWS akun yang terkait dengan cluster Amazon Redshift yang mengirimkan kueri.

## Sintaksis
<a name="r_CURRENT_AWS_ACCOUNT-synopsis"></a>

```
current_aws_account
```

## Jenis pengembalian
<a name="r_CURRENT_AWS_ACCOUNT-return-type"></a>

Mengembalikan bilangan bulat. 

## Contoh
<a name="r_CURRENT_AWS_ACCOUNT-example"></a>

Query berikut mengembalikan nama database saat ini. 

```
select user, current_aws_account; 
current_user | current_account
-------------+--------------- 
dwuser       | 987654321

(1 row)
```

# CURRENT\$1DATABASE
<a name="r_CURRENT_DATABASE"></a>

Mengembalikan nama database tempat Anda saat ini terhubung. 

## Sintaksis
<a name="r_CURRENT_DATABASE-synopsis"></a>

```
current_database()
```

## Jenis pengembalian
<a name="r_CURRENT_DATABASE-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_CURRENT_DATABASE-example"></a>

Query berikut mengembalikan nama database saat ini. 

```
select current_database();

current_database
------------------
tickit
(1 row)
```

# CURRENT\$1NAMESPACE
<a name="r_CURRENT_NAMESPACE"></a>

Mengembalikan namespace cluster dari cluster Amazon Redshift saat ini. Namespace cluster Amazon Redshift adalah ID unik dari cluster Amazon Redshift.

## Sintaksis
<a name="r_CURRENT_NAMESPACE-synopsis"></a>

```
current_namespace
```

## Jenis pengembalian
<a name="r_CURRENT_NAMESPACE-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_CURRENT_NAMESPACE-example"></a>

Query berikut mengembalikan nama namespace saat ini. 

```
select user, current_namespace; 
current_user | current_namespace
-------------+-------------------------------------
dwuser       | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8

(1 row)
```

# CURRENT\$1SCHEMA
<a name="r_CURRENT_SCHEMA"></a>

Mengembalikan nama skema di depan jalur pencarian. Skema ini akan digunakan untuk setiap tabel atau objek bernama lainnya yang dibuat tanpa menentukan skema target. 

## Sintaksis
<a name="r_CURRENT_SCHEMA-synopsis"></a>

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL.

```
current_schema()
```

## Jenis pengembalian
<a name="r_CURRENT_SCHEMA-return-type"></a>

CURRENT\$1SCHEMA mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_CURRENT_SCHEMA-examples"></a>

Query berikut mengembalikan skema saat ini: 

```
select current_schema();

current_schema
----------------
public
(1 row)
```

# SKEMA SAAT INI
<a name="r_CURRENT_SCHEMAS"></a>

Mengembalikan array nama-nama skema apapun di jalur pencarian saat ini. Jalur pencarian saat ini didefinisikan dalam parameter search\$1path. 

## Sintaksis
<a name="r_CURRENT_SCHEMAS-synopsis"></a>

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL.

```
current_schemas(include_implicit)
```

## Pendapat
<a name="r_CURRENT_SCHEMAS-argument"></a>

 *include\$1implisit*   
Jika benar, menentukan bahwa jalur pencarian harus menyertakan skema sistem yang disertakan secara implisit. Nilai yang valid adalah `true` dan `false`. Biasanya, jika`true`, parameter ini mengembalikan `pg_catalog` skema selain skema saat ini. 

## Jenis pengembalian
<a name="r_CURRENT_SCHEMAS-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_CURRENT_SCHEMAS-examples"></a>

Contoh berikut mengembalikan nama skema di jalur pencarian saat ini, tidak termasuk skema sistem yang disertakan secara implisit: 

```
select current_schemas(false);

current_schemas
-----------------
{public}
(1 row)
```

Contoh berikut mengembalikan nama skema di jalur pencarian saat ini, termasuk skema sistem yang disertakan secara implisit: 

```
select current_schemas(true);

current_schemas
---------------------
{pg_catalog,public}
(1 row)
```

# CURRENT\$1SESSION\$1ARN
<a name="r_CURRENT_SESSION_ARN"></a>

Mengembalikan ARN dari pengguna global yang saat ini berwenang. Pengguna global hadir dengan identitas yang sama di seluruh akun Redshift, cluster, dan grup kerja Tanpa Server. Pengguna global masuk melalui IAM Identity Center, atau melalui otentikasi sesi berbasis IAM. Pengguna data lake adalah AWS pengguna global. 

Fungsi ini biasanya digunakan dalam konteks menggunakan tampilan multi-dialek AWS Glue . Untuk informasi selengkapnya tentang manajemen identitas dengan IAM Identity Center dan Redshift, lihat [Connect Redshift dengan IAM Identity Center untuk memberikan pengalaman masuk tunggal kepada pengguna](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html). Untuk informasi selengkapnya tentang tampilan Glue multi-dialek [Membuat tampilan di Katalog AWS Glue Data](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Sintaksis
<a name="r_CURRENT_SESSION_ARN-synopsis"></a>

```
current_session_arn()
```

## Jenis pengembalian
<a name="r_CURRENT_SESSION_ARN-return-type"></a>

Mengembalikan string VARCHAR dari pengguna yang diautentikasi secara global atau nilai null.

## Catatan penggunaan
<a name="r_CURRENT_SESSION_ARN-usage"></a>

Pengguna lokal tidak didukung dan menghasilkan respons nol.

## Contoh
<a name="r_CURRENT_SESSION_ARN-example"></a>

Query berikut mengembalikan nama ARN sesi saat ini: 

```
SELECT current_session_arn();

current_session_arn
--------------
arn:aws:iam::123456789012:user/user
(1 row)
```

# CURRENT\$1USER
<a name="r_CURRENT_USER"></a>

Mengembalikan nama pengguna pengguna “efektif” saat ini dari database, sebagaimana berlaku untuk memeriksa izin. Biasanya, nama pengguna ini akan sama dengan pengguna sesi; Namun, ini kadang-kadang dapat diubah oleh pengguna super. 

**catatan**  
Jangan gunakan tanda kurung tambahan saat memanggil CURRENT\$1USER. 

## Sintaksis
<a name="r_CURRENT_USER-synopsis"></a>

```
current_user
```

## Jenis pengembalian
<a name="r_CURRENT_USER-return-type"></a>

CURRENT\$1USER mengembalikan tipe data NAME dan dapat dilemparkan sebagai string CHAR atau VARCHAR. 

## Catatan penggunaan
<a name="r_CURRENT_USER-usage"></a>

Jika prosedur tersimpan dibuat menggunakan opsi SECURITY DEFINER dari perintah CREATE\$1PROCEDURE, saat menjalankan fungsi CURRENT\$1USER dari dalam prosedur tersimpan, Amazon Redshift mengembalikan nama pengguna pemilik prosedur yang disimpan.

## Contoh
<a name="r_CURRENT_USER-example"></a>

Query berikut mengembalikan nama pengguna database saat ini: 

```
select current_user;

current_user
--------------
dwuser
(1 row)
```

# CURRENT\$1USER\$1ID
<a name="r_CURRENT_USER_ID"></a>

Mengembalikan pengenal unik untuk pengguna Amazon Redshift yang masuk ke sesi saat ini.

## Sintaksis
<a name="r_CURRENT_USER_ID-synopsis"></a>

```
CURRENT_USER_ID
```

## Jenis pengembalian
<a name="r_CURRENT_USER_ID-return-type"></a>

Fungsi CURRENT\$1USER\$1ID mengembalikan integer. 

## Contoh
<a name="r_CURRENT_USER_ID-examples"></a>

Contoh berikut mengembalikan nama pengguna dan ID pengguna saat ini untuk sesi ini: 

```
select user, current_user_id;

 current_user | current_user_id
--------------+-----------------
   dwuser     |               1
(1 row)
```

# DEFAULT\$1IAM\$1ROLE
<a name="r_DEFAULT_IAM_ROLE"></a>

Mengembalikan peran IAM default yang saat ini terkait dengan cluster Amazon Redshift. Fungsi mengembalikan none jika tidak ada peran IAM default yang terkait. 

## Sintaksis
<a name="r_DEFAULT_IAM_ROLE-synopsis"></a>

```
select default_iam_role();
```

## Jenis pengembalian
<a name="r_DEFAULT_IAM_ROLE-return-type"></a>

Mengembalikan string VARCHAR. 

## Contoh
<a name="r_DEFAULT_IAM_ROLE-example"></a>

Contoh berikut mengembalikan peran IAM default yang saat ini terkait dengan cluster Amazon Redshift yang ditentukan, 

```
select default_iam_role();
              default_iam_role
-----------------------------------------------
 arn:aws:iam::123456789012:role/myRedshiftRole
(1 row)
```

# GET\$1MOUNTED\$1ROLE
<a name="GET_MOUNTED_ROLE"></a>

 Ketika dipanggil sebagai bagian dari AWS Glue tampilan multi-dialek, ini memungkinkan pengembalian peran IAM yang digunakan untuk memasang skema atau database Lake Formation. Multi-dialek berarti SQL didukung di beberapa mesin kueri, seperti Amazon EMR dan Redshift. Untuk informasi selengkapnya tentang tampilan Glue multi-dialek, lihat [Membuat tampilan di Katalog AWS Glue Data](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).



## Sintaksis
<a name="GET_MOUNTED_ROLE-synopsis"></a>

```
get_mounted_role()
```

## Jenis pengembalian
<a name="GET_MOUNTED_ROLE-return-type"></a>

Mengembalikan string VARCHAR atau nilai null.

## Catatan penggunaan
<a name="GET_MOUNTED_ROLE-usage"></a>

Fungsi ini mengembalikan null untuk kasus penggunaan apa pun di luar tampilan Lake Formation eksternal.

## Contoh
<a name="GET_MOUNTED_ROLE-example"></a>

Kueri berikut mengembalikan identitas untuk memasang sumber daya Lake Formation.

```
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view AS 
SELECT mycol, get_mounted_role() FROM external_schema.remote_table;

mycol | get_mounted_role
----------------------------
1       arn:aws:iam::123456789012:role/salesrole
(1 row)
```

# HAS\$1ASSUMEROLE\$1PRIVILEGE
<a name="r_HAS_ASSUMEROLE_PRIVILEGE"></a>

Mengembalikan Boolean `true` (`t`) jika pengguna tertentu memiliki peran IAM tertentu dengan hak istimewa untuk menjalankan perintah yang ditentukan. Fungsi mengembalikan `false` (`f`) jika pengguna tidak memiliki peran IAM yang ditentukan dengan hak istimewa untuk menjalankan perintah yang ditentukan. Untuk informasi lebih lanjut tentang hak istimewa, lihat[HIBAH](r_GRANT.md). 

## Sintaksis
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-synopsis"></a>

```
has_assumerole_privilege( [ user, ] iam_role_arn, cmd_type)
```

## Argumen
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-arguments"></a>

 *pengguna*   
Nama pengguna untuk memeriksa hak istimewa peran IAM. Defaultnya adalah memeriksa pengguna saat ini. Pengguna super dan pengguna dapat menggunakan fungsi ini. Namun, pengguna hanya dapat melihat hak istimewa mereka sendiri.

 *iam\$1role\$1arn*   
Peran IAM yang telah diberikan hak istimewa perintah. 

 *cmd\$1type*   
Perintah yang aksesnya telah diberikan. Nilai yang valid adalah sebagai berikut:   
+ MENYONTEK
+ MEMBONGKAR
+ FUNGSI EKSTERNAL
+ BUAT MODEL

## Jenis pengembalian
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-return-type"></a>

BOOLEAN

## Contoh
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-example"></a>

Kueri berikut mengonfirmasi bahwa pengguna `reg_user1` memiliki hak istimewa untuk `Redshift-S3-Read` peran menjalankan perintah COPY.

```
select has_assumerole_privilege('reg_user1', 'arn:aws:iam::123456789012:role/Redshift-S3-Read', 'copy');
```

```
has_assumerole_privilege
------------------------
true
(1 row)
```

# HAS\$1DATABASE\$1PRIVILEGE
<a name="r_HAS_DATABASE_PRIVILEGE"></a>

Mengembalikan `true` jika pengguna memiliki hak istimewa yang ditentukan untuk database tertentu. Untuk informasi lebih lanjut tentang hak istimewa, lihat[HIBAH](r_GRANT.md). 

## Sintaksis
<a name="r_HAS_DATABASE_PRIVILEGE-synopsis"></a>

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL.

```
has_database_privilege( [ user, ] database, privilege)
```

## Pendapat
<a name="r_HAS_DATABASE_PRIVILEGE-arguments"></a>

 *pengguna*   
Nama pengguna untuk memeriksa hak istimewa database. Defaultnya adalah memeriksa pengguna saat ini. 

 *basis data*   
Database yang terkait dengan hak istimewa. 

 *hak istimewa*   
Hak istimewa untuk memeriksa. Nilai yang valid adalah sebagai berikut:   
+ CREATE
+ SEMENTARA
+ TEMP

## Jenis pengembalian
<a name="r_HAS_DATABASE_PRIVILEGE-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_HAS_DATABASE_PRIVILEGE-example"></a>

Kueri berikut mengonfirmasi bahwa pengguna GUEST memiliki hak istimewa TEMP pada database TICKIT.

```
select has_database_privilege('guest', 'tickit', 'temp');

has_database_privilege
------------------------
true
(1 row)
```

# HAS\$1SCHEMA\$1PRIVILEGE
<a name="r_HAS_SCHEMA_PRIVILEGE"></a>

Mengembalikan `true` jika pengguna memiliki hak istimewa yang ditentukan untuk skema yang ditentukan. Untuk informasi selengkapnya tentang hak istimewa, lihat[HIBAH](r_GRANT.md).

## Sintaksis
<a name="r_HAS_SCHEMA_PRIVILEGE-synopsis"></a>

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL.

```
has_schema_privilege( [ user, ] schema, privilege)
```

## Pendapat
<a name="r_HAS_SCHEMA_PRIVILEGE-arguments"></a>

 *pengguna*   
Nama pengguna untuk memeriksa hak istimewa skema. Defaultnya adalah memeriksa pengguna saat ini. 

 *skema*   
Skema yang terkait dengan hak istimewa. 

 *hak istimewa*   
Hak istimewa untuk memeriksa. Nilai yang valid adalah sebagai berikut:   
+ CREATE
+ PEMAKAIAN
+ MENGUBAH
+ MENJATUHKAN

## Jenis pengembalian
<a name="r_HAS_SCHEMA_PRIVILEGE-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_HAS_SCHEMA_PRIVILEGE-example"></a>

Kueri berikut mengonfirmasi bahwa pengguna GUEST memiliki hak istimewa CREATE pada skema PUBLIC: 

```
select has_schema_privilege('guest', 'public', 'create');

has_schema_privilege
----------------------
true
(1 row)
```

# HAS\$1TABLE\$1PRIVILEGE
<a name="r_HAS_TABLE_PRIVILEGE"></a>

Mengembalikan `true` jika pengguna memiliki hak istimewa yang ditentukan untuk tabel tertentu dan mengembalikan `false` sebaliknya.

## Sintaksis
<a name="r_HAS_TABLE_PRIVILEGE-synopsis"></a>

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL. Untuk informasi selengkapnya tentang hak istimewa, lihat[HIBAH](r_GRANT.md).

```
has_table_privilege( [ user, ] table, privilege)
```

## Pendapat
<a name="r_HAS_TABLE_PRIVILEGE-arguments"></a>

 *pengguna*   
Nama pengguna untuk memeriksa hak istimewa tabel. Defaultnya adalah memeriksa pengguna saat ini. 

 *tabel*   
Tabel terkait dengan hak istimewa. 

 *hak istimewa*   
Hak istimewa untuk memeriksa. Nilai yang valid adalah sebagai berikut:   
+ SELECT
+ INSERT
+ UPDATE
+ DELETE
+ MENJATUHKAN
+ REFERENSI

## Jenis pengembalian
<a name="r_HAS_TABLE_PRIVILEGE-return-type"></a>

BOOLEAN

## Contoh
<a name="r_HAS_TABLE_PRIVILEGE-examples"></a>

Kueri berikut menemukan bahwa pengguna GUEST tidak memiliki hak pilih pada tabel LISTING. 

```
select has_table_privilege('guest', 'listing', 'select');

has_table_privilege
---------------------
false
```

Kueri berikut mencantumkan hak istimewa tabel, termasuk pilih, sisipkan, perbarui, dan hapus, menggunakan output dari tabel katalog pg\$1tables dan pg\$1user. Ini hanya sampel. Anda mungkin harus menentukan nama skema dan nama tabel dari database Anda. Untuk informasi selengkapnya, lihat [Menanyakan tabel katalog](c_join_PG.md).

```
SELECT 
     tablename
     ,usename
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del
FROM
(SELECT * from pg_tables
WHERE schemaname = 'public' and tablename in ('event','listing')) as tables
,(SELECT * FROM pg_user) AS users;

tablename | usename   |  sel   |  ins  |  upd  | del
----------+-----------+--------+-------+-------+-------
event     |  john     |  true  | true  | true  | true	
event     |  sally    |  false | false | false | false	
event     |  elsa     |  false | false | false | false	
listing   |  john     |  true  | true  | true  | true	
listing   |  sally    |  false | false | false | false	
listing   |  elsa     |  false | false | false | false
```

Kueri sebelumnya juga berisi gabungan silang. Untuk informasi selengkapnya, lihat [JOIN contoh](r_Join_examples.md). Untuk menanyakan tabel yang tidak ada dalam `public` skema, hapus `schemaname` kondisi dari klausa WHERE dan gunakan contoh berikut sebelum kueri Anda.

```
SET SEARCH_PATH to 'schema_name';
```

# LAST\$1USER\$1QUERY\$1ID
<a name="LAST_USER_QUERY_ID"></a>

Mengembalikan ID query dari query pengguna yang paling baru selesai dalam sesi saat ini. Jika tidak ada kueri yang dijalankan dalam sesi saat ini, last\$1user\$1query\$1id mengembalikan -1. Fungsi ini tidak mengembalikan ID kueri untuk kueri yang berjalan secara eksklusif pada node pemimpin. Untuk informasi selengkapnya, lihat [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md).

## Sintaks
<a name="LAST_USER_QUERY_ID-synopsis"></a>

```
last_user_query_id()
```

## Jenis pengembalian
<a name="LAST_USER_QUERY_ID-return-type"></a>

Mengembalikan bilangan bulat. 

## Contoh
<a name="LAST_USER_QUERY_ID-example"></a>

Kueri berikut mengembalikan ID kueri terbaru yang dijalankan oleh pengguna yang diselesaikan dalam sesi saat ini. 

```
select last_user_query_id();
```

Hasilnya adalah sebagai berikut.

```
last_user_query_id
-----------------------
    5437
(1 row)
```

Query berikut mengembalikan ID query dan teks query yang paling baru selesai dijalankan oleh pengguna dalam sesi saat ini.

```
select query_id, query_text from sys_query_history where query_id = last_user_query_id();
```

Hasilnya adalah sebagai berikut.

```
 query_id, query_text
---------+-------------------------------------------------------------------------------------------------------------
 5556975 | select last_user_query_id() limit 100 --RequestID=<unique request ID>; TraceID=<unique trace ID>
```

# PG\$1BACKEND\$1PID
<a name="PG_BACKEND_PID"></a>

Mengembalikan ID proses (PID) dari proses server yang menangani sesi saat ini.

**catatan**  
PID tidak unik secara global. Hal ini dapat digunakan kembali dari waktu ke waktu.

## Sintaksis
<a name="PG_BACKEND_PID-synopsis"></a>

```
pg_backend_pid()
```

## Jenis pengembalian
<a name="PG_BACKEND_PID-return-type"></a>

Mengembalikan bilangan bulat.

## Contoh
<a name="PG_BACKEND_PID-example"></a>

Anda dapat menghubungkan PG\$1BACKEND\$1PID dengan tabel log untuk mengambil informasi untuk sesi saat ini. Misalnya, query berikut mengembalikan ID query dan sebagian dari teks query untuk query selesai dalam sesi saat ini.

```
select query, substring(text,1,40)
from stl_querytext
where pid =  PG_BACKEND_PID()
order by query desc;

 query |                substring
-------+------------------------------------------
 14831 | select query, substring(text,1,40) from
 14827 | select query, substring(path,0,80) as pa
 14826 | copy category from 's3://dw-tickit/manif
 14825 | Count rows in target table
 14824 | unload ('select * from category') to 's3
(5 rows)
```

Anda dapat menghubungkan PG\$1BACKEND\$1PID dengan kolom pid dalam tabel log berikut (pengecualian dicatat dalam tanda kurung):
+ [STL\$1CONNECTION\$1LOG](r_STL_CONNECTION_LOG.md)
+ [STL\$1DDLTEXT](r_STL_DDLTEXT.md)
+ [STL\$1ERROR](r_STL_ERROR.md)
+ [KUERI STL\$1](r_STL_QUERY.md)
+ [STL\$1QUERYTEXT](r_STL_QUERYTEXT.md)
+ [STL\$1SESSION](r_STL_SESSIONS.md)(proses)
+ [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md)
+ [STL\$1UTILITYTEXT](r_STL_UTILITYTEXT.md)
+ [STV\$1ACTIVE\$1KURSOR](r_STV_ACTIVE_CURSORS.md)
+ [STV\$1DALAM PENERBANGAN](r_STV_INFLIGHT.md)
+ [STV\$1LOCKS](r_STV_LOCKS.md)(lock\$1owner\$1pid)
+ [STV\$1TERBARU](r_STV_RECENTS.md)(process\$1id)

# PG\$1GET\$1COLS
<a name="PG_GET_COLS"></a>

Mengembalikan metadata kolom untuk tabel atau definisi tampilan.

## Sintaksis
<a name="PG_GET_COLS-synopsis"></a>

```
pg_get_cols('name')
```

## Argumen
<a name="PG_GET_COLS-arguments"></a>

 *name*   
Nama tabel atau tampilan Amazon Redshift. Untuk informasi selengkapnya, lihat [Nama dan pengidentifikasi](r_names.md).

## Jenis pengembalian
<a name="PG_GET_COLS-return-type"></a>

VARCHAR 

## Catatan penggunaan
<a name="PG_GET_COLS-usage-notes"></a>

Fungsi PG\$1GET\$1COLS mengembalikan satu baris untuk setiap kolom dalam tabel atau definisi tampilan. Baris berisi daftar yang dipisahkan koma dengan nama skema, nama relasi, nama kolom, tipe data, dan nomor kolom. Pemformatan hasil SQL tergantung pada klien SQL yang digunakan.

## Contoh
<a name="PG_GET_COLS-example"></a>

Contoh berikut mengembalikan hasil untuk tampilan bernama `SALES_VW` dalam skema `public` dan tabel tabel bernama `sales` dalam skema `mytickit1` yang dibuat oleh pengguna dalam database yang terhubung. `dev`

Contoh berikut mengembalikan metadata kolom untuk tampilan bernama. `SALES_VW`

```
select pg_get_cols('sales_vw');

pg_get_cols                                                
-----------------------------------------------------------
(public,sales_vw,salesid,integer,1)                        
(public,sales_vw,listid,integer,2)                         
(public,sales_vw,sellerid,integer,3)                       
(public,sales_vw,buyerid,integer,4)                        
(public,sales_vw,eventid,integer,5)                        
(public,sales_vw,dateid,smallint,6)                        
(public,sales_vw,qtysold,smallint,7)                       
(public,sales_vw,pricepaid,"numeric(8,2)",8)               
(public,sales_vw,commission,"numeric(8,2)",9)              
(public,sales_vw,saletime,"timestamp without time zone",10)
```

Contoh berikut mengembalikan metadata kolom untuk `SALES_VW` tampilan dalam format tabel.

```
select * from pg_get_cols('sales_vw') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_vw  | salesid    | integer                     |       1
public      | sales_vw  | listid     | integer                     |       2
public      | sales_vw  | sellerid   | integer                     |       3
public      | sales_vw  | buyerid    | integer                     |       4
public      | sales_vw  | eventid    | integer                     |       5
public      | sales_vw  | dateid     | smallint                    |       6
public      | sales_vw  | qtysold    | smallint                    |       7
public      | sales_vw  | pricepaid  | numeric(8,2)                |       8
public      | sales_vw  | commission | numeric(8,2)                |       9
public      | sales_vw  | saletime   | timestamp without time zone |      10
```

Contoh berikut mengembalikan metadata kolom untuk `SALES` tabel dalam skema `mytickit1` dalam format tabel.

```
select * from pg_get_cols('"mytickit1"."sales"') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
mytickit1   | sales     | salesid    | integer                     |       1
mytickit1   | sales     | listid     | integer                     |       2
mytickit1   | sales     | sellerid   | integer                     |       3
mytickit1   | sales     | buyerid    | integer                     |       4
mytickit1   | sales     | eventid    | integer                     |       5
mytickit1   | sales     | dateid     | smallint                    |       6
mytickit1   | sales     | qtysold    | smallint                    |       7
mytickit1   | sales     | pricepaid  | numeric(8,2)                |       8
mytickit1   | sales     | commission | numeric(8,2)                |       9
mytickit1   | sales     | saletime   | timestamp without time zone |      10
```

# PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE
<a name="PG_GET_GRANTEE_BY_IAMROLE"></a>

Mengembalikan semua pengguna dan grup diberikan peran IAM tertentu.

## Sintaksis
<a name="PG_GET_GRANTEE_BY_IAMROLE-synopsis"></a>

```
pg_get_grantee_by_iam_role('iam_role_arn')
```

## Argumen
<a name="PG_GET_GRANTEE_BY_IAMROLE-arguments"></a>

 *iam\$1role\$1arn*   
Peran IAM untuk mengembalikan pengguna dan grup yang telah diberikan peran ini.

## Jenis pengembalian
<a name="PG_GET_GRANTEE_BY_IAMROLE-return-type"></a>

VARCHAR 

## Catatan penggunaan
<a name="PG_GET_GRANTEE_BY_IAMROLE-usage-notes"></a>

Fungsi PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE mengembalikan satu baris untuk setiap pengguna atau grup. Setiap baris berisi nama penerima hibah, jenis penerima hibah, dan hak istimewa yang diberikan. Nilai yang mungkin untuk jenis penerima hibah adalah `p` untuk publik, `u` untuk pengguna, dan `g` untuk grup. 

Anda harus menjadi superuser untuk menggunakan fungsi ini.

## Contoh
<a name="PG_GET_GRANTEE_BY_IAMROLE-example"></a>

Contoh berikut menunjukkan bahwa peran IAM `Redshift-S3-Write` diberikan kepada `group1` dan`reg_user1`. Pengguna di `group_1` dapat menentukan peran hanya untuk operasi COPY, dan pengguna `reg_user1` dapat menentukan peran hanya untuk melakukan operasi UNLOAD.

```
select pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write');
```

```
  pg_get_grantee_by_iam_role
-----------------------------
 (group_1,g,COPY)
 (reg_user1,u,UNLOAD)
```

Contoh berikut dari fungsi PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE memformat hasilnya sebagai tabel.

```
select grantee, grantee_type, cmd_type FROM pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write') res_grantee(grantee text, grantee_type text, cmd_type text) ORDER BY 1,2,3;
```

```
  grantee  | grantee_type | cmd_type
-----------+--------------+----------
 group_1   | g            | COPY
 reg_user1 | u            | UNLOAD
```

# PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER
<a name="PG_GET_IAM_ROLE_BY_USER"></a>

Mengembalikan semua peran IAM dan hak istimewa perintah yang diberikan kepada pengguna.

## Sintaksis
<a name="PG_GET_IAM_ROLE_BY_USER-synopsis"></a>

```
pg_get_iam_role_by_user('name')
```

## Argumen
<a name="PG_GET_IAM_ROLE_BY_USER-arguments"></a>

 *name*   
Nama pengguna untuk mengembalikan peran IAM.

## Jenis pengembalian
<a name="PG_GET_IAM_ROLE_BY_USER-return-type"></a>

VARCHAR 

## Catatan penggunaan
<a name="PG_GET_IAM_ROLE_BY_USER-usage-notes"></a>

Fungsi PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER mengembalikan satu baris untuk setiap set peran dan hak istimewa perintah. Baris berisi daftar yang dipisahkan koma dengan nama pengguna, peran IAM, dan perintah. 

Nilai `default` dalam hasil menunjukkan bahwa pengguna dapat menentukan peran apa pun yang tersedia untuk melakukan perintah yang ditampilkan.

Anda harus menjadi superuser untuk menggunakan fungsi ini.

## Contoh
<a name="PG_GET_IAM_ROLE_BY_USER-example"></a>

Contoh berikut menunjukkan bahwa pengguna `reg_user1` dapat menentukan peran IAM yang tersedia untuk melakukan operasi COPY. Pengguna juga dapat menentukan `Redshift-S3-Write` peran untuk operasi UNLOAD.

```
select pg_get_iam_role_by_user('reg_user1');
```

```
                             pg_get_iam_role_by_user
---------------------------------------------------------------------------------
 (reg_user1,default,COPY)
 (reg_user1,arn:aws:iam::123456789012:role/Redshift-S3-Write,COPY|UNLOAD)
```

Contoh berikut dari fungsi PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER memformat hasilnya sebagai tabel.

```
select username, iam_role, cmd FROM pg_get_iam_role_by_user('reg_user1') res_iam_role(username text, iam_role text, cmd text);
```

```
 username  |                    iam_role                     | cmd
-----------+-------------------------------------------------+------
 reg_user1 | default                                         | None
 reg_user1 | arn:aws:iam::123456789012:role/Redshift-S3-Read | COPY
```

# PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS
<a name="PG_GET_LATE_BINDING_VIEW_COLS"></a>

Mengembalikan metadata kolom untuk semua tampilan yang mengikat akhir dalam database. Untuk informasi selengkapnya, lihat [Tampilan pengikatan akhir](r_CREATE_VIEW.md#r_CREATE_VIEW_late-binding-views)

## Sintaksis
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_late_binding_view_cols()
```

## Jenis pengembalian
<a name="PG_GET_LATE_BINDING_VIEW_COLS-return-type"></a>

VARCHAR 

## Catatan penggunaan
<a name="PG_GET_LATE_BINDING_VIEW_COLS-usage-notes"></a>

`PG_GET_LATE_BINDING_VIEW_COLS`Fungsi mengembalikan satu baris untuk setiap kolom dalam tampilan yang mengikat akhir. Baris berisi daftar yang dipisahkan koma dengan nama skema, nama relasi, nama kolom, tipe data, dan nomor kolom.

## Contoh
<a name="PG_GET_LATE_BINDING_VIEW_COLS-example"></a>

Contoh berikut mengembalikan metadata kolom untuk semua tampilan yang mengikat akhir.

```
select pg_get_late_binding_view_cols();

pg_get_late_binding_view_cols                               
------------------------------------------------------------
(public,myevent,eventname,"character varying(200)",1)       
(public,sales_lbv,salesid,integer,1)                        
(public,sales_lbv,listid,integer,2)                         
(public,sales_lbv,sellerid,integer,3)                       
(public,sales_lbv,buyerid,integer,4)                        
(public,sales_lbv,eventid,integer,5)                        
(public,sales_lbv,dateid,smallint,6)                        
(public,sales_lbv,qtysold,smallint,7)                       
(public,sales_lbv,pricepaid,"numeric(8,2)",8)               
(public,sales_lbv,commission,"numeric(8,2)",9)              
(public,sales_lbv,saletime,"timestamp without time zone",10)
(public,event_lbv,eventid,integer,1)                        
(public,event_lbv,venueid,smallint,2)                       
(public,event_lbv,catid,smallint,3)                         
(public,event_lbv,dateid,smallint,4)                        
(public,event_lbv,eventname,"character varying(200)",5)     
(public,event_lbv,starttime,"timestamp without time zone",6)
```

Contoh berikut mengembalikan metadata kolom untuk semua tampilan akhir mengikat dalam format tabel.

```
select * from pg_get_late_binding_view_cols() cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);
view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_lbv | salesid    | integer                     |       1
public      | sales_lbv | listid     | integer                     |       2
public      | sales_lbv | sellerid   | integer                     |       3
public      | sales_lbv | buyerid    | integer                     |       4
public      | sales_lbv | eventid    | integer                     |       5
public      | sales_lbv | dateid     | smallint                    |       6
public      | sales_lbv | qtysold    | smallint                    |       7
public      | sales_lbv | pricepaid  | numeric(8,2)                |       8
public      | sales_lbv | commission | numeric(8,2)                |       9
public      | sales_lbv | saletime   | timestamp without time zone |      10
public      | event_lbv | eventid    | integer                     |       1
public      | event_lbv | venueid    | smallint                    |       2
public      | event_lbv | catid      | smallint                    |       3
public      | event_lbv | dateid     | smallint                    |       4
public      | event_lbv | eventname  | character varying(200)      |       5
public      | event_lbv | starttime  | timestamp without time zone |       6
```

# PG\$1GET\$1SESSION\$1ROLES
<a name="PG_GET_SESSION_ROLES"></a>

Mengembalikan peran sesi dari pengguna yang saat ini masuk. Peran sesi pengguna adalah grup yang ditentukan oleh penyedia identitas (iDP) untuk pengguna yang masuk. Misalnya, penyedia identitas (iDP) seperti [Microsoft Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/) memverifikasi identitas pengguna dan menyediakan grup eksternal yang menjadi bagian pengguna selama proses login pengguna. Grup eksternal ini diubah menjadi peran Amazon Redshift dan tersedia selama sesi saat ini. Peran ini disebut peran sesi. Administrator dapat memberikan hak istimewa untuk peran sesi yang mirip dengan peran Amazon Redshift lainnya. Untuk informasi tentang penggunaan peran, lihat[Kontrol akses berbasis peran (RBAC)](t_Roles.md). *Untuk informasi tentang mengelola identitas dengan penyedia identitas (iDP), [lihat Federasi penyedia identitas asli (iDP) untuk Amazon Redshift di Panduan Manajemen Pergeseran Merah Amazon](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).*

Untuk melihat peran yang ditentukan dalam katalog Amazon Redshift, kueri tampilan sistem. [SVV\$1ROLE](r_SVV_ROLES.md)

## Sintaksis
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_session_roles()
```

## Jenis pengembalian
<a name="PG_GET_SESSION_ROLES-return-type"></a>

Satu set baris yang terdiri dari dua nilai. Nilai pertama memiliki dua bagian yang dipisahkan oleh titik dua (:) yang berisi`idp-namespace:role-name`. `idp-namespace`Ini adalah namespace dari penyedia identitas (iDP). `role-name`Itu adalah nama grup eksternal di penyedia identitas (iDP). Nilai kedua berisi yang `role-id` merupakan pengidentifikasi peran.

## Catatan penggunaan
<a name="PG_GET_SESSION_ROLES-usage-notes"></a>

`PG_GET_SESSION_ROLES`Fungsi mengembalikan satu baris untuk setiap peran sesi dikembalikan.

## Contoh
<a name="PG_GET_SESSION_ROLES-example"></a>

Contoh berikut mengembalikan satu baris untuk setiap peran dari Azure Active Directory iDP. Kolom yang dikembalikan dilemparkan `sess_roles` dengan kolom `name` dan`roleid`. Masing-masing `name` terdiri dari namespace Azure Active Directory dan nama grup di Azure Active Directory.

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
my_aad:test_group_1   106204
my_aad:test_group_2   106205
my_aad:test_group_3   106206
my_aad:test_group_4   106207
my_aad:test_group_5   106208
```

Contoh berikut mengembalikan satu baris untuk setiap grup IAM yang saat ini login pengguna IAM adalah anggota. Kolom yang dikembalikan dilemparkan `sess_roles` dengan kolom `name` dan`roleid`. Masing-masing `name` terdiri dari namespace IAM dan nama grup IAM.

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
IAM:myGroup           110332
```

# PG\$1LAST\$1COPY\$1COUNT
<a name="PG_LAST_COPY_COUNT"></a>

Mengembalikan jumlah baris yang dimuat oleh perintah COPY terakhir yang dijalankan dalam sesi saat ini. PG\$1LAST\$1COPY\$1COUNT diperbarui dengan ID COPY terakhir, yang merupakan ID kueri dari COPY terakhir yang memulai proses pemuatan, bahkan jika pemuatan gagal. ID kueri dan ID COPY diperbarui saat perintah COPY memulai proses pemuatan. 

Jika COPY gagal karena kesalahan sintaks atau karena hak istimewa yang tidak mencukupi, ID COPY tidak diperbarui dan PG\$1LAST\$1COPY\$1COUNT mengembalikan hitungan untuk COPY sebelumnya. Jika tidak ada perintah COPY yang dijalankan dalam sesi saat ini, atau jika COPY terakhir gagal selama pemuatan, PG\$1LAST\$1COPY\$1COUNT mengembalikan 0. Untuk informasi selengkapnya, lihat [PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md). 

## Sintaks
<a name="PG_LAST_COPY_COUNT-synopsis"></a>

```
pg_last_copy_count()
```

## Jenis pengembalian
<a name="PG_LAST_COPY_COUNT-return-type"></a>

Mengembalikan BIGINT.

## Contoh
<a name="PG_LAST_COPY_COUNT-example"></a>

Query berikut mengembalikan jumlah baris dimuat oleh perintah COPY terbaru dalam sesi saat ini.

```
select pg_last_copy_count();

pg_last_copy_count
--------------------
             192497
(1 row)
```

# PG\$1LAST\$1COPY\$1ID
<a name="PG_LAST_COPY_ID"></a>

Mengembalikan ID query dari perintah COPY yang paling baru selesai dalam sesi saat ini. Jika tidak ada perintah COPY yang dijalankan dalam sesi saat ini, PG\$1LAST\$1COPY\$1ID mengembalikan -1. 

 Nilai untuk PG\$1LAST\$1COPY\$1ID diperbarui saat perintah COPY memulai proses pemuatan. Jika COPY gagal karena data pemuatan tidak valid, ID COPY diperbarui, sehingga Anda dapat menggunakan PG\$1LAST\$1COPY\$1ID saat Anda menanyakan tabel STL\$1LOAD\$1ERRORS. Jika transaksi COPY dibatalkan, COPY ID tidak diperbarui. 

ID COPY tidak diperbarui jika perintah COPY gagal karena kesalahan yang terjadi sebelum proses pemuatan dimulai, seperti kesalahan sintaks, kesalahan akses, kredensi tidak valid, atau hak istimewa yang tidak memadai. ID COPY tidak diperbarui jika COPY gagal selama langkah kompresi analisis, yang dimulai setelah koneksi berhasil, tetapi sebelum pemuatan data.

## Sintaksis
<a name="PG_LAST_COPY_ID-synopsis"></a>

```
pg_last_copy_id()
```

## Jenis pengembalian
<a name="PG_LAST_COPY_ID-return-type"></a>

Mengembalikan bilangan bulat.

## Contoh
<a name="PG_LAST_COPY_ID-example"></a>

Query berikut mengembalikan ID query dari perintah COPY terbaru dalam sesi saat ini.

```
select pg_last_copy_id();

pg_last_copy_id
---------------
          5437
(1 row)
```

Kueri berikut menggabungkan STL\$1LOAD\$1ERRORS ke STL\$1LOADERROR\$1DETAIL untuk melihat kesalahan detail yang terjadi selama pemuatan terbaru di sesi saat ini:

```
select d.query, substring(d.filename,14,20), 
d.line_number as line, 
substring(d.value,1,16) as value,
substring(le.err_reason,1,48) as err_reason
from stl_loaderror_detail d, stl_load_errors le
where d.query = le.query
and d.query = pg_last_copy_id(); 

 query |    substring      | line |  value   |                    err_reason
-------+-------------------+------+----------+-------------------------------------------------
    558| allusers_pipe.txt |  251 | 251      | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | ZRU29FGR | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Kaitlin  | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Walter   | String contains invalid or unsupported UTF8 code
```

# PG\$1LAST\$1UNLOAD\$1ID
<a name="PG_LAST_UNLOAD_ID"></a>

Mengembalikan ID query dari perintah UNLOAD yang paling baru selesai dalam sesi saat ini. Jika tidak ada perintah UNLOAD yang dijalankan dalam sesi saat ini, PG\$1LAST\$1UNLOAD\$1ID mengembalikan -1. 

 Nilai untuk PG\$1LAST\$1UNLOAD\$1ID diperbarui saat perintah UNLOAD memulai proses pemuatan. Jika UNLOAD gagal karena data pemuatan tidak valid, ID BONGKAR diperbarui, sehingga Anda dapat menggunakan ID BONGKAR untuk penyelidikan lebih lanjut. Jika transaksi UNLOAD digulung kembali, ID BONGKAR tidak diperbarui. 

ID UNLOAD tidak diperbarui jika perintah UNLOAD gagal karena kesalahan yang terjadi sebelum proses pemuatan dimulai, seperti kesalahan sintaks, kesalahan akses, kredensi tidak valid, atau hak istimewa yang tidak memadai. 

## Sintaksis
<a name="PG_LAST_UNLOAD_ID-synopsis"></a>

```
PG_LAST_UNLOAD_ID()
```

## Jenis pengembalian
<a name="PG_LAST_UNLOAD_ID-return-type"></a>

Mengembalikan bilangan bulat.

## Contoh
<a name="PG_LAST_UNLOAD_ID-example"></a>

Query berikut mengembalikan ID query dari perintah UNLOAD terbaru dalam sesi saat ini.

```
select PG_LAST_UNLOAD_ID();

PG_LAST_UNLOAD_ID
---------------
          5437
(1 row)
```

# PG\$1LAST\$1QUERY\$1ID
<a name="PG_LAST_QUERY_ID"></a>

Mengembalikan ID query query query yang paling baru selesai dalam sesi saat ini. Jika tidak ada kueri yang dijalankan dalam sesi saat ini, PG\$1LAST\$1QUERY\$1ID mengembalikan -1. PG\$1LAST\$1QUERY\$1ID tidak mengembalikan ID kueri untuk kueri yang berjalan secara eksklusif pada node pemimpin. Untuk informasi selengkapnya, lihat [Fungsi simpul pemimpin—hanya](c_SQL_functions_leader_node_only.md).

## Sintaks
<a name="PG_LAST_QUERY_ID-synopsis"></a>

```
pg_last_query_id()
```

## Jenis pengembalian
<a name="PG_LAST_QUERY_ID-return-type"></a>

Mengembalikan bilangan bulat. 

## Contoh
<a name="PG_LAST_QUERY_ID-example"></a>

Query berikut mengembalikan ID dari query terbaru selesai dalam sesi saat ini. 

```
select pg_last_query_id();
```

Hasilnya adalah sebagai berikut.

```
pg_last_query_id
----------------
           5437
(1 row)
```

Query berikut mengembalikan ID query dan teks query yang paling baru selesai dalam sesi saat ini.

```
select query, trim(querytxt) as sqlquery
from stl_query
where query = pg_last_query_id();
```

Hasilnya adalah sebagai berikut.

```
query | sqlquery
------+--------------------------------------------------
 5437 | select name, loadtime from stl_file_scan where loadtime > 1000000;
(1 rows)
```

# PG\$1LAST\$1UNLOAD\$1COUNT
<a name="PG_LAST_UNLOAD_COUNT"></a>

Mengembalikan jumlah baris yang diturunkan oleh perintah UNLOAD terakhir yang diselesaikan dalam sesi saat ini. PG\$1LAST\$1UNLOAD\$1COUNT diperbarui dengan ID kueri dari UNLOAD terakhir, bahkan jika operasi gagal. ID kueri diperbarui saat UNLOAD selesai. Jika UNLOAD gagal karena kesalahan sintaks atau karena hak istimewa yang tidak mencukupi, PG\$1LAST\$1UNLOAD\$1COUNT mengembalikan hitungan untuk UNLOAD sebelumnya. Jika tidak ada perintah UNLOAD yang diselesaikan dalam sesi saat ini, atau jika UNLOAD terakhir gagal selama operasi pembongkaran, PG\$1LAST\$1UNLOAD\$1COUNT mengembalikan 0. 

## Sintaksis
<a name="PG_LAST_UNLOAD_COUNT-synopsis"></a>

```
pg_last_unload_count()
```

## Jenis pengembalian
<a name="PG_LAST_UNLOAD_COUNT-return-type"></a>

Mengembalikan BIGINT.

## Contoh
<a name="PG_LAST_UNLOAD_COUNT-example"></a>

Kueri berikut mengembalikan jumlah baris yang dibongkar oleh perintah UNLOAD terbaru dalam sesi saat ini.

```
select pg_last_unload_count();

pg_last_unload_count
--------------------
             192497
(1 row)
```

# Fungsi SLICE\$1NUM
<a name="r_SLICE_NUM"></a>

Mengembalikan integer sesuai dengan nomor slice dalam cluster di mana data untuk baris berada. SLICE\$1NUM tidak mengambil parameter. 

## Sintaksis
<a name="r_SLICE_NUM-syntax"></a>

```
SLICE_NUM()
```

## Jenis pengembalian
<a name="r_SLICE_NUM-return-type"></a>

Fungsi SLICE\$1NUM mengembalikan integer. 

## Contoh
<a name="r_SLICE_NUM-examples"></a>

Contoh berikut menunjukkan irisan mana yang berisi data untuk sepuluh baris EVENT pertama dalam tabel PERISTIWA: 

```
select distinct eventid, slice_num() from event order by eventid limit 10;

 eventid | slice_num
---------+-----------
       1 |         1
       2 |         2
       3 |         3
       4 |         0
       5 |         1
       6 |         2
       7 |         3
       8 |         0
       9 |         1
      10 |         2
(10 rows)
```

Contoh berikut mengembalikan kode (10000) untuk menunjukkan bahwa query tanpa pernyataan FROM berjalan pada node pemimpin: 

```
select slice_num();
slice_num
-----------
10000
(1 row)
```

# USER
<a name="r_USER"></a>

Sinonim untuk CURRENT\$1USER. Lihat [CURRENT\$1USER](r_CURRENT_USER.md). 

# ROLE\$1IS\$1MEMBER\$1OF
<a name="r_ROLE_IS_MEMBER_OF"></a>

Mengembalikan nilai true jika peran adalah anggota dari peran lain. Superusers dapat memeriksa keanggotaan semua peran. Pengguna reguler yang memiliki izin ACCESS SYSTEM TABLE dapat memeriksa keanggotaan semua pengguna. Jika tidak, pengguna biasa hanya dapat memeriksa peran yang dapat mereka akses. Amazon Redshift error jika peran yang disediakan tidak ada atau pengguna saat ini tidak memiliki akses ke peran tersebut.

**Pertimbangan berbagi data**

Ketika kluster konsumen menanyakan objek bersama yang mereferensikan fungsi ini, seperti tampilan, kebijakan RLS, atau kebijakan DDM, fungsi tersebut mengevaluasi menggunakan konteks keamanan klaster konsumen. Pengguna lokal konsumen, peran, dan keanggotaan grup menentukan hasilnya, bukan yang ditentukan pada cluster produsen. Jika Anda bermaksud untuk menerapkan konteks izin yang sama yang diterapkan pada produsen, pastikan bahwa nama peran, nama grup, dan keanggotaan pengguna yang sesuai ada di klaster konsumen dan cocok dengan yang ada di produsen.

## Sintaksis
<a name="r_ROLE_IS_MEMBER_OF-synopsis"></a>

```
role_is_member_of( role_name,  granted_role_name)
```

## Argumen
<a name="r_ROLE_IS_MEMBER_OF-arguments"></a>

 *role\$1name*   
Nama peran.

 *granted\$1role\$1name*   
Nama peran yang diberikan.

## Jenis pengembalian
<a name="r_ROLE_IS_MEMBER_OF-return-type"></a>

Mengembalikan BOOLEAN.

## Contoh
<a name="r_ROLE_IS_MEMBER_OF-example"></a>

Kueri berikut mengonfirmasi bahwa peran tersebut bukan anggota role1 atau role2.

```
SELECT role_is_member_of('role1', 'role2');

 role_is_member_of
-------------------
             False
```

# USER\$1IS\$1MEMBER\$1OF
<a name="r_USER_IS_MEMBER_OF"></a>

**penting**  
Mulai 16 Februari 2026, Amazon Redshift tidak akan lagi mendukung penggunaan `user_is_member_of` dan fungsi terkait yang mengakses informasi pengguna, peran, atau grup konsumen melalui datasharing.

Mengembalikan nilai true jika pengguna adalah anggota peran atau grup. Superusers dapat memeriksa keanggotaan semua pengguna. Pengguna reguler yang merupakan anggota sys:secadmin atau sys:peran superuser dapat memeriksa keanggotaan semua pengguna. Jika tidak, pengguna biasa hanya dapat memeriksa sendiri. Amazon Redshift mengirimkan kesalahan jika identitas yang diberikan tidak ada atau pengguna saat ini tidak memiliki akses ke peran tersebut.

**Pertimbangan berbagi data**

Ketika kluster konsumen menanyakan objek bersama yang mereferensikan fungsi ini, seperti tampilan, kebijakan RLS, atau kebijakan DDM, fungsi tersebut mengevaluasi menggunakan konteks keamanan klaster konsumen. Pengguna lokal konsumen, peran, dan keanggotaan grup menentukan hasilnya, bukan yang ditentukan pada cluster produsen. Jika Anda bermaksud untuk menerapkan konteks izin yang sama yang diterapkan pada produsen, pastikan bahwa nama peran, nama grup, dan keanggotaan pengguna yang sesuai ada di klaster konsumen dan cocok dengan yang ada di produsen.

## Sintaksis
<a name="r_USER_IS_MEMBER_OF-synopsis"></a>

```
user_is_member_of( user_name,  role_name | group_name)
```

## Argumen
<a name="r_USER_IS_MEMBER_OF-arguments"></a>

 *user\$1name*   
Nama pengguna.

 *role\$1name*   
Nama peran.

 *group\$1name*   
Nama grup.

## Jenis pengembalian
<a name="r_USER_IS_MEMBER_OF-return-type"></a>

Mengembalikan BOOLEAN.

## Contoh
<a name="r_USER_IS_MEMBER_OF-example"></a>

Kueri berikut mengonfirmasi bahwa pengguna bukan anggota role1.

```
SELECT user_is_member_of('reguser', 'role1');

 user_is_member_of
-------------------
           False
```

# VERSI
<a name="r_VERSION"></a>

 Fungsi VERSION mengembalikan detail tentang rilis yang saat ini diinstal, dengan informasi versi Amazon Redshift tertentu di bagian akhir. 

**catatan**  
Ini adalah fungsi leader-node. Fungsi ini mengembalikan kesalahan jika referensi tabel yang dibuat pengguna, tabel sistem STL atau STV, atau tampilan sistem SVV atau SVL.

## Sintaksis
<a name="r_VERSION-synopsis"></a>

```
VERSION()
```

## Jenis pengembalian
<a name="r_VERSION-return-type"></a>

Mengembalikan string CHAR atau VARCHAR. 

## Contoh
<a name="r_VERSION-examples"></a>

Contoh berikut menunjukkan informasi versi cluster dari cluster saat ini: 

```
select version();
```

```
 version
 ------------------------------------------------------------------------------------------------------------------------               
 PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.12103
```

Di `1.0.12103` mana nomor versi cluster. 

**catatan**  
Untuk memaksa klaster Anda memperbarui ke versi klaster terbaru, sesuaikan [jendela pemeliharaan](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows) Anda. 

# Kata yang dicadangkan
<a name="r_pg_keywords"></a>

Berikut ini adalah daftar kata-kata yang dicadangkan Amazon Redshift. Anda dapat menggunakan kata-kata yang dicadangkan dengan pengidentifikasi yang dibatasi (tanda kutip ganda).

**catatan**  
Meskipun START dan CONNECT bukan kata yang dicadangkan, gunakan pengidentifikasi yang dibatasi atau AS jika Anda menggunakan START dan CONNECT sebagai alias tabel dalam kueri Anda untuk menghindari kegagalan saat runtime.

Untuk informasi selengkapnya, lihat [Nama dan pengidentifikasi](r_names.md). 

```
AES128
AES256
ALL
ALLOWOVERWRITE
ANALYSE
ANALYZE
AND
ANY
ARRAY
AS
ASC
AUTHORIZATION
AZ64
BACKUP
BETWEEN
BINARY
BLANKSASNULL
BOTH
BYTEDICT
BZIP2
CASE
CAST
CHECK
COLLATE
COLUMN
CONSTRAINT
CREATE
CREDENTIALS
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURRENT_USER_ID
DEFAULT
DEFERRABLE
DEFLATE
DEFRAG
DELTA
DELTA32K
DESC
DISABLE
DISTINCT
DO
ELSE
EMPTYASNULL
ENABLE
ENCODE
ENCRYPT     
ENCRYPTION
END
EXCEPT
EXPLICIT
FALSE
FOR
FOREIGN
FREEZE
FROM
FULL
GLOBALDICT256
GLOBALDICT64K
GRANT
GROUP
GZIP
HAVING
IDENTITY
IGNORE
ILIKE
IN
INITIALLY
INNER
INTERSECT
INTERVAL
INTO
IS
ISNULL
JOIN
LEADING
LEFT
LIKE
LIMIT
LOCALTIME
LOCALTIMESTAMP
LUN
LUNS
LZO
LZOP
MINUS
MOSTLY16
MOSTLY32
MOSTLY8
NATURAL
NEW
NOT
NOTNULL
NULL
NULLS
OFF
OFFLINE
OFFSET
OID
OLD
ON
ONLY
OPEN
OR
ORDER
OUTER
OVERLAPS
PARALLEL
PARTITION
PERCENT
PERMISSIONS
PIVOT
PLACING
PRIMARY
RAW
READRATIO
RECOVER
REFERENCES
REJECTLOG
RESORT
RESPECT
RESTORE
RIGHT
SELECT
SESSION_USER
SIMILAR
SNAPSHOT 
SOME
SYSDATE
SYSTEM
TABLE
TAG
TDES
TEXT255
TEXT32K
THEN
TIMESTAMP
TO
TOP
TRAILING
TRUE
TRUNCATECOLUMNS
UNION
UNIQUE
UNNEST
UNPIVOT
USER
USING
VERBOSE
WALLET
WHEN
WHERE
WITH
WITHOUT
```