<!-- Release notes generated using configuration in .github/release.yml at release/0.9.28 -->
<div align="center">
<img width="50%" src="https://github.com/mage-ai/mage-ai/assets/59450879/dec4df43-3b1a-4f18-87ba-597bfd8a6ff8">
</div>
What's Changed
๐ Exciting New Features
๐ซจ Brand new dbt blocks!
One of our _top_ contributors christopherscholz just delivered a _huge_ feature! A completely streamlined dbt Block!
<div align="center">
<img width="50%" src="https://github.com/mage-ai/mage-ai/assets/59450879/c781a298-eebe-4615-8059-9ee2c91f0180">
</div>
Here are some of the highlights:
- Directly integrated into `dbt-core`, instead of calling it via a subprocess, which allows to use all of dbts functionalities
- Use dbt to seed output dataframes from upstream blocks
- Use dbt to generate correct relations e.g. default schema names, which differ between databases
- Use dbt to preview models, by backporting the `dbt seed` command to `dbt-core==1.4.7`
- No use of any mage based database connections to handle the block
- Allows to install any dbt adapter, which supports the dbt-core version
- Moved all code into a single interface called `DBTBlock`
- Doubles as a factory for child blocks `DBTBlockSQL` and `DBTBlockYAML`
- Child blocks make it easier to understand which block does what
There's lots to unpack in this one, so be sure to read more in the PR below and check out our updated [docs](https://docs.mage.ai/dbt/overview).
_by christopherscholz in https://github.com/mage-ai/mage-ai/pull/3497_
โ Add GCS storage to store block output variables
Google Cloud users rejoice! Mage _already_ supports storing block output variables in S3, but thanks to contributor luizarvo, you can now do the same in GCS!
Check out the PR for more details and read-up on implementation [here](https://docs.mage.ai/design/data-pipeline-management#variable-storage).
_by luizarvo in https://github.com/mage-ai/mage-ai/pull/3597_
โจ Tableau Data Integration Source
<div align="center">
<img width="65%" src="https://dev3lop.com/wp-content/uploads/2017/04/tableau-software-logo.png">
</div>
Another community-led integration! Thank you mohamad-balouza for adding a Tableau source for data integration pipelines!
<div align="center">
<img width="65%" src="https://user-images.githubusercontent.com/125284049/270114084-b034876e-9ea5-4790-8dbe-a5039a281ff5.png">
</div>
_by mohamad-balouza in https://github.com/mage-ai/mage-ai/pull/3581_
๐ฆ Add DuckDB loader and exporter templates
Last week, we rolled out _a ton_ of new DuckDB functionality, this week, we're adding DuckDB loader and exporter templates! Be sure to check them out when building your _new_ DuckDB pipelines! ๐
<p align="center">
<img width="35%" alt="image" src="https://user-images.githubusercontent.com/5386254/269154636-c2b93d8d-bfde-4323-a498-e16341991ce2.png">
<img width=30% alt="image" src="https://user-images.githubusercontent.com/5386254/269154582-475aa465-6df7-40b5-a8e0-4c1579665b11.png">
</p>
_by matrixstone in https://github.com/mage-ai/mage-ai/pull/3553_
๐งฑ Bulk retry incomplete block runs
Exciting frontend improvements are coming your way! You can now retry all of a pipeline's incomplete block runs from the UI. This includes all block runs that do not have `completed` status.
<div align="center">
<img width="65%" src="https://github.com/mage-ai/mage-ai/assets/59450879/08c31548-9847-41e1-9dfd-1a8a41d90d77">
</div>
๐ Bug Fixes
* Fix using `S3Storage` to store block output variables by wangxiaoyou1993 in https://github.com/mage-ai/mage-ai/pull/3559 and https://github.com/mage-ai/mage-ai/pull/3588
* Support local timezone for cron expressions by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3561
* Make API middlware set status codes if there's an API key or OAUTH token error by splatcollision in https://github.com/mage-ai/mage-ai/pull/3560
* Fix Postgres connection url parsing by dy46 in https://github.com/mage-ai/mage-ai/pull/3570
* Fix passing in logger for alternative block execution methods by dy46 in https://github.com/mage-ai/mage-ai/pull/3571
* Fix variables interpolation in dbt target by wangxiaoyou1993 in https://github.com/mage-ai/mage-ai/pull/3578
* Fixed `dbt seed` requiring variables by tommydangerous in https://github.com/mage-ai/mage-ai/pull/3579
* Fix updating of `pipelineRowsSorted` when clearing search query by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3596
* Check yaml serialization before writing variable by dy46 in https://github.com/mage-ai/mage-ai/pull/3598
* Fix `condition_failed` check for dynamic blocks by dy46 in https://github.com/mage-ai/mage-ai/pull/3595
๐
Enhancements & Polish
* Display warning on demo site to prevent users from entering private credentials by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3550
* Update wording for empty pipeline template state by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3557
* Reorder upstream blocks by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3541
* Prioritize using `remote_variables_dir` for variable manager by wangxiaoyou1993 in https://github.com/mage-ai/mage-ai/pull/3562
* Customize ecs config by dy46 in https://github.com/mage-ai/mage-ai/pull/3558
* Bookmark values minor improvements by johnson-mage in https://github.com/mage-ai/mage-ai/pull/3576
* Speed up bigquery destination in data integration pipeline by wangxiaoyou1993 in https://github.com/mage-ai/mage-ai/pull/3590
* Allow declared cookies to propagate to resources by hugabora in https://github.com/mage-ai/mage-ai/pull/3555
* Refactor: use generic function to call LLM avoid code duplication by matrixstone in https://github.com/mage-ai/mage-ai/pull/3358
* Allow configuring EMR cluster spark properties by wangxiaoyou1993 in https://github.com/mage-ai/mage-ai/pull/3592
* Support `TIMESTAMP` in redshift convert by RobinFrcd https://github.com/mage-ai/mage-ai/pull/3567
New Contributors
* luizarvo made their first contribution in https://github.com/mage-ai/mage-ai/pull/3597
* RobinFrcd made their first contribution in https://github.com/mage-ai/mage-ai/pull/3567
**Full Changelog**: https://github.com/mage-ai/mage-ai/compare/0.9.26...0.9.28