From 0fed7f622d0ff477d1cad847652e21b41caf4dc1 Mon Sep 17 00:00:00 2001 From: Matts966 Date: Sun, 17 Oct 2021 23:18:07 +0900 Subject: [PATCH 1/2] Updated doc --- README.md | 6 +++++- samples/airflow.png | Bin 0 -> 38601 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 samples/airflow.png diff --git a/README.md b/README.md index ded0a5f3..89466dac 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ wget -P $temp https://github.com/Matts966/alphasql/releases/latest/download/alph ## Extract DAG from SQL set -`alphadag` finds dependencies between table references and create table statements. +`alphadag` finds dependencies between table references and create table statements, function calls and create function statements. ```bash # To extract DAG from your SQL set @@ -100,6 +100,8 @@ You can extract dependencies containing tables and functions by `--with_tables` ![dag.dot](./samples/sample/with_all/dag.png) +![dag.dot](./samples/sample-function-dependency/with_all/dag.png) + ## Parallel Execution For BigQuery, the output DAG can be run parallely using @@ -109,6 +111,8 @@ For BigQuery, the output DAG can be run parallely using ### bq-airflow-dag-generator +![airflow DAG](./samples/airflow.png) + `bq-airflow-dag-generator` as Python package can generate Airflow DAG by simple Python script. ```Python diff --git a/samples/airflow.png b/samples/airflow.png new file mode 100644 index 0000000000000000000000000000000000000000..ebef7f181fbd11f9c8e218e9ef5edc33d9362864 GIT binary patch literal 38601 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 Date: Sun, 17 Oct 2021 23:21:52 +0900 Subject: [PATCH 2/2] Add title for with_tables and functions --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 89466dac..36fb366c 100644 --- a/README.md +++ b/README.md @@ -98,8 +98,12 @@ You can resolve side effects such as `INSERT` and `UPDATE` statements before sim You can extract dependencies containing tables and functions by `--with_tables` and `--with_functions` options. +#### With tables + ![dag.dot](./samples/sample/with_all/dag.png) +### With functions + ![dag.dot](./samples/sample-function-dependency/with_all/dag.png) ## Parallel Execution