dbt-firebolt 1.4.2__py3-none-any.whl → 1.4.4__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- dbt/adapters/firebolt/__init__.py +1 -1
- dbt/adapters/firebolt/column.py +1 -1
- dbt/adapters/firebolt/connections.py +41 -4
- dbt/adapters/firebolt/impl.py +1 -2
- dbt/include/firebolt/macros/materializations/models/incremental/merge.sql +6 -7
- dbt/include/firebolt/macros/materializations/models/incremental/on_schema_change.sql +13 -5
- dbt/include/firebolt/macros/utils/cast_bool_to_text.sql +2 -2
- dbt/include/firebolt/macros/utils/datediff.sql +1 -1
- {dbt_firebolt-1.4.2.dist-info → dbt_firebolt-1.4.4.dist-info}/METADATA +8 -7
- {dbt_firebolt-1.4.2.dist-info → dbt_firebolt-1.4.4.dist-info}/RECORD +13 -13
- {dbt_firebolt-1.4.2.dist-info → dbt_firebolt-1.4.4.dist-info}/WHEEL +1 -1
- {dbt_firebolt-1.4.2.dist-info → dbt_firebolt-1.4.4.dist-info}/LICENSE +0 -0
- {dbt_firebolt-1.4.2.dist-info → dbt_firebolt-1.4.4.dist-info}/top_level.txt +0 -0
dbt/adapters/firebolt/column.py
CHANGED
@@ -17,4 +17,4 @@ class FireboltColumn(Column):
|
|
17
17
|
def from_description(cls, name: str, raw_data_type: str) -> Column:
|
18
18
|
if raw_data_type.startswith('ARRAY'):
|
19
19
|
return cls(name, raw_data_type)
|
20
|
-
return
|
20
|
+
return super().from_description(name, raw_data_type)
|
@@ -14,7 +14,7 @@ from dbt.contracts.connection import (
|
|
14
14
|
from dbt.events import AdapterLogger # type: ignore
|
15
15
|
from dbt.exceptions import DbtRuntimeError
|
16
16
|
from firebolt.client import DEFAULT_API_URL
|
17
|
-
from firebolt.client.auth import UsernamePassword
|
17
|
+
from firebolt.client.auth import Auth, ClientCredentials, UsernamePassword
|
18
18
|
from firebolt.db import connect as sdk_connect
|
19
19
|
from firebolt.db.connection import Connection as SDKConnection
|
20
20
|
from firebolt.db.cursor import Cursor
|
@@ -27,14 +27,33 @@ logger = AdapterLogger('Firebolt')
|
|
27
27
|
@dataclass
|
28
28
|
class FireboltCredentials(Credentials):
|
29
29
|
# These values all come from either profiles.yml or dbt_project.yml.
|
30
|
-
user: str
|
31
|
-
password: str
|
30
|
+
user: Optional[str] = None
|
31
|
+
password: Optional[str] = None
|
32
|
+
# New way to authenticate
|
33
|
+
client_id: Optional[str] = None
|
34
|
+
client_secret: Optional[str] = None
|
32
35
|
api_endpoint: Optional[str] = DEFAULT_API_URL
|
33
36
|
driver: str = 'com.firebolt.FireboltDriver'
|
34
37
|
engine_name: Optional[str] = None
|
35
38
|
account_name: Optional[str] = None
|
36
39
|
retries: int = 1
|
37
40
|
|
41
|
+
def __post_init__(self) -> None:
|
42
|
+
# If user and password are not provided, assume client_id and client_secret
|
43
|
+
# are provided instead
|
44
|
+
if not self.user and not self.password:
|
45
|
+
if not self.client_id or not self.client_secret:
|
46
|
+
raise dbt.exceptions.DbtProfileError(
|
47
|
+
'Either user and password or client_id and client_secret'
|
48
|
+
' must be provided'
|
49
|
+
)
|
50
|
+
else:
|
51
|
+
if self.client_id or self.client_secret:
|
52
|
+
raise dbt.exceptions.DbtProfileError(
|
53
|
+
'Either user and password or client_id and client_secret'
|
54
|
+
' must be provided'
|
55
|
+
)
|
56
|
+
|
38
57
|
@property
|
39
58
|
def type(self) -> str:
|
40
59
|
return 'firebolt'
|
@@ -94,10 +113,11 @@ class FireboltConnectionManager(SQLConnectionManager):
|
|
94
113
|
if connection.state == 'open':
|
95
114
|
return connection
|
96
115
|
credentials = connection.credentials
|
116
|
+
auth: Auth = _determine_auth(credentials)
|
97
117
|
|
98
118
|
def connect() -> SDKConnection:
|
99
119
|
handle = sdk_connect(
|
100
|
-
auth=
|
120
|
+
auth=auth,
|
101
121
|
engine_name=credentials.engine_name,
|
102
122
|
database=credentials.database,
|
103
123
|
api_endpoint=credentials.api_endpoint,
|
@@ -162,3 +182,20 @@ class FireboltConnectionManager(SQLConnectionManager):
|
|
162
182
|
raise dbt.exceptions.NotImplementedError(
|
163
183
|
'`cancel` is not implemented for this adapter!'
|
164
184
|
)
|
185
|
+
|
186
|
+
|
187
|
+
def _determine_auth(credentials: FireboltCredentials) -> Auth:
|
188
|
+
if credentials.client_id and credentials.client_secret:
|
189
|
+
return ClientCredentials(credentials.client_id, credentials.client_secret)
|
190
|
+
elif '@' in credentials.user: # type: ignore # checked in the dataclass
|
191
|
+
# email auth can only be used with UsernamePassword
|
192
|
+
return UsernamePassword(
|
193
|
+
credentials.user, # type: ignore[arg-type]
|
194
|
+
credentials.password, # type: ignore[arg-type]
|
195
|
+
)
|
196
|
+
else:
|
197
|
+
# assume user provided id and secret in the user/password fields
|
198
|
+
return ClientCredentials(
|
199
|
+
credentials.user, # type: ignore[arg-type]
|
200
|
+
credentials.password, # type: ignore[arg-type]
|
201
|
+
)
|
dbt/adapters/firebolt/impl.py
CHANGED
@@ -14,7 +14,6 @@ from dbt.exceptions import (
|
|
14
14
|
CompilationError,
|
15
15
|
DbtRuntimeError,
|
16
16
|
NotImplementedError,
|
17
|
-
validator_error_message,
|
18
17
|
)
|
19
18
|
|
20
19
|
from dbt.adapters.firebolt.column import FireboltColumn
|
@@ -91,7 +90,7 @@ class FireboltIndexConfig(dbtClassMixin):
|
|
91
90
|
)
|
92
91
|
return index_config
|
93
92
|
except ValidationError as exc:
|
94
|
-
msg = validator_error_message(exc)
|
93
|
+
msg = DbtRuntimeError('').validator_error_message(exc)
|
95
94
|
raise CompilationError(f'Could not parse index config: {msg}.')
|
96
95
|
return None
|
97
96
|
|
@@ -5,17 +5,16 @@
|
|
5
5
|
{% if unique_key %}
|
6
6
|
{% if unique_key is sequence and unique_key is not string %}
|
7
7
|
delete from {{ target }}
|
8
|
-
where
|
9
|
-
{
|
10
|
-
|
11
|
-
{{
|
12
|
-
|
8
|
+
where
|
9
|
+
({{ get_quoted_csv(unique_key) }}) in (
|
10
|
+
select {{ get_quoted_csv(unique_key) }}
|
11
|
+
from {{ source }}
|
12
|
+
)
|
13
13
|
{% if incremental_predicates %}
|
14
14
|
{% for predicate in incremental_predicates %}
|
15
15
|
and {{ predicate }}
|
16
16
|
{% endfor %}
|
17
|
-
{% endif %}
|
18
|
-
);
|
17
|
+
{% endif %};
|
19
18
|
{% else %}
|
20
19
|
delete from {{ target }}
|
21
20
|
where (
|
@@ -71,11 +71,19 @@
|
|
71
71
|
{% do exceptions.raise_compiler_error(
|
72
72
|
'A schema change was detected and `on_schema_change` was set to "fail".') %}
|
73
73
|
{% else %}
|
74
|
-
{%
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
{% set fail_msg %}
|
75
|
+
Schema changes detected on this incremental!
|
76
|
+
Either revert the change or run the model with the --full-refresh flag
|
77
|
+
on the command line to recreate the model with the new schema definition.
|
78
|
+
Running with the --full-refresh flag drops and recreates the database object.
|
79
|
+
|
80
|
+
Additional troubleshooting context:
|
81
|
+
Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}
|
82
|
+
Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}
|
83
|
+
New column types: {{ schema_changes_dict['new_target_types'] }}
|
84
|
+
{% endset %}
|
85
|
+
|
86
|
+
{% do exceptions.raise_compiler_error(fail_msg) %}
|
79
87
|
{% endif %}
|
80
88
|
{% endif %}
|
81
89
|
{{ return(schema_changes_dict['common_columns']) }}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dbt-firebolt
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.4
|
4
4
|
Summary: The Firebolt adapter plugin for dbt (data build tool)
|
5
5
|
Home-page: https://github.com/firebolt-db/dbt-firebolt
|
6
6
|
Author: Firebolt
|
@@ -17,13 +17,14 @@ Classifier: Programming Language :: Python :: 3.9
|
|
17
17
|
Requires-Python: >=3.7
|
18
18
|
Description-Content-Type: text/markdown
|
19
19
|
License-File: LICENSE
|
20
|
-
Requires-Dist: dbt-core
|
21
|
-
Requires-Dist: firebolt-sdk
|
20
|
+
Requires-Dist: dbt-core ~=1.4
|
21
|
+
Requires-Dist: firebolt-sdk >=1.1.0
|
22
22
|
Provides-Extra: dev
|
23
|
-
Requires-Dist:
|
24
|
-
Requires-Dist:
|
25
|
-
Requires-Dist:
|
26
|
-
Requires-Dist:
|
23
|
+
Requires-Dist: allure-pytest ==2.* ; extra == 'dev'
|
24
|
+
Requires-Dist: dbt-tests-adapter ~=1.4 ; extra == 'dev'
|
25
|
+
Requires-Dist: mypy ==0.910 ; extra == 'dev'
|
26
|
+
Requires-Dist: pre-commit ==2.15.0 ; extra == 'dev'
|
27
|
+
Requires-Dist: pytest ==7.* ; extra == 'dev'
|
27
28
|
|
28
29
|
<img width="1113" alt="Screen Shot 2021-12-10 at 1 09 09 PM" src="https://user-images.githubusercontent.com/7674553/145641621-a7dabe78-da92-4f0a-bbd2-54ccf7f34b57.png">
|
29
30
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
dbt/adapters/firebolt/__init__.py,sha256=
|
1
|
+
dbt/adapters/firebolt/__init__.py,sha256=H1o-mp-HofZFT8IxEoZr97TDxLxzw47xngjETDNCTfA,411
|
2
2
|
dbt/adapters/firebolt/__version__.py,sha256=zRlZGglif76ZVuWWSjsH_MMPgtVQqmj-SryYJW25FL4,69
|
3
|
-
dbt/adapters/firebolt/column.py,sha256=
|
4
|
-
dbt/adapters/firebolt/connections.py,sha256=
|
5
|
-
dbt/adapters/firebolt/impl.py,sha256=
|
3
|
+
dbt/adapters/firebolt/column.py,sha256=COo_wjhCFgS3GFcPIPcoq7WAWgzN6DB2XqG-gk51WBc,539
|
4
|
+
dbt/adapters/firebolt/connections.py,sha256=m7PZF_i43LN0q4K_4dV4DhCs0_DoAYwh95rjY8IhUcI,6645
|
5
|
+
dbt/adapters/firebolt/impl.py,sha256=Fm_KeGiuQgpMm-pOIFv1DDbeRuX_OeneHL8IQTgIMBY,13004
|
6
6
|
dbt/adapters/firebolt/relation.py,sha256=z-yv_ICJPZB33IIpnr3o_jusoULlKANLj6BlkaudQQ0,1152
|
7
7
|
dbt/include/firebolt/__init__.py,sha256=vBGWeG-dHHkimfnX8axBJ4IgAowFw8xADmo6Auzn2xc,52
|
8
8
|
dbt/include/firebolt/dbt_project.yml,sha256=uHJ-i0wD1D74DWSSSzsFKoKbAN1w4LBgVpnkm8e-M1g,76
|
@@ -20,16 +20,16 @@ dbt/include/firebolt/macros/materializations/view.sql,sha256=0xg2mO-1UWtZKj2Wlpl
|
|
20
20
|
dbt/include/firebolt/macros/materializations/models/incremental/column_helpers.sql,sha256=7XQsKdqcnKaIUxll4Etfa59HtF-3R3NfeSgpavBSJQE,917
|
21
21
|
dbt/include/firebolt/macros/materializations/models/incremental/incremental.sql,sha256=bd8f-O9KPo5wpL9MpKDHxTJ8wAjT7BOxyUFybR9MPu8,5905
|
22
22
|
dbt/include/firebolt/macros/materializations/models/incremental/is_incremental.sql,sha256=8Zgg0wOgIDQK_SAwxi7zk7gr_6Q7WyqN8nflTYpoyG0,581
|
23
|
-
dbt/include/firebolt/macros/materializations/models/incremental/merge.sql,sha256=
|
24
|
-
dbt/include/firebolt/macros/materializations/models/incremental/on_schema_change.sql,sha256=
|
23
|
+
dbt/include/firebolt/macros/materializations/models/incremental/merge.sql,sha256=YPryPkUfVVrKVk5bSdGt0eMa5NdFMMvJW1OuQ6o2umw,1311
|
24
|
+
dbt/include/firebolt/macros/materializations/models/incremental/on_schema_change.sql,sha256=WxGhX22oJRhDVsR4nUWilCSIG-bb7efDC3AXcU8VbbQ,3933
|
25
25
|
dbt/include/firebolt/macros/materializations/models/incremental/strategies.sql,sha256=8Xrr-XqWeTRTbgvbVuH7EikklCzooSl0tMtLvhNKT4A,5925
|
26
26
|
dbt/include/firebolt/macros/utils/array_append.sql,sha256=woAedZFXFYh6TYXwJQCxKj4o5yo71yXBdk-nxcF4Kss,117
|
27
27
|
dbt/include/firebolt/macros/utils/array_concat.sql,sha256=Q9yY_rhcITJH0bS12MJOkBl5PXJ-ScgFZTBrqmQtdmw,117
|
28
28
|
dbt/include/firebolt/macros/utils/array_construct.sql,sha256=C1I8STXIEN4-Ms6_b1Fw7QqzaAiesjC3M4RWa6e3pBY,105
|
29
29
|
dbt/include/firebolt/macros/utils/bool_or.sql,sha256=PlnQTFU2NFH1d8nbzLss_VHbYO06dd0f7hEyadSkxkk,87
|
30
|
-
dbt/include/firebolt/macros/utils/cast_bool_to_text.sql,sha256=
|
30
|
+
dbt/include/firebolt/macros/utils/cast_bool_to_text.sql,sha256=ZUst68Bx6Xuls2TO2BjDkBUS1gj0z7upZwvF4r6cmN0,187
|
31
31
|
dbt/include/firebolt/macros/utils/dateadd.sql,sha256=5xRi047b42aOYpCLnVPuQa3wXN9k1-3xNC4ta5p9AEA,202
|
32
|
-
dbt/include/firebolt/macros/utils/datediff.sql,sha256=
|
32
|
+
dbt/include/firebolt/macros/utils/datediff.sql,sha256=cy-Ex1TOyddF23JnvqprOVFeCEpag_wTvNazEh7BURY,214
|
33
33
|
dbt/include/firebolt/macros/utils/except.sql,sha256=AoIC6Lr9_qMpD3dNw0Fp_wqtT2nM3WhbvF8drHKx_zQ,186
|
34
34
|
dbt/include/firebolt/macros/utils/intersect.sql,sha256=b8T-mB_qXgHN7dHTy0iA5oX029EPnyNfphW_96j0c94,192
|
35
35
|
dbt/include/firebolt/macros/utils/listagg.sql,sha256=ncnvHyiD_S4cdAxU05_yIftkqc3mS6FB6742hyXG1ns,588
|
@@ -37,8 +37,8 @@ dbt/include/firebolt/macros/utils/position.sql,sha256=WPo9_bhvNYJooEAsHC9OcnNAwU
|
|
37
37
|
dbt/include/firebolt/macros/utils/right.sql,sha256=_mm1_2MvlOH4O6CmYhgvVxMLfDxAvgv-EMwZ8OBOq-I,254
|
38
38
|
dbt/include/firebolt/macros/utils/split_part.sql,sha256=5dUlbx3Pt1iWWaIlxiXyYUwUqzXuLLXMB-1aGJHNk4o,464
|
39
39
|
dbt/include/firebolt/macros/utils/timestamps.sql,sha256=22g-QpJjBuBUQOHNpQ_TuMRa-cHxaxXPv8ItEUo-vEk,397
|
40
|
-
dbt_firebolt-1.4.
|
41
|
-
dbt_firebolt-1.4.
|
42
|
-
dbt_firebolt-1.4.
|
43
|
-
dbt_firebolt-1.4.
|
44
|
-
dbt_firebolt-1.4.
|
40
|
+
dbt_firebolt-1.4.4.dist-info/LICENSE,sha256=Nn0EGvW3qmoZpBV_JVM3iPukFf3RiNCIizrWe_2oTHk,11354
|
41
|
+
dbt_firebolt-1.4.4.dist-info/METADATA,sha256=aULXmg1kh0jJMuxwbO48I7ovklnZVI071m5zNz41c2U,4441
|
42
|
+
dbt_firebolt-1.4.4.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
43
|
+
dbt_firebolt-1.4.4.dist-info/top_level.txt,sha256=B2YH4he17ajilEWOGCKHbRcEJlCuZKwCcgFcLPntLsE,4
|
44
|
+
dbt_firebolt-1.4.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|