first commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# =============================================================================
|
||||
# eBdesk SiCABE — dependensi image Airflow 3.3.2 / Python 3.11 (BERDAMPINGAN)
|
||||
# =============================================================================
|
||||
# SUMBER (input) untuk `uv pip compile`. Jangan tambahkan pin hasil ke sini —
|
||||
# hasilnya ada di requirements.332.lock.
|
||||
# Berdampingan dengan `requirements.in` (3.3.1) yang TIDAK diubah.
|
||||
# Rencana & bukti: reviews/sicabe-18-merge-airflow332-plan.md · experiments/airflow332/
|
||||
#
|
||||
# Perubahan dari requirements.in (3.3.1):
|
||||
# 1. apache-airflow 3.3.1 -> 3.3.2
|
||||
# 2. + apache-airflow-providers-mysql (keputusan K3 — sebelumnya sengaja tidak ada)
|
||||
# 3. openmetadata-* 2.0.2.0 -> 2.0.3.0 ; extra `[airflow]` DILEPAS
|
||||
# 4. + sqlalchemy<2.1 (PIN WAJIB, hasil langkah A1)
|
||||
#
|
||||
# ⚠️ CONSTRAINT: resolusi ini di-resolve BEBAS (tanpa constraints resmi Airflow),
|
||||
# karena constraints resmi 3.3.2 TIDAK dapat dipakai bersama OpenMetadata 2.0.3.0:
|
||||
# constraints tabulate==0.10.0 vs OM tabulate==0.9.0 (keras)
|
||||
# constraints kubernetes==36.0.3 vs OM kubernetes<36
|
||||
# Jalur `--override` sudah dicoba dan TIDAK menang atas constraints.
|
||||
# Preseden: lock produksi 3.3.1 pun di-resolve bebas (ia memakai tabulate 0.9.0).
|
||||
# =============================================================================
|
||||
|
||||
apache-airflow==3.3.2
|
||||
|
||||
# Provider Airflow yang dipakai DAG / konektor
|
||||
apache-airflow-providers-trino
|
||||
apache-airflow-providers-amazon
|
||||
apache-airflow-providers-http
|
||||
# WAJIB: Postgres adalah metadata DB Airflow (postgresql+psycopg2://).
|
||||
apache-airflow-providers-postgres
|
||||
# ⚠️ BARU (keputusan K3): untuk konek ke server MySQL eksternal. Provider ini
|
||||
# menarik EMPAT klien (mysqlclient, mysql-connector-python, aiomysql, pymysql)
|
||||
# sehingga ketiga rute Extra `client` tersedia. `mysqlclient` tidak punya wheel
|
||||
# Linux → dibangun di stage builder Dockerfile.332 + libmariadb3 sebagai runtime.
|
||||
apache-airflow-providers-mysql
|
||||
|
||||
# OpenLineage — memancarkan event lineage dari task Airflow.
|
||||
# ⚠️ INERT tanpa backend: provider ini hanya aktif bila transport/endpoint
|
||||
# OpenLineage dikonfigurasi (mis. OPENLINEAGE_URL + OPENLINEAGE_API_KEY, atau
|
||||
# transport lain). Di stack ini BELUM ada backend OpenLineage, jadi penambahan
|
||||
# ini mengaktifkan KEMAMPUAN — belum menghasilkan lineage sampai dikonfigurasi.
|
||||
# Dependensinya ringan dan hanya batas bawah: attrs>=22.2 (kita punya 26.1.0),
|
||||
# providers-common-sql/common-compat (sudah ada), plus dua paket baru:
|
||||
# openlineage-python + openlineage-integration-common.
|
||||
apache-airflow-providers-openlineage
|
||||
|
||||
# ─── PIN WAJIB: melindungi plugin OpenMetadata dari kerusakan SENYAP ─────────
|
||||
# SQLAlchemy 2.1 mematahkan rantai:
|
||||
# flask_appbuilder -> sqlalchemy_utils -> sqlalchemy.orm.attributes
|
||||
# AttributeError: module 'sqlalchemy.orm.attributes' has no attribute
|
||||
# 'ScalarAttributeImpl'
|
||||
# Akibatnya plugin `openmetadata-managed-apis` GAGAL DIMUAT saat Airflow start
|
||||
# (log hanya "Failed to import plugin openmetadata_managed_apis"), sehingga tombol
|
||||
# "Test Connection" dan jalur pipeline service client (install-phases §8.11) mati.
|
||||
# ⚠️ Berkas constraints RESMI Airflow pun TIDAK mem-pin sqlalchemy — jadi hanya
|
||||
# pin eksplisit inilah yang melindungi (ditemukan di experiments/airflow332).
|
||||
sqlalchemy<2.1
|
||||
|
||||
# Transformasi & data quality
|
||||
# dbt-core<1.12: 1.12.x menarik `dbt-core-experimental-parser` yang sdist-only.
|
||||
dbt-core<1.12
|
||||
dbt-trino>=1.8,<2.0
|
||||
great_expectations>=1.0,<2.0
|
||||
|
||||
# Metadata ingestion
|
||||
# ⚠️ Extra `[airflow]` DILEPAS (keputusan pemilik proyek). Dampaknya TERUKUR di H7:
|
||||
# produksi (dengan extra) 18/18 modul · eksperimen (tanpa extra) 13/18
|
||||
# yang hilang: tornado, elasticsearch, opensearchpy,
|
||||
# providers-elasticsearch, providers-opensearch
|
||||
# TETAP ADA (yang menentukan): workflow_factory, api.routes.deploy, pygtrie,
|
||||
# attrs, werkzeug, starlette, python-multipart, otlp, presidio, spacy
|
||||
# → jalur DAG ingestion metadata TETAP UTUH; OM 2.x hanya punya 2 sink
|
||||
# (`file`, `metadata_rest`) dan keduanya impor bersih.
|
||||
# Bila kelak memakai pipeline yang meng-ingest DARI Elasticsearch/OpenSearch,
|
||||
# tambahkan paket spesifik di atas — bukan mengembalikan seluruh extra.
|
||||
# Extra `[pii-processor]` TETAP dipasang (presidio + spacy) agar DAG pipeline DQ
|
||||
# yang dibangkitkan plugin dapat diimpor Airflow. Versi WAJIB sama dengan server.
|
||||
openmetadata-ingestion[pii-processor]==2.0.3.0
|
||||
|
||||
# Plugin REST API OpenMetadata yang disajikan Airflow di prefix /pluginsv2/
|
||||
# (yang menghidupkan tombol "Test Connection"). Paket ini TIDAK mem-pin Airflow
|
||||
# (`apache-airflow>=2.2.2`) sehingga netral terhadap pilihan versi kita.
|
||||
openmetadata-managed-apis==2.0.3.0
|
||||
|
||||
# Lineage dbt (bronze→silver→gold) di OpenMetadata — tanpa ini workflow dbt gagal
|
||||
# dengan "No module named 'collate_dbt_artifacts_parser'".
|
||||
collate-dbt-artifacts-parser==0.1.4
|
||||
|
||||
# ─── Ditambahkan 2026-10-06 atas permintaan pemilik proyek ──────────────────
|
||||
# 1) statsd — WAJIB agar Airflow memakai StatsClient (StatsD → statsd-exporter).
|
||||
# Tanpa paket ini Airflow jatuh ke NoStatsLogger:
|
||||
# "Could not configure StatsClient: No module named 'statsd'"
|
||||
# sehingga TIDAK ada metrik yang terkirim (menutup caveat non-permanen M2).
|
||||
statsd
|
||||
# 2) duckdb — analitik lokal di dalam task DAG.
|
||||
duckdb
|
||||
# 3) pyiceberg[s3fs,pyarrow] — akses tabel Iceberg langsung (S3FileIO via s3fs)
|
||||
# + konversi tabel Arrow. Menarik pyarrow, s3fs, dan aiobotocore (lihat lock).
|
||||
pyiceberg[s3fs,pyarrow]
|
||||
Reference in New Issue
Block a user