Amazon Redshift SALINAN dengan transformasi

Redshift memiliki operasi COPY yang memungkinkan Anda menyalin file dari S3 ke Redshift (http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html).

File .json yang ada di S3 adalah ``kotor"; mereka belum siap untuk disalin ke Redshift secara langsung dan perlu dijalankan melalui transformasi terlebih dahulu. Pertanyaan saya adalah; apakah saya perlu menulis file JSON baru yang sudah dibersihkan kembali ke S3 , lalu lakukan COPY dari file yang dibersihkan tersebut, atau adakah cara untuk menjalankan jsons melalui transformasi ini sebagai bagian dari prosedur penyalinan?


person Tommy    schedule 06.11.2014    source sumber


Jawaban (1)


@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