การแชข้อมูลหรือใช้ต้อง comply ตาม regulations เวลา deal กับข้อมูลลูกค้าซึ่งอาจจะประกอบไปด้วยข้อมูลส่วนตัว (PII) ที่ส่วนมากจะถูกทำ data anonymized (การลบข้อมูลโดยไม่ระบุชื่อ) เช่นพวก PII อย่าง ชื่อ หรือ นามสกุล
ในโพสต์นี้เราจะลองมาทำกระบวนการ annonymize data โดยใช้ Amazon Athena!
Table Of Contents
Architecture Diagram
กระบวนการที่จะทำคือ เราจะ upload ข้อมูลเข้าไปใน Amazon S3 ทำการ annonymize data และเขียนข้อมูลลงไปใน S3 (persistent) แล้วสุดท้ายเราจะมาลองสร้าง annonymize data ให้อยู่ในรูปแบบ view
Pre-requisites
- AWS Account - ❗ ดูวิธีการคิดราคาของ Amazon Athena ก่อนนะจ๊ะ..
- โหลดข้อมูลแล้วลุยเลย! ลิ้งนี้
Anonymize with Athena
เราจะสร้าง tables ที่มีข้อมูลที่ถูก anonymized แล้ว แต่ก่อนที่จะทำลองคำนึงสิ่งที่เราจะเอาข้อมูลไปใช้ต่อ ตัวอย่างเช่น ถ้า columns นั้นเราคิดว่าไม่มีโอกาสหรือไม่แน่ใจว่าจะใช้หรือใน analytics process บางครั้งการที่เราละเว้นหรือไม่นำข้อมูลนั้นมาอาจจะเป็นวิธีที่ดีกว่า วิธีนึงในการทำ anonymize sensitive information คือการทำ hashing
hash function คือ function ที่เราใช้ในการ map data จากขนาดไหนก็ได้ให้อยู่ในรูปแบบขนาดที่คงที่ หาอ่านเพิ่มเกี่ยวกับ Hash function
- เริ่มสร้าง Table โดยใช้ Athena ลิ้งนี้
CREATE EXTERNAL TABLE `cust_data`(
`customer_id` bigint,
`prefix` string,
`first_name` string,
`middle_name` string,
`last_name` string,
`suffix` string,
`gender` string,
`dob` string,
`address` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://chatkom-doc-shared/data/'
TBLPROPERTIES (
'classification'='csv',
'delimiter'=',',
'skip.header.line.count'='1',
'typeOfData'='file')
ลอง Query ผ่าน Athena
SELECT * FROM "default"."customers" limit 10;
- สร้าง Table ที่ทำการ Anonymize data โดยใช้ Athena ลิ้งนี้
CREATE table "default"."cust_data_anonym"
WITH (format='parquet')
as
SELECT
customer_id,
prefix,
sha256(to_utf8(cast(first_name AS varchar))) AS first_name_anonym,
sha256(to_utf8(cast(middle_name AS varchar))) AS middle_name_anonym,
last_name,suffix,
gender,
dob,
address
FROM "default"."cust_data"
ลอง Query ผ่าน Athena
SELECT * FROM "default"."cust_data_anonym" limit 10;
เราจะเห็นข้อมูลใน first_name กับ last_name ถูก Anonymize โดย hashing function
- ในกรณีเราไม่ต้องการสร้าง Table สามารถทำเป็น View ครอบได้เช่นกัน โดยใช้ Athena ลิ้งนี้
CREATE OR REPLACE VIEW "default"."v_cust_data_anonym"
as
SELECT
customer_id,
prefix,
sha256(to_utf8(cast(first_name AS varchar))) AS first_name_anonym,
sha256(to_utf8(cast(middle_name AS varchar))) AS middle_name_anonym,
last_name,suffix,
gender,
dob,
address
FROM "default"."cust_data"
✅ Conclusion
จบแล้ว! Hasing function เป็นทางเลือกนึงในการ Anonymizing dataset ซึ่งเป็นสิ่งเราเจอบ่อยๆก่อนที่จะ analyze ข้อมูล ซึ่งในตัวอย่างนี้เรามีการ Anonymizing dataset ใน S3 กับ Athena hashing function
Top comments (1)
เยี่ยมครับ เหมาะกับนำไป apply ใน PDPA เลยครับ