@Tommy
Operasi COPY hanya mengizinkan beberapa transformasi sederhana seperti perubahan format DATETIME, placeholder NULL, dll.
Untuk membersihkan data secara ekstensif, Anda mungkin harus menulis program Anda sendiri dan membuang hasilnya kembali ke S3 sebelum dapat disalin ke redshift.
Jika data Anda kecil, Anda dapat menulis program sederhana menggunakan AWS SDK (tersedia dalam varian Java, PHP, dan Python) untuk melakukan ETL dan memuatnya ke redshift.
Dalam kasus kami, datanya sangat besar (~400 Juta baris per hari) jadi, kami menggunakan codec Amazon EMR, HIVE, dan SerDe (JSON) untuk membuat tabel logika HIVE, menerapkan transformasi menggunakan HQL, dan membuang hasil yang sudah dibersihkan kembali ke S3 sebagai file yang dibatasi TAB. Kemudian, kita memuat hasilnya ke dalam pergeseran merah menggunakan perintah standar COPY. Kami juga menggunakan Amazon Data Pipeline untuk mengatur dan mengotomatiskan alur kerja ini.
Mantan. Skrip HIVE
add jar s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar; --SerDe codec
CREATE EXTERNAL TABLE source_table_name (column_a string, column_b date) row format
serde 'com.amazon.elasticmapreduce.JsonSerde'
with serdeproperties (
'paths'='column_a, column_b'
) LOCATION 's3a://your-bucket-name/source-directory-path/';
CREATE EXTERNAL TABLE dest_table_name (column_a string, column_b date) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3n://your-bucket-name/dest-directory-path/';
INSERT INTO dest_table_name select * from source_table_name;
Tentu saja, contoh di atas hanya memformat ulang data. Anda mungkin harus menambahkan transformasi tambahan berdasarkan kasus penggunaan Anda.
Semoga ini membantu.
person
Jay
schedule
08.11.2014