Amazon RedShift COPY พร้อมการเปลี่ยนแปลง

Redshift มีการดำเนินการ COPY ที่ให้คุณคัดลอกไฟล์จาก S3 ไปยัง Redshift (http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html)

ไฟล์ .json ที่อยู่ใน S3 นั้น ``สกปรก" ซึ่งไม่พร้อมที่จะคัดลอกไปยัง Redshift โดยตรงและจำเป็นต้องดำเนินการผ่านการแปลงก่อน คำถามของฉันคือ ฉันจำเป็นต้องเขียนไฟล์ JSON ที่ล้างข้อมูลใหม่กลับไปยัง S3 หรือไม่ จากนั้นทำการ COPY จากไฟล์ที่ล้างแล้ว หรือมีวิธีรัน jsons ผ่านการแปลงนี้โดยเป็นส่วนหนึ่งของขั้นตอนการคัดลอกหรือไม่


person Tommy    schedule 06.11.2014    source แหล่งที่มา


คำตอบ (1)


@ทอมมี่

การดำเนินการ 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