การดูด RDBMS เข้าสู่ Apache Atlas

Pongthep Vijite
DAMAGeek
Published in
3 min readMay 8, 2021

หมายเหตุ ผู้อ่านสามารถดู table of contents ของ Data Engineering from Noob to Newbie ได้ที่ http://bit.ly/2P7isEw

สำหรับบทความนี้เราจะมาดูการ ingest metadata จาก RDBMS อย่าง postgresql เข้าไปเก็บไว้ที่ apache atlas กัน โดยเราจะมาเริ่มต้นกันที่ทำความเข้าใจกับ example tables ใน postgresql กันก่อนนะครับ

example tables

จากรูปข้างบนนี้ table ทั้งหมดที่เราจะใช้ในตัวอย่างมีอยู่ด้วยกัน 3 tables ได้แก่

  • table user: ใช้สำหรับเก็บข้อมูล user
  • table product: ใช้สำหรับเก็บข้อมูลสินค้า
  • table transaction: ใช้สำหรับเก็บของ transaction ที่เกิดจาก user ซื้อสินค้า
ทั้ง 3 tables ถูกจัดเก็บไว้ใน schema ที่ชื่อว่า market

เมื่อ database เราพร้อมแล้ว ต่อมาจะเป็นการ setup apache atlas โดยใช้ docker image ซึ่งถูก build มาจาก https://github.com/ing-bank/rokku-dev-apache-atlas (เหตุผลที่เราเลือกใช้ docker ในบทความนี้เพื่อความสะดวกต่อการนำเสนอ) ซึ่งในการ start container อาจจะใช้เวลาสะพักนึง หากเราทำงาน logs ดูใน container ให้รอจนขึ้นข้อความตามรูปด้านล่างจึงถือว่า container start โดยสมบูรณ์ โดย default username/passsword จะเป็นเป็น admin/admin

start atlas container
ui ใหม่ของ apache atlas

ขั้นตอนต่อไปจะเป็นการเขียนโปรแกรมเพื่อ load metadata จาก postgresql ไปเก็บใน atlas ซึ่งเราจะใช้ https://pypi.org/project/atlas-metadata-extractor/ เป็น lib ในการ ingest metadata ซึ่งเราสามารถดูตัวอย่างการใช้งาน code ได้จาก https://github.com/pongthep/atlas-metadata-extractor/blob/main/examples/rdbms/postgresql_extractor_script.py

from metadata_extractor.publisher.atlas_publisher import AtlasPublisher
from metadata_extractor.publisher.rdbms_publisher import RDBMSPublisher
from metadata_extractor.pipeline.rdbms_pipeline import RDBMSPipeline
from metadata_extractor.models.hosts.rdbms_host import RDBMSHost
from metadata_extractor.models.enum.db_engine_enum import DBEngine

if __name__ == "__main__":
host = '192.168.1.131'
port = 50009
db_name = 'postgres'
db_schema = 'market'
db_user = 'atlas_extractor'
db_password = 'V3gF0rSUkh1k'

atlas = AtlasPublisher(host='http://192.168.1.131:52670', password='admin')
rdbms_publisher = RDBMSPublisher(atlas_publisher=atlas)

rdbms_host = RDBMSHost(host=host, port=port, db_name=db_name, db_schema=db_schema, db_user=db_user,
db_password=db_password)

RDBMSPipeline.sync_full_db(engine_name=DBEngine.postgresql.name, rdbms_publisher=rdbms_publisher, rdbms_host=rdbms_host)

หลังจาก ingest metadata ทั้งหมดแล้ว เมื่อเรากลับไปยัง ui ของ atlas จะเพิ่มพบว่ามีข้อมูลดังนี้

rdbms instance
rdbms db
rdbms table
table column
table relationship

จากรูปข้างต้น metadata ของ table รวมถึง table relationship ได้ถูก ingest เข้า atlas เรียบร้อย ซึ่งผมหวังว่า lib ตัวนี้จะสามารถสร้างความสะดวกในการ ingest metadata ให้กับท่านผู้อ่านได้มากขึ้น

แม้กระนั้นยังมี feature อีกมากที่สามารถใส่เข้าไปใน lib ตัวนี้ได้อีก หากท่านผู้อ่านอยากได้ feature ในแง่ไหนของการ extractor data จาก rdbms ลอง comment มาได้นะครับ

สุดท้ายนี้ถ้าท่านใดมีข้อสงสัยหรือคำชี้แนะใดๆสามารถฝากข้อความได้ที่ https://www.facebook.com/coeffest/ นะครับ ขอบคุณมากครับที่ติดตาม

refer:

https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/

https://www.postgresql.org/docs/9.0/role-membership.html

--

--