Skip to content

Commit 860da89

Browse files
fix(redshift): skip dist/sort on temporary tables (#2087)
Co-authored-by: Colin Rogers <111200756+colin-rogers-dbt@users.noreply.github.com>
1 parent e687d87 commit 860da89

3 files changed

Lines changed: 58 additions & 0 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: Fixes
2+
body: Stop applying dist/sort configs to temporary tables, reducing unnecessary Redshift resource usage
3+
time: 2026-07-21T15:15:04.774654-03:00
4+
custom:
5+
Author: alejandrofm
6+
Issue: "2085"

dbt-redshift/src/dbt/include/redshift/macros/adapters.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@
5454
{{ get_assert_columns_equivalent(sql) }}
5555
{%- set sql = get_select_subquery(sql) %}
5656
{% if backup == false -%}backup no{%- endif %}
57+
{%- if not temporary %}
5758
{{ dist(_dist) }}
5859
{{ sort(_sort_type, _sort) }}
60+
{%- endif %}
5961
;
6062

6163
insert into {{ relation.include(database=(not temporary), schema=(not temporary)) }}
@@ -69,8 +71,10 @@
6971
create {% if temporary -%}temporary{%- endif %} table
7072
{{ relation.include(database=(not temporary), schema=(not temporary)) }}
7173
{% if backup == false -%}backup no{%- endif %}
74+
{%- if not temporary %}
7275
{{ dist(_dist) }}
7376
{{ sort(_sort_type, _sort) }}
77+
{%- endif %}
7478
as (
7579
{{ sql }}
7680
);
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from types import SimpleNamespace
2+
3+
import jinja2
4+
5+
6+
def _render_create_table_as(temporary, dist="my_col", sort=["my_col"]):
7+
env = jinja2.Environment(
8+
loader=jinja2.FileSystemLoader("src/dbt/include/redshift/macros"),
9+
extensions=["jinja2.ext.do"],
10+
)
11+
template = env.get_template("adapters.sql")
12+
13+
config_values = {
14+
"dist": dist,
15+
"sort_type": None,
16+
"sort": sort,
17+
"sql_header": None,
18+
"backup": None,
19+
}
20+
contract_config = SimpleNamespace(enforced=False)
21+
config = SimpleNamespace(
22+
get=lambda key, default=None, validator=None: (
23+
contract_config if key == "contract" else config_values.get(key, default)
24+
)
25+
)
26+
27+
relation = SimpleNamespace(include=lambda database=True, schema=True: "my_rel")
28+
29+
class _AnyValidator:
30+
def __getitem__(self, item):
31+
return None
32+
33+
validation = SimpleNamespace(any=_AnyValidator())
34+
35+
macros = template.make_module({"config": config, "validation": validation})
36+
return macros.redshift__create_table_as(temporary, relation, "select 1")
37+
38+
39+
def test_dist_and_sort_omitted_for_temporary_tables():
40+
rendered = _render_create_table_as(temporary=True).lower()
41+
assert "distkey" not in rendered
42+
assert "sortkey" not in rendered
43+
44+
45+
def test_dist_and_sort_applied_for_non_temporary_tables():
46+
rendered = _render_create_table_as(temporary=False).lower()
47+
assert "distkey" in rendered
48+
assert "sortkey" in rendered

0 commit comments

Comments
 (0)