@ทอมมี่
การดำเนินการ COPY อนุญาตให้ทำการแปลงง่ายๆ เพียงไม่กี่ครั้งเท่านั้น เช่น การเปลี่ยนแปลงรูปแบบ DATETIME ตัวยึดตำแหน่ง NULL เป็นต้น
หากต้องการล้างข้อมูลของคุณอย่างกว้างขวาง คุณอาจต้องเขียนโปรแกรมของคุณเองและดัมพ์ผลลัพธ์กลับเข้าไปใน S3 ก่อนจึงจะสามารถคัดลอกลงใน RedShift ได้
หากข้อมูลของคุณมีขนาดเล็ก คุณสามารถเขียนโปรแกรมง่ายๆ โดยใช้ AWS SDK (พร้อมใช้งานในรูปแบบ Java, PHP และ Python) เพื่อดำเนินการ ETL และโหลดลงใน RedShift
ในกรณีของเรา ข้อมูลมีขนาดใหญ่ (~400 ล้านแถวต่อวัน) ดังนั้นเราจึงใช้ตัวแปลงสัญญาณ Amazon EMR, HIVE และ SerDe (JSON) เพื่อสร้างตาราง HIVE แบบลอจิคัล ใช้การแปลงโดยใช้ HQL และถ่ายโอนข้อมูลผลลัพธ์ที่ล้างแล้วกลับไปยัง S3 เป็นไฟล์คั่นด้วย TAB จากนั้นเราโหลดผลลัพธ์ลงใน redshift โดยใช้คำสั่ง COPY มาตรฐาน นอกจากนี้เรายังใช้ Amazon Data Pipeline เพื่อประสานและทำให้เวิร์กโฟลว์นี้เป็นอัตโนมัติอีกด้วย
อดีต. สคริปต์ไฮฟ์
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;
แน่นอนว่า ตัวอย่างที่แสดงข้างต้นเป็นเพียงการจัดรูปแบบข้อมูลใหม่ คุณอาจต้องเพิ่มการแปลงเพิ่มเติมตามกรณีการใช้งานของคุณ
หวังว่านี่จะช่วยได้
person
Jay
schedule
08.11.2014