-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Support dispatch
for materializations to use implementations defined in installed packages
#10090
Comments
Overall, either of these options seem like they could work. I'm more drawn to the second option because it seems it seems closest conceptually to current. The first option has a slight hack feel to it along with the edge case where it would not play well with an installed package named If we choose the second option, would users be able to mix-n-match like the following? Or would # second option: new attribute
dispatch:
- type: materialization
# macro_namespace is not needed, because all materializations are global
search_order: ['elementary', 'dbt']
- macro_namespace: dbt_utils
# type is not needed here because `macro` is the default when not specified
search_order: ['my_project', 'dbt_utils'] Out of curiosity, would/could either of these work from a technical perspective if we choose the second option? # second option: new attribute
dispatch:
- macro_namespace: dbt
type: materialization
search_order: ['elementary', 'dbt'] # second option: new attribute
dispatch:
- macro_namespace: none
type: materialization
search_order: ['elementary', 'dbt'] |
@dbeatty10 I agree with your preference for a new I think users could "mix-n-match". The default And I like where your "out of curiosity" thought is going. This syntax would be extensible to eventually support namespacing for materializations, and finer-grained search orders for each namespace. That's a good future possibility, out of scope for whatever we're doing here. For now, this will be a single search order for all materializations. |
@Maayan-s @haritamar Does this proposal make sense to you both? Would you still be up for helping with the contribution? |
Hi @jtcohen6 , yes this proposal sounds good on our end, and we'll be happy to help with contribution! |
@haritamar please can you confirm this is still in progress and for now, elementary users should still use the flag, |
Following up as well. Has there been any progress on this issue? |
Is this your first time submitting a feature request?
Describe the feature
This is a way of preserving a more granular version of the previous behavior, which would implicitly (and somewhat surprisingly) use materializations from packages that override builtins (
view
,table
,incremental
,test
, etc).We are opting for this syntax:
Considerations
If not specified, the default would remain:
dbt-core
/ adaptersWhich is how it works for materializations with the flag, and for dispatched macros.
Implementation
The relevant method is
find_materialization_macro_by_name
.Michelle spiked a similar capability, though by pulling the "allowlist" from
Project.flags
rather thanProject.dispatch
: 99998a5Describe alternatives you've considered
(1) Not doing this
Users must reimplement materializations one-by-one, by defining them in their root project and calling the implementations in packages.
(2) Bundling with existing macro dispatch
Under the hood, these materializations are macros, and defined within the
'dbt'
namespace. But I like the idea of continuing to keep the two separate, for three reasons:(3) Different syntax that wouldn't require evolving the type of
dispatch
configEdge case: this would not play well with an installed package named
materialization
.Who will this benefit?
elementary
package (Instruct users to explicitly overrideview
andincremental
materializations elementary-data/dbt-data-reliability#703)Are you interested in contributing this feature?
Yes, with the help of the elementarians
Anything else?
We should do this for dbt Core v1.8.x only. No backports. While we introduced the deprecation warning in dbt-core v1.6 + v1.7, it's still the default behavior in those versions to use implementations defined in packages.
We will document in the v1.8 upgrade guide and "legacy behaviors" the recommended sequence of:
False
to preserve existing behavior (regardless of the version they're running on), and to unblock their upgrade to v1.8dispatch
, set the flag toTrue
/ remove the flag setting, and confirm that they're seeing the same behavior as beforeThe text was updated successfully, but these errors were encountered: