dbt-firebolt 1.6.3__py3-none-any.whl → 1.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dbt/adapters/firebolt/__init__.py +1 -1
- dbt/adapters/firebolt/impl.py +21 -3
- dbt/adapters/firebolt/relation.py +20 -2
- dbt/adapters/firebolt/relation_configs/__init__.py +0 -0
- dbt/include/firebolt/macros/adapters.sql +10 -95
- dbt/include/firebolt/macros/catalog.sql +99 -29
- dbt/include/firebolt/macros/dbt_external_tables/create_external_table.sql +106 -4
- dbt/include/firebolt/macros/materializations/materialized_view.sql +0 -45
- dbt/include/firebolt/macros/relations/materialized_view/alter.sql +11 -0
- dbt/include/firebolt/macros/relations/materialized_view/create.sql +3 -0
- dbt/include/firebolt/macros/relations/materialized_view/describe.sql +3 -0
- dbt/include/firebolt/macros/relations/materialized_view/drop.sql +3 -0
- dbt/include/firebolt/macros/relations/materialized_view/refresh.sql +3 -0
- dbt/include/firebolt/macros/relations/table/create.sql +74 -0
- dbt/include/firebolt/macros/relations/table/drop.sql +3 -0
- dbt/include/firebolt/macros/relations/table/rename.sql +6 -0
- dbt/include/firebolt/macros/relations/table/replace.sql +3 -0
- dbt/include/firebolt/macros/relations/view/create.sql +16 -0
- dbt/include/firebolt/macros/relations/view/drop.sql +3 -0
- dbt/include/firebolt/macros/relations/view/rename.sql +6 -0
- dbt/include/firebolt/macros/relations/view/replace.sql +3 -0
- {dbt_firebolt-1.6.3.dist-info → dbt_firebolt-1.7.0.dist-info}/METADATA +1 -1
- {dbt_firebolt-1.6.3.dist-info → dbt_firebolt-1.7.0.dist-info}/RECORD +26 -12
- {dbt_firebolt-1.6.3.dist-info → dbt_firebolt-1.7.0.dist-info}/LICENSE +0 -0
- {dbt_firebolt-1.6.3.dist-info → dbt_firebolt-1.7.0.dist-info}/WHEEL +0 -0
- {dbt_firebolt-1.6.3.dist-info → dbt_firebolt-1.7.0.dist-info}/top_level.txt +0 -0
dbt/adapters/firebolt/impl.py
CHANGED
@@ -5,10 +5,17 @@ from datetime import datetime
|
|
5
5
|
from typing import Any, List, Mapping, Optional, Union
|
6
6
|
|
7
7
|
import agate
|
8
|
-
from dbt.adapters.base import available
|
9
|
-
from dbt.adapters.base.impl import AdapterConfig
|
8
|
+
from dbt.adapters.base import available # type: ignore
|
9
|
+
from dbt.adapters.base.impl import AdapterConfig # type: ignore
|
10
|
+
from dbt.adapters.base.impl import ConstraintSupport
|
10
11
|
from dbt.adapters.base.relation import BaseRelation
|
11
|
-
from dbt.adapters.
|
12
|
+
from dbt.adapters.capability import (
|
13
|
+
Capability,
|
14
|
+
CapabilityDict,
|
15
|
+
CapabilitySupport,
|
16
|
+
Support,
|
17
|
+
)
|
18
|
+
from dbt.adapters.sql import SQLAdapter # type: ignore
|
12
19
|
from dbt.contracts.graph.nodes import ConstraintType
|
13
20
|
from dbt.dataclass_schema import ValidationError, dbtClassMixin
|
14
21
|
from dbt.exceptions import (
|
@@ -114,6 +121,17 @@ class FireboltAdapter(SQLAdapter):
|
|
114
121
|
ConstraintType.foreign_key: ConstraintSupport.NOT_SUPPORTED,
|
115
122
|
}
|
116
123
|
|
124
|
+
_capabilities: CapabilityDict = CapabilityDict(
|
125
|
+
{
|
126
|
+
Capability.SchemaMetadataByRelations: CapabilitySupport(
|
127
|
+
support=Support.Full
|
128
|
+
),
|
129
|
+
Capability.TableLastModifiedMetadata: CapabilitySupport(
|
130
|
+
support=Support.Unsupported
|
131
|
+
),
|
132
|
+
}
|
133
|
+
)
|
134
|
+
|
117
135
|
@classmethod
|
118
136
|
def is_cancelable(cls) -> bool:
|
119
137
|
return False
|
@@ -1,7 +1,9 @@
|
|
1
1
|
from dataclasses import dataclass, field
|
2
|
-
from typing import Optional
|
2
|
+
from typing import Dict, FrozenSet, Optional
|
3
3
|
|
4
|
-
from dbt.adapters.base
|
4
|
+
from dbt.adapters.base import RelationType # type: ignore
|
5
|
+
from dbt.adapters.base.relation import BaseRelation, Policy # type: ignore
|
6
|
+
from dbt.adapters.relation_configs import RelationConfigBase # type: ignore
|
5
7
|
from dbt.exceptions import DbtRuntimeError
|
6
8
|
|
7
9
|
|
@@ -30,6 +32,22 @@ class FireboltRelation(BaseRelation):
|
|
30
32
|
quote_character: str = '"'
|
31
33
|
is_delta: Optional[bool] = None
|
32
34
|
information: Optional[str] = None
|
35
|
+
relation_configs: Dict[RelationType, RelationConfigBase] = field(
|
36
|
+
default_factory=lambda: {}
|
37
|
+
)
|
38
|
+
# list relations that can be renamed (e.g. `RENAME my_relation TO my_new_name;`)
|
39
|
+
renameable_relations: FrozenSet[RelationType] = field(
|
40
|
+
default_factory=lambda: frozenset({})
|
41
|
+
)
|
42
|
+
# list relations that can be atomically replaced
|
43
|
+
# (e.g. `CREATE OR REPLACE my_relation..` versus `DROP` and `CREATE`)
|
44
|
+
replaceable_relations: FrozenSet[RelationType] = field(
|
45
|
+
default_factory=lambda: frozenset(
|
46
|
+
{
|
47
|
+
RelationType.View,
|
48
|
+
}
|
49
|
+
)
|
50
|
+
)
|
33
51
|
|
34
52
|
def render(self) -> str:
|
35
53
|
if self.include_policy.database and self.include_policy.schema:
|
File without changes
|
@@ -168,106 +168,21 @@
|
|
168
168
|
#}
|
169
169
|
{% call statement('list_tables_without_caching', fetch_result=True) %}
|
170
170
|
|
171
|
-
SELECT
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
FROM information_schema.views
|
171
|
+
SELECT
|
172
|
+
table_catalog AS "database",
|
173
|
+
table_name AS "name",
|
174
|
+
'{{ relation.schema }}' AS "schema",
|
175
|
+
CASE
|
176
|
+
WHEN table_type = 'VIEW' THEN 'view'
|
177
|
+
ELSE 'table'
|
178
|
+
END AS "type"
|
179
|
+
FROM
|
180
|
+
information_schema.tables
|
182
181
|
{% endcall %}
|
183
182
|
{% set info_table = load_result('list_tables_without_caching').table %}
|
184
183
|
{{ return(info_table) }}
|
185
184
|
{% endmacro %}
|
186
185
|
|
187
|
-
|
188
|
-
{% macro firebolt__create_table_as(temporary,
|
189
|
-
relation,
|
190
|
-
select_sql,
|
191
|
-
language='sql') -%}
|
192
|
-
{# Create table using CTAS
|
193
|
-
Args:
|
194
|
-
temporary (bool): Unused, included so macro signature matches
|
195
|
-
that of dbt's default macro
|
196
|
-
relation (dbt relation/dict)
|
197
|
-
select_sql (string): The SQL query that will be used to generate
|
198
|
-
the internal query of the CTAS
|
199
|
-
language (string): sql or python models. Firebolt only supports sql.
|
200
|
-
#}
|
201
|
-
{%- if language == 'python' -%}
|
202
|
-
{{ exceptions.raise_compiler_error("Firebolt does not currently support "
|
203
|
-
"Python models.") }}
|
204
|
-
{%- elif language not in ['python', 'sql'] -%}
|
205
|
-
{{ exceptions.raise_compiler_error("Unexpected language parameter supplied: %s "
|
206
|
-
"Must be either 'sql' or 'python'." % (language)) }}
|
207
|
-
{%- endif -%}
|
208
|
-
|
209
|
-
{%- set table_type = config.get('table_type', default='dimension') | upper -%}
|
210
|
-
{%- set primary_index = config.get('primary_index') -%}
|
211
|
-
{%- set incremental_strategy = config.get('incremental_strategy') -%}
|
212
|
-
{%- set partitions = config.get('partition_by') %}
|
213
|
-
|
214
|
-
CREATE {{ table_type }} TABLE IF NOT EXISTS {{ relation }}
|
215
|
-
{%- set contract_config = config.get('contract') -%}
|
216
|
-
{%- if contract_config.enforced -%}
|
217
|
-
{{ get_assert_columns_equivalent(select_sql) }}
|
218
|
-
{{ get_table_columns_and_constraints() }} ;
|
219
|
-
insert into {{ relation }} (
|
220
|
-
{{ adapter.dispatch('get_column_names', 'dbt')() }}
|
221
|
-
)
|
222
|
-
{%- set select_sql = get_select_subquery(select_sql) %}
|
223
|
-
{% endif %}
|
224
|
-
{%- if primary_index %}
|
225
|
-
PRIMARY INDEX
|
226
|
-
{% if primary_index is iterable and primary_index is not string %}
|
227
|
-
{{ primary_index | join(', ') }}
|
228
|
-
{%- else -%}
|
229
|
-
{{ primary_index }}
|
230
|
-
{%- endif -%}
|
231
|
-
{%- endif -%}
|
232
|
-
{% if partitions %}
|
233
|
-
PARTITION BY
|
234
|
-
{% if partitions is iterable and partitions is not string %}
|
235
|
-
{{ partitions | join(', ') }}
|
236
|
-
{%- else -%}
|
237
|
-
{{ partitions }}
|
238
|
-
{%- endif -%}
|
239
|
-
{%- endif %}
|
240
|
-
{%- if not contract_config.enforced %}
|
241
|
-
AS (
|
242
|
-
{% endif -%}
|
243
|
-
{{ select_sql }}
|
244
|
-
{% if not contract_config.enforced -%}
|
245
|
-
)
|
246
|
-
{%- endif -%}
|
247
|
-
{% endmacro %}
|
248
|
-
|
249
|
-
|
250
|
-
{% macro firebolt__create_view_as(relation, select_sql) %}
|
251
|
-
{#-
|
252
|
-
Return SQL string to create view.
|
253
|
-
Args:
|
254
|
-
relation (dict): dbt relation
|
255
|
-
select_sql (string): The SQL query that will be used to generate
|
256
|
-
the internal query of the CTAS
|
257
|
-
#}
|
258
|
-
|
259
|
-
CREATE OR REPLACE VIEW {{ relation.identifier }}
|
260
|
-
|
261
|
-
{%- set contract_config = config.get('contract') -%}
|
262
|
-
{%- if contract_config.enforced -%}
|
263
|
-
{{ get_assert_columns_equivalent(select_sql) }}
|
264
|
-
{%- endif %}
|
265
|
-
AS (
|
266
|
-
{{ select_sql }}
|
267
|
-
)
|
268
|
-
{% endmacro %}
|
269
|
-
|
270
|
-
|
271
186
|
{% macro firebolt__truncate_relation(relation) -%}
|
272
187
|
{#
|
273
188
|
Truncate relation. Actual macro is drop_relation in ./adapters/relation.sql.
|
@@ -1,33 +1,103 @@
|
|
1
1
|
{# This is for building docs. Right now it's an incomplete description of
|
2
2
|
the columns (for instance, `is_nullable` is missing) but more could be added later. #}
|
3
3
|
|
4
|
-
{% macro firebolt__get_catalog(
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
4
|
+
{% macro firebolt__get_catalog(information_schema, schemas) -%}
|
5
|
+
|
6
|
+
{% set query %}
|
7
|
+
with tables as (
|
8
|
+
{{ firebolt__get_catalog_tables_sql(information_schema) }}
|
9
|
+
{{ firebolt__get_catalog_schemas_where_clause_sql(schemas) }}
|
10
|
+
),
|
11
|
+
columns as (
|
12
|
+
{{ firebolt__get_catalog_columns_sql(information_schema) }}
|
13
|
+
{{ firebolt__get_catalog_schemas_where_clause_sql(schemas) }}
|
14
|
+
)
|
15
|
+
{{ firebolt__get_catalog_results_sql() }}
|
16
|
+
{%- endset -%}
|
17
|
+
|
18
|
+
{{ return(run_query(query)) }}
|
19
|
+
|
20
|
+
{%- endmacro %}
|
21
|
+
|
22
|
+
{% macro firebolt__get_catalog_relations(information_schema, relations) -%}
|
23
|
+
|
24
|
+
{% set query %}
|
25
|
+
with tables as (
|
26
|
+
{{ firebolt__get_catalog_tables_sql(information_schema) }}
|
27
|
+
{{ firebolt__get_catalog_relations_where_clause_sql(relations) }}
|
28
|
+
),
|
29
|
+
columns as (
|
30
|
+
{{ firebolt__get_catalog_columns_sql(information_schema) }}
|
31
|
+
{{ firebolt__get_catalog_relations_where_clause_sql(relations) }}
|
32
|
+
)
|
33
|
+
{{ firebolt__get_catalog_results_sql() }}
|
34
|
+
{%- endset -%}
|
35
|
+
|
36
|
+
{{ return(run_query(query)) }}
|
37
|
+
|
38
|
+
{%- endmacro %}
|
39
|
+
|
40
|
+
|
41
|
+
{% macro firebolt__get_catalog_tables_sql(information_schema) -%}
|
42
|
+
SELECT
|
43
|
+
tbls.table_catalog AS table_database,
|
44
|
+
tbls.table_schema as table_schema,
|
45
|
+
table_type,
|
46
|
+
tbls.table_name as table_name,
|
47
|
+
CASE
|
48
|
+
WHEN table_type = 'VIEW' THEN 'VIEW'
|
49
|
+
ELSE 'TABLE'
|
50
|
+
END AS relation_type
|
51
|
+
FROM
|
52
|
+
information_schema.tables tbls
|
53
|
+
{%- endmacro %}
|
54
|
+
|
55
|
+
|
56
|
+
{% macro firebolt__get_catalog_columns_sql(information_schema) -%}
|
57
|
+
select
|
58
|
+
table_catalog as "table_database",
|
59
|
+
table_schema as "table_schema",
|
60
|
+
table_name as "table_name",
|
61
|
+
column_name as "column_name",
|
62
|
+
ordinal_position as "column_index",
|
63
|
+
data_type as "column_type"
|
64
|
+
from information_schema.columns
|
65
|
+
{%- endmacro %}
|
66
|
+
|
67
|
+
{% macro firebolt__get_catalog_results_sql() -%}
|
68
|
+
SELECT *
|
69
|
+
FROM tables
|
70
|
+
JOIN columns USING ("table_database", "table_schema", "table_name")
|
71
|
+
ORDER BY "column_index"
|
72
|
+
{%- endmacro %}
|
73
|
+
|
74
|
+
|
75
|
+
{% macro firebolt__get_catalog_schemas_where_clause_sql(schemas) -%}
|
76
|
+
WHERE ({%- for schema in schemas -%}
|
77
|
+
UPPER("table_schema") = UPPER('{{ schema }}'){%- if not loop.last %} OR {% endif -%}
|
78
|
+
{%- endfor -%})
|
79
|
+
{%- endmacro %}
|
80
|
+
|
81
|
+
|
82
|
+
{% macro firebolt__get_catalog_relations_where_clause_sql(relations) -%}
|
83
|
+
WHERE (
|
84
|
+
{%- for relation in relations -%}
|
85
|
+
{% if relation.schema and relation.identifier %}
|
86
|
+
(
|
87
|
+
UPPER("table_schema") = UPPER('{{ relation.schema }}')
|
88
|
+
AND UPPER("table_name") = UPPER('{{ relation.identifier }}')
|
89
|
+
)
|
90
|
+
{% elif relation.schema %}
|
91
|
+
(
|
92
|
+
UPPER("table_schema") = UPPER('{{ relation.schema }}')
|
93
|
+
)
|
94
|
+
{% else %}
|
95
|
+
{% do exceptions.raise_compiler_error(
|
96
|
+
'`get_catalog_relations` requires a list of relations, each with a schema'
|
97
|
+
) %}
|
98
|
+
{% endif %}
|
99
|
+
|
100
|
+
{%- if not loop.last %} OR {% endif -%}
|
101
|
+
{%- endfor -%}
|
102
|
+
)
|
33
103
|
{%- endmacro %}
|
@@ -1,4 +1,12 @@
|
|
1
1
|
{% macro firebolt__create_external_table(source_node) %}
|
2
|
+
{% if source_node.external.strategy == 'copy' %}
|
3
|
+
{{ firebolt__create_with_copy_from(source_node) }}
|
4
|
+
{% else %}
|
5
|
+
{{ firebolt__create_with_external_table(source_node) }}
|
6
|
+
{% endif %}
|
7
|
+
{% endmacro %}
|
8
|
+
|
9
|
+
{% macro firebolt__create_with_external_table(source_node) %}
|
2
10
|
{%- set external = source_node.external -%}
|
3
11
|
{%- if 'partitions' in external -%}
|
4
12
|
{%- set columns = adapter.make_field_partition_pairs(source_node.columns.values(),
|
@@ -7,7 +15,6 @@
|
|
7
15
|
{%- set columns = adapter.make_field_partition_pairs(source_node.columns.values(),
|
8
16
|
[]) -%}
|
9
17
|
{%- endif -%}
|
10
|
-
-- {%- set partitions = external.partitions -%}
|
11
18
|
{%- set credentials = external.credentials -%}
|
12
19
|
{# Leaving out "IF NOT EXISTS" because this should only be called by
|
13
20
|
if no DROP IF is necessary. #}
|
@@ -18,10 +25,16 @@
|
|
18
25
|
{% endfor -%}
|
19
26
|
)
|
20
27
|
{% if external.url %} URL = '{{external.url}}' {%- endif %}
|
21
|
-
{%- if credentials %}
|
28
|
+
{%- if credentials and credentials.internal_role_arn %}
|
22
29
|
CREDENTIALS = (AWS_ROLE_ARN = '{{credentials.internal_role_arn}}'
|
23
|
-
|
24
|
-
|
30
|
+
{%- if credentials.external_role_id %}
|
31
|
+
AWS_ROLE_EXTERNAL_ID = '{{credentials.external_role_id}}'
|
32
|
+
{%- endif -%}
|
33
|
+
)
|
34
|
+
{% elif credentials and credentials.aws_key_id %}
|
35
|
+
CREDENTIALS = (AWS_KEY_ID = '{{credentials.aws_key_id}}'
|
36
|
+
AWS_SECRET_KEY = '{{credentials.aws_secret_key}}')
|
37
|
+
{%- endif %}
|
25
38
|
{%- if external.object_pattern -%} OBJECT_PATTERN = '{{external.object_pattern}}' {%- endif %}
|
26
39
|
{% if external.object_patterns -%}
|
27
40
|
OBJECT_PATTERN =
|
@@ -33,3 +46,92 @@
|
|
33
46
|
{%- if external.compression -%} COMPRESSION = {{external.compression}} {%- endif %}
|
34
47
|
TYPE = {{ external.type }}
|
35
48
|
{% endmacro %}
|
49
|
+
|
50
|
+
{% macro firebolt__create_with_copy_from(source_node) %}
|
51
|
+
{# COPY FROM is only available in Firebolt 2.0. #}
|
52
|
+
{%- set external = source_node.external -%}
|
53
|
+
{%- set credentials = external.credentials -%}
|
54
|
+
{%- set options = external.options -%}
|
55
|
+
{%- set csv_options = options.csv_options -%}
|
56
|
+
{%- set error_file_credentials = options.error_file_credentials -%}
|
57
|
+
|
58
|
+
{# There are no partitions, but this formats the columns correctly. #}
|
59
|
+
{%- if 'partitions' in external -%}
|
60
|
+
{%- set columns = adapter.make_field_partition_pairs(source_node.columns.values(),
|
61
|
+
external.partitions) -%}
|
62
|
+
{%- else -%}
|
63
|
+
{%- set columns = adapter.make_field_partition_pairs(source_node.columns.values(),
|
64
|
+
[]) -%}
|
65
|
+
{%- endif -%}
|
66
|
+
COPY INTO {{source(source_node.source_name, source_node.name)}}
|
67
|
+
{%- if columns and columns | length > 0 %}
|
68
|
+
(
|
69
|
+
{%- for column in columns -%}
|
70
|
+
{{ column.name }}
|
71
|
+
{%- if column.default is not none %} DEFAULT {{ column.default }}{% endif %}
|
72
|
+
{%- if column.source_column_name is not none %} {{ '$' ~ loop.index0 }}{% endif %}
|
73
|
+
{{- ',' if not loop.last }}
|
74
|
+
{%- endfor -%}
|
75
|
+
)
|
76
|
+
{%- endif %}
|
77
|
+
FROM '{{external.url}}'
|
78
|
+
{%- if options %}
|
79
|
+
WITH
|
80
|
+
{%- if options.object_pattern %}
|
81
|
+
PATTERN = '{{options.object_pattern}}'
|
82
|
+
{%- endif %}
|
83
|
+
{%- if options.type %}
|
84
|
+
TYPE = {{ options.type }}
|
85
|
+
{%- endif %}
|
86
|
+
{%- if options.auto_create is not none %}
|
87
|
+
AUTO_CREATE = {{ options.auto_create | upper }}
|
88
|
+
{%- endif %}
|
89
|
+
{%- if options.allow_column_mismatch is not none %}
|
90
|
+
ALLOW_COLUMN_MISMATCH = {{ options.allow_column_mismatch | upper }}
|
91
|
+
{%- endif %}
|
92
|
+
{%- if options.error_file %}
|
93
|
+
ERROR_FILE = '{{ options.error_file }}'
|
94
|
+
{%- endif %}
|
95
|
+
{%- if error_file_credentials %}
|
96
|
+
ERROR_FILE_CREDENTIALS = (AWS_KEY_ID = '{{ error_file_credentials.aws_key_id }}' AWS_SECRET_KEY = '{{ error_file_credentials.aws_secret_key }}')
|
97
|
+
{%- endif %}
|
98
|
+
{%- if options.max_errors_per_file %}
|
99
|
+
MAX_ERRORS_PER_FILE = {{ options.max_errors_per_file }}
|
100
|
+
{%- endif %}
|
101
|
+
{%- if csv_options %}
|
102
|
+
{%- if csv_options.header is not none %}
|
103
|
+
HEADER = {{ csv_options.header | upper }}
|
104
|
+
{%- endif %}
|
105
|
+
{%- if csv_options.delimiter %}
|
106
|
+
DELIMITER = '{{ csv_options.delimiter }}'
|
107
|
+
{%- endif %}
|
108
|
+
{%- if csv_options.newline %}
|
109
|
+
NEWLINE = '{{ csv_options.newline }}'
|
110
|
+
{%- endif %}
|
111
|
+
{%- if csv_options.quote %}
|
112
|
+
QUOTE = {{ csv_options.quote }}
|
113
|
+
{%- endif %}
|
114
|
+
{%- if csv_options.escape %}
|
115
|
+
ESCAPE = '{{ csv_options.escape }}'
|
116
|
+
{%- endif %}
|
117
|
+
{%- if csv_options.null_string %}
|
118
|
+
NULL_STRING = '{{ csv_options.null_string }}'
|
119
|
+
{%- endif %}
|
120
|
+
{%- if csv_options.empty_field_as_null is not none %}
|
121
|
+
EMPTY_FIELD_AS_NULL = {{ csv_options.empty_field_as_null | upper }}
|
122
|
+
{%- endif %}
|
123
|
+
{%- if csv_options.skip_blank_lines is not none %}
|
124
|
+
SKIP_BLANK_LINES = {{ csv_options.skip_blank_lines | upper }}
|
125
|
+
{%- endif %}
|
126
|
+
{%- if csv_options.date_format %}
|
127
|
+
DATE_FORMAT = '{{ csv_options.date_format }}'
|
128
|
+
{%- endif %}
|
129
|
+
{%- if csv_options.timestamp_format %}
|
130
|
+
TIMESTAMP_FORMAT = '{{ csv_options.timestamp_format }}'
|
131
|
+
{%- endif %}
|
132
|
+
{%- endif %}
|
133
|
+
{%- endif %}
|
134
|
+
{%- if credentials %}
|
135
|
+
CREDENTIALS = (AWS_KEY_ID = '{{credentials.aws_key_id}}' AWS_SECRET_KEY = '{{credentials.aws_secret_key}}')
|
136
|
+
{%- endif %}
|
137
|
+
{% endmacro %}
|
@@ -1,48 +1,3 @@
|
|
1
|
-
{#
|
2
|
-
All these macros are stubbed with compiler errors because Firebolt does not
|
3
|
-
support materialized views.
|
4
|
-
#}
|
5
|
-
{% materialization materialized_view, adapter='firebolt' %}
|
6
|
-
|
7
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
8
|
-
|
9
|
-
{% endmaterialization %}
|
10
|
-
|
11
|
-
{% macro firebolt__get_alter_materialized_view_as_sql(
|
12
|
-
relation,
|
13
|
-
configuration_changes,
|
14
|
-
sql,
|
15
|
-
existing_relation,
|
16
|
-
backup_relation,
|
17
|
-
intermediate_relation
|
18
|
-
) %}
|
19
|
-
|
20
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
21
|
-
{% endmacro %}
|
22
|
-
|
23
|
-
|
24
|
-
{% macro firebolt__get_create_materialized_view_as_sql(relation, sql) %}
|
25
|
-
|
26
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
27
|
-
|
28
|
-
{% endmacro %}
|
29
|
-
|
30
|
-
|
31
|
-
{% macro firebolt__get_replace_materialized_view_as_sql(relation, sql, existing_relation, backup_relation, intermediate_relation) %}
|
32
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
33
|
-
{% endmacro %}
|
34
|
-
|
35
|
-
|
36
1
|
{% macro firebolt__get_materialized_view_configuration_changes(existing_relation, new_config) %}
|
37
2
|
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
38
3
|
{% endmacro %}
|
39
|
-
|
40
|
-
|
41
|
-
{% macro firebolt__refresh_materialized_view(relation) -%}
|
42
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
43
|
-
{% endmacro %}
|
44
|
-
|
45
|
-
|
46
|
-
{% macro firebolt__drop_materialized_view(relation) -%}
|
47
|
-
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
48
|
-
{%- endmacro %}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{% macro firebolt__get_alter_materialized_view_as_sql(
|
2
|
+
relation,
|
3
|
+
configuration_changes,
|
4
|
+
sql,
|
5
|
+
existing_relation,
|
6
|
+
backup_relation,
|
7
|
+
intermediate_relation
|
8
|
+
) %}
|
9
|
+
|
10
|
+
{{ exceptions.raise_compiler_error("Firebolt does not support materialized views") }}
|
11
|
+
{% endmacro %}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
{% macro firebolt__create_table_as(
|
2
|
+
temporary,
|
3
|
+
relation,
|
4
|
+
select_sql,
|
5
|
+
language = 'sql'
|
6
|
+
) -%}
|
7
|
+
{# Create table using CTAS
|
8
|
+
Args:
|
9
|
+
temporary (bool): Unused, included so macro signature matches
|
10
|
+
that of dbt's default macro
|
11
|
+
relation (dbt relation/dict)
|
12
|
+
select_sql (string): The SQL query that will be used to generate
|
13
|
+
the internal query of the CTAS
|
14
|
+
language (string): sql or python models. Firebolt only supports sql.
|
15
|
+
#}
|
16
|
+
{%- if language == 'python' -%}
|
17
|
+
{{ exceptions.raise_compiler_error(
|
18
|
+
"Firebolt does not currently support " "Python models."
|
19
|
+
) }}
|
20
|
+
|
21
|
+
{%- elif language not in ['python', 'sql'] -%}
|
22
|
+
{{ exceptions.raise_compiler_error(
|
23
|
+
"Unexpected language parameter supplied: %s " "Must be either 'sql' or 'python'." % (language)
|
24
|
+
) }}
|
25
|
+
{%- endif -%}
|
26
|
+
|
27
|
+
{%- set table_type = config.get(
|
28
|
+
'table_type',
|
29
|
+
default = 'dimension'
|
30
|
+
) | upper -%}
|
31
|
+
{%- set primary_index = config.get('primary_index') -%}
|
32
|
+
{%- set incremental_strategy = config.get('incremental_strategy') -%}
|
33
|
+
{%- set partitions = config.get('partition_by') %}
|
34
|
+
CREATE {{ table_type }} TABLE IF NOT EXISTS {{ relation }}
|
35
|
+
|
36
|
+
{%- set contract_config = config.get('contract') -%}
|
37
|
+
{%- if contract_config.enforced -%}
|
38
|
+
{{ get_assert_columns_equivalent(select_sql) }}
|
39
|
+
{{ get_table_columns_and_constraints() }};
|
40
|
+
INSERT INTO
|
41
|
+
{{ relation }}
|
42
|
+
(
|
43
|
+
{{ adapter.dispatch(
|
44
|
+
'get_column_names',
|
45
|
+
'dbt'
|
46
|
+
)() }}
|
47
|
+
) {%- set select_sql = get_select_subquery(select_sql) %}
|
48
|
+
{% endif %}
|
49
|
+
|
50
|
+
{%- if primary_index %}
|
51
|
+
primary INDEX {% if primary_index is iterable and primary_index is not string %}
|
52
|
+
{{ primary_index | join(', ') }}
|
53
|
+
{%- else -%}
|
54
|
+
{{ primary_index }}
|
55
|
+
{%- endif -%}
|
56
|
+
{%- endif -%}
|
57
|
+
|
58
|
+
{% if partitions %}
|
59
|
+
PARTITION BY {% if partitions is iterable and partitions is not string %}
|
60
|
+
{{ partitions | join(', ') }}
|
61
|
+
{%- else -%}
|
62
|
+
{{ partitions }}
|
63
|
+
{%- endif -%}
|
64
|
+
{%- endif %}
|
65
|
+
|
66
|
+
{%- if not contract_config.enforced %}
|
67
|
+
AS (
|
68
|
+
{% endif -%}
|
69
|
+
|
70
|
+
{{ select_sql }}
|
71
|
+
|
72
|
+
{% if not contract_config.enforced -%})
|
73
|
+
{%- endif -%}
|
74
|
+
{% endmacro %}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{% macro firebolt__create_view_as(
|
2
|
+
relation,
|
3
|
+
select_sql
|
4
|
+
) %}
|
5
|
+
CREATE
|
6
|
+
OR REPLACE VIEW {{ relation.identifier }}
|
7
|
+
|
8
|
+
{%- set contract_config = config.get('contract') -%}
|
9
|
+
{%- if contract_config.enforced -%}
|
10
|
+
{{ get_assert_columns_equivalent(select_sql) }}
|
11
|
+
{%- endif %}
|
12
|
+
|
13
|
+
AS (
|
14
|
+
{{ select_sql }}
|
15
|
+
)
|
16
|
+
{% endmacro %}
|
@@ -1,20 +1,21 @@
|
|
1
|
-
dbt/adapters/firebolt/__init__.py,sha256=
|
1
|
+
dbt/adapters/firebolt/__init__.py,sha256=ifGIav8ks_A2VpLQpLvT6xkMMV0n0LOPE767T1DtlLI,411
|
2
2
|
dbt/adapters/firebolt/__version__.py,sha256=zRlZGglif76ZVuWWSjsH_MMPgtVQqmj-SryYJW25FL4,69
|
3
3
|
dbt/adapters/firebolt/column.py,sha256=COo_wjhCFgS3GFcPIPcoq7WAWgzN6DB2XqG-gk51WBc,539
|
4
4
|
dbt/adapters/firebolt/connections.py,sha256=Sp2C03ynSqmRIQO9z2YGfVIimWZrygST7uKT0t5_RwU,7880
|
5
|
-
dbt/adapters/firebolt/impl.py,sha256=
|
6
|
-
dbt/adapters/firebolt/relation.py,sha256=
|
5
|
+
dbt/adapters/firebolt/impl.py,sha256=dyqJvJwbs2CFouSFjOPosD8qY4uz2TufzBfRWlQmDnk,13957
|
6
|
+
dbt/adapters/firebolt/relation.py,sha256=HdzHsjYyP1djnUxOl9TB2OGMv7LJyeRXr2kgZRzsgZM,1937
|
7
|
+
dbt/adapters/firebolt/relation_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
8
|
dbt/include/firebolt/__init__.py,sha256=vBGWeG-dHHkimfnX8axBJ4IgAowFw8xADmo6Auzn2xc,52
|
8
9
|
dbt/include/firebolt/dbt_project.yml,sha256=uHJ-i0wD1D74DWSSSzsFKoKbAN1w4LBgVpnkm8e-M1g,76
|
9
|
-
dbt/include/firebolt/macros/adapters.sql,sha256=
|
10
|
-
dbt/include/firebolt/macros/catalog.sql,sha256=
|
10
|
+
dbt/include/firebolt/macros/adapters.sql,sha256=NiTW87XQmC8gGahY6LCw7Fd6Brgin5qBO1qqVef9YWQ,6848
|
11
|
+
dbt/include/firebolt/macros/catalog.sql,sha256=LLhjI9oEoMEQKQfE3LJ5nWS9-u3bwBAYBz4ukrsg5T8,3350
|
11
12
|
dbt/include/firebolt/macros/adapters/apply_grants.sql,sha256=nEmyDs0K0HENxxMaY8v-5oifIXDMrysmuUb_bo9bCuY,1095
|
12
13
|
dbt/include/firebolt/macros/adapters/relation.sql,sha256=1nQZg_vwpGYwFI2EQvHJA5CqFWk7h3w3Yq2uvYXNR5E,2017
|
13
|
-
dbt/include/firebolt/macros/dbt_external_tables/create_external_table.sql,sha256=
|
14
|
+
dbt/include/firebolt/macros/dbt_external_tables/create_external_table.sql,sha256=x7awixF-k8neugbKp7_QVb7PhBlQnsaIvvdBtJEeJqE,6153
|
14
15
|
dbt/include/firebolt/macros/dbt_external_tables/dropif.sql,sha256=-kZzUVgC6Bcof7tZ9VcDK427agylMHeG-yA8NqSeWkw,167
|
15
16
|
dbt/include/firebolt/macros/dbt_external_tables/get_external_build_plan.sql,sha256=BWNSuqB9t0hxbxL9CbIc0UFTBBarQMtGfHv9LLAbqSI,894
|
16
17
|
dbt/include/firebolt/macros/materializations/clone.sql,sha256=SKPc_tG0tF2HRKlo1-CQPvxVWGKHpXDwxvubsCwKTG8,79
|
17
|
-
dbt/include/firebolt/macros/materializations/materialized_view.sql,sha256=
|
18
|
+
dbt/include/firebolt/macros/materializations/materialized_view.sql,sha256=pdWGMP25o0RqNINx1hbn1Q4dTNcdk0Dgrlv3K8XQAbs,202
|
18
19
|
dbt/include/firebolt/macros/materializations/seed.sql,sha256=O622lwmzRGeAfaNfRpjR183ARFltILteznwgXZfPXMA,1564
|
19
20
|
dbt/include/firebolt/macros/materializations/table.sql,sha256=XY0D-df9EoWOBF3kCT3TCE3Rko7bvvfuztQT0-Pqlfs,1752
|
20
21
|
dbt/include/firebolt/macros/materializations/test.sql,sha256=Wol19pNIfkPRTpVUYKAGbkipYOMZjixnAaoZ1chuP88,488
|
@@ -25,6 +26,19 @@ dbt/include/firebolt/macros/materializations/models/incremental/is_incremental.s
|
|
25
26
|
dbt/include/firebolt/macros/materializations/models/incremental/merge.sql,sha256=YPryPkUfVVrKVk5bSdGt0eMa5NdFMMvJW1OuQ6o2umw,1311
|
26
27
|
dbt/include/firebolt/macros/materializations/models/incremental/on_schema_change.sql,sha256=WxGhX22oJRhDVsR4nUWilCSIG-bb7efDC3AXcU8VbbQ,3933
|
27
28
|
dbt/include/firebolt/macros/materializations/models/incremental/strategies.sql,sha256=8Xrr-XqWeTRTbgvbVuH7EikklCzooSl0tMtLvhNKT4A,5925
|
29
|
+
dbt/include/firebolt/macros/relations/materialized_view/alter.sql,sha256=QDMCFwJZZfz7mrx6UcyDICSWAS3zQTs52_urcsW8klU,286
|
30
|
+
dbt/include/firebolt/macros/relations/materialized_view/create.sql,sha256=xthF0oHCyC4xu8IKEtoLJIyWh3p-JGBS5Awc3J-sQ8Y,178
|
31
|
+
dbt/include/firebolt/macros/relations/materialized_view/describe.sql,sha256=uMJWY-9P-49YjhwH_F1Co4szia0oNAVYqJIv2IVGzM8,164
|
32
|
+
dbt/include/firebolt/macros/relations/materialized_view/drop.sql,sha256=Ya03cid5h05t3-SIF4JndKtMMIctD46OX9gPVt9jhVw,160
|
33
|
+
dbt/include/firebolt/macros/relations/materialized_view/refresh.sql,sha256=9s4e6cjT9Dx9nCCJPMlhV5SkzHX8574cdIJUhSfNmU8,163
|
34
|
+
dbt/include/firebolt/macros/relations/table/create.sql,sha256=4qK5r8EODXDjsBZwbHupLFfp3cDT4JkQkOuH94L9KVQ,2406
|
35
|
+
dbt/include/firebolt/macros/relations/table/drop.sql,sha256=3W0SMqmlDizmZqn-QZvqXeJ9lG2KtooiFvwac3WzSzQ,110
|
36
|
+
dbt/include/firebolt/macros/relations/table/rename.sql,sha256=5dmKvuiSnMTARuthnDJBUOORdQCIeEuGMLoyZlgQxVU,185
|
37
|
+
dbt/include/firebolt/macros/relations/table/replace.sql,sha256=bw08YDtLMhkM4dO4nYXZ32U50lcnTG5Axb-Lls7XpB0,132
|
38
|
+
dbt/include/firebolt/macros/relations/view/create.sql,sha256=WXXMS_WnHCoeWdYmyq7DWWeeoLag2ylXBxoltaCzIFA,333
|
39
|
+
dbt/include/firebolt/macros/relations/view/drop.sql,sha256=8m_CtJrFXY_vZM9EEYi7_7kCuXKtc0ql_9S_cmKVEb8,112
|
40
|
+
dbt/include/firebolt/macros/relations/view/rename.sql,sha256=3PkhAm3E4VscNSj2jM2kGGcSC9NGM9gJreSRS0rAFbI,183
|
41
|
+
dbt/include/firebolt/macros/relations/view/replace.sql,sha256=dszxLtQPuhZCEYeuqnuheu0HfN1RZoY05b34fMweEEg,123
|
28
42
|
dbt/include/firebolt/macros/utils/array_append.sql,sha256=woAedZFXFYh6TYXwJQCxKj4o5yo71yXBdk-nxcF4Kss,117
|
29
43
|
dbt/include/firebolt/macros/utils/array_concat.sql,sha256=Q9yY_rhcITJH0bS12MJOkBl5PXJ-ScgFZTBrqmQtdmw,117
|
30
44
|
dbt/include/firebolt/macros/utils/array_construct.sql,sha256=C1I8STXIEN4-Ms6_b1Fw7QqzaAiesjC3M4RWa6e3pBY,105
|
@@ -39,8 +53,8 @@ dbt/include/firebolt/macros/utils/position.sql,sha256=WPo9_bhvNYJooEAsHC9OcnNAwU
|
|
39
53
|
dbt/include/firebolt/macros/utils/right.sql,sha256=_mm1_2MvlOH4O6CmYhgvVxMLfDxAvgv-EMwZ8OBOq-I,254
|
40
54
|
dbt/include/firebolt/macros/utils/split_part.sql,sha256=5dUlbx3Pt1iWWaIlxiXyYUwUqzXuLLXMB-1aGJHNk4o,464
|
41
55
|
dbt/include/firebolt/macros/utils/timestamps.sql,sha256=22g-QpJjBuBUQOHNpQ_TuMRa-cHxaxXPv8ItEUo-vEk,397
|
42
|
-
dbt_firebolt-1.
|
43
|
-
dbt_firebolt-1.
|
44
|
-
dbt_firebolt-1.
|
45
|
-
dbt_firebolt-1.
|
46
|
-
dbt_firebolt-1.
|
56
|
+
dbt_firebolt-1.7.0.dist-info/LICENSE,sha256=Nn0EGvW3qmoZpBV_JVM3iPukFf3RiNCIizrWe_2oTHk,11354
|
57
|
+
dbt_firebolt-1.7.0.dist-info/METADATA,sha256=uKP4G9kpOgRj60f675-MUQSFPYynk9itGUei8HUH4oU,5034
|
58
|
+
dbt_firebolt-1.7.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
59
|
+
dbt_firebolt-1.7.0.dist-info/top_level.txt,sha256=B2YH4he17ajilEWOGCKHbRcEJlCuZKwCcgFcLPntLsE,4
|
60
|
+
dbt_firebolt-1.7.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|