tg-me.com/sqlhub/1874
Last Update:
SQL Flow ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Β«DuckDB Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ
Π΄Π°Π½Π½ΡΡ
Β» β Π»ΡΠ³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ stream-ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π²Π΅ΡΡ pipeline Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ SQL ΠΈ ΡΠ»ΡΠΆΠ°ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ Apache Flink.
π ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
- ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ (Sources): Kafka, WebSocket-ΡΡΡΠΈΠΌΡ, HTTP-webhooks ΠΈ Π΄Ρ.
- ΠΡΠΈΡΠΌΠ½ΠΈΠΊΠΈ (Sinks): Kafka, PostgreSQL, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈ S3-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, Π»ΡΠ±ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ DuckDB (JSON, Parquet, Iceberg ΠΈ Ρ.Π΄.).
- SQL-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ (Handler): Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ DuckDB + Apache Arrow; ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π³ΡΠ΅Π³Π°ΡΡ, ΠΎΠΊΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, UDF ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ ΡΡ
Π΅ΠΌΡ.
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°ΠΌΠΈ: in-memory tumbling-windows, Π±ΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ.
- ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΡ: Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Prometheus-ΠΌΠ΅ΡΡΠΈΠΊΠΈ (Ρ ΡΠ΅Π»ΠΈΠ·Π° v0.6.0).
π ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°
ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ YAML-ΡΠ°ΠΉΠ»ΠΎΠΌ Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ `source β handler β sink`.
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
1. Source ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ (Kafka, WebSocket β¦).
2. Handler Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ SQL-Π»ΠΎΠ³ΠΈΠΊΡ Π² DuckDB.
3. Sink ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
# ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π·
docker pull turbolytics/sql-flow:latest
# ΡΠ΅ΡΡΠΎΠ²Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
docker run -v $(pwd)/dev:/tmp/conf \
-v /tmp/sqlflow:/tmp/sqlflow \
turbolytics/sql-flow:latest \
dev invoke /tmp/conf/config/examples/basic.agg.yml /tmp/conf/fixtures/simple.json
# Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΡΠΈΠ² Kafka
docker-compose -f dev/kafka-single.yml up -d # ΠΏΠΎΠ΄Π½ΡΡΡ Kafka
docker run -v $(pwd)/dev:/tmp/conf \
-e SQLFLOW_KAFKA_BROKERS=host.docker.internal:29092 \
turbolytics/sql-flow:latest \
run /tmp/conf/config/examples/basic.agg.mem.yml --max-msgs-to-process=10000
βͺ Github
@sqlhub