Skip to content

Commit 8233104

Browse files
committed
Describe your changes
Issue Synopsis: For dbt projects on internal EDH cluster, two classes of errors were observed - 1. A temporary table was dropped, but was not reflected in the metastore 2. A regular view / table was dropped before recrating or issuing a alter table rename, but the same was not reflected in the metatore Solution: Issue a invalidate metadata <object> where relevant. Since in the dbt flow, the relevent <object> for which invalidate metadata statement is issued, the object may not exist, the error for same is caught and ignored. Internal Jira ticket number or external issue link https://jira.cloudera.com/browse/DBT-350 Testing procedure/screenshots(if appropriate): For a valid EDH profile, issue debug, run --full-refresh and run. Sample runs are as follows: (dev-dbt-impala) ganesh.venkateshwara@ganesh dbtdemo % dbt debug 07:57:58 Running with dbt=1.1.2 dbt version: 1.1.2 python version: 3.9.12 python path: /Users/ganesh.venkateshwara/code/venv/dev/dev-dbt-impala/bin/python os info: macOS-12.6-arm64-arm-64bit Using profiles.yml file at /Users/ganesh.venkateshwara/.dbt/profiles.yml Using dbt_project.yml file at /Users/ganesh.venkateshwara/code/dbt-examples/dbtdemo/dbt_project.yml Configuration: profiles.yml file [OK found and valid] dbt_project.yml file [OK found and valid] Required dependencies: - git [OK found] Connection: host: westeros.edh.cloudera.com port: 21050 schema: p_strategy username: None Connection test: [OK connection ok] All checks passed! (dev-dbt-impala) ganesh.venkateshwara@ganesh dbtdemo % dbt run --full-refresh 07:08:42 Running with dbt=1.1.2 07:08:42 Found 3 models, 4 tests, 0 snapshots, 0 analyses, 187 macros, 0 operations, 1 seed file, 0 sources, 0 exposures, 0 metrics 07:08:42 07:09:27 Concurrency: 1 threads (target='dev_impala_kerberos') 07:09:27 07:09:27 1 of 3 START table model p_strategy.my_first_dbt_model ......................... [RUN] 07:10:04 1 of 3 OK created table model p_strategy.my_first_dbt_model .................... [OK in 36.10s] 07:10:04 2 of 3 START incremental model p_strategy.my_incremental_model ................. [RUN] 07:11:22 2 of 3 OK created incremental model p_strategy.my_incremental_model ............ [OK in 78.03s] 07:11:22 3 of 3 START table model p_strategy.my_second_dbt_model ........................ [RUN] 07:11:59 3 of 3 OK created table model p_strategy.my_second_dbt_model ................... [OK in 37.87s] 07:12:02 07:12:02 Finished running 2 table models, 1 incremental model in 199.11s. 07:12:02 07:12:02 Completed successfully 07:12:02 07:12:02 Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3 (dev-dbt-impala) ganesh.venkateshwara@ganesh dbtdemo % dbt run 07:12:40 Running with dbt=1.1.2 07:12:40 Found 3 models, 4 tests, 0 snapshots, 0 analyses, 187 macros, 0 operations, 1 seed file, 0 sources, 0 exposures, 0 metrics 07:12:40 07:13:27 Concurrency: 1 threads (target='dev_impala_kerberos') 07:13:27 07:13:27 1 of 3 START table model p_strategy.my_first_dbt_model ......................... [RUN] 07:14:02 1 of 3 OK created table model p_strategy.my_first_dbt_model .................... [OK in 34.96s] 07:14:02 2 of 3 START incremental model p_strategy.my_incremental_model ................. [RUN] 07:14:31 2 of 3 OK created incremental model p_strategy.my_incremental_model ............ [OK in 29.24s] 07:14:33 3 of 3 START table model p_strategy.my_second_dbt_model ........................ [RUN] 07:15:13 3 of 3 OK created table model p_strategy.my_second_dbt_model ................... [OK in 39.58s] 07:15:15 07:15:15 Finished running 2 table models, 1 incremental model in 154.85s. 07:15:15 07:15:15 Completed successfully 07:15:15 07:15:15 Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3 Checklist before requesting a review - [X] I have performed a self-review of my code - [X] I have formatted my added/modified code to follow pep-8 standards - [X] I have checked suggestions from python linter to make sure code is of good quality.
1 parent 255551a commit 8233104

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

dbt/adapters/impala/connections.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,8 @@ def add_query(
329329

330330
# re-raise query exception so that it propogates to dbt
331331
if (query_exception):
332-
raise query_exception
332+
if (sql.find("invalidate metadata") < 0): # ignore errors for invalidate metadata
333+
raise query_exception
333334

334335
fire_event(
335336
SQLQueryStatus(

dbt/include/impala/macros/adapters.sql

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@
206206
{% call statement('drop_relation_if_exists_view') %}
207207
drop view if exists {{ relation }}
208208
{% endcall %}
209+
{{ invalidate_metadata(relation) }}
209210
{% endmacro %}
210211

211212
{% macro is_relation_present(relation) -%}
@@ -248,15 +249,25 @@
248249
{% do return(rel_type) %}
249250
{% endmacro %}
250251

252+
{% macro invalidate_metadata(relation) %}
253+
{% call statement('invalidate_metadata') %}
254+
invalidate metadata {{ relation.include(schema=True) }}
255+
{% endcall %}
256+
{% endmacro %}
257+
251258
{% macro impala__rename_relation(from_relation, to_relation) -%}
252259
{% set from_rel_type = get_relation_type(from_relation) %}
253260

254261
{% call statement('drop_relation_if_exists_table') %}
255262
drop table if exists {{ to_relation }}
256263
{% endcall %}
257264
{% call statement('drop_relation_if_exists_view') %}
258-
drop view if exists {{ to_relation }};
265+
drop view if exists {{ to_relation }}
259266
{% endcall %}
267+
268+
{{ invalidate_metadata(to_relation) }}
269+
{{ invalidate_metadata(from_relation) }}
270+
260271
{% call statement('rename_relation') -%}
261272
{% if not from_rel_type %}
262273
{% do exceptions.raise_database_error("Cannot rename a relation with a blank type: " ~ from_relation.identifier) %}

dbt/include/impala/macros/incremental.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
{% do to_drop.append(backup_relation) %}
112112
{% do to_drop.append(intermediate_relation) %}
113113
{% else %}
114+
{{ drop_relation_if_exists(tmp_relation) }}
114115
{% do run_query(create_table_as(True, tmp_relation, sql)) %}
115116
{% do adapter.expand_target_column_types(
116117
from_relation=tmp_relation,
@@ -125,6 +126,8 @@
125126
{#-- set build_sql = get_delete_insert_merge_sql(target_relation, tmp_relation, unique_key, dest_columns) --#}
126127

127128
{% set build_sql = get_insert_overwrite_sql(target_relation, tmp_relation, dest_columns) %}
129+
130+
{% do to_drop.append(tmp_relation) %}
128131

129132
{% endif %}
130133

@@ -133,7 +136,9 @@
133136
{% endcall %}
134137

135138
{% if need_swap %}
139+
{{ drop_relation_if_exists(backup_relation) }}
136140
{% do adapter.rename_relation(target_relation, backup_relation) %}
141+
{{ drop_relation_if_exists(target_relation) }}
137142
{% do adapter.rename_relation(intermediate_relation, target_relation) %}
138143
{% endif %}
139144

@@ -149,7 +154,7 @@
149154
{% do adapter.commit() %}
150155

151156
{% for rel in to_drop %}
152-
{% do adapter.drop_relation(rel) %}
157+
{{ drop_relation_if_exists(rel) }}
153158
{% endfor %}
154159

155160
{{ run_hooks(post_hooks, inside_transaction=False) }}

0 commit comments

Comments
 (0)