เร่งการย้ายคลังข้อมูลของคุณไปยัง Amazon Redshift – ตอนที่ 3

โหนดต้นทาง: 1875312

นี่เป็นโพสต์ที่สามในซีรีส์หลายตอน เรารู้สึกตื่นเต้นที่จะแบ่งปันคุณสมบัติใหม่มากมายเพื่อทำให้การแปลงสคีมาของคุณเป็นแบบอัตโนมัติ รักษาการลงทุนของคุณในสคริปต์ รายงาน และแอปพลิเคชันที่มีอยู่ เร่งประสิทธิภาพการสืบค้น และลดต้นทุนโดยรวมของคุณในการโยกย้ายไปยัง อเมซอน Redshift.

Amazon Redshift เป็นคลังข้อมูลบนคลาวด์ชั้นนำ ไม่มีคลังข้อมูลอื่นใดที่ช่วยให้การรับข้อมูลเชิงลึกใหม่จากข้อมูลของคุณเป็นเรื่องง่าย ด้วย Amazon Redshift คุณสามารถสืบค้นข้อมูลระดับเอกซะไบต์ทั่วทั้งคลังข้อมูล ที่เก็บข้อมูลการดำเนินงาน และที่จัดเก็บข้อมูลดิบโดยใช้ SQL มาตรฐาน คุณยังสามารถผสานรวมบริการอื่นๆ เช่น อเมซอน EMR, อเมซอน อาเธน่าและ อเมซอน SageMaker เพื่อใช้ความสามารถในการวิเคราะห์ทั้งหมดใน AWS Cloud

ลูกค้าจำนวนมากขอความช่วยเหลือในการย้ายจากกลไกคลังข้อมูลที่จัดการด้วยตนเอง เช่น Teradata ไปยัง Amazon Redshift ในกรณีเหล่านี้ คุณอาจมีข้อมูลประวัติเป็นเทราไบต์ (หรือเพทาไบต์) การพึ่งพาคุณลักษณะที่เป็นกรรมสิทธิ์อย่างมาก และกระบวนการดึงข้อมูล แปลง และโหลด (ETL) นับพันรายการที่สร้างขึ้นตลอดหลายปี (หรือหลายทศวรรษ) ของการใช้งาน

จนถึงขณะนี้ การย้ายคลังข้อมูล Teradata ไปยัง AWS นั้นซับซ้อนและต้องใช้ความพยายามด้วยตนเองเป็นจำนวนมาก

วันนี้ เรายินดีที่จะแบ่งปันการปรับปรุงล่าสุดกับ Amazon Redshift และ เครื่องมือแปลงสคีมาของ AWS (AWS SCT) ที่ช่วยให้การย้าย Teradata ของคุณไปยัง Amazon Redshift เป็นแบบอัตโนมัติได้ง่ายขึ้น

ในโพสต์นี้ เราขอแนะนำระบบอัตโนมัติใหม่สำหรับการผสาน ฟังก์ชันดั้งเดิมเพื่อรองรับการแปลงอักขระ ASCII การตรวจสอบข้อผิดพลาดที่เพิ่มขึ้นสำหรับการแปลงสตริงเป็นวันที่ การสนับสนุนที่เพิ่มขึ้นสำหรับเคอร์เซอร์ Teradata และคอลัมน์ข้อมูลประจำตัว ระบบอัตโนมัติสำหรับภาคแสดงใดๆ และบางรายการ การทำงานอัตโนมัติสำหรับ RESET WHEN ส่วนคำสั่ง ระบบอัตโนมัติสำหรับฟังก์ชัน Teradata ที่เป็นกรรมสิทธิ์สองรายการ (TD_NORMALIZE_OVERLAP และ TD_UNPIVOT) และระบบอัตโนมัติเพื่อรองรับฟังก์ชันการวิเคราะห์ (QUANTILE และ QUALIFY)

คำสั่งผสาน

เช่นเดียวกับชื่อที่บอกเป็นนัย คำสั่งผสานใช้ชุดอินพุตและผสานเข้ากับตารางเป้าหมาย หากมีแถวอินพุตอยู่แล้วในตารางเป้าหมาย (แถวในตารางเป้าหมายมีค่าคีย์หลักเหมือนกัน) แถวเป้าหมายจะได้รับการอัปเดต หากไม่มีแถวเป้าหมายที่ตรงกัน แถวอินพุตจะถูกแทรกลงในตาราง

จนถึงตอนนี้ หากคุณใช้คำสั่งการรวมในปริมาณงานของคุณ คุณถูกบังคับให้เขียนคำสั่งผสานใหม่ด้วยตนเองเพื่อรันบน Amazon Redshift ตอนนี้ เรายินดีที่จะแจ้งให้ทราบว่า AWS SCT จะทำการแปลงให้คุณโดยอัตโนมัติ AWS SCT แยกส่วนคำสั่งการรวมเป็นอัปเดตในระเบียนที่มีอยู่แล้วตามด้วยส่วนแทรกสำหรับระเบียนใหม่

มาดูตัวอย่างกัน เราสร้างสองตารางใน Teradata: ตารางเป้าหมาย employeeและตารางเดลต้า employee_deltaที่เรากำหนดแถวอินพุต:

CREATE TABLE testschema.employee( id INTEGER
, name VARCHAR(20)
, manager INTEGER)
UNIQUE PRIMARY INDEX (id)
; CREATE TABLE testschema.employee_delta ( id INTEGER
, name VARCHAR(20)
, manager INTEGER)
UNIQUE PRIMARY INDEX(id)
;

ตอนนี้เราสร้างคำสั่งผสาน Teradata ที่อัปเดตแถวหากมีอยู่ในเป้าหมาย มิฉะนั้นจะแทรกแถวใหม่ เราฝังคำสั่งผสานนี้ไว้ในมาโครเพื่อให้เราสามารถแสดงกระบวนการแปลงในภายหลัง

REPLACE MACRO testschema.merge_employees AS ( MERGE INTO testschema.employee tgt USING testschema.employee_delta delta ON delta.id = tgt.id WHEN MATCHED THEN UPDATE SET name = delta.name, manager = delta.manager WHEN NOT MATCHED THEN INSERT (delta.id, delta.name, delta.manager);
);

ตอนนี้เราใช้ AWS SCT เพื่อแปลงมาโคร (ดู เร่งการย้ายคลังข้อมูลของคุณไปยัง Amazon Redshift – ตอนที่ 1 สำหรับรายละเอียดเกี่ยวกับการแปลงมาโคร) AWS SCT จะสร้างกระบวนงานที่เก็บไว้ซึ่งมีการอัปเดต (เพื่อใช้เงื่อนไข WHEN MATCHED) และส่วนแทรก (เพื่อใช้เงื่อนไข WHEN NOT MATCHED)

CREATE OR REPLACE PROCEDURE testschema.merge_employees()
AS $BODY$
BEGIN UPDATE testschema.employee SET name = "delta".name, manager = "delta".manager FROM testschema.employee_delta AS delta JOIN testschema.employee AS tgt ON "delta".id = tgt.id; INSERT INTO testschema.employee SELECT "delta".id , "delta".name , "delta".manager FROM testschema.employee_delta AS delta WHERE NOT EXISTS ( SELECT 1 FROM testschema.employee AS tgt WHERE "delta".id = tgt.id );
END;
$BODY$
LANGUAGE plpgsql;

ตัวอย่างนี้แสดงวิธีใช้การผสานอัตโนมัติสำหรับมาโคร แต่คุณสามารถแปลงคำสั่งผสานในบริบทของแอปพลิเคชันใดก็ได้: กระบวนงานที่เก็บไว้ สคริปต์ BTEQ โค้ด Java และอื่นๆ ดาวน์โหลด รุ่นล่าสุด ของ AWS SCT แล้วลองใช้งาน

ฟังก์ชัน ASCII()

ฟังก์ชัน ASCII ใช้เป็นสตริงอินพุตและส่งคืนโค้ด ASCII หรือจุดโค้ด UNICODE ของอักขระตัวแรกในสตริงให้แม่นยำยิ่งขึ้น ก่อนหน้านี้ Amazon Redshift รองรับ ASCII เป็นฟังก์ชันลีดเดอร์โหนดเท่านั้น ซึ่งทำให้ไม่สามารถใช้กับตารางที่ผู้ใช้กำหนดเองได้

เรายินดีที่จะแจ้งให้ทราบว่าขณะนี้ฟังก์ชัน ASCII พร้อมใช้งานบนโหนดประมวลผล Amazon Redshift และสามารถใช้กับตารางที่ผู้ใช้กำหนดได้ ในโค้ดต่อไปนี้ เราสร้างตารางที่มีข้อมูลสตริง:

CREATE TABLE testschema.char_table ( id INTEGER
, char_col CHAR(10)
, varchar_col VARCHAR(10)
); INSERT INTO testschema.char_table VALUES (1, 'Hello', 'world');

ตอนนี้คุณสามารถใช้ฟังก์ชัน ASCII ในคอลัมน์สตริงได้:

# SELECT id, char_col, ascii(char_col), varchar_col, ascii(varchar_col) FROM testschema.char_table; id | char_col | ascii | varchar_col | ascii 1 | Hello | 72 | world | 119

ประการสุดท้าย หากโค้ดแอปพลิเคชันของคุณใช้ฟังก์ชัน ASCII AWS SCT จะแปลงการเรียกใช้ฟังก์ชันดังกล่าวเป็น Amazon Redshift โดยอัตโนมัติ

พื้นที่ คุณสมบัติ ASCII พร้อมใช้งานแล้ว—ลองใช้ในคลัสเตอร์ของคุณเอง

TO_DATE() ฟังก์ชัน

ฟังก์ชัน TO_DATE แปลงสตริงอักขระเป็นค่า DATE มุมแหลมของฟังก์ชันนี้คือสามารถรับค่าสตริงที่ไม่ใช่วันที่ที่ถูกต้องและแปลเป็นวันที่ที่ถูกต้องได้

ตัวอย่างเช่น พิจารณาสตริง 2021-06-31. นี่ไม่ใช่วันที่ที่ถูกต้องเนื่องจากเดือนมิถุนายนมีเพียง 30 วัน อย่างไรก็ตาม ฟังก์ชัน TO_DATE ยอมรับสตริงนี้และส่งกลับวันที่ “31st” ของเดือนมิถุนายน (1 กรกฎาคม):

# SELECT to_date('2021-06-31', 'YYYY-MM-DD'); to_date 2021-07-01
(1 row)

ลูกค้าขอให้ตรวจสอบข้อมูล TO_DATE อย่างเคร่งครัด และเรายินดีที่จะแบ่งปันความสามารถใหม่นี้ ตอนนี้คุณสามารถรวมค่าบูลีนในการเรียกใช้ฟังก์ชันที่เปิดใช้การตรวจสอบอย่างเข้มงวด:

# SELECT to_date('2021-06-31', 'YYYY-MM-DD', TRUE);
ERROR: date/time field date value out of range: 2021-6-31

คุณสามารถปิดการตรวจสอบอย่างเข้มงวดอย่างชัดเจนได้เช่นกัน:

# SELECT to_date('2021-06-31', 'YYYY-MM-DD', FALSE); to_date 2021-07-01
(1 row)

นอกจากนี้ ค่าบูลีนก็เป็นทางเลือก หากคุณไม่ได้รวมไว้ การตรวจสอบอย่างเข้มงวดจะปิด และคุณจะเห็นการทำงานแบบเดียวกันกับก่อนเปิดตัวคุณลักษณะ

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ ถึง_DATE และลองตรวจสอบวันที่ที่เข้มงวดใน Amazon Redshift ทันที

ชุดผลลัพธ์ของเคอร์เซอร์

เคอร์เซอร์คือโครงสร้างภาษาโปรแกรมที่แอปพลิเคชันใช้เพื่อจัดการชุดผลลัพธ์ทีละแถว เคอร์เซอร์มีความเกี่ยวข้องกับแอปพลิเคชัน OLTP มากกว่า แต่แอปพลิเคชันรุ่นเก่าบางแอปพลิเคชันที่สร้างขึ้นบนคลังข้อมูลก็ใช้งานเช่นกัน

Teradata มีการกำหนดค่าเคอร์เซอร์ที่หลากหลาย Amazon Redshift รองรับชุดคุณสมบัติเคอร์เซอร์ที่มีประสิทธิภาพมากขึ้น

ตามความคิดเห็นของลูกค้า เราได้เพิ่มระบบอัตโนมัติเพื่อรองรับ Teradata พร้อมเคอร์เซอร์ส่งคืน เคอร์เซอร์ประเภทนี้จะเปิดขึ้นภายในโพรซีเดอร์ที่เก็บไว้และส่งคืนไปยังผู้เรียกเพื่อประมวลผลชุดผลลัพธ์ AWS SCT จะแปลงเคอร์เซอร์ WITH RETURN เป็น Amazon Redshift ที่ปรึกษา.

ตัวอย่างเช่น พิจารณาขั้นตอนต่อไปนี้ ซึ่งมีเคอร์เซอร์ WITH RETURN โพรซีเดอร์เปิดเคอร์เซอร์และส่งกลับผลลัพธ์ไปยังผู้โทรเป็น DYNAMIC RESULT SET:

REPLACE PROCEDURE testschema.employee_cursor (IN p_mgrid INTEGER) DYNAMIC RESULT SETS 1
BEGIN DECLARE result_set CURSOR WITH RETURN ONLY FOR SELECT id, name, manager FROM testschema.employee WHERE manager = to_char(p_mgrid); OPEN result_set;
END;

AWS SCT แปลงขั้นตอนดังนี้ พารามิเตอร์เพิ่มเติมถูกเพิ่มในลายเซ็นโพรซีเดอร์เพื่อส่งผ่าน REFCURSOR:

CREATE OR REPLACE PROCEDURE testschema.employee_cursor(par_p_mgrid IN INTEGER, dynamic_return_cursor INOUT refcursor)
AS $BODY$
DECLARE
BEGIN OPEN dynamic_return_cursor FOR SELECT id, name, manager FROM testschema.employee WHERE manager = to_char(par_p_mgrid, '99999');
END;
$BODY$
LANGUAGE plpgsql;

คอลัมน์ IDENTITY

Teradata รองรับคุณสมบัติที่ไม่สอดคล้องกับ ANSI หลายรายการสำหรับคอลัมน์ IDENTITY เราได้ปรับปรุง AWS SCT เพื่อแปลงคุณสมบัติเหล่านี้เป็น Amazon Redshift โดยอัตโนมัติทุกครั้งที่ทำได้

โดยเฉพาะอย่างยิ่ง ตอนนี้ AWS SCT จะแปลงส่วนคำสั่ง Teradata START WITH และ INCREMENT BY เป็น คำสั่ง Amazon Redshift SEED และ STEPตามลำดับ ตัวอย่างเช่น พิจารณาตาราง Teradata ต่อไปนี้:

CREATE TABLE testschema.identity_table ( a2 BIGINT GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 20 )
);

อนุประโยค GENERATED ALWAYS ระบุว่าคอลัมน์นั้นถูกเติมโดยอัตโนมัติเสมอ—ไม่สามารถแทรกหรืออัปเดตค่าลงในคอลัมน์ได้อย่างชัดเจน ส่วนคำสั่ง START WITH จะกำหนดค่าแรกที่จะแทรกลงในคอลัมน์ และส่วนคำสั่ง INCREMENT BY จะกำหนดค่าถัดไปที่จะแทรกลงในคอลัมน์

เมื่อคุณแปลงตารางนี้โดยใช้ AWS SCT ระบบจะสร้าง Amazon Redshift DDL ต่อไปนี้ ขอให้สังเกตว่าค่า START WITH และ INCREMENT BY ถูกรักษาไว้ในไวยากรณ์เป้าหมาย:

CREATE TABLE IF NOT EXISTS testschema.identity_table ( a2 BIGINT IDENTITY(1, 20)
)
DISTSTYLE KEY
DISTKEY
(a2)
SORTKEY
(a2);

นอกจากนี้ ตามค่าเริ่มต้น คอลัมน์ IDENTITY ใน Amazon Redshift จะมีเฉพาะค่าที่สร้างโดยอัตโนมัติเท่านั้น เพื่อให้คุณสมบัติ GENERATED ALWAYS ใน Teradata ยังคงอยู่:

# INSERT INTO testschema.identity_table VALUES (100);
ERROR: cannot set an identity column to a value

คอลัมน์ IDENTITY ใน Teradata ยังสามารถระบุเป็น GENERATED BY DEFAULT ได้อีกด้วย ในกรณีนี้ ค่าสามารถกำหนดได้อย่างชัดเจนในคำสั่ง INSERT หากไม่มีการระบุค่า คอลัมน์จะถูกเติมด้วยค่าที่สร้างโดยอัตโนมัติเหมือนปกติ ก่อนหน้านี้ AWS SCT ไม่รองรับการแปลงสำหรับคอลัมน์ที่สร้างโดยค่าเริ่มต้น ตอนนี้ เรายินดีที่จะแชร์ว่า AWS SCT จะแปลงคอลัมน์ดังกล่าวให้คุณโดยอัตโนมัติ

ตัวอย่างเช่น ตารางต่อไปนี้มีคอลัมน์ IDENTITY ที่สร้างโดยค่าเริ่มต้น:

CREATE TABLE testschema.identity_by_default ( a1 BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 INCREMENT BY 20 )
PRIMARY INDEX (a1);

คอลัมน์ IDENTITY ถูกแปลงโดย AWS SCT ดังนี้ คอลัมน์ที่แปลงแล้วใช้ส่วนคำสั่ง Amazon Redshift GENERATED BY DEFAULT:

CREATE TABLE testschema.identity_by_default ( a1 BIGINT GENERATED BY DEFAULT AS IDENTITY(1,20) DISTKEY
) DISTSTYLE KEY SORTKEY (a1);

มีปัญหาทางไวยากรณ์เพิ่มเติมหนึ่งปัญหาที่ต้องให้ความสนใจ ใน Teradata ค่าที่สร้างโดยอัตโนมัติจะถูกแทรกเมื่อมีการระบุ NULL สำหรับค่าคอลัมน์:

INSERT INTO identity_by_default VALUES (null);

Amazon Redshift ใช้ไวยากรณ์อื่นเพื่อจุดประสงค์เดียวกัน ที่นี่ คุณรวมคำหลัก DEFAULT ในรายการค่าเพื่อระบุว่าคอลัมน์ควรสร้างขึ้นโดยอัตโนมัติ:

INSERT INTO testschema.identity_by_default VALUES (default);

เรายินดีที่จะแจ้งให้ทราบว่า AWS SCT แปลงไวยากรณ์ Teradata สำหรับคำสั่ง INSERT โดยอัตโนมัติ เช่นตัวอย่างก่อนหน้านี้ ตัวอย่างเช่น พิจารณาแมโคร Teradata ต่อไปนี้:

REPLACE MACRO testschema.insert_identity_by_default AS ( INSERT INTO testschema.identity_by_default VALUES (NULL);
);

AWS SCT ลบ NULL และแทนที่ด้วย DEFAULT:

CREATE OR REPLACE PROCEDURE testschema.insert_identity_by_default() LANGUAGE plpgsql
AS $$ BEGIN INSERT INTO testschema.identity_by_default VALUES (DEFAULT);
END; $$ 

การทำงานอัตโนมัติของคอลัมน์ IDENTITY พร้อมใช้งานแล้วใน AWS SCT คุณสามารถดาวน์โหลด รุ่นล่าสุด และลองดู

ตัวกรองใด ๆ และบางส่วนที่มีภาคแสดงอสมการ

ตัวกรอง ANY และ SOME กำหนดว่าเพรดิเคตใช้กับค่าอย่างน้อยหนึ่งค่าในรายการหรือไม่ ตัวอย่างเช่น ใน Teradata คุณสามารถใช้ <> ANY เพื่อค้นหาพนักงานทั้งหมดที่ไม่ได้ทำงานกับผู้จัดการบางคน:

REPLACE MACRO testschema.not_in_103 AS ( SELECT * FROM testschema.employee WHERE manager <> ANY (103)
;
);

แน่นอน คุณสามารถเขียนแบบสอบถามนี้ใหม่ได้โดยใช้ตัวกรองค่าไม่เท่ากันแบบธรรมดา แต่คุณมักจะเห็นข้อความค้นหาจากตัวสร้าง SQL ของบริษัทอื่นที่ทำตามรูปแบบนี้

Amazon Redshift ไม่รองรับไวยากรณ์นี้โดยกำเนิด ก่อนหน้านี้ แบบสอบถามใดๆ ที่ใช้ไวยากรณ์นี้จะต้องถูกแปลงด้วยตนเอง ตอนนี้ เรายินดีที่จะแบ่งปันว่า AWS SCT จะแปลงส่วนคำสั่งใดๆ และบางส่วนโดยอัตโนมัติด้วยเพรดิเคตที่ไม่เท่าเทียมกัน แมโครด้านบนถูกแปลงเป็นกระบวนงานที่เก็บไว้ดังนี้

CREATE OR REPLACE PROCEDURE testschema.not_in_103(macro_out INOUT refcursor)
AS $BODY$
BEGIN OPEN macro_out FOR SELECT * FROM testschema.employee WHERE ((manager <> 103));
END;
$BODY$
LANGUAGE plpgsql;

หากรายการค่าตามหลัง ANY มีค่ามากกว่าสองค่า AWS SCT จะแปลงค่านี้เป็นชุดของเงื่อนไข OR หนึ่งค่าสำหรับแต่ละองค์ประกอบในรายการ

การแปลงตัวกรอง ANY/SOME พร้อมให้บริการแล้วใน AWS SCT สามารถทดลองใช้งานได้ที่ รุ่นล่าสุด ของแอปพลิเคชัน

ฟังก์ชั่นการวิเคราะห์พร้อม RESET WHEN

รีเซ็ตเมื่อเป็นคุณลักษณะ Teradata ที่ใช้ในฟังก์ชันหน้าต่างการวิเคราะห์ SQL เป็นส่วนขยายของมาตรฐาน ANSI SQL รีเซ็ตเมื่อกำหนดพาร์ติชั่นที่ฟังก์ชันหน้าต่าง SQL ทำงานตามเงื่อนไขที่ระบุ ถ้าเงื่อนไขประเมินเป็นจริง พาร์ติชันย่อยแบบไดนามิกใหม่จะถูกสร้างขึ้นภายในพาร์ติชันหน้าต่างที่มีอยู่

ตัวอย่างเช่น มุมมองต่อไปนี้ใช้ RESET WHEN เพื่อคำนวณผลรวมที่ทำงานอยู่ตามร้านค้า ยอดรวมสะสมตราบเท่าที่ยอดขายเพิ่มขึ้นทุกเดือน หากยอดขายลดลงจากหนึ่งเดือนไปเป็นเดือนถัดไป ยอดรวมที่ดำเนินการจะรีเซ็ต

CREATE TABLE testschema.sales ( store_id INTEGER
, month_no INTEGER
, sales_amount DECIMAL(9,2)
)
; REPLACE VIEW testschema.running_total ( store_id
, month_no
, sales_amount
, cume_sales_amount
)
AS
SELECT store_id
, month_no
, sales_amount
, SUM(sales_amount) OVER ( PARTITION BY store_id ORDER BY month_no RESET WHEN sales_amount < SUM(sales_amount) OVER ( PARTITION BY store_id ORDER BY month_no ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING ) ROWS UNBOUNDED PRECEDING )
FROM testschema.sales;

เพื่อสาธิต เราแทรกข้อมูลการทดสอบลงในตาราง:

INSERT INTO testschema.sales VALUES (1001, 1, 35000.00);
INSERT INTO testschema.sales VALUES (1001, 2, 40000.00);
INSERT INTO testschema.sales VALUES (1001, 3, 45000.00);
INSERT INTO testschema.sales VALUES (1001, 4, 25000.00);
INSERT INTO testschema.sales VALUES (1001, 5, 30000.00);
INSERT INTO testschema.sales VALUES (1001, 6, 30000.00);
INSERT INTO testschema.sales VALUES (1001, 7, 50000.00);
INSERT INTO testschema.sales VALUES (1001, 8, 35000.00);
INSERT INTO testschema.sales VALUES (1001, 9, 60000.00);
INSERT INTO testschema.sales VALUES (1001, 10, 80000.00);
INSERT INTO testschema.sales VALUES (1001, 11, 90000.00);
INSERT INTO testschema.sales VALUES (1001, 12, 100000.00);

ยอดขายจะลดลงหลังจากเดือนที่ 3 และ 7 ยอดรวมทั้งหมดจะถูกรีเซ็ตตามนั้นในเดือนที่ 4 และ 8

SELECT * FROM testschema.running_total; store_id month_no sales_amount cume_sales_amount
----------- ----------- ------------ ----------------- 1001 1 35000.00 35000.00 1001 2 40000.00 75000.00 1001 3 45000.00 120000.00 1001 4 25000.00 25000.00 1001 5 30000.00 55000.00 1001 6 30000.00 85000.00 1001 7 50000.00 135000.00 1001 8 35000.00 35000.00 1001 9 60000.00 95000.00 1001 10 80000.00 175000.00 1001 11 90000.00 265000.00 1001 12 100000.00 365000.00

AWS SCT แปลงมุมมองดังนี้ รหัสที่แปลงแล้วจะใช้แบบสอบถามย่อยเพื่อจำลองการรีเซ็ตเมื่อ โดยพื้นฐานแล้ว แอตทริบิวต์เครื่องหมายจะถูกเพิ่มลงในผลลัพธ์ที่ทำเครื่องหมายว่ายอดขายลดลงในแต่ละเดือน จากนั้นแฟล็กจะใช้เพื่อกำหนดการดำเนินการก่อนหน้าที่ยาวที่สุดของการเพิ่มยอดขายเพื่อรวม

CREATE OR REPLACE VIEW testschema.running_total ( store_id
, month_no
, sales_amount
, cume_sales_amount) AS
SELECT store_id
, month_no
, sales_amount
, sum(sales_amount) OVER (PARTITION BY k1, store_id ORDER BY month_no NULLS FIRST ROWS UNBOUNDED PRECEDING)
FROM ( SELECT store_id , month_no , sales_amount , SUM(CASE WHEN k = 1 THEN 0 ELSE 1 END) OVER (PARTITION BY store_id ORDER BY month_no NULLS FIRST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS k1 FROM ( SELECT store_id , month_no , sales_amount , CASE WHEN sales_amount < SUM(sales_amount) OVER (PARTITION BY store_id ORDER BY month_no ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) OR sales_amount IS NULL THEN 0 ELSE 1 END AS k FROM testschema.sales )
);

เราคาดหวังว่าการแปลง RESET WHEN จะได้รับความนิยมอย่างมากจากลูกค้า คุณสามารถลองได้แล้วใน AWS SCT.

ฟังก์ชัน TD_NORMALIZE_OVERLAP()

ฟังก์ชัน TD_NORMALIZE_OVERLAP รวมแถวที่มีค่า PERIOD ที่ทับซ้อนกัน แถวที่ทำให้เป็นมาตรฐานที่ได้ประกอบด้วยขอบเขตเริ่มต้นแรกสุดและขอบเขตสิ้นสุดล่าสุดจากค่าระยะเวลาของแถวทั้งหมดที่เกี่ยวข้อง

ตัวอย่างเช่น เราสร้างตาราง Teradata ที่บันทึกเงินเดือนพนักงานด้วยรหัสต่อไปนี้ แต่ละแถวในตารางจะมีการประทับเวลาด้วยช่วงเวลาที่พนักงานได้รับเงินเดือนที่กำหนด

CREATE TABLE testschema.salaries ( emp_id INTEGER
, salary DECIMAL(8,2)
, from_to PERIOD(DATE)
);

ตอนนี้เราเพิ่มข้อมูลสำหรับพนักงานสองคน สำหรับ emp_id = 1 และ salary = 2000มีสองแถวที่ทับซ้อนกัน ในทำนองเดียวกันทั้งสองแถวด้วย emp_id = 2 และ salary = 3000 กำลังทับซ้อนกัน

SELECT * FROM testschema.salaries ORDER BY emp_id, from_to; emp_id salary from_to
----------- ---------- ------------------------ 1 1000.00 ('20/01/01', '20/05/31') 1 2000.00 ('20/06/01', '21/02/28') 1 2000.00 ('21/01/01', '21/06/30') 2 3000.00 ('20/01/01', '20/03/31') 2 3000.00 ('20/02/01', '20/04/30')

ตอนนี้เราสร้างมุมมองที่ใช้ฟังก์ชัน TD_NORMALIZE_OVERLAP เพื่อทำให้ข้อมูลที่ทับซ้อนกันเป็นปกติ:

REPLACE VIEW testschema.normalize_salaries AS WITH sub_table(emp_id, salary, from_to) AS ( SELECT emp_id , salary , from_to FROM testschema.salaries
)
SELECT *
FROM TABLE(TD_SYSFNLIB.TD_NORMALIZE_OVERLAP (NEW VARIANT_TYPE(sub_table.emp_id, sub_table.salary), sub_table.from_to) RETURNS (emp_id INTEGER, salary DECIMAL(8,2), from_to PERIOD(DATE)) HASH BY emp_id LOCAL ORDER BY emp_id, salary, from_to ) AS DT(emp_id, salary, duration)
;

เราสามารถตรวจสอบว่าข้อมูลการดูถูกทำให้เป็นมาตรฐานจริงหรือไม่:

select * from testschema.normalize_salaries order by emp_id, duration; emp_id salary duration
----------- ---------- ------------------------ 1 1000.00 ('20/01/01', '20/05/31') 1 2000.00 ('20/06/01', '21/06/30') 2 3000.00 ('20/01/01', '20/04/30')

ตอนนี้คุณสามารถใช้ AWS SCT เพื่อแปลงคำสั่ง TD_NORMALIZE_OVERLAP ใดๆ ได้แล้ว ก่อนอื่นเราแปลงตารางเงินเดือนเป็น Amazon Redshift (ดู เร่งการย้ายคลังข้อมูลของคุณไปยัง Amazon Redshift – ตอนที่ 2 สำหรับรายละเอียดเกี่ยวกับระบบอัตโนมัติประเภทข้อมูลช่วงเวลา):

CREATE TABLE testschema.salaries ( emp_id integer distkey
, salary numeric(8,2) ENCODE az64
, from_to_begin date ENCODE az64
, from_to_end date ENCODE az64 ) DISTSTYLE KEY SORTKEY (emp_id); # SELECT * FROM testschema.salaries ORDER BY emp_id, from_to_begin; emp_id | salary | from_to_begin | from_to_end 1 | 1000.00 | 2020-01-01 | 2020-05-31 1 | 2000.00 | 2020-06-01 | 2021-02-28 1 | 2000.00 | 2021-01-01 | 2021-06-30 2 | 3000.00 | 2020-01-01 | 2020-03-31 2 | 3000.00 | 2020-02-01 | 2020-04-30

ตอนนี้เราใช้ AWS SCT เพื่อแปลงมุมมอง normalize_salaries AWS SCT เพิ่มคอลัมน์ที่เป็นจุดเริ่มต้นของกลุ่มแถวใหม่ จากนั้นจะสร้างแถวเดียวสำหรับแต่ละกลุ่มด้วยการประทับเวลาปกติ

CREATE VIEW testschema.normalize_salaries (emp_id, salary, from_to_begin, from_to_end) AS
WITH sub_table AS ( SELECT emp_id , salary , from_to_begin AS start_date , from_to_end AS end_date , CASE WHEN start_date <= lag(end_date) OVER (PARTITION BY emp_id, salary ORDER BY start_date, end_date) THEN 0 ELSE 1 END AS GroupStartFlag FROM testschema.salaries )
SELECT t2.emp_id
, t2.salary
, min(t2.start_date) AS from_to_begin
, max(t2.end_date) AS from_to_end
FROM ( SELECT emp_id , salary , start_date , end_date , sum(GroupStartFlag) OVER (PARTITION BY emp_id, salary ORDER BY start_date ROWS UNBOUNDED PRECEDING) AS GroupID FROM sub_table
) AS t2
GROUP BY t2.emp_id
, t2.salary
, t2.GroupID;

เราสามารถตรวจสอบว่ามุมมองที่แปลงแล้วส่งคืนข้อมูลที่ถูกทำให้เป็นมาตรฐานอย่างถูกต้อง:

# SELECT * FROM testschema.normalize_salaries ORDER BY emp_id; emp_id | salary | from_to_begin | from_to_end 1 | 1000.00 | 2020-01-01 | 2020-05-31 1 | 2000.00 | 2020-06-01 | 2021-06-30 2 | 3000.00 | 2020-01-01 | 2020-04-30

คุณสามารถลองใช้การแปลง TD_NORMALIZE_OVERLAP ใน AWS SCT รุ่นล่าสุดได้ ดาวน์โหลด ตอนนี้

ฟังก์ชัน TD_UNPIVOT()

ฟังก์ชัน TD_UNPIVOT จะแปลงคอลัมน์เป็นแถว โดยพื้นฐานแล้ว เราจะใช้แถวของเมตริกที่คล้ายคลึงกันในช่วงเวลาต่างๆ และสร้างแถวแยกสำหรับแต่ละเมตริก

ตัวอย่างเช่น พิจารณาตาราง Teradata ต่อไปนี้ ตารางจะบันทึกการเข้าชมของลูกค้าตามปีและเดือนสำหรับร้านคีออสก์ขนาดเล็ก:

CREATE TABLE TESTSCHEMA.kiosk_monthly_visits ( kiosk_id INTEGER
, year_no INTEGER
, jan_visits INTEGER
, feb_visits INTEGER
, mar_visits INTEGER
, apr_visits INTEGER
, may_visits INTEGER
, jun_visits INTEGER
, jul_visits INTEGER
, aug_visits INTEGER
, sep_visits INTEGER
, oct_visits INTEGER
, nov_visits INTEGER
, dec_visits INTEGER)
PRIMARY INDEX (kiosk_id);

เราแทรกข้อมูลตัวอย่างลงในตาราง:

INSERT INTO testschema.kiosk_monthly_visits VALUES (100, 2020, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200);

ต่อไป เราสร้างมุมมองที่ unpivotes ตารางเพื่อให้การเข้าชมรายเดือนปรากฏในแถวที่แยกจากกัน แถวเดียวในตาราง Pivot จะสร้าง 12 แถวในตารางที่ไม่มีการหมุน หนึ่งแถวต่อเดือน

REPLACE VIEW testschema.unpivot_kiosk_monthly_visits ( kiosk_id
, year_no
, month_name
, month_visits
)
AS
SELECT kiosk_id
, year_no
, month_name (FORMAT 'X(10)')
, month_visits
FROM TD_UNPIVOT ( ON (SELECT * FROM testschema.kiosk_monthly_visits) USING VALUE_COLUMNS ('month_visits') UNPIVOT_COLUMN('month_name') COLUMN_LIST( 'jan_visits' , 'feb_visits' , 'mar_visits' , 'apr_visits' , 'may_visits' , 'jun_visits' , 'jul_visits' , 'aug_visits' , 'sep_visits' , 'oct_visits' , 'nov_visits' , 'dec_visits' ) COLUMN_ALIAS_LIST ( 'jan' , 'feb' , 'mar' , 'apr' , 'may' , 'jun' , 'jul' , 'aug' , 'sep' , 'oct' , 'nov' , 'dec' )
) a;

เมื่อคุณเลือกจากมุมมอง ยอดขายรายเดือนจะแยกออกเป็น 12 แถวแยกกัน:

SELECT * FROM testschema.unpivot_monthly_sales; id yr mon mon_sales
----------- ----------- ---------- ----------
100 2021 jan 1100.00
100 2021 feb 1200.00
100 2021 mar 1300.00
100 2021 apr 1400.00
100 2021 may 1500.00
100 2021 jun 1600.00
100 2021 jul 1700.00
100 2021 aug 1800.00
100 2021 sep 1900.00
100 2021 oct 2000.00
100 2021 nov 2100.00
100 2021 dec 2200.00

ตอนนี้เราใช้ AWS SCT เพื่อแปลงมุมมองเป็น ANSI SQL ที่สามารถเรียกใช้บน Amazon Redshift การแปลงจะสร้างนิพจน์ตารางทั่วไป (CTE) เพื่อวางในแต่ละเดือนในแถวที่แยกจากกัน จากนั้นจะรวม CTE และแอตทริบิวต์ที่เหลือจากตารางสาระสำคัญเดิม

REPLACE VIEW testschema.unpivot_kiosk_monthly_visits (kiosk_id, year_no, month_name, month_visits) AS
WITH cols
AS (SELECT 'jan' AS col
UNION ALL
SELECT 'feb' AS col
UNION ALL
SELECT 'mar' AS col
UNION ALL
SELECT 'apr' AS col
UNION ALL
SELECT 'may' AS col
UNION ALL
SELECT 'jun' AS col
UNION ALL
SELECT 'jul' AS col
UNION ALL
SELECT 'aug' AS col
UNION ALL
SELECT 'sep' AS col
UNION ALL
SELECT 'oct' AS col
UNION ALL
SELECT 'nov' AS col
UNION ALL
SELECT 'dec' AS col)
SELECT t1.kiosk_id, t1.year_no, col AS "month_name", CASE col WHEN 'jan' THEN "jan_visits" WHEN 'feb' THEN "feb_visits" WHEN 'mar' THEN "mar_visits" WHEN 'apr' THEN "apr_visits" WHEN 'may' THEN "may_visits" WHEN 'jun' THEN "jun_visits" WHEN 'jul' THEN "jul_visits" WHEN 'aug' THEN "aug_visits" WHEN 'sep' THEN "sep_visits" WHEN 'oct' THEN "oct_visits" WHEN 'nov' THEN "nov_visits" WHEN 'dec' THEN "dec_visits" ELSE NULL END AS "month_visits" FROM testschema.kiosk_monthly_visits AS t1 CROSS JOIN cols WHERE month_visits IS NOT NULL;

คุณสามารถตรวจสอบว่ามุมมองที่แปลงแล้วให้ผลลัพธ์เหมือนกับเวอร์ชัน Teradata:

# SELECT * FROM testschema.unpivot_kiosk_monthly_visits; kiosk_id | year_no | month_name | month_visits 100 | 2020 | oct | 2000 100 | 2020 | nov | 2100 100 | 2020 | jul | 1700 100 | 2020 | feb | 1200 100 | 2020 | apr | 1400 100 | 2020 | aug | 1800 100 | 2020 | sep | 1900 100 | 2020 | jan | 1100 100 | 2020 | mar | 1300 100 | 2020 | may | 1500 100 | 2020 | jun | 1600 100 | 2020 | dec | 2200

คุณสามารถลองใช้การสนับสนุนการแปลงสำหรับ TD_UNPIVOT ใน รุ่นล่าสุด ของ AWS SCT

ฟังก์ชัน QUANTILE

QUANTILE คือฟังก์ชันการจัดอันดับ มันแบ่งอินพุตที่กำหนดเป็นจำนวนกลุ่มที่ระบุ โดยแต่ละกลุ่มมีสัดส่วนที่เท่ากันของประชากรทั้งหมด QUANTILE เป็นส่วนขยาย Teradata ที่เป็นกรรมสิทธิ์ของฟังก์ชัน NTILE ที่พบใน ANSI SQL

ตัวอย่างเช่น เราสามารถคำนวณควอร์ไทล์ของข้อมูลการเข้าชมรายเดือนโดยใช้มุมมอง Teradata ต่อไปนี้:

REPLACE VIEW testschema.monthly_visit_rank AS
SELECT kiosk_id
, year_no
, month_name
, month_visits
, QUANTILE(4, month_visits) qtile
FROM testschema.unpivot_kiosk_monthly_visits
;

เมื่อคุณเลือกจากมุมมอง ฟังก์ชัน QUANTILE จะคำนวณควอร์ไทล์และใช้เป็นแอตทริบิวต์ในเอาต์พุต:

SELECT * FROM monthly_visit_rank; kiosk_id year_no month_name month_visits qtile
----------- ----------- ---------- ------------ ----------- 100 2020 jan 1100 0 100 2020 feb 1200 0 100 2020 mar 1300 0 100 2020 apr 1400 1 100 2020 may 1500 1 100 2020 jun 1600 1 100 2020 jul 1700 2 100 2020 aug 1800 2 100 2020 sep 1900 2 100 2020 oct 2000 3 100 2020 nov 2100 3 100 2020 dec 2200 3

Amazon Redshift รองรับฟังก์ชัน NTILE ทั่วไป ซึ่งสามารถใช้ QUANTILE และสอดคล้องกับ ANSI เราได้ปรับปรุง AWS SCT เพื่อแปลงการเรียกใช้ฟังก์ชัน QUANTILE เป็นการเรียกใช้ฟังก์ชัน NTILE ที่เทียบเท่าโดยอัตโนมัติ

ตัวอย่างเช่น เมื่อคุณแปลงมุมมอง Teradata ก่อนหน้านี้ AWS SCT จะสร้างโค้ด Amazon Redshift ต่อไปนี้:

SELECT unpivot_kiosk_monthly_visits.kiosk_id
, unpivot_kiosk_monthly_visits.year_no
, unpivot_kiosk_monthly_visits.month_name
, unpivot_kiosk_monthly_visits.month_visits
, ntile(4) OVER (ORDER BY unpivot_kiosk_monthly_visits.month_visits ASC NULLS FIRST) - 1) AS qtile FROM testschema.unpivot_kiosk_monthly_visits
;

รองรับการแปลง QUANTILE แล้วใน AWS SCT.

ตัวกรองคุณภาพ

ส่วนคำสั่ง QUALIFY ใน Teradata จะกรองแถวที่สร้างโดยฟังก์ชันการวิเคราะห์ ลองดูตัวอย่าง เราใช้ตารางต่อไปนี้ซึ่งมีรายรับจากร้านค้าตามเดือน เป้าหมายของเราคือการหาห้าเดือนแรกตามรายได้:

CREATE TABLE testschema.sales ( store_id INTEGER
, month_no INTEGER
, sales_amount DECIMAL(9,2))
PRIMARY INDEX (store_id); SELECT * FROM sales; store_id month_no sales_amount
----------- ----------- ------------ 1001 1 35000.00 1001 2 40000.00 1001 3 45000.00 1001 4 25000.00 1001 5 30000.00 1001 6 30000.00 1001 7 50000.00 1001 8 35000.00 1001 9 60000.00 1001 10 80000.00 1001 11 90000.00 1001 12 100000.00

ข้อมูลแสดงให้เห็นว่าเดือนกรกฎาคม กันยายน ตุลาคม พฤศจิกายน และธันวาคม เป็นเดือนที่มียอดขายสูงสุด XNUMX อันดับแรก

เราสร้างมุมมองที่ใช้ฟังก์ชัน RANK เพื่อจัดอันดับในแต่ละเดือนตามยอดขาย จากนั้นใช้ฟังก์ชัน QUALIFY เพื่อเลือกห้าเดือนแรก:

REPLACE VIEW testschema.top_five_months( store_id
, month_no
, sales_amount
, month_rank
) as
SELECT store_id
, month_no
, sales_amount
, RANK() OVER (PARTITION BY store_id ORDER BY sales_amount DESC) month_rank
FROM testschema.sales
QUALIFY RANK() OVER (PARTITION by store_id ORDER BY sales_amount DESC) <= 5
;

ก่อนหน้านี้ หากคุณใช้ส่วนคำสั่ง QUALIFY คุณต้องเข้ารหัสคำสั่ง SQL ของคุณใหม่ด้วยตนเอง ตอนนี้ AWS SCT จะแปลง QUALIFY เป็น SQL ที่เข้ากันได้กับ Amazon Redshift และสอดคล้องกับ ANSI โดยอัตโนมัติ ตัวอย่างเช่น AWS SCT จะเขียนมุมมองก่อนหน้าใหม่ดังนี้:

CREATE OR REPLACE VIEW testschema.top_five_months ( store_id
, month_no
, sales_amount
, month_rank) AS
SELECT qualify_subquery.store_id
, qualify_subquery.month_no
, qualify_subquery.sales_amount
, month_rank
FROM ( SELECT store_id , month_no , sales_amount , rank() OVER (PARTITION BY store_id ORDER BY sales_amount DESC NULLS FIRST) AS month_rank , rank() OVER (PARTITION BY store_id ORDER BY sales_amount DESC NULLS FIRST) AS qualify_expression_1 FROM testschema.sales) AS qualify_subquery WHERE qualify_expression_1 <= 5;

AWS SCT แปลงการสืบค้นต้นฉบับเป็นแบบสอบถามย่อย และใช้นิพจน์ QUALIFY เป็นตัวกรองในแบบสอบถามย่อย AWS SCT เพิ่มคอลัมน์เพิ่มเติมในแบบสอบถามย่อยเพื่อวัตถุประสงค์ในการกรอง ไม่จำเป็นอย่างยิ่ง แต่ช่วยลดความซับซ้อนของรหัสเมื่อไม่ใช้นามแฝงของคอลัมน์

คุณสามารถลองแปลง QUALIFY ใน รุ่นล่าสุด ของ AWS SCT

สรุป

เรายินดีที่จะแบ่งปันคุณลักษณะใหม่เหล่านี้กับคุณ หากคุณกำลังพิจารณาการย้ายข้อมูลไปยัง Amazon Redshift ความสามารถเหล่านี้สามารถช่วยให้การแปลงสคีมาของคุณเป็นแบบอัตโนมัติ และรักษาการลงทุนของคุณในรายงานและแอปพลิเคชันที่มีอยู่ หากคุณต้องการเริ่มต้นการย้ายคลังข้อมูล คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Amazon Redshift และ AWS SCT ได้จากเอกสารสาธารณะของเรา

โพสต์นี้อธิบายคุณสมบัติใหม่สองสามสิบอย่างที่เรากำลังแนะนำเพื่อทำให้การย้าย Teradata ของคุณไปยัง Amazon Redshift เป็นไปโดยอัตโนมัติ เราจะแชร์เพิ่มเติมในโพสต์ที่กำลังจะถึงเกี่ยวกับระบบอัตโนมัติสำหรับคุณสมบัติ Teradata ที่เป็นกรรมสิทธิ์และความสามารถใหม่ที่น่าตื่นเต้นอื่นๆ

โปรดกลับมาตรวจสอบอีกครั้งในเร็วๆ นี้สำหรับข้อมูลเพิ่มเติม ก่อนหน้านั้น คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ อเมซอน Redshift และ เครื่องมือแปลงสคีมาของ AWS. ย้ายถิ่นอย่างมีความสุข!


เกี่ยวกับผู้เขียน

ไมเคิล ซู เป็นวิศวกรฐานข้อมูลอาวุโสกับทีม AWS Database Migration Service เขาสร้างผลิตภัณฑ์และบริการที่ช่วยให้ลูกค้าย้ายปริมาณงานฐานข้อมูลไปยัง AWS Cloud

ราซ่า ฮาฟีซ เป็นสถาปนิกข้อมูลภายใน Lake House Global Specialty Practice ของ AWS Professional Services เขามีประสบการณ์ระดับมืออาชีพมากกว่า 10 ปีในการสร้างและเพิ่มประสิทธิภาพคลังข้อมูลขององค์กร และมีความกระตือรือร้นในการทำให้ลูกค้าตระหนักถึงพลังของข้อมูลของตน เขาเชี่ยวชาญในการย้ายคลังข้อมูลขององค์กรไปยัง AWS Lake House Architecture

โพฮง, ปริญญาเอก, เป็นหัวหน้าสถาปนิกข้อมูลของ Lake House Global Specialty Practice, AWS Professional Services เขาหลงใหลในการสนับสนุนลูกค้าในการนำโซลูชันที่เป็นนวัตกรรมมาใช้เพื่อลดเวลาในการทำความเข้าใจ Po มีความเชี่ยวชาญในการย้ายคลังข้อมูลภายในองค์กรของ MPP ขนาดใหญ่ไปยังสถาปัตยกรรม AWS Lake House

เอนทง เสิน เป็นผู้จัดการฝ่ายพัฒนาซอฟต์แวร์ของ Amazon Redshift เขาทำงานเกี่ยวกับฐานข้อมูล MPP มานานกว่า 9 ปี และมุ่งเน้นไปที่การเพิ่มประสิทธิภาพการสืบค้น สถิติ และคุณสมบัติภาษา SQL ที่เกี่ยวข้องกับการย้ายข้อมูล เช่น กระบวนงานที่เก็บไว้และประเภทข้อมูล

สุมิตรสิงห์ เป็นวิศวกรฐานข้อมูลกับทีมบริการย้ายฐานข้อมูลที่ Amazon Web Services เขาทำงานอย่างใกล้ชิดกับลูกค้าและให้ความช่วยเหลือทางเทคนิคเพื่อย้ายปริมาณงานในองค์กรไปยัง AWS Cloud เขายังช่วยปรับปรุงคุณภาพและการทำงานของผลิตภัณฑ์การย้ายข้อมูล AWS อย่างต่อเนื่อง

เนลลี ซูซานโต เป็นผู้เชี่ยวชาญด้านการย้ายฐานข้อมูลอาวุโสของ AWS Database Migration Accelerator เธอมีพื้นฐานทางเทคนิคมากกว่า 10 ปี โดยมุ่งเน้นที่การโยกย้ายและการจำลองฐานข้อมูลพร้อมกับปริมาณงานคลังข้อมูล เธอหลงใหลในการช่วยเหลือลูกค้าในการเดินทางบนระบบคลาวด์

ที่มา: https://aws.amazon.com/blogs/big-data/part-3-accelerate-your-data-warehouse-migration-to-amazon-redshift/

ประทับเวลา:

เพิ่มเติมจาก AWS