Langkah 5: Jalankan perintah COPY - Amazon Redshift

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

Langkah 5: Jalankan perintah COPY

Anda menjalankan perintah COPY untuk memuat setiap tabel dalam skema SSB. Contoh perintah COPY menunjukkan pemuatan dari format file yang berbeda, menggunakan beberapa opsi perintah COPY, dan pemecahan masalah kesalahan pemuatan.

COPY sintaks perintah

Sintaks MENYONTEK perintah dasar adalah sebagai berikut.

COPY table_name [ column_list ] FROM data_source CREDENTIALS access_credentials [options]

Untuk menjalankan perintah COPY, Anda memberikan nilai-nilai berikut.

Nama tabel

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.

Daftar kolom

Secara default, COPY memuat bidang dari data sumber ke kolom tabel secara berurutan. Anda dapat secara opsional menentukan daftar kolom, yaitu daftar nama kolom yang dipisahkan koma, untuk memetakan bidang data ke kolom tertentu. Anda tidak menggunakan daftar kolom dalam tutorial ini. Untuk informasi selengkapnya, lihat Column List di referensi perintah COPY.

Sumber data

Anda dapat menggunakan perintah COPY untuk memuat data dari bucket Amazon S3, cluster EMR Amazon, host jarak jauh menggunakan koneksi SSH, atau tabel Amazon DynamoDB. Untuk tutorial ini, Anda memuat dari file data di bucket Amazon S3. Saat memuat dari Amazon S3, Anda harus memberikan nama bucket dan lokasi file data. Untuk melakukan ini, berikan jalur objek untuk file data atau lokasi file manifes yang secara eksplisit mencantumkan setiap file data dan lokasinya.

  • Awalan kunci

    Objek yang disimpan di Amazon S3 diidentifikasi secara unik oleh kunci objek, yang mencakup nama bucket, nama folder, jika ada, dan nama objek. Sebuah key prefix mengacu pada satu set objek dengan awalan yang sama. Object path adalah key prefix yang digunakan perintah COPY untuk memuat semua objek yang berbagi key prefix. Misalnya, key prefix custdata.txt dapat merujuk ke satu file atau ke satu set file, termasuk, custdata.txt.001custdata.txt.002, dan sebagainya.

  • File manifes

    Dalam beberapa kasus, Anda mungkin perlu memuat file dengan awalan yang berbeda, misalnya dari beberapa bucket atau folder. Di tempat lain, Anda mungkin perlu mengecualikan file yang berbagi awalan. Dalam kasus ini, Anda dapat menggunakan file manifes. File manifes secara eksplisit mencantumkan setiap file pemuatan dan kunci objek uniknya. Anda menggunakan file manifes untuk memuat tabel PART nanti dalam tutorial ini.

Kredensial

Untuk mengakses AWS sumber daya yang berisi data yang akan dimuat, Anda harus memberikan kredensi AWS akses bagi pengguna dengan hak istimewa yang memadai. Kredensi ini mencakup peran IAM Amazon Resource Name (ARN). Untuk memuat data dari Amazon S3, kredensi harus menyertakan dan izin. ListBucket GetObject Kredensi tambahan diperlukan jika data Anda dienkripsi. Untuk informasi selengkapnya, lihat Parameter otorisasi di referensi perintah COPY. Untuk informasi selengkapnya tentang mengelola akses, buka Mengelola izin akses ke sumber daya Amazon S3 Anda.

Pilihan

Anda dapat menentukan sejumlah parameter dengan perintah COPY untuk menentukan format file, mengelola format data, mengelola kesalahan, dan mengontrol fitur lainnya. Dalam tutorial ini, Anda menggunakan opsi dan fitur perintah COPY berikut:

Memuat tabel SSB

Anda menggunakan perintah COPY berikut untuk memuat setiap tabel dalam skema SSB. Perintah untuk setiap tabel menunjukkan opsi COPY dan teknik pemecahan masalah yang berbeda.

Untuk memuat tabel SSB, ikuti langkah-langkah ini:

Ganti nama bucket dan AWS kredensialnya

Perintah COPY dalam tutorial ini disajikan dalam format berikut.

copy table from 's3://<your-bucket-name>/load/key_prefix' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' options;

Untuk setiap perintah COPY, lakukan hal berikut:

  1. Ganti <your-bucket-name>dengan nama bucket di wilayah yang sama dengan cluster Anda.

    Langkah ini mengasumsikan bucket dan cluster berada di wilayah yang sama. Atau, Anda dapat menentukan wilayah menggunakan REGION opsi dengan perintah COPY.

  2. Ganti <aws-account-id>dan <role-name>dengan peran Anda sendiri Akun AWS dan IAM. Segmen string kredensial yang diapit tanda kutip tunggal tidak boleh berisi spasi atau jeda baris. Perhatikan bahwa ARN mungkin sedikit berbeda dalam format dari sampel. Yang terbaik adalah menyalin ARN untuk peran dari konsol IAM, untuk memastikan bahwa itu akurat, ketika Anda menjalankan perintah COPY.

Muat tabel PART menggunakan NULL AS

Pada langkah ini, Anda menggunakan opsi CSV dan NULL AS untuk memuat tabel PART.

Perintah COPY dapat memuat data dari beberapa file secara paralel, yang jauh lebih cepat daripada memuat dari satu file. Untuk mendemonstrasikan prinsip ini, data untuk setiap tabel dalam tutorial ini dibagi menjadi delapan file, meskipun file-filenya sangat kecil. Pada langkah selanjutnya, Anda membandingkan perbedaan waktu antara memuat dari satu file dan memuat dari beberapa file. Untuk informasi selengkapnya, lihat Memuat file data.

Awalan kunci

Anda dapat memuat dari beberapa file dengan menentukan key prefix untuk kumpulan file, atau dengan secara eksplisit mencantumkan file dalam file manifes. Pada langkah ini, Anda menggunakan key prefix. Pada langkah selanjutnya, Anda menggunakan file manifes. Prefix key 's3://mybucket/load/part-csv.tbl' memuat kumpulan file berikut dalam folder. load

part-csv.tbl-000 part-csv.tbl-001 part-csv.tbl-002 part-csv.tbl-003 part-csv.tbl-004 part-csv.tbl-005 part-csv.tbl-006 part-csv.tbl-007
Format CSV

CSV, yang merupakan singkatan dari nilai dipisahkan koma, adalah format umum yang digunakan untuk mengimpor dan mengekspor data spreadsheet. CSV lebih fleksibel daripada format yang dibatasi koma karena memungkinkan Anda untuk memasukkan string yang dikutip dalam bidang. Karakter tanda kutip default untuk COPY dari format CSV adalah tanda kutip ganda ("), tetapi Anda dapat menentukan karakter tanda kutip lain dengan menggunakan opsi QUOTE AS. Saat Anda menggunakan karakter tanda kutip di dalam bidang, lepaskan karakter dengan karakter tanda kutip tambahan.

Kutipan berikut dari file data berformat CSV untuk tabel PART menunjukkan string terlampir dalam tanda kutip ganda (). "LARGE ANODIZED BRASS" Ini juga menunjukkan string tertutup dalam dua tanda kutip ganda dalam string yang dikutip (). "MEDIUM ""BURNISHED"" TIN"

15,dark sky,MFGR#3,MFGR#47,MFGR#3438,indigo,"LARGE ANODIZED BRASS",45,LG CASE 22,floral beige,MFGR#4,MFGR#44,MFGR#4421,medium,"PROMO, POLISHED BRASS",19,LG DRUM 23,bisque slate,MFGR#4,MFGR#41,MFGR#4137,firebrick,"MEDIUM ""BURNISHED"" TIN",42,JUMBO JAR

Data untuk tabel PART berisi karakter yang menyebabkan COPY gagal. Dalam latihan ini, Anda memecahkan masalah kesalahan dan memperbaikinya.

Untuk memuat data yang dalam format CSV, tambahkan csv ke perintah COPY Anda. Jalankan perintah berikut untuk memuat tabel PART.

copy part from 's3://<your-bucket-name>/load/part-csv.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' csv;

Anda mungkin mendapatkan pesan kesalahan yang mirip dengan berikut ini.

An error occurred when executing the SQL command: copy part from 's3://mybucket/load/part-csv.tbl' credentials' ... ERROR: Load into table 'part' failed. Check 'stl_load_errors' system table for details. [SQL State=XX000] Execution time: 1.46s 1 statement(s) failed. 1 statement(s) failed.

Untuk mendapatkan informasi lebih lanjut tentang kesalahan, kueri tabel STL_LOAD_ERRORS. Kueri berikut menggunakan fungsi SUBSTRING untuk mempersingkat kolom agar mudah dibaca dan menggunakan LIMIT 10 untuk mengurangi jumlah baris yang dikembalikan. Anda dapat menyesuaikan nilai substring(filename,22,25) untuk memungkinkan panjang nama bucket Anda.

select query, substring(filename,22,25) as filename,line_number as line, substring(colname,0,12) as column, type, position as pos, substring(raw_line,0,30) as line_text, substring(raw_field_value,0,15) as field_text, substring(err_reason,0,45) as reason from stl_load_errors order by query desc limit 10;
query | filename | line | column | type | pos | --------+-------------------------+-----------+------------+------------+-----+---- 333765 | part-csv.tbl-000 | 1 | | | 0 | line_text | field_text | reason ------------------+------------+---------------------------------------------- 15,NUL next, | | Missing newline: Unexpected character 0x2c f
NULL SEBAGAI

File part-csv.tbl data menggunakan karakter terminator NUL (\x000atau\x0) untuk menunjukkan nilai NULL.

catatan

Meskipun ejaan yang sangat mirip, NUL dan NULL tidak sama. NUL adalah karakter UTF-8 dengan codepoint x000 yang sering digunakan untuk menunjukkan akhir catatan (EOR). NULL adalah nilai SQL yang mewakili tidak adanya data.

Secara default, COPY memperlakukan karakter terminator NUL sebagai karakter EOR dan mengakhiri rekaman, yang sering menghasilkan hasil yang tidak terduga atau kesalahan. Tidak ada metode standar tunggal untuk menunjukkan NULL dalam data teks. Dengan demikian, opsi perintah NULL AS COPY memungkinkan Anda menentukan karakter mana yang akan diganti dengan NULL saat memuat tabel. Dalam contoh ini, Anda ingin COPY memperlakukan karakter terminator NUL sebagai nilai NULL.

catatan

Kolom tabel yang menerima nilai NULL harus dikonfigurasi sebagai nullable. Artinya, itu tidak boleh menyertakan kendala NOT NULL dalam spesifikasi CREATE TABLE.

Untuk memuat BAGIAN menggunakan opsi NULL AS, jalankan perintah COPY berikut.

copy part from 's3://<your-bucket-name>/load/part-csv.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' csv null as '\000';

Untuk memverifikasi bahwa COPY memuat nilai NULL, jalankan perintah berikut untuk memilih hanya baris yang berisi NULL.

select p_partkey, p_name, p_mfgr, p_category from part where p_mfgr is null;
p_partkey | p_name | p_mfgr | p_category -----------+----------+--------+------------ 15 | NUL next | | MFGR#47 81 | NUL next | | MFGR#23 133 | NUL next | | MFGR#44 (2 rows)

Muat tabel SUPPLIER menggunakan REGION

Pada langkah ini, Anda menggunakan opsi DELIMITER dan REGION untuk memuat tabel SUPPLIER.

catatan

File untuk memuat tabel SUPPLIER disediakan dalam ember AWS sampel. Anda tidak perlu mengunggah file untuk langkah ini.

Format yang Dibatasi Karakter

Bidang dalam file yang dibatasi karakter dipisahkan oleh karakter tertentu, seperti karakter pipa (|), koma (,) atau tab (\ t). File yang dibatasi karakter dapat menggunakan karakter ASCII tunggal apa pun, termasuk salah satu karakter ASCII yang tidak dicetak, sebagai pembatas. Anda menentukan karakter pembatas dengan menggunakan opsi DELIMITER. Pembatas default adalah karakter pipa (|).

Kutipan berikut dari data untuk tabel SUPPLIER menggunakan format yang dibatasi pipa.

1|1|257368|465569|41365|19950218|2-HIGH|0|17|2608718|9783671|4|2504369|92072|2|19950331|TRUCK 1|2|257368|201928|8146|19950218|2-HIGH|0|36|6587676|9783671|9|5994785|109794|6|19950416|MAIL
DAERAH

Jika memungkinkan, Anda harus menemukan data pemuatan Anda di AWS wilayah yang sama dengan cluster Amazon Redshift Anda. Jika data dan cluster Anda berada di wilayah yang sama, Anda mengurangi latensi dan menghindari biaya transfer data lintas wilayah. Untuk informasi selengkapnya, lihat Praktik terbaik Amazon Redshift untuk memuat data

Jika Anda harus memuat data dari AWS wilayah yang berbeda, gunakan opsi REGION untuk menentukan AWS wilayah di mana data beban berada. Jika Anda menentukan wilayah, semua data pemuatan, termasuk file manifes, harus berada di wilayah bernama. Untuk informasi selengkapnya, lihat REGION.

Jika klaster Anda berada di Wilayah AS Timur (Virginia N.), jalankan perintah berikut untuk memuat tabel SUPPLIER dari data yang dibatasi pipa di bucket Amazon S3 yang terletak di Wilayah AS Barat (Oregon). Untuk contoh ini, jangan ubah nama bucket.

copy supplier from 's3://awssampledbuswest2/ssbgz/supplier.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' delimiter '|' gzip region 'us-west-2';

Jika klaster Anda tidak berada di wilayah US East (Virginia N.), jalankan perintah berikut untuk memuat tabel SUPPLIER dari data yang dibatasi pipa di bucket Amazon S3 yang terletak di wilayah US East (Virginia N.). Untuk contoh ini, jangan ubah nama bucket.

copy supplier from 's3://awssampledb/ssbgz/supplier.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' delimiter '|' gzip region 'us-east-1';

Muat tabel PELANGGAN menggunakan MANIFEST

Pada langkah ini, Anda menggunakan opsi FIXEDWIDTH, MAXERROR, ACCEPTINVCHARS, dan MANIFEST untuk memuat tabel PELANGGAN.

Data sampel untuk latihan ini berisi karakter yang menyebabkan kesalahan saat COPY mencoba memuatnya. Anda menggunakan opsi MAXERRORS dan tabel sistem STL_LOAD_ERRORS untuk memecahkan masalah kesalahan pemuatan dan kemudian menggunakan opsi ACCEPTINVCHARS dan MANIFEST untuk menghilangkan kesalahan.

Format Lebar Tetap

Format Fixed-width mendefinisikan setiap bidang sebagai jumlah karakter tetap, bukan memisahkan bidang dengan pembatas. Kutipan berikut dari data untuk tabel PELANGGAN menggunakan format lebar tetap.

1 Customer#000000001 IVhzIApeRb MOROCCO 0MOROCCO AFRICA 25-705 2 Customer#000000002 XSTf4,NCwDVaWNe6tE JORDAN 6JORDAN MIDDLE EAST 23-453 3 Customer#000000003 MG9kdTD ARGENTINA5ARGENTINAAMERICA 11-783

Urutan pasangan label/lebar harus sesuai dengan urutan kolom tabel dengan tepat. Untuk informasi selengkapnya, lihat FIXEDWIDTH.

String spesifikasi lebar tetap untuk data tabel PELANGGAN adalah sebagai berikut.

fixedwidth 'c_custkey:10, c_name:25, c_address:25, c_city:10, c_nation:15, c_region :12, c_phone:15,c_mktsegment:10'

Untuk memuat tabel CUSTOMER dari data fixed-width, jalankan perintah berikut.

copy customer from 's3://<your-bucket-name>/load/customer-fw.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' fixedwidth 'c_custkey:10, c_name:25, c_address:25, c_city:10, c_nation:15, c_region :12, c_phone:15,c_mktsegment:10';

Anda harus mendapatkan pesan kesalahan, mirip dengan yang berikut ini.

An error occurred when executing the SQL command: copy customer from 's3://mybucket/load/customer-fw.tbl' credentials'... ERROR: Load into table 'customer' failed. Check 'stl_load_errors' system table for details. [SQL State=XX000] Execution time: 2.95s 1 statement(s) failed.
MAXERROR

Secara default, pertama kali COPY menemukan kesalahan, perintah gagal dan mengembalikan pesan kesalahan. Untuk menghemat waktu selama pengujian, Anda dapat menggunakan opsi MAXERROR untuk menginstruksikan COPY untuk melewati sejumlah kesalahan tertentu sebelum gagal. Karena kami mengharapkan kesalahan saat pertama kali kami menguji pemuatan data tabel PELANGGAN, tambahkan maxerror 10 ke perintah COPY.

Untuk menguji menggunakan opsi FIXEDWIDTH dan MAXERROR, jalankan perintah berikut.

copy customer from 's3://<your-bucket-name>/load/customer-fw.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' fixedwidth 'c_custkey:10, c_name:25, c_address:25, c_city:10, c_nation:15, c_region :12, c_phone:15,c_mktsegment:10' maxerror 10;

Kali ini, alih-alih pesan kesalahan, Anda mendapatkan pesan peringatan yang mirip dengan yang berikut ini.

Warnings: Load into table 'customer' completed, 112497 record(s) loaded successfully. Load into table 'customer' completed, 7 record(s) could not be loaded. Check 'stl_load_errors' system table for details.

Peringatan menunjukkan bahwa COPY mengalami tujuh kesalahan. Untuk memeriksa kesalahan, kueri tabel STL_LOAD_ERRORS, seperti yang ditunjukkan pada contoh berikut.

select query, substring(filename,22,25) as filename,line_number as line, substring(colname,0,12) as column, type, position as pos, substring(raw_line,0,30) as line_text, substring(raw_field_value,0,15) as field_text, substring(err_reason,0,45) as error_reason from stl_load_errors order by query desc, filename limit 7;

Hasil kueri STL_LOAD_ERRORS akan terlihat mirip dengan yang berikut ini.

query | filename | line | column | type | pos | line_text | field_text | error_reason --------+---------------------------+------+-----------+------------+-----+-------------------------------+------------+---------------------------------------------- 334489 | customer-fw.tbl.log | 2 | c_custkey | int4 | -1 | customer-fw.tbl | customer-f | Invalid digit, Value 'c', Pos 0, Type: Integ 334489 | customer-fw.tbl.log | 6 | c_custkey | int4 | -1 | Complete | Complete | Invalid digit, Value 'C', Pos 0, Type: Integ 334489 | customer-fw.tbl.log | 3 | c_custkey | int4 | -1 | #Total rows | #Total row | Invalid digit, Value '#', Pos 0, Type: Integ 334489 | customer-fw.tbl.log | 5 | c_custkey | int4 | -1 | #Status | #Status | Invalid digit, Value '#', Pos 0, Type: Integ 334489 | customer-fw.tbl.log | 1 | c_custkey | int4 | -1 | #Load file | #Load file | Invalid digit, Value '#', Pos 0, Type: Integ 334489 | customer-fw.tbl000 | 1 | c_address | varchar | 34 | 1 Customer#000000001 | .Mayag.ezR | String contains invalid or unsupported UTF8 334489 | customer-fw.tbl000 | 1 | c_address | varchar | 34 | 1 Customer#000000001 | .Mayag.ezR | String contains invalid or unsupported UTF8 (7 rows)

Dengan memeriksa hasilnya, Anda dapat melihat bahwa ada dua pesan di error_reasons kolom:

  • Invalid digit, Value '#', Pos 0, Type: Integ

    Kesalahan ini disebabkan oleh customer-fw.tbl.log file. Masalahnya adalah itu adalah file log, bukan file data, dan tidak boleh dimuat. Anda dapat menggunakan file manifes untuk menghindari memuat file yang salah.

  • String contains invalid or unsupported UTF8

    Tipe data VARCHAR mendukung multibyte UTF-8 karakter hingga tiga byte. Jika data pemuatan berisi karakter yang tidak didukung atau tidak valid, Anda dapat menggunakan opsi ACCEPTINVCHARS untuk mengganti setiap karakter yang tidak valid dengan karakter alternatif tertentu.

Masalah lain dengan beban lebih sulit dideteksi — beban menghasilkan hasil yang tidak terduga. Untuk menyelidiki masalah ini, jalankan perintah berikut untuk query tabel CUSTOMER.

select c_custkey, c_name, c_address from customer order by c_custkey limit 10;
c_custkey | c_name | c_address -----------+---------------------------+--------------------------- 2 | Customer#000000002 | XSTf4,NCwDVaWNe6tE 2 | Customer#000000002 | XSTf4,NCwDVaWNe6tE 3 | Customer#000000003 | MG9kdTD 3 | Customer#000000003 | MG9kdTD 4 | Customer#000000004 | XxVSJsL 4 | Customer#000000004 | XxVSJsL 5 | Customer#000000005 | KvpyuHCplrB84WgAi 5 | Customer#000000005 | KvpyuHCplrB84WgAi 6 | Customer#000000006 | sKZz0CsnMD7mp4Xd0YrBvx 6 | Customer#000000006 | sKZz0CsnMD7mp4Xd0YrBvx (10 rows)

Baris harus unik, tetapi ada duplikat.

Cara lain untuk memeriksa hasil yang tidak terduga adalah dengan memverifikasi jumlah baris yang dimuat. Dalam kasus kami, 100000 baris seharusnya dimuat, tetapi pesan pemuatan melaporkan memuat 112497 catatan. Baris tambahan dimuat karena COPY memuat file asing,. customer-fw.tbl0000.bak

Dalam latihan ini, Anda menggunakan file manifes untuk menghindari memuat file yang salah.

TERIMA INVCHARS

Secara default, ketika COPY menemukan karakter yang tidak didukung oleh tipe data kolom, ia melewatkan baris dan mengembalikan kesalahan. Untuk informasi tentang karakter UTF-8 yang tidak valid, lihat. Kesalahan pemuatan karakter multibyte

Anda dapat menggunakan opsi MAXERRORS untuk mengabaikan kesalahan dan melanjutkan pemuatan, lalu kueri STL_LOAD_ERRORS untuk menemukan karakter yang tidak valid, dan kemudian memperbaiki file data. Namun, MAXERRORS paling baik digunakan untuk memecahkan masalah beban dan umumnya tidak boleh digunakan dalam lingkungan produksi.

Opsi ACCEPTINVCHARS biasanya merupakan pilihan yang lebih baik untuk mengelola karakter yang tidak valid. ACCEPTINVCHARS menginstruksikan COPY untuk mengganti setiap karakter yang tidak valid dengan karakter valid yang ditentukan dan melanjutkan operasi pemuatan. Anda dapat menentukan karakter ASCII yang valid, kecuali NULL, sebagai karakter pengganti. Karakter pengganti default adalah tanda tanya (? ). COPY menggantikan karakter multibyte dengan string pengganti dengan panjang yang sama. Misalnya, karakter 4-byte akan diganti dengan'????'.

COPY mengembalikan jumlah baris yang berisi karakter UTF-8 yang tidak valid. Ini juga menambahkan entri ke tabel sistem STL_REPLACEMENTS untuk setiap baris yang terpengaruh, hingga maksimum 100 baris per irisan node. Karakter UTF-8 tambahan yang tidak valid juga diganti, tetapi peristiwa pengganti tersebut tidak direkam.

ACCEPTINVCHARS hanya berlaku untuk kolom VARCHAR.

Untuk langkah ini, Anda menambahkan ACCEPTINVCHARS dengan karakter pengganti. '^'

NYATA

Saat Anda MENYALIN dari Amazon S3 menggunakan key prefix, ada risiko Anda mungkin memuat tabel yang tidak diinginkan. Misalnya, 's3://mybucket/load/ folder berisi delapan file data yang berbagi key prefixcustomer-fw.tbl:customer-fw.tbl0000,customer-fw.tbl0001, dan seterusnya. Namun, folder yang sama juga berisi file customer-fw.tbl.log asing dan. customer-fw.tbl-0001.bak

Untuk memastikan bahwa Anda memuat semua file yang benar, dan hanya file yang benar, gunakan file manifes. Manifes adalah file teks dalam format JSON yang secara eksplisit mencantumkan kunci objek unik untuk setiap file sumber yang akan dimuat. Objek file dapat berada di folder yang berbeda atau ember yang berbeda, tetapi mereka harus berada di wilayah yang sama. Untuk informasi selengkapnya, lihat MANIFEST.

Berikut ini menunjukkan customer-fw-manifest teks.

{ "entries": [ {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-000"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-001"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-002"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-003"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-004"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-005"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-006"}, {"url":"s3://<your-bucket-name>/load/customer-fw.tbl-007"} ] }
Untuk memuat data untuk tabel CUSTOMER menggunakan file manifes
  1. Buka file customer-fw-manifest di editor teks.

  2. Ganti <your-bucket-name>dengan nama ember Anda.

  3. Simpan file tersebut.

  4. Unggah file ke folder pemuatan di bucket Anda.

  5. Jalankan perintah COPY berikut.

    copy customer from 's3://<your-bucket-name>/load/customer-fw-manifest' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' fixedwidth 'c_custkey:10, c_name:25, c_address:25, c_city:10, c_nation:15, c_region :12, c_phone:15,c_mktsegment:10' maxerror 10 acceptinvchars as '^' manifest;

Muat tabel DWDATE menggunakan DATEFORMAT

Pada langkah ini, Anda menggunakan opsi DELIMITER dan DATEFORMAT untuk memuat tabel DWDATE.

Saat memuat kolom DATE dan TIMESTAMP, COPY mengharapkan format default, yaitu YYYY-MM-DD untuk tanggal dan YYYY-MM-DD HH: MI: SS untuk stempel waktu. Jika data beban tidak menggunakan format default, Anda dapat menggunakan DATEFORMAT dan TIMEFORMAT untuk menentukan format.

Kutipan berikut menunjukkan format tanggal dalam tabel DWDATE. Perhatikan bahwa format tanggal di kolom dua tidak konsisten.

19920104 1992-01-04 Sunday January 1992 199201 Jan1992 1 4 4 1... 19920112 January 12, 1992 Monday January 1992 199201 Jan1992 2 12 12 1... 19920120 January 20, 1992 Tuesday January 1992 199201 Jan1992 3 20 20 1...
FORMAT TANGGAL

Anda hanya dapat menentukan satu format tanggal. Jika data pemuatan berisi format yang tidak konsisten, mungkin dalam kolom yang berbeda, atau jika format tidak diketahui pada waktu muat, Anda menggunakan DATEFORMAT dengan argumen. 'auto' Kapan 'auto' ditentukan, COPY mengenali format tanggal atau waktu yang valid dan mengubahnya menjadi format default. 'auto'Opsi ini mengenali beberapa format yang tidak didukung saat menggunakan string DATEFORMAT dan TIMEFORMAT. Untuk informasi selengkapnya, lihat Menggunakan pengenalan otomatis dengan DATEFORMAT dan TIMEFORMAT.

Untuk memuat tabel DWDATE, jalankan perintah COPY berikut.

copy dwdate from 's3://<your-bucket-name>/load/dwdate-tab.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' delimiter '\t' dateformat 'auto';

Muat tabel LINEORDER menggunakan beberapa file

Langkah ini menggunakan opsi GZIP dan COMPUPDATE untuk memuat tabel LINEORDER.

Dalam latihan ini, Anda memuat tabel LINEORDER dari satu file data dan kemudian memuatnya lagi dari beberapa file. Melakukan hal ini memungkinkan Anda untuk membandingkan waktu muat untuk dua metode.

catatan

File untuk memuat tabel LINEORDER disediakan dalam ember AWS sampel. Anda tidak perlu mengunggah file untuk langkah ini.

GZIP, LZOP dan BZIP2

Anda dapat mengompres file Anda menggunakan format kompresi gzip, lzop, atau bzip2. Saat memuat dari file terkompresi, COPY membuka kompres file selama proses pemuatan. Mengompresi file Anda menghemat ruang penyimpanan dan mempersingkat waktu upload.

COMPUPDATE

Ketika COPY memuat tabel kosong tanpa pengkodean kompresi, ia menganalisis data beban untuk menentukan pengkodean yang optimal. Kemudian mengubah tabel untuk menggunakan pengkodean tersebut sebelum memulai beban. Proses analisis ini membutuhkan waktu, tetapi terjadi, paling banyak, sekali per tabel. Untuk menghemat waktu, Anda dapat melewati langkah ini dengan mematikan COMPUPDATE. Untuk mengaktifkan evaluasi waktu COPY yang akurat, Anda menonaktifkan COMPUPDATE untuk langkah ini.

Beberapa File

Perintah COPY dapat memuat data dengan sangat efisien ketika memuat dari beberapa file secara paralel, bukan dari satu file. Anda dapat membagi data Anda menjadi file sehingga jumlah file adalah kelipatan dari jumlah irisan di cluster Anda. Jika ya, Amazon Redshift membagi beban kerja dan mendistribusikan data secara merata di antara irisan. Jumlah irisan per node tergantung pada ukuran node cluster. Untuk informasi selengkapnya tentang jumlah irisan yang dimiliki setiap ukuran node, buka Tentang cluster dan node di Panduan Manajemen Pergeseran Merah Amazon.

Misalnya, node komputasi dc2.large yang digunakan dalam tutorial ini masing-masing memiliki dua irisan, sehingga cluster empat simpul memiliki delapan irisan. Pada langkah sebelumnya, data pemuatan terkandung dalam delapan file, meskipun file-file tersebut sangat kecil. Pada langkah ini, Anda membandingkan perbedaan waktu antara memuat dari satu file besar dan memuat dari beberapa file.

File yang Anda gunakan untuk tutorial ini berisi sekitar 15 juta catatan dan menempati sekitar 1,2 GB. File-file ini sangat kecil dalam skala Amazon Redshift, tetapi cukup untuk menunjukkan keunggulan kinerja pemuatan dari banyak file. File-file tersebut cukup besar sehingga waktu yang dibutuhkan untuk mengunduhnya dan kemudian mengunggahnya ke Amazon S3 berlebihan untuk tutorial ini. Dengan demikian, Anda memuat file langsung dari ember AWS sampel.

Tangkapan layar berikut menunjukkan file data untuk LINEORDER.

Untuk mengevaluasi kinerja COPY dengan banyak file
  1. Jalankan perintah berikut untuk COPY dari satu file. Jangan mengubah nama bucket.

    copy lineorder from 's3://awssampledb/load/lo/lineorder-single.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' gzip compupdate off region 'us-east-1';
  2. Hasil Anda harus serupa dengan yang berikut ini. Perhatikan waktu eksekusi.

    Warnings: Load into table 'lineorder' completed, 14996734 record(s) loaded successfully. 0 row(s) affected. copy executed successfully Execution time: 51.56s
  3. Jalankan perintah berikut untuk COPY dari beberapa file. Jangan mengubah nama bucket.

    copy lineorder from 's3://awssampledb/load/lo/lineorder-multi.tbl' credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>' gzip compupdate off region 'us-east-1';
  4. Hasil Anda harus serupa dengan yang berikut ini. Perhatikan waktu eksekusi.

    Warnings: Load into table 'lineorder' completed, 14996734 record(s) loaded successfully. 0 row(s) affected. copy executed successfully Execution time: 17.7s
  5. Bandingkan waktu eksekusi.

    Dalam contoh kita, waktu untuk memuat 15 juta catatan menurun dari 51,56 detik menjadi 17,7 detik, pengurangan 65,7 persen.

    Hasil ini didasarkan pada penggunaan cluster empat simpul. Jika cluster Anda memiliki lebih banyak node, penghematan waktu dikalikan. Untuk cluster Amazon Redshift yang khas, dengan puluhan hingga ratusan node, perbedaannya bahkan lebih dramatis. Jika Anda memiliki cluster node tunggal, ada sedikit perbedaan antara waktu eksekusi.

Langkah selanjutnya

Langkah 6: Vakum dan analisis database