ทดสอบการทำ Anonymize data in your data lake with Amazon Athena
Tags: aws, awsthai, bigdata, datascience
Published: 2021-08-31 11:23:37

การแชข้อมูลหรือใช้ต้อง comply ตาม regulations เวลา deal กับข้อมูลลูกค้าซึ่งอาจจะประกอบไปด้วยข้อมูลส่วนตัว (PII) ที่ส่วนมากจะถูกทำ data anonymized (การลบข้อมูลโดยไม่ระบุชื่อ) เช่นพวก PII อย่าง ชื่อ หรือ นามสกุล

ในโพสต์นี้เราจะลองมาทำกระบวนการ annonymize data โดยใช้ Amazon Athena!

[Athena คืออะไร?](https://aws.amazon.com/athena/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)

## Table Of Contents
* [Architecture Diagram] (#arc)
* [Pre-requisites] (#pre)
* [Anonymize with Athena] (#athena)
* [Conclusion] (#conclusion)



### Architecture Diagram <a name="arc"></a>
![delta-lake](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2020/06/25/AnonymizeManageDataLake1.png)

กระบวนการที่จะทำคือ เราจะ upload ข้อมูลเข้าไปใน Amazon S3 ทำการ annonymize data และเขียนข้อมูลลงไปใน S3 (persistent) แล้วสุดท้ายเราจะมาลองสร้าง annonymize data ให้อยู่ในรูปแบบ view



### Pre-requisites <a name="pre"></a>
* AWS Account - ❗ ดูวิธีการคิดราคาของ [Amazon Athena](https://aws.amazon.com/athena/pricing/) ก่อนนะจ๊ะ..
* โหลดข้อมูลแล้วลุยเลย! [ลิ้งนี้](https://awsshare.ckomrangweb.com/customers.csv)



### Anonymize with Athena <a name="athena"></a>
เราจะสร้าง tables ที่มีข้อมูลที่ถูก anonymized แล้ว แต่ก่อนที่จะทำลองคำนึงสิ่งที่เราจะเอาข้อมูลไปใช้ต่อ ตัวอย่างเช่น ถ้า columns นั้นเราคิดว่าไม่มีโอกาสหรือไม่แน่ใจว่าจะใช้หรือใน analytics process บางครั้งการที่เราละเว้นหรือไม่นำข้อมูลนั้นมาอาจจะเป็นวิธีที่ดีกว่า วิธีนึงในการทำ anonymize sensitive information คือการทำ hashing 

hash function คือ function ที่เราใช้ในการ map data จากขนาดไหนก็ได้ให้อยู่ในรูปแบบขนาดที่คงที่ หาอ่านเพิ่มเกี่ยวกับ [Hash function](https://en.wikipedia.org/wiki/Hash_function)


* เริ่มสร้าง Table โดยใช้ Athena [ลิ้งนี้](https://ap-southeast-1.console.aws.amazon.com/athena/home?region=ap-southeast-1#query)
```sql
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](https://ap-southeast-1.console.aws.amazon.com/athena/home?region=ap-southeast-1#query)
```sql
SELECT * FROM "default"."customers" limit 10;
```
![annonymize_athena.jpg](https://awsshare.ckomrangweb.com/annonymize_athena.png)



* สร้าง Table ที่ทำการ Anonymize data โดยใช้ Athena [ลิ้งนี้](https://ap-southeast-1.console.aws.amazon.com/athena/home?region=ap-southeast-1#query)
```sql
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](https://ap-southeast-1.console.aws.amazon.com/athena/home?region=ap-southeast-1#query)
```sql
SELECT * FROM "default"."cust_data_anonym" limit 10;
```
![annonymize_athena.jpg](https://awsshare.ckomrangweb.com/annonymize_athena_2.png)


เราจะเห็นข้อมูลใน first_name กับ last_name ถูก Anonymize โดย hashing function


* ในกรณีเราไม่ต้องการสร้าง Table สามารถทำเป็น View ครอบได้เช่นกัน  โดยใช้ Athena [ลิ้งนี้](https://ap-southeast-1.console.aws.amazon.com/athena/home?region=ap-southeast-1#query)
```sql
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  <a name="conclusion"></a>
จบแล้ว! Hasing function เป็นทางเลือกนึงในการ Anonymizing dataset ซึ่งเป็นสิ่งเราเจอบ่อยๆก่อนที่จะ  analyze ข้อมูล ซึ่งในตัวอย่างนี้เรามีการ Anonymizing dataset ใน S3 กับ Athena hashing function 
![good_stuff](https://i.pinimg.com/originals/88/71/3c/88713c217a98cac0d46781b38f11c019.gif)