Airflow Variables

Apache Airflow เบื้องต้นด้วย Python

Mike Metzger

Data Engineer

Variables คืออะไร?

  • ใช้สำหรับค่าคอนฟิกูเรชัน
  • เช่น พาธไฟล์, API endpoint, สภาพแวดล้อม ฯลฯ
  • เรียกใช้จาก task ได้ หรือตั้งค่าผ่านโค้ด, Airflow UI, หรือไฟล์
  • อยู่นอก DAG code
Apache Airflow เบื้องต้นด้วย Python

เข้าถึง Variables ใน Airflow UI

  • ผ่านเมนู Admin: Variables

Airflow UI เปิดเมนู Admin แสดงตัวเลือก Variables

Apache Airflow เบื้องต้นด้วย Python

ดู Variables ใน Airflow UI

หน้า Airflow Variables แสดงรายการว่าง ยังไม่มี variable ที่กำหนดไว้

Apache Airflow เบื้องต้นด้วย Python

เพิ่ม Variable ใน Airflow

หน้า Airflow Variables ไฮไลต์ปุ่ม Add Variable

Apache Airflow เบื้องต้นด้วย Python

Variable editor

ฟอร์มแก้ไข variable ใน Airflow มีฟิลด์ key, value และ description

Apache Airflow เบื้องต้นด้วย Python

Variables ที่ปรากฏใน UI

หน้า Airflow Variables แสดง variable ที่กำหนดไว้หนึ่งรายการ

Apache Airflow เบื้องต้นด้วย Python

อ่าน Variable ใน Python

  • ใช้ไลบรารี airflow.sdk.Variable
  • อ่านค่าด้วย Variable.get("variable_name")
    # Retrieve a plain string value
    my_region = Variable.get("region")
    
  • ในกรณีนี้ my_region จะมีค่าเป็น us-eastern
  • กำหนดค่า fallback หาก variable ไม่มีอยู่
    # Provide a fallback if the variable doesn't exist
    env = Variable.get("current_environment", default=None)
    
  • เนื่องจากยังไม่ได้กำหนด current_environment ค่า env จึงเป็น None
Apache Airflow เบื้องต้นด้วย Python

เข้าถึง Variables ใน Jinja templates

  • เข้าถึงได้ผ่าน {{ var.value.variable_name }}
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ var.value.region }}/input.csv",
    ...
    
  • ในกรณีนี้ FileSensor จะค้นหาไฟล์ /data/us-eastern/input.csv
Apache Airflow เบื้องต้นด้วย Python

เข้าถึง Variables ผ่าน CLI

  • อ่าน, อัปเดต, ลบ หรือแสดงรายการ Variables ได้ผ่าน command-line
  • อ่าน - airflow variables get <variable_name>
  • เขียน - airflow variables set <variable_name> <value>
  • ลบ - airflow variables delete <variable_name>
  • แสดงรายการ - airflow variables list <variable_name>
Apache Airflow เบื้องต้นด้วย Python

JSON Variables

  • ค่า Variable สามารถเป็น JSON string ได้
    • Variable.get("variable_name", deserialize_json=True)
    • คืนค่าเป็น Python dictionary
  • ใช้ Jinja
    • {{ var.json.variable_name }}
Apache Airflow เบื้องต้นด้วย Python

การตั้งค่า Variables

  • ตั้งค่า Variables ได้เช่นกัน
  • ใช้ Variable.set("variable_name", variable_value)
  • รองรับ JSON ด้วยตัวเลือก serialize_json=True
  • ควรใช้เท่าที่จำเป็น เพราะอาจกระทบ DAG อื่นที่ใช้ Variables ในทางที่ไม่คาดคิด
Apache Airflow เบื้องต้นด้วย Python

มาฝึกกันเถอะ!

Apache Airflow เบื้องต้นด้วย Python

Preparing Video For Download...