dvt-core 0.52.2__cp310-cp310-macosx_10_9_x86_64.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.
Potentially problematic release.
This version of dvt-core might be problematic. Click here for more details.
- dbt/__init__.py +7 -0
- dbt/_pydantic_shim.py +26 -0
- dbt/artifacts/__init__.py +0 -0
- dbt/artifacts/exceptions/__init__.py +1 -0
- dbt/artifacts/exceptions/schemas.py +31 -0
- dbt/artifacts/resources/__init__.py +116 -0
- dbt/artifacts/resources/base.py +67 -0
- dbt/artifacts/resources/types.py +93 -0
- dbt/artifacts/resources/v1/analysis.py +10 -0
- dbt/artifacts/resources/v1/catalog.py +23 -0
- dbt/artifacts/resources/v1/components.py +274 -0
- dbt/artifacts/resources/v1/config.py +277 -0
- dbt/artifacts/resources/v1/documentation.py +11 -0
- dbt/artifacts/resources/v1/exposure.py +51 -0
- dbt/artifacts/resources/v1/function.py +52 -0
- dbt/artifacts/resources/v1/generic_test.py +31 -0
- dbt/artifacts/resources/v1/group.py +21 -0
- dbt/artifacts/resources/v1/hook.py +11 -0
- dbt/artifacts/resources/v1/macro.py +29 -0
- dbt/artifacts/resources/v1/metric.py +172 -0
- dbt/artifacts/resources/v1/model.py +145 -0
- dbt/artifacts/resources/v1/owner.py +10 -0
- dbt/artifacts/resources/v1/saved_query.py +111 -0
- dbt/artifacts/resources/v1/seed.py +41 -0
- dbt/artifacts/resources/v1/semantic_layer_components.py +72 -0
- dbt/artifacts/resources/v1/semantic_model.py +314 -0
- dbt/artifacts/resources/v1/singular_test.py +14 -0
- dbt/artifacts/resources/v1/snapshot.py +91 -0
- dbt/artifacts/resources/v1/source_definition.py +84 -0
- dbt/artifacts/resources/v1/sql_operation.py +10 -0
- dbt/artifacts/resources/v1/unit_test_definition.py +77 -0
- dbt/artifacts/schemas/__init__.py +0 -0
- dbt/artifacts/schemas/base.py +191 -0
- dbt/artifacts/schemas/batch_results.py +24 -0
- dbt/artifacts/schemas/catalog/__init__.py +11 -0
- dbt/artifacts/schemas/catalog/v1/__init__.py +0 -0
- dbt/artifacts/schemas/catalog/v1/catalog.py +59 -0
- dbt/artifacts/schemas/freshness/__init__.py +1 -0
- dbt/artifacts/schemas/freshness/v3/__init__.py +0 -0
- dbt/artifacts/schemas/freshness/v3/freshness.py +158 -0
- dbt/artifacts/schemas/manifest/__init__.py +2 -0
- dbt/artifacts/schemas/manifest/v12/__init__.py +0 -0
- dbt/artifacts/schemas/manifest/v12/manifest.py +211 -0
- dbt/artifacts/schemas/results.py +147 -0
- dbt/artifacts/schemas/run/__init__.py +2 -0
- dbt/artifacts/schemas/run/v5/__init__.py +0 -0
- dbt/artifacts/schemas/run/v5/run.py +184 -0
- dbt/artifacts/schemas/upgrades/__init__.py +4 -0
- dbt/artifacts/schemas/upgrades/upgrade_manifest.py +174 -0
- dbt/artifacts/schemas/upgrades/upgrade_manifest_dbt_version.py +2 -0
- dbt/artifacts/utils/validation.py +153 -0
- dbt/cli/__init__.py +1 -0
- dbt/cli/context.py +17 -0
- dbt/cli/exceptions.py +57 -0
- dbt/cli/flags.py +560 -0
- dbt/cli/main.py +2039 -0
- dbt/cli/option_types.py +121 -0
- dbt/cli/options.py +80 -0
- dbt/cli/params.py +804 -0
- dbt/cli/requires.py +490 -0
- dbt/cli/resolvers.py +50 -0
- dbt/cli/types.py +40 -0
- dbt/clients/__init__.py +0 -0
- dbt/clients/checked_load.py +83 -0
- dbt/clients/git.py +164 -0
- dbt/clients/jinja.py +206 -0
- dbt/clients/jinja_static.py +245 -0
- dbt/clients/registry.py +192 -0
- dbt/clients/yaml_helper.py +68 -0
- dbt/compilation.py +876 -0
- dbt/compute/__init__.py +14 -0
- dbt/compute/engines/__init__.py +12 -0
- dbt/compute/engines/spark_engine.py +624 -0
- dbt/compute/federated_executor.py +837 -0
- dbt/compute/filter_pushdown.cpython-310-darwin.so +0 -0
- dbt/compute/filter_pushdown.py +273 -0
- dbt/compute/jar_provisioning.cpython-310-darwin.so +0 -0
- dbt/compute/jar_provisioning.py +255 -0
- dbt/compute/java_compat.cpython-310-darwin.so +0 -0
- dbt/compute/java_compat.py +689 -0
- dbt/compute/jdbc_utils.cpython-310-darwin.so +0 -0
- dbt/compute/jdbc_utils.py +678 -0
- dbt/compute/smart_selector.cpython-310-darwin.so +0 -0
- dbt/compute/smart_selector.py +311 -0
- dbt/compute/strategies/__init__.py +54 -0
- dbt/compute/strategies/base.py +165 -0
- dbt/compute/strategies/dataproc.py +207 -0
- dbt/compute/strategies/emr.py +203 -0
- dbt/compute/strategies/local.py +364 -0
- dbt/compute/strategies/standalone.py +262 -0
- dbt/config/__init__.py +4 -0
- dbt/config/catalogs.py +94 -0
- dbt/config/compute.cpython-310-darwin.so +0 -0
- dbt/config/compute.py +547 -0
- dbt/config/dvt_profile.cpython-310-darwin.so +0 -0
- dbt/config/dvt_profile.py +342 -0
- dbt/config/profile.py +422 -0
- dbt/config/project.py +873 -0
- dbt/config/project_utils.py +28 -0
- dbt/config/renderer.py +231 -0
- dbt/config/runtime.py +553 -0
- dbt/config/selectors.py +208 -0
- dbt/config/utils.py +77 -0
- dbt/constants.py +28 -0
- dbt/context/__init__.py +0 -0
- dbt/context/base.py +745 -0
- dbt/context/configured.py +135 -0
- dbt/context/context_config.py +382 -0
- dbt/context/docs.py +82 -0
- dbt/context/exceptions_jinja.py +178 -0
- dbt/context/macro_resolver.py +195 -0
- dbt/context/macros.py +171 -0
- dbt/context/manifest.py +72 -0
- dbt/context/providers.py +2249 -0
- dbt/context/query_header.py +13 -0
- dbt/context/secret.py +58 -0
- dbt/context/target.py +74 -0
- dbt/contracts/__init__.py +0 -0
- dbt/contracts/files.py +413 -0
- dbt/contracts/graph/__init__.py +0 -0
- dbt/contracts/graph/manifest.py +1904 -0
- dbt/contracts/graph/metrics.py +97 -0
- dbt/contracts/graph/model_config.py +70 -0
- dbt/contracts/graph/node_args.py +42 -0
- dbt/contracts/graph/nodes.py +1806 -0
- dbt/contracts/graph/semantic_manifest.py +232 -0
- dbt/contracts/graph/unparsed.py +811 -0
- dbt/contracts/project.py +417 -0
- dbt/contracts/results.py +53 -0
- dbt/contracts/selection.py +23 -0
- dbt/contracts/sql.py +85 -0
- dbt/contracts/state.py +68 -0
- dbt/contracts/util.py +46 -0
- dbt/deprecations.py +346 -0
- dbt/deps/__init__.py +0 -0
- dbt/deps/base.py +152 -0
- dbt/deps/git.py +195 -0
- dbt/deps/local.py +79 -0
- dbt/deps/registry.py +130 -0
- dbt/deps/resolver.py +149 -0
- dbt/deps/tarball.py +120 -0
- dbt/docs/source/_ext/dbt_click.py +119 -0
- dbt/docs/source/conf.py +32 -0
- dbt/env_vars.py +64 -0
- dbt/event_time/event_time.py +40 -0
- dbt/event_time/sample_window.py +60 -0
- dbt/events/__init__.py +15 -0
- dbt/events/base_types.py +36 -0
- dbt/events/core_types_pb2.py +2 -0
- dbt/events/logging.py +108 -0
- dbt/events/types.py +2516 -0
- dbt/exceptions.py +1486 -0
- dbt/flags.py +89 -0
- dbt/graph/__init__.py +11 -0
- dbt/graph/cli.py +247 -0
- dbt/graph/graph.py +172 -0
- dbt/graph/queue.py +214 -0
- dbt/graph/selector.py +374 -0
- dbt/graph/selector_methods.py +975 -0
- dbt/graph/selector_spec.py +222 -0
- dbt/graph/thread_pool.py +18 -0
- dbt/hooks.py +21 -0
- dbt/include/README.md +49 -0
- dbt/include/__init__.py +3 -0
- dbt/include/starter_project/.gitignore +4 -0
- dbt/include/starter_project/README.md +15 -0
- dbt/include/starter_project/__init__.py +3 -0
- dbt/include/starter_project/analyses/.gitkeep +0 -0
- dbt/include/starter_project/dbt_project.yml +36 -0
- dbt/include/starter_project/macros/.gitkeep +0 -0
- dbt/include/starter_project/models/example/my_first_dbt_model.sql +27 -0
- dbt/include/starter_project/models/example/my_second_dbt_model.sql +6 -0
- dbt/include/starter_project/models/example/schema.yml +21 -0
- dbt/include/starter_project/seeds/.gitkeep +0 -0
- dbt/include/starter_project/snapshots/.gitkeep +0 -0
- dbt/include/starter_project/tests/.gitkeep +0 -0
- dbt/internal_deprecations.py +26 -0
- dbt/jsonschemas/__init__.py +3 -0
- dbt/jsonschemas/jsonschemas.py +309 -0
- dbt/jsonschemas/project/0.0.110.json +4717 -0
- dbt/jsonschemas/project/0.0.85.json +2015 -0
- dbt/jsonschemas/resources/0.0.110.json +2636 -0
- dbt/jsonschemas/resources/0.0.85.json +2536 -0
- dbt/jsonschemas/resources/latest.json +6773 -0
- dbt/links.py +4 -0
- dbt/materializations/__init__.py +0 -0
- dbt/materializations/incremental/__init__.py +0 -0
- dbt/materializations/incremental/microbatch.py +236 -0
- dbt/mp_context.py +8 -0
- dbt/node_types.py +37 -0
- dbt/parser/__init__.py +23 -0
- dbt/parser/analysis.py +21 -0
- dbt/parser/base.py +548 -0
- dbt/parser/common.py +266 -0
- dbt/parser/docs.py +52 -0
- dbt/parser/fixtures.py +51 -0
- dbt/parser/functions.py +30 -0
- dbt/parser/generic_test.py +100 -0
- dbt/parser/generic_test_builders.py +333 -0
- dbt/parser/hooks.py +118 -0
- dbt/parser/macros.py +137 -0
- dbt/parser/manifest.py +2204 -0
- dbt/parser/models.py +573 -0
- dbt/parser/partial.py +1178 -0
- dbt/parser/read_files.py +445 -0
- dbt/parser/schema_generic_tests.py +422 -0
- dbt/parser/schema_renderer.py +111 -0
- dbt/parser/schema_yaml_readers.py +935 -0
- dbt/parser/schemas.py +1466 -0
- dbt/parser/search.py +149 -0
- dbt/parser/seeds.py +28 -0
- dbt/parser/singular_test.py +20 -0
- dbt/parser/snapshots.py +44 -0
- dbt/parser/sources.py +558 -0
- dbt/parser/sql.py +62 -0
- dbt/parser/unit_tests.py +621 -0
- dbt/plugins/__init__.py +20 -0
- dbt/plugins/contracts.py +9 -0
- dbt/plugins/exceptions.py +2 -0
- dbt/plugins/manager.py +163 -0
- dbt/plugins/manifest.py +21 -0
- dbt/profiler.py +20 -0
- dbt/py.typed +1 -0
- dbt/query_analyzer.cpython-310-darwin.so +0 -0
- dbt/query_analyzer.py +410 -0
- dbt/runners/__init__.py +2 -0
- dbt/runners/exposure_runner.py +7 -0
- dbt/runners/no_op_runner.py +45 -0
- dbt/runners/saved_query_runner.py +7 -0
- dbt/selected_resources.py +8 -0
- dbt/task/__init__.py +0 -0
- dbt/task/base.py +503 -0
- dbt/task/build.py +197 -0
- dbt/task/clean.py +56 -0
- dbt/task/clone.py +161 -0
- dbt/task/compile.py +150 -0
- dbt/task/compute.py +454 -0
- dbt/task/debug.py +505 -0
- dbt/task/deps.py +280 -0
- dbt/task/docs/__init__.py +3 -0
- dbt/task/docs/generate.py +660 -0
- dbt/task/docs/index.html +250 -0
- dbt/task/docs/serve.py +29 -0
- dbt/task/freshness.py +322 -0
- dbt/task/function.py +121 -0
- dbt/task/group_lookup.py +46 -0
- dbt/task/init.py +553 -0
- dbt/task/java.py +316 -0
- dbt/task/list.py +236 -0
- dbt/task/printer.py +175 -0
- dbt/task/retry.py +175 -0
- dbt/task/run.py +1306 -0
- dbt/task/run_operation.py +141 -0
- dbt/task/runnable.py +758 -0
- dbt/task/seed.py +103 -0
- dbt/task/show.py +149 -0
- dbt/task/snapshot.py +56 -0
- dbt/task/spark.py +414 -0
- dbt/task/sql.py +110 -0
- dbt/task/target_sync.py +759 -0
- dbt/task/test.py +464 -0
- dbt/tests/fixtures/__init__.py +1 -0
- dbt/tests/fixtures/project.py +620 -0
- dbt/tests/util.py +651 -0
- dbt/tracking.py +529 -0
- dbt/utils/__init__.py +3 -0
- dbt/utils/artifact_upload.py +151 -0
- dbt/utils/utils.py +408 -0
- dbt/version.py +268 -0
- dvt_cli/__init__.py +72 -0
- dvt_core-0.52.2.dist-info/METADATA +286 -0
- dvt_core-0.52.2.dist-info/RECORD +275 -0
- dvt_core-0.52.2.dist-info/WHEEL +5 -0
- dvt_core-0.52.2.dist-info/entry_points.txt +2 -0
- dvt_core-0.52.2.dist-info/top_level.txt +2 -0
dbt/task/seed.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import random
|
|
2
|
+
from typing import Optional, Type
|
|
3
|
+
|
|
4
|
+
from dbt.artifacts.schemas.results import NodeStatus, RunStatus
|
|
5
|
+
from dbt.contracts.graph.manifest import Manifest
|
|
6
|
+
from dbt.events.types import LogSeedResult, LogStartLine, SeedHeader
|
|
7
|
+
from dbt.graph import ResourceTypeSelector
|
|
8
|
+
from dbt.node_types import NodeType
|
|
9
|
+
from dbt.task import group_lookup
|
|
10
|
+
from dbt.task.base import BaseRunner
|
|
11
|
+
from dbt.task.printer import print_run_end_messages
|
|
12
|
+
from dbt.task.run import ModelRunner, RunTask
|
|
13
|
+
from dbt_common.events.base_types import EventLevel
|
|
14
|
+
from dbt_common.events.functions import fire_event
|
|
15
|
+
from dbt_common.events.types import Formatting
|
|
16
|
+
from dbt_common.exceptions import DbtInternalError
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SeedRunner(ModelRunner):
|
|
20
|
+
def describe_node(self) -> str:
|
|
21
|
+
return "seed file {}".format(self.get_node_representation())
|
|
22
|
+
|
|
23
|
+
def before_execute(self) -> None:
|
|
24
|
+
fire_event(
|
|
25
|
+
LogStartLine(
|
|
26
|
+
description=self.describe_node(),
|
|
27
|
+
index=self.node_index,
|
|
28
|
+
total=self.num_nodes,
|
|
29
|
+
node_info=self.node.node_info,
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def _build_run_model_result(self, model, context):
|
|
34
|
+
result = super()._build_run_model_result(model, context)
|
|
35
|
+
agate_result = context["load_result"]("agate_table")
|
|
36
|
+
result.agate_table = agate_result.table
|
|
37
|
+
return result
|
|
38
|
+
|
|
39
|
+
def compile(self, manifest: Manifest):
|
|
40
|
+
return self.node
|
|
41
|
+
|
|
42
|
+
def print_result_line(self, result):
|
|
43
|
+
model = result.node
|
|
44
|
+
group = group_lookup.get(model.unique_id)
|
|
45
|
+
level = EventLevel.ERROR if result.status == NodeStatus.Error else EventLevel.INFO
|
|
46
|
+
fire_event(
|
|
47
|
+
LogSeedResult(
|
|
48
|
+
status=result.status,
|
|
49
|
+
result_message=result.message,
|
|
50
|
+
index=self.node_index,
|
|
51
|
+
total=self.num_nodes,
|
|
52
|
+
execution_time=result.execution_time,
|
|
53
|
+
schema=self.node.schema,
|
|
54
|
+
relation=model.alias,
|
|
55
|
+
node_info=model.node_info,
|
|
56
|
+
group=group,
|
|
57
|
+
),
|
|
58
|
+
level=level,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class SeedTask(RunTask):
|
|
63
|
+
def raise_on_first_error(self) -> bool:
|
|
64
|
+
return False
|
|
65
|
+
|
|
66
|
+
def get_node_selector(self):
|
|
67
|
+
if self.manifest is None or self.graph is None:
|
|
68
|
+
raise DbtInternalError("manifest and graph must be set to get perform node selection")
|
|
69
|
+
return ResourceTypeSelector(
|
|
70
|
+
graph=self.graph,
|
|
71
|
+
manifest=self.manifest,
|
|
72
|
+
previous_state=self.previous_state,
|
|
73
|
+
resource_types=[NodeType.Seed],
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
def get_runner_type(self, _) -> Optional[Type[BaseRunner]]:
|
|
77
|
+
return SeedRunner
|
|
78
|
+
|
|
79
|
+
def task_end_messages(self, results) -> None:
|
|
80
|
+
if self.args.show:
|
|
81
|
+
self.show_tables(results)
|
|
82
|
+
|
|
83
|
+
print_run_end_messages(results)
|
|
84
|
+
|
|
85
|
+
def show_table(self, result):
|
|
86
|
+
table = result.agate_table
|
|
87
|
+
rand_table = table.order_by(lambda x: random.random())
|
|
88
|
+
|
|
89
|
+
schema = result.node.schema
|
|
90
|
+
alias = result.node.alias
|
|
91
|
+
|
|
92
|
+
header = "Random sample of table: {}.{}".format(schema, alias)
|
|
93
|
+
fire_event(Formatting(""))
|
|
94
|
+
fire_event(SeedHeader(header=header))
|
|
95
|
+
fire_event(Formatting("-" * len(header)))
|
|
96
|
+
|
|
97
|
+
rand_table.print_table(max_rows=10, max_columns=None)
|
|
98
|
+
fire_event(Formatting(""))
|
|
99
|
+
|
|
100
|
+
def show_tables(self, results):
|
|
101
|
+
for result in results:
|
|
102
|
+
if result.status != RunStatus.Error:
|
|
103
|
+
self.show_table(result)
|
dbt/task/show.py
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import io
|
|
2
|
+
import threading
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
from dbt.adapters.factory import get_adapter
|
|
6
|
+
from dbt.artifacts.schemas.run import RunResult, RunStatus
|
|
7
|
+
from dbt.context.providers import generate_runtime_model_context
|
|
8
|
+
from dbt.contracts.graph.nodes import SeedNode
|
|
9
|
+
from dbt.events.types import ShowNode
|
|
10
|
+
from dbt.flags import get_flags
|
|
11
|
+
from dbt.task.base import ConfiguredTask
|
|
12
|
+
from dbt.task.compile import CompileRunner, CompileTask
|
|
13
|
+
from dbt.task.seed import SeedRunner
|
|
14
|
+
from dbt_common.events.base_types import EventLevel
|
|
15
|
+
from dbt_common.events.functions import fire_event
|
|
16
|
+
from dbt_common.events.types import Note
|
|
17
|
+
from dbt_common.exceptions import DbtRuntimeError
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ShowRunner(CompileRunner):
|
|
21
|
+
def __init__(self, config, adapter, node, node_index, num_nodes) -> None:
|
|
22
|
+
super().__init__(config, adapter, node, node_index, num_nodes)
|
|
23
|
+
self.run_ephemeral_models = True
|
|
24
|
+
|
|
25
|
+
def execute(self, compiled_node, manifest):
|
|
26
|
+
start_time = time.time()
|
|
27
|
+
|
|
28
|
+
# Allow passing in -1 (or any negative number) to get all rows
|
|
29
|
+
limit = None if self.config.args.limit < 0 else self.config.args.limit
|
|
30
|
+
|
|
31
|
+
model_context = generate_runtime_model_context(compiled_node, self.config, manifest)
|
|
32
|
+
compiled_node.compiled_code = self.adapter.execute_macro(
|
|
33
|
+
macro_name="get_show_sql",
|
|
34
|
+
macro_resolver=manifest,
|
|
35
|
+
context_override=model_context,
|
|
36
|
+
kwargs={
|
|
37
|
+
"compiled_code": model_context["compiled_code"],
|
|
38
|
+
"sql_header": model_context["config"].get("sql_header"),
|
|
39
|
+
"limit": limit,
|
|
40
|
+
},
|
|
41
|
+
)
|
|
42
|
+
adapter_response, execute_result = self.adapter.execute(
|
|
43
|
+
compiled_node.compiled_code, fetch=True
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
end_time = time.time()
|
|
47
|
+
|
|
48
|
+
return RunResult(
|
|
49
|
+
node=compiled_node,
|
|
50
|
+
status=RunStatus.Success,
|
|
51
|
+
timing=[],
|
|
52
|
+
thread_id=threading.current_thread().name,
|
|
53
|
+
execution_time=end_time - start_time,
|
|
54
|
+
message=None,
|
|
55
|
+
adapter_response=adapter_response.to_dict(),
|
|
56
|
+
agate_table=execute_result,
|
|
57
|
+
failures=None,
|
|
58
|
+
batch_results=None,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ShowTask(CompileTask):
|
|
63
|
+
def _runtime_initialize(self):
|
|
64
|
+
if not (self.args.select or getattr(self.args, "inline", None)):
|
|
65
|
+
raise DbtRuntimeError("Either --select or --inline must be passed to show")
|
|
66
|
+
super()._runtime_initialize()
|
|
67
|
+
|
|
68
|
+
def get_runner_type(self, node):
|
|
69
|
+
if isinstance(node, SeedNode):
|
|
70
|
+
return SeedRunner
|
|
71
|
+
else:
|
|
72
|
+
return ShowRunner
|
|
73
|
+
|
|
74
|
+
def task_end_messages(self, results) -> None:
|
|
75
|
+
is_inline = bool(getattr(self.args, "inline", None))
|
|
76
|
+
|
|
77
|
+
if is_inline:
|
|
78
|
+
matched_results = [result for result in results if result.node.name == "inline_query"]
|
|
79
|
+
else:
|
|
80
|
+
matched_results = []
|
|
81
|
+
for result in results:
|
|
82
|
+
if result.node.name in self.selection_arg[0]:
|
|
83
|
+
matched_results.append(result)
|
|
84
|
+
else:
|
|
85
|
+
fire_event(
|
|
86
|
+
Note(msg=f"Excluded node '{result.node.name}' from results"),
|
|
87
|
+
EventLevel.DEBUG,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
for result in matched_results:
|
|
91
|
+
table = result.agate_table
|
|
92
|
+
|
|
93
|
+
# Hack to get Agate table output as string
|
|
94
|
+
output = io.StringIO()
|
|
95
|
+
if self.args.output == "json":
|
|
96
|
+
table.to_json(path=output)
|
|
97
|
+
else:
|
|
98
|
+
table.print_table(output=output, max_rows=None)
|
|
99
|
+
|
|
100
|
+
node_name = result.node.name
|
|
101
|
+
|
|
102
|
+
if hasattr(result.node, "version") and result.node.version:
|
|
103
|
+
node_name += f".v{result.node.version}"
|
|
104
|
+
|
|
105
|
+
fire_event(
|
|
106
|
+
ShowNode(
|
|
107
|
+
node_name=node_name,
|
|
108
|
+
preview=output.getvalue(),
|
|
109
|
+
is_inline=is_inline,
|
|
110
|
+
output_format=self.args.output,
|
|
111
|
+
unique_id=result.node.unique_id,
|
|
112
|
+
quiet=get_flags().QUIET,
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def _handle_result(self, result) -> None:
|
|
117
|
+
super()._handle_result(result)
|
|
118
|
+
|
|
119
|
+
if (
|
|
120
|
+
result.node.is_ephemeral_model
|
|
121
|
+
and type(self) is ShowTask
|
|
122
|
+
and (self.args.select or getattr(self.args, "inline", None))
|
|
123
|
+
):
|
|
124
|
+
self.node_results.append(result)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class ShowTaskDirect(ConfiguredTask):
|
|
128
|
+
def run(self):
|
|
129
|
+
adapter = get_adapter(self.config)
|
|
130
|
+
with adapter.connection_named("show", should_release_connection=False):
|
|
131
|
+
limit = None if self.args.limit < 0 else self.args.limit
|
|
132
|
+
response, table = adapter.execute(self.args.inline_direct, fetch=True, limit=limit)
|
|
133
|
+
|
|
134
|
+
output = io.StringIO()
|
|
135
|
+
if self.args.output == "json":
|
|
136
|
+
table.to_json(path=output)
|
|
137
|
+
else:
|
|
138
|
+
table.print_table(output=output, max_rows=None)
|
|
139
|
+
|
|
140
|
+
fire_event(
|
|
141
|
+
ShowNode(
|
|
142
|
+
node_name="direct-query",
|
|
143
|
+
preview=output.getvalue(),
|
|
144
|
+
is_inline=True,
|
|
145
|
+
output_format=self.args.output,
|
|
146
|
+
unique_id="direct-query",
|
|
147
|
+
quiet=get_flags().QUIET,
|
|
148
|
+
)
|
|
149
|
+
)
|
dbt/task/snapshot.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from typing import Optional, Type
|
|
2
|
+
|
|
3
|
+
from dbt.artifacts.schemas.results import NodeStatus
|
|
4
|
+
from dbt.events.types import LogSnapshotResult
|
|
5
|
+
from dbt.graph import ResourceTypeSelector
|
|
6
|
+
from dbt.node_types import NodeType
|
|
7
|
+
from dbt.task import group_lookup
|
|
8
|
+
from dbt.task.base import BaseRunner
|
|
9
|
+
from dbt.task.run import ModelRunner, RunTask
|
|
10
|
+
from dbt_common.events.base_types import EventLevel
|
|
11
|
+
from dbt_common.events.functions import fire_event
|
|
12
|
+
from dbt_common.exceptions import DbtInternalError
|
|
13
|
+
from dbt_common.utils import cast_dict_to_dict_of_strings
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SnapshotRunner(ModelRunner):
|
|
17
|
+
def describe_node(self) -> str:
|
|
18
|
+
return "snapshot {}".format(self.get_node_representation())
|
|
19
|
+
|
|
20
|
+
def print_result_line(self, result):
|
|
21
|
+
model = result.node
|
|
22
|
+
group = group_lookup.get(model.unique_id)
|
|
23
|
+
cfg = model.config.to_dict(omit_none=True)
|
|
24
|
+
level = EventLevel.ERROR if result.status == NodeStatus.Error else EventLevel.INFO
|
|
25
|
+
fire_event(
|
|
26
|
+
LogSnapshotResult(
|
|
27
|
+
status=result.status,
|
|
28
|
+
description=self.get_node_representation(),
|
|
29
|
+
cfg=cast_dict_to_dict_of_strings(cfg),
|
|
30
|
+
index=self.node_index,
|
|
31
|
+
total=self.num_nodes,
|
|
32
|
+
execution_time=result.execution_time,
|
|
33
|
+
node_info=model.node_info,
|
|
34
|
+
result_message=result.message,
|
|
35
|
+
group=group,
|
|
36
|
+
),
|
|
37
|
+
level=level,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class SnapshotTask(RunTask):
|
|
42
|
+
def raise_on_first_error(self) -> bool:
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
def get_node_selector(self):
|
|
46
|
+
if self.manifest is None or self.graph is None:
|
|
47
|
+
raise DbtInternalError("manifest and graph must be set to get perform node selection")
|
|
48
|
+
return ResourceTypeSelector(
|
|
49
|
+
graph=self.graph,
|
|
50
|
+
manifest=self.manifest,
|
|
51
|
+
previous_state=self.previous_state,
|
|
52
|
+
resource_types=[NodeType.Snapshot],
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
def get_runner_type(self, _) -> Optional[Type[BaseRunner]]:
|
|
56
|
+
return SnapshotRunner
|