From a2088d5ea1d2665523a7befd33c2c22711375655 Mon Sep 17 00:00:00 2001 From: Constance Martineau Date: Thu, 17 Oct 2024 17:12:31 -0400 Subject: [PATCH] [DOCS]: Adds Welcome Section and "What Is Cosmos" Blurb to Home Page (#1251) ## Summary - Enhanced the documentation by adding a welcome section and a detailed explanation of what Astronomer Cosmos is to the index / home page - Expanded example usage by - Explaining how a workflow looks like in DBT and providing a visual of the dbt graph - Explaining the role of `DbtDag` - Added a call to action for community involvement via Slack and Github - Minor fixes, including adding missing backticks ## Changes - Updated `index.rst` (+72 additions, -19 deletions) - Added new image: `jaffle_shop_dbt_graph.png` ## Related Issue(s) Part of #1225 --------- Co-authored-by: yanmastin-astro --- docs/_static/jaffle_shop_dbt_graph.png | Bin 0 -> 36284 bytes docs/index.rst | 90 +++++++++++++++++++------ 2 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 docs/_static/jaffle_shop_dbt_graph.png diff --git a/docs/_static/jaffle_shop_dbt_graph.png b/docs/_static/jaffle_shop_dbt_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5a79426df4b220f997042a12586242b45ae605 GIT binary patch literal 36284 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 DAGs and Task Groups with a few lines of code. Benefits include: -- Run dbt projects against Airflow connections instead of dbt profiles -- Native support for installing and running dbt in a virtual environment to avoid dependency conflicts with Airflow -- Run tests immediately after a model is done to catch issues early -- Utilize Airflow's data-aware scheduling to run models immediately after upstream ingestion -- Turn each dbt model into a task/task group complete with retries, alerting, etc. +Welcome to Astronomer Cosmos! Whether you're an experienced data practitioner or just getting started, Cosmos makes it +simple to manage and orchestrate your dbt workflows using `Apache Airflow® `_, saving you +time and effort. By automatically turning dbt workflows into Airflow DAGs, Cosmos allows you to focus on building +high-quality data models without the hassle of managing complex integrations. +To get started right away, please check out our `Quickstart Guides `_. +You can also explore more examples in `/dev/dags `_ +or in the `cosmos-demo repo `_. -Example Usage -___________________ +To learn more about about Cosmos, please read on. -You can render a Cosmos Airflow DAG using the ``DbtDag`` class. Here's an example with the `jaffle_shop project `_: + +What Is Astronomer Cosmos? +___________________________ + +Astronomer Cosmos is an open-source library that bridges Apache Airflow and dbt, allowing you to easily transform your +dbt projects into Airflow DAGs and manage everything seamlessly. With Cosmos, you can write your data transformations +using dbt and then schedule and orchestrate them with Airflow, making the entire process smooth and straightforward. + +**Why Cosmos?** Integrating dbt and Airflow can be complex, but Cosmos simplifies it by seamlessly connecting these +powerful tools—letting you focus on what matters most: delivering impactful data models and results without getting +bogged down by technical challenges. + + +Why Should You Use Cosmos? +___________________________ + +Cosmos makes orchestrating dbt workflows: + +- **Effortless**: Transform your dbt projects into Airflow DAGs without writing extra code—Cosmos handles the heavy lifting. +- **Reliable**: Rely on Airflow's robust scheduling and monitoring features to ensure your dbt workflows run smoothly and efficiently. +- **Scalable**: Easily scale your workflows to match growing data demands, thanks to Airflow's distributed capabilities. + +Whether you're handling intricate data tasks or looking to streamline your processes, Cosmos helps you orchestrate dbt +with Airflow effortlessly, saving you time and letting you focus on what truly matters—creating impactful insights. + + +Example Usage: Jaffle Shop Project +__________________________________ + +Let's explore a practical example to see how Cosmos can convert the dbt workflow into an Airflow DAG. + +The `jaffle_shop project `_ is a sample dbt project that simulates an e-commerce store's data. +The project includes a series of dbt models that transform raw data into structured tables, such as sales, customers, and products. + +Below, you can see what the original dbt workflow looks like in a lineage graph. This graph helps illustrate the +relationships between different models: + +.. image:: /_static/jaffle_shop_dbt_graph.png + +Cosmos can take this dbt workflow and convert it into an Airflow DAG, allowing you to leverage Airflow's scheduling and +orchestration capabilities. + +To convert this dbt workflow into an Airflow DAG, create a new DAG definition file, import ``DbtDag`` from the Cosmos library, +and fill in a few parameters, such as the dbt project directory path and the profile name: .. The following renders in Sphinx but not Github: @@ -51,32 +94,41 @@ You can render a Cosmos Airflow DAG using the ``DbtDag`` class. Here's an exampl :end-before: [END local_example] -This will generate an Airflow DAG that looks like this: +This code snippet will generate an Airflow DAG that looks like this: .. image:: https://raw.githubusercontent.com/astronomer/astronomer-cosmos/main/docs/_static/jaffle_shop_dag.png -Getting Started -_______________ +``DbtDag`` is a custom DAG generator that converts dbt projects into Airflow DAGs and accepts Cosmos-specific args like +``fail_fast`` to immediately fail a dag if dbt fails to process a resource, or ``cancel_query_on_kill`` to cancel any running +queries if the task is externally killed or manually set to failed in Airflow. ``DbtDag`` also accepts standard DAG arguments such +as ``max_active_tasks``, ``max_active_runs`` and ``default_args``. -Check out the Quickstart guide on our `docs `_. See more examples at `/dev/dags `_ and at the `cosmos-demo repo `_. +With Cosmos, transitioning from a dbt workflow to a proper Airflow DAG is seamless, giving you the best of both tools +for managing and scaling your data workflows. Changelog _________ We follow `Semantic Versioning `_ for releases. -Check `CHANGELOG.rst `_ +Refer to `CHANGELOG.rst `_ for the latest changes. -Contributing Guide + +Join the Community __________________ -All contributions, bug reports, bug fixes, documentation improvements, enhancements are welcome. +Have questions, need help, or interested in contributing? We welcome all contributions and feedback! + +- Join the community on Slack! You can find us in the Airflow Slack workspace `#airflow-dbt `_ channel. If you don't have an account, click `here `_ to sign up. + +- Report bugs, request features, or ask questions by creating an issue in the `GitHub repository `_. + +- Want to contribute new features, bug fixes or documentation enhancements? Please refer to our `Contributing Guide `_. -A detailed overview on how to contribute can be found in the `Contributing Guide `_. -Find out more about `our contributors `_. +- Check out this `link `_. to learn more about our current contributors -As contributors and maintainers to this project, you are expected to abide by the +Note that contributors and maintainers are expected to abide by the `Contributor Code of Conduct `_.