

 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.

# 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
```