BigLake แบบจับมือทำ
บทความนี้เราจะเรียนรู้ที่จะใช้งาน BigLake ซึ่งเป็นหนึ่งใน Service ของ Google Cloud Platform กัน ว่าคืออะไรและสามารถทำอะไรได้บ้าง
# Table of Contents
BigLake คืออะไร
BigLake มันดียังไงหล่ะ
1 ไม่จำเป็นต้อง grant สิทธิ Storage Object Viewer ให้ user
2 สามารถ set fine-grained security at the Table level
- row-level security
- column-level security
- Data Masking
3 Data Masking
ขั้นตอนในการสร้าง BigLake
ส่งท้าย
BigLake คืออะไร
BigLake คือ External Table หรือ Table ไม่ได้เก็บข้อมูลอยู่บน Storage ของ BigQuery โดยส่วนใหญ่จะเป็นการเก็บข้อมูลในระบบคลาวด์ต่าง เช่น Google Cloud Storage, Amazon S3, และ Azure Blob Storage
BigLake เป็น External Table รูปแบบหนึ่งของ BigQuery ตาม concept ของ Data Lakehouse สร้างเพื่อมายกระดับความสามารถของ External Table แบบปกติ โดยเพิ่มความสามารถในการปรับระดับ security ได้และการทำ dynamic data masking นอกจากนี้ยังสามารถใช้งานร่วมกับ BigQuery Omni เพื่อวิเคราะห์ขอมูลจาก Amazon S3 หรือ Blob Storage ได้อีกด้วย
ถ้าใครสนใจอยากรู้ Data Lakehouse เกี่ยวกับ สามารถอ่านได้ที่นี่เลย เข้าใจ Data Warehouse, Data Lake และ Data Lakehouse ฉบับมือใหม่
BigLake มันดียังไงหล่ะ
1 ) ไม่จำเป็นต้อง grant สิทธิ Storage Object Viewer ให้ user
เพราะ BigLake table สามารถ grant ให้ service account ของ connection ที่จะเอามาต่อกับตัว source ที่อยู่ที่ storage แทนได้
มาดูตัวอย่างกัน
กรณี external table แบบปกติ
user ชื่อ data ai มี Permission
Role
- BigQuery Data Viewer
- BigQuery Job User
User ยังไม่สามารถ Query ที่ External table ได้ เพราะยังขาดสิทธิ Storage Object Viewer
ที่จะไปอ่านข้อมูล บน Google Cloud Storage
แต่ถ้าเป็น กรณี BigLake ไม่จำเป็นต้อง Grant Permission ให้ User เพราะได้ไป Grant ที่ Service account แล้ว
ทำให้สามารถ Query บน BigQuery
ข้อดี
- ไม่จำเป็นต้อง Grant Permision ให้ User ทีละคน
- User ไม่จำเป็นต้องขอเข้าถึง Bucket ของ Google Cloud Storage เพิ่มความสะดวกสบายและความรวดเร็วในการใช้งาน
2) สามารถ set fine-grained security at the Table level
Row-level security
row-level security คือ การควบคุมสิทธิของ User ให้ Query เห็นเฉพาะ row ที่มีสิทธิเท่านั้น เฉพาะฉะนั้น แต่ละ User ที่เข้ามาจะเห็นข้อมูลไม่เหมือนกัน
row-level security ในภาพเป็นแค่ที่การ check ให้ดูว่ามันสามารถ set ได้
โดยเราจะเปรียบเทียบ ระหว่าง
- Standard BigQuery tables หรือ Native table
- BigLake tables
- External tables
จะเห็นได้ว่า External table ไม่สามารถ set row-level security
Column-level Security
column-level security คือ การควบคุมสิทธิของ User ให้ Query เห็นเฉพาะ column ที่มีสิทธิเท่านั้น ทำให้ User บางคนจะไม่สามารถ Query บาง column ที่เราไม่อยากให้เขาเข้าถึงข้อมูลนั้นได้
ในทางเดียวกัน external table จะเซ็ต column-level security ไม่ได้เช่นกัน แต่ BigLake ใช้ได้เช่นเดียวกับ Native table เลย
เสริม: เราสามารถมาสร้าง Policy tag เพื่อทำ column-level security ที่ตรง Policy tags นะ
Data Masking
data masking คือ การที่เราทำ data sensitivity โดยเราจะสามารถ ระบุ rule ได้ว่าจะให้แต่ล่ะ role เห็น data ยังไง
สมมติมี ทีม marketing, ทีม HR และ CEO
มีข้อมูล column id, name, address, salary และ contact
สามารถเซ็ตให้แต่ล่ะ role เห็นข้อมูลที่แตกต่างกันได้
เช่น
- ให้ทีม Marketing เห็นคอลัมน์ address เป็นค่า Hash และ salary เป็นค่า Null
- ให้ทีม HR เห็นคอลัมน์ address เป็นค่าปกติ และ salary เป็นค่า Null
- ส่วน Executives สามารถเห็นทุก column แบบปกติ
data masking สามารถใช้งานร่วมกับ row-level security และ column-level security
ถ้าอยากจะศึกษาเพิ่มก็ตามนี้เลย Introduction to data masking
ขั้นตอนในการสร้าง BigLake
1. Enable BigQuery Storage API
2. เปิด Bigquery แล้วสร้าง external connection
* กรณี data source อยู่ที่ google cloud storage
พอสร้างเสร็จ จะได้หน้าตาแบบนี้
3. นำ Service account id ไป grant permission
4. คนที่จะสามารถสร้าง BigLake table ได้ต้องมีสิทธิตามนี้
bigquery.tables.create
bigquery.connections.delegate
ซึ่งสามารถ grant ได้ 2 แบบ
4.1) Grant role : BigQuery Admin
หรือ
4.2) Grant role : BigQuery Data Editor
Grant role : BigQuery Connection Admin
5. Create table
ลอง query หรือ เล่นกับตัว BigLake table ได้เลย
** คนที่เป็น Data Analytics หรือ User อื่นๆไม่จำเป็นต้อง ขอสิทธิ Google Cloud Storage ทำให้สะดวกในการทำงานง่ายและรวดเร็วขึ้น
ส่งท้าย
สุดท้ายนี้จะเห็นได้ว่า BigLake ความสามารถมากกว่า external tableแบบปกติมาก อยากให้ลองเปลี่ยนมาใช้กัน หวังว่าบทความนี้จะช่วยเป็น reference ของพี่ๆน้องๆ Data Engineer ทุกคนครับ ถ้ามีเนื้อหาผิดพลาด หรือตกหล่นตรงไหน สามารถ comment ให้คำแนะนำกันได้ครับ