bigeye-cli 0.7.4__tar.gz → 0.8.0__tar.gz
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.
- bigeye_cli-0.7.4/bigeye_cli/CLI_DOCS.md → bigeye_cli-0.8.0/PKG-INFO +173 -1
- bigeye_cli-0.7.4/PKG-INFO → bigeye_cli-0.8.0/bigeye_cli/CLI_DOCS.md +152 -20
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/catalog/catalog_commands.py +2 -0
- bigeye_cli-0.8.0/bigeye_cli/catalog/custom_repo_commands.py +216 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/lineage/lineage_commands.py +145 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/pyproject.toml +2 -2
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/LICENSE +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__main__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/__version__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/bigconfig_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/bigconfig/bigconfig_options.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/catalog/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/collections/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/collections/collection_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/configure/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/configure/configure_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/deltas/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/deltas/deltas_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/enums.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/exceptions/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/exceptions/exceptions.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/functions.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/global_options.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/issues/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/issues/issue_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/lineage/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/metric/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/metric/metric_commands.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/cicd_conf.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/github_report.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/model/vendor_report.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/workspace/__init__.py +0 -0
- {bigeye_cli-0.7.4 → bigeye_cli-0.8.0}/bigeye_cli/workspace/workspace_commands.py +0 -0
|
@@ -1,5 +1,24 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: bigeye-cli
|
|
3
|
+
Version: 0.8.0
|
|
4
|
+
Summary: Bigeye CLI offers developer tools for maintaining your developer workspace.
|
|
5
|
+
Home-page: https://docs.bigeye.com/docs
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Author: Bigeye
|
|
8
|
+
Author-email: support@bigeye.com
|
|
9
|
+
Requires-Python: >=3.11.0,<4.0.0
|
|
10
|
+
Classifier: License :: Other/Proprietary License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Requires-Dist: PyGithub (>=1.59.1,<2.0.0)
|
|
15
|
+
Requires-Dist: bigeye-sdk (>=0.10.0,<0.11.0)
|
|
16
|
+
Requires-Dist: click (>=8.1.8,<9.0.0)
|
|
17
|
+
Requires-Dist: rich (>=14.1.0,<15.0.0)
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
1
20
|
# **Bigeye CLI**
|
|
2
|
-
Version: 0.
|
|
21
|
+
Version: 0.8.0
|
|
3
22
|
## Installation
|
|
4
23
|
|
|
5
24
|
**Setting up your local/build environment**
|
|
@@ -716,6 +735,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
|
|
|
716
735
|
* `ingest-dbt-core-run-info`: Ingest manifest.json and run_results.json...
|
|
717
736
|
* `track-schema-changes`: Track schema changes for sources on demand...
|
|
718
737
|
* `sync-custom-repository`: Sync a custom repository from a YAML file.
|
|
738
|
+
* `custom-repo`: Import and export custom repositories as...
|
|
719
739
|
|
|
720
740
|
## `bigeye catalog regen-autometrics`
|
|
721
741
|
|
|
@@ -1268,6 +1288,102 @@ $ bigeye catalog sync-custom-repository [OPTIONS]
|
|
|
1268
1288
|
* `-ip, --input_path TEXT`: The path to the CUSTOM_REPOSITORY_CONFIGURATION file (Required)
|
|
1269
1289
|
* `--help`: Show this message and exit.
|
|
1270
1290
|
|
|
1291
|
+
## `bigeye catalog custom-repo`
|
|
1292
|
+
|
|
1293
|
+
Import and export custom repositories as Excel (.xlsx) workbooks.
|
|
1294
|
+
|
|
1295
|
+
**Usage**:
|
|
1296
|
+
|
|
1297
|
+
```console
|
|
1298
|
+
$ bigeye catalog custom-repo [OPTIONS] COMMAND [ARGS]...
|
|
1299
|
+
```
|
|
1300
|
+
|
|
1301
|
+
**Options**:
|
|
1302
|
+
|
|
1303
|
+
* `--help`: Show this message and exit.
|
|
1304
|
+
|
|
1305
|
+
**Commands**:
|
|
1306
|
+
|
|
1307
|
+
* `init`: Generate a blank custom repository...
|
|
1308
|
+
* `import`: Import a custom repository from an Excel...
|
|
1309
|
+
* `export`: Export a custom repository to an Excel...
|
|
1310
|
+
* `delete`: Entirely delete a custom repository,...
|
|
1311
|
+
|
|
1312
|
+
### `bigeye catalog custom-repo init`
|
|
1313
|
+
|
|
1314
|
+
Generate a blank custom repository workbook (branded, with the Instructions
|
|
1315
|
+
sheet and dropdowns) for you to populate, then import with `custom-repo import`.
|
|
1316
|
+
|
|
1317
|
+
**Usage**:
|
|
1318
|
+
|
|
1319
|
+
```console
|
|
1320
|
+
$ bigeye catalog custom-repo init [OPTIONS]
|
|
1321
|
+
```
|
|
1322
|
+
|
|
1323
|
+
**Options**:
|
|
1324
|
+
|
|
1325
|
+
* `-o, --output TEXT`: Output .xlsx path for the blank template. [default: custom_repo_template.xlsx]
|
|
1326
|
+
* `--force`: Overwrite the output file if it already exists.
|
|
1327
|
+
* `--help`: Show this message and exit.
|
|
1328
|
+
|
|
1329
|
+
### `bigeye catalog custom-repo import`
|
|
1330
|
+
|
|
1331
|
+
Import a custom repository from an Excel workbook.
|
|
1332
|
+
|
|
1333
|
+
**Usage**:
|
|
1334
|
+
|
|
1335
|
+
```console
|
|
1336
|
+
$ bigeye catalog custom-repo import [OPTIONS]
|
|
1337
|
+
```
|
|
1338
|
+
|
|
1339
|
+
**Options**:
|
|
1340
|
+
|
|
1341
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1342
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1343
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1344
|
+
* `-f, --file TEXT`: Path to the custom repository .xlsx workbook. [required]
|
|
1345
|
+
* `--cleanup-stale`: Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.
|
|
1346
|
+
* `--help`: Show this message and exit.
|
|
1347
|
+
|
|
1348
|
+
### `bigeye catalog custom-repo export`
|
|
1349
|
+
|
|
1350
|
+
Export a custom repository to an Excel workbook.
|
|
1351
|
+
|
|
1352
|
+
**Usage**:
|
|
1353
|
+
|
|
1354
|
+
```console
|
|
1355
|
+
$ bigeye catalog custom-repo export [OPTIONS]
|
|
1356
|
+
```
|
|
1357
|
+
|
|
1358
|
+
**Options**:
|
|
1359
|
+
|
|
1360
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1361
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1362
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1363
|
+
* `--repo-name TEXT`: Display name of the custom repository to export. [required]
|
|
1364
|
+
* `-o, --output TEXT`: Output .xlsx path. Defaults to <repo-name>.xlsx in the current directory.
|
|
1365
|
+
* `--help`: Show this message and exit.
|
|
1366
|
+
|
|
1367
|
+
### `bigeye catalog custom-repo delete`
|
|
1368
|
+
|
|
1369
|
+
Entirely delete a custom repository, including its nodes, edges, node types,
|
|
1370
|
+
and integration type.
|
|
1371
|
+
|
|
1372
|
+
**Usage**:
|
|
1373
|
+
|
|
1374
|
+
```console
|
|
1375
|
+
$ bigeye catalog custom-repo delete [OPTIONS]
|
|
1376
|
+
```
|
|
1377
|
+
|
|
1378
|
+
**Options**:
|
|
1379
|
+
|
|
1380
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1381
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1382
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1383
|
+
* `--repo-name TEXT`: Display name of the custom repository to delete. [required]
|
|
1384
|
+
* `-y, --yes`: Skip the confirmation prompt.
|
|
1385
|
+
* `--help`: Show this message and exit.
|
|
1386
|
+
|
|
1271
1387
|
# `bigeye metric`
|
|
1272
1388
|
|
|
1273
1389
|
Metric Commands for Bigeye CLI
|
|
@@ -1773,6 +1889,8 @@ $ bigeye lineage [OPTIONS] COMMAND [ARGS]...
|
|
|
1773
1889
|
* `create-relation`: Create a lineage relationship for 2 entities
|
|
1774
1890
|
* `delete-relation`: Deletes a single relationship based on...
|
|
1775
1891
|
* `infer-relations`: Given an upstream and downstream path,...
|
|
1892
|
+
* `export-graphs`: Bulk-export lineage graphs for a list of...
|
|
1893
|
+
* `export-end-to-end`: Export complete end-to-end lineage paths...
|
|
1776
1894
|
|
|
1777
1895
|
## `bigeye lineage create-node`
|
|
1778
1896
|
|
|
@@ -1874,3 +1992,57 @@ $ bigeye lineage infer-relations [OPTIONS]
|
|
|
1874
1992
|
* `-purge, --purge_lineage`: Purge all lineage edges.
|
|
1875
1993
|
* `--help`: Show this message and exit.
|
|
1876
1994
|
|
|
1995
|
+
## `bigeye lineage export-graphs`
|
|
1996
|
+
|
|
1997
|
+
Bulk-export lineage graphs for a list of FQNs into a single zip.
|
|
1998
|
+
|
|
1999
|
+
Reads fully-qualified catalog names from a CSV, downloads each one's lineage graph,
|
|
2000
|
+
and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
|
|
2001
|
+
successes and failures.
|
|
2002
|
+
|
|
2003
|
+
**Usage**:
|
|
2004
|
+
|
|
2005
|
+
```console
|
|
2006
|
+
$ bigeye lineage export-graphs [OPTIONS]
|
|
2007
|
+
```
|
|
2008
|
+
|
|
2009
|
+
**Options**:
|
|
2010
|
+
|
|
2011
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
2012
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
2013
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
2014
|
+
* `--fqns-file TEXT`: Path to a CSV with a single column of fully-qualified catalog names. [required]
|
|
2015
|
+
* `--direction [upstream|downstream|both]`: Direction to traverse: upstream, downstream, or both. [default: both]
|
|
2016
|
+
* `--content [all|nodes|edges|attributes]`: What each per-graph report contains: all, nodes, edges, or attributes. [default: all]
|
|
2017
|
+
* `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes. Defaults to including them. [default: include-etl]
|
|
2018
|
+
* `-o, --output TEXT`: Output .zip path. Defaults to lineage_graphs.zip in the current directory.
|
|
2019
|
+
* `--help`: Show this message and exit.
|
|
2020
|
+
|
|
2021
|
+
## `bigeye lineage export-end-to-end`
|
|
2022
|
+
|
|
2023
|
+
Export complete end-to-end lineage paths for one or more roots into a CSV.
|
|
2024
|
+
|
|
2025
|
+
Each row is one full lineage path and each Hop_* column is one object along it;
|
|
2026
|
+
the CSV widens to the longest path discovered. Only lineage edges become hops,
|
|
2027
|
+
collapsed to the chosen (or root-inferred) granularity — column/field hops roll
|
|
2028
|
+
up to their containing table/object (warehouse tables, ETL targets, BI objects).
|
|
2029
|
+
|
|
2030
|
+
**Usage**:
|
|
2031
|
+
|
|
2032
|
+
```console
|
|
2033
|
+
$ bigeye lineage export-end-to-end [OPTIONS]
|
|
2034
|
+
```
|
|
2035
|
+
|
|
2036
|
+
**Options**:
|
|
2037
|
+
|
|
2038
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
2039
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
2040
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
2041
|
+
* `--root TEXT`: A starting point: a schema/table/column warehouse FQN or a custom node identifier. Repeatable to trace several roots into one CSV. [required]
|
|
2042
|
+
* `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
|
|
2043
|
+
* `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root's own level.
|
|
2044
|
+
* `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
|
|
2045
|
+
* `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.
|
|
2046
|
+
* `--help`: Show this message and exit.
|
|
2047
|
+
|
|
2048
|
+
|
|
@@ -1,24 +1,5 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: bigeye-cli
|
|
3
|
-
Version: 0.7.4
|
|
4
|
-
Summary: Bigeye CLI offers developer tools for maintaining your developer workspace.
|
|
5
|
-
Home-page: https://docs.bigeye.com/docs
|
|
6
|
-
License: Proprietary
|
|
7
|
-
Author: Bigeye
|
|
8
|
-
Author-email: support@bigeye.com
|
|
9
|
-
Requires-Python: >=3.11.0,<4.0.0
|
|
10
|
-
Classifier: License :: Other/Proprietary License
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Requires-Dist: PyGithub (>=1.59.1,<2.0.0)
|
|
15
|
-
Requires-Dist: bigeye-sdk (>=0.8.0,<0.9.0)
|
|
16
|
-
Requires-Dist: click (>=8.1.8,<9.0.0)
|
|
17
|
-
Requires-Dist: rich (>=14.1.0,<15.0.0)
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
|
|
20
1
|
# **Bigeye CLI**
|
|
21
|
-
Version: 0.
|
|
2
|
+
Version: 0.8.0
|
|
22
3
|
## Installation
|
|
23
4
|
|
|
24
5
|
**Setting up your local/build environment**
|
|
@@ -735,6 +716,7 @@ $ bigeye catalog [OPTIONS] COMMAND [ARGS]...
|
|
|
735
716
|
* `ingest-dbt-core-run-info`: Ingest manifest.json and run_results.json...
|
|
736
717
|
* `track-schema-changes`: Track schema changes for sources on demand...
|
|
737
718
|
* `sync-custom-repository`: Sync a custom repository from a YAML file.
|
|
719
|
+
* `custom-repo`: Import and export custom repositories as...
|
|
738
720
|
|
|
739
721
|
## `bigeye catalog regen-autometrics`
|
|
740
722
|
|
|
@@ -1287,6 +1269,102 @@ $ bigeye catalog sync-custom-repository [OPTIONS]
|
|
|
1287
1269
|
* `-ip, --input_path TEXT`: The path to the CUSTOM_REPOSITORY_CONFIGURATION file (Required)
|
|
1288
1270
|
* `--help`: Show this message and exit.
|
|
1289
1271
|
|
|
1272
|
+
## `bigeye catalog custom-repo`
|
|
1273
|
+
|
|
1274
|
+
Import and export custom repositories as Excel (.xlsx) workbooks.
|
|
1275
|
+
|
|
1276
|
+
**Usage**:
|
|
1277
|
+
|
|
1278
|
+
```console
|
|
1279
|
+
$ bigeye catalog custom-repo [OPTIONS] COMMAND [ARGS]...
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
**Options**:
|
|
1283
|
+
|
|
1284
|
+
* `--help`: Show this message and exit.
|
|
1285
|
+
|
|
1286
|
+
**Commands**:
|
|
1287
|
+
|
|
1288
|
+
* `init`: Generate a blank custom repository...
|
|
1289
|
+
* `import`: Import a custom repository from an Excel...
|
|
1290
|
+
* `export`: Export a custom repository to an Excel...
|
|
1291
|
+
* `delete`: Entirely delete a custom repository,...
|
|
1292
|
+
|
|
1293
|
+
### `bigeye catalog custom-repo init`
|
|
1294
|
+
|
|
1295
|
+
Generate a blank custom repository workbook (branded, with the Instructions
|
|
1296
|
+
sheet and dropdowns) for you to populate, then import with `custom-repo import`.
|
|
1297
|
+
|
|
1298
|
+
**Usage**:
|
|
1299
|
+
|
|
1300
|
+
```console
|
|
1301
|
+
$ bigeye catalog custom-repo init [OPTIONS]
|
|
1302
|
+
```
|
|
1303
|
+
|
|
1304
|
+
**Options**:
|
|
1305
|
+
|
|
1306
|
+
* `-o, --output TEXT`: Output .xlsx path for the blank template. [default: custom_repo_template.xlsx]
|
|
1307
|
+
* `--force`: Overwrite the output file if it already exists.
|
|
1308
|
+
* `--help`: Show this message and exit.
|
|
1309
|
+
|
|
1310
|
+
### `bigeye catalog custom-repo import`
|
|
1311
|
+
|
|
1312
|
+
Import a custom repository from an Excel workbook.
|
|
1313
|
+
|
|
1314
|
+
**Usage**:
|
|
1315
|
+
|
|
1316
|
+
```console
|
|
1317
|
+
$ bigeye catalog custom-repo import [OPTIONS]
|
|
1318
|
+
```
|
|
1319
|
+
|
|
1320
|
+
**Options**:
|
|
1321
|
+
|
|
1322
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1323
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1324
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1325
|
+
* `-f, --file TEXT`: Path to the custom repository .xlsx workbook. [required]
|
|
1326
|
+
* `--cleanup-stale`: Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.
|
|
1327
|
+
* `--help`: Show this message and exit.
|
|
1328
|
+
|
|
1329
|
+
### `bigeye catalog custom-repo export`
|
|
1330
|
+
|
|
1331
|
+
Export a custom repository to an Excel workbook.
|
|
1332
|
+
|
|
1333
|
+
**Usage**:
|
|
1334
|
+
|
|
1335
|
+
```console
|
|
1336
|
+
$ bigeye catalog custom-repo export [OPTIONS]
|
|
1337
|
+
```
|
|
1338
|
+
|
|
1339
|
+
**Options**:
|
|
1340
|
+
|
|
1341
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1342
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1343
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1344
|
+
* `--repo-name TEXT`: Display name of the custom repository to export. [required]
|
|
1345
|
+
* `-o, --output TEXT`: Output .xlsx path. Defaults to <repo-name>.xlsx in the current directory.
|
|
1346
|
+
* `--help`: Show this message and exit.
|
|
1347
|
+
|
|
1348
|
+
### `bigeye catalog custom-repo delete`
|
|
1349
|
+
|
|
1350
|
+
Entirely delete a custom repository, including its nodes, edges, node types,
|
|
1351
|
+
and integration type.
|
|
1352
|
+
|
|
1353
|
+
**Usage**:
|
|
1354
|
+
|
|
1355
|
+
```console
|
|
1356
|
+
$ bigeye catalog custom-repo delete [OPTIONS]
|
|
1357
|
+
```
|
|
1358
|
+
|
|
1359
|
+
**Options**:
|
|
1360
|
+
|
|
1361
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1362
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1363
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1364
|
+
* `--repo-name TEXT`: Display name of the custom repository to delete. [required]
|
|
1365
|
+
* `-y, --yes`: Skip the confirmation prompt.
|
|
1366
|
+
* `--help`: Show this message and exit.
|
|
1367
|
+
|
|
1290
1368
|
# `bigeye metric`
|
|
1291
1369
|
|
|
1292
1370
|
Metric Commands for Bigeye CLI
|
|
@@ -1792,6 +1870,8 @@ $ bigeye lineage [OPTIONS] COMMAND [ARGS]...
|
|
|
1792
1870
|
* `create-relation`: Create a lineage relationship for 2 entities
|
|
1793
1871
|
* `delete-relation`: Deletes a single relationship based on...
|
|
1794
1872
|
* `infer-relations`: Given an upstream and downstream path,...
|
|
1873
|
+
* `export-graphs`: Bulk-export lineage graphs for a list of...
|
|
1874
|
+
* `export-end-to-end`: Export complete end-to-end lineage paths...
|
|
1795
1875
|
|
|
1796
1876
|
## `bigeye lineage create-node`
|
|
1797
1877
|
|
|
@@ -1893,4 +1973,56 @@ $ bigeye lineage infer-relations [OPTIONS]
|
|
|
1893
1973
|
* `-purge, --purge_lineage`: Purge all lineage edges.
|
|
1894
1974
|
* `--help`: Show this message and exit.
|
|
1895
1975
|
|
|
1976
|
+
## `bigeye lineage export-graphs`
|
|
1977
|
+
|
|
1978
|
+
Bulk-export lineage graphs for a list of FQNs into a single zip.
|
|
1979
|
+
|
|
1980
|
+
Reads fully-qualified catalog names from a CSV, downloads each one's lineage graph,
|
|
1981
|
+
and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
|
|
1982
|
+
successes and failures.
|
|
1983
|
+
|
|
1984
|
+
**Usage**:
|
|
1985
|
+
|
|
1986
|
+
```console
|
|
1987
|
+
$ bigeye lineage export-graphs [OPTIONS]
|
|
1988
|
+
```
|
|
1989
|
+
|
|
1990
|
+
**Options**:
|
|
1991
|
+
|
|
1992
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
1993
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
1994
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
1995
|
+
* `--fqns-file TEXT`: Path to a CSV with a single column of fully-qualified catalog names. [required]
|
|
1996
|
+
* `--direction [upstream|downstream|both]`: Direction to traverse: upstream, downstream, or both. [default: both]
|
|
1997
|
+
* `--content [all|nodes|edges|attributes]`: What each per-graph report contains: all, nodes, edges, or attributes. [default: all]
|
|
1998
|
+
* `--include-etl / --no-include-etl`: Include or exclude ETL operator nodes. Defaults to including them. [default: include-etl]
|
|
1999
|
+
* `-o, --output TEXT`: Output .zip path. Defaults to lineage_graphs.zip in the current directory.
|
|
2000
|
+
* `--help`: Show this message and exit.
|
|
2001
|
+
|
|
2002
|
+
## `bigeye lineage export-end-to-end`
|
|
2003
|
+
|
|
2004
|
+
Export complete end-to-end lineage paths for one or more roots into a CSV.
|
|
2005
|
+
|
|
2006
|
+
Each row is one full lineage path and each Hop_* column is one object along it;
|
|
2007
|
+
the CSV widens to the longest path discovered. Only lineage edges become hops,
|
|
2008
|
+
collapsed to the chosen (or root-inferred) granularity — column/field hops roll
|
|
2009
|
+
up to their containing table/object (warehouse tables, ETL targets, BI objects).
|
|
2010
|
+
|
|
2011
|
+
**Usage**:
|
|
2012
|
+
|
|
2013
|
+
```console
|
|
2014
|
+
$ bigeye lineage export-end-to-end [OPTIONS]
|
|
2015
|
+
```
|
|
2016
|
+
|
|
2017
|
+
**Options**:
|
|
2018
|
+
|
|
2019
|
+
* `-b, --bigeye_conf TEXT`: Bigeye Credential File Path [env var: BIGEYE_API_CRED_FILE]
|
|
2020
|
+
* `-c, --config_file TEXT`: Bigeye CLI Configuration File Path [env var: BIGEYE_API_CONFIG_FILE]
|
|
2021
|
+
* `-w, --workspace TEXT`: Name of the workspace configuration. [env var: BIGEYE_WORKSPACE; default: DEFAULT]
|
|
2022
|
+
* `--root TEXT`: A starting point: a schema/table/column warehouse FQN or a custom node identifier. Repeatable to trace several roots into one CSV. [required]
|
|
2023
|
+
* `--direction [upstream|downstream|both]`: Direction to trace: upstream, downstream, or both. [default: both]
|
|
2024
|
+
* `--granularity [schema|table|column]`: Hop level: schema, table, or column. Defaults to each root's own level.
|
|
2025
|
+
* `--max-paths INTEGER`: Per-root cap on enumerated paths. Truncation is logged, never silent. [default: 10000]
|
|
2026
|
+
* `-o, --output TEXT`: Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.
|
|
2027
|
+
* `--help`: Show this message and exit.
|
|
1896
2028
|
|
|
@@ -17,6 +17,7 @@ from bigeye_cli.exceptions.exceptions import MissingArgumentException
|
|
|
17
17
|
from bigeye_sdk.client.enum import Method
|
|
18
18
|
|
|
19
19
|
from bigeye_cli import global_options
|
|
20
|
+
from bigeye_cli.catalog import custom_repo_commands
|
|
20
21
|
from bigeye_sdk.controller.custom_repository_controller import CustomRepositoryController
|
|
21
22
|
from bigeye_sdk.functions.dbt import parse_dbt_manifest
|
|
22
23
|
from bigeye_sdk.functions.file_functs import read_json_file
|
|
@@ -65,6 +66,7 @@ from bigeye_sdk.model.schema_change import SourceSchemaChange
|
|
|
65
66
|
log = get_logger(__file__)
|
|
66
67
|
|
|
67
68
|
app = typer.Typer(no_args_is_help=True, help="Catalog Commands for Bigeye CLI")
|
|
69
|
+
app.add_typer(custom_repo_commands.app, name="custom-repo")
|
|
68
70
|
|
|
69
71
|
"""
|
|
70
72
|
File should contain commands that will impact catalog, table, or schema level changes to a Bigeye workspace. This
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Dict, List, Optional, Tuple
|
|
3
|
+
|
|
4
|
+
import typer
|
|
5
|
+
|
|
6
|
+
from bigeye_cli import global_options
|
|
7
|
+
from bigeye_cli.functions import cli_client_factory
|
|
8
|
+
from bigeye_sdk.controller.custom_repository_controller import CustomRepositoryController
|
|
9
|
+
from bigeye_sdk.log import get_logger
|
|
10
|
+
from bigeye_sdk.model.custom_repository_excel import (
|
|
11
|
+
SHEET_EDGES,
|
|
12
|
+
CustomRepoWorkbook,
|
|
13
|
+
EdgeEndpointType,
|
|
14
|
+
WorkbookValidationError,
|
|
15
|
+
build_config,
|
|
16
|
+
iter_path_endpoints,
|
|
17
|
+
parse_catalog_path,
|
|
18
|
+
read_workbook,
|
|
19
|
+
validate_workbook,
|
|
20
|
+
write_workbook,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
log = get_logger(__file__)
|
|
24
|
+
|
|
25
|
+
app = typer.Typer(
|
|
26
|
+
no_args_is_help=True,
|
|
27
|
+
help="Import and export custom repositories as Excel (.xlsx) workbooks.",
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _print_errors(header: str, errors: List[WorkbookValidationError]) -> None:
|
|
32
|
+
typer.echo(f"{header} with {len(errors)} error(s):", err=True)
|
|
33
|
+
for error in errors:
|
|
34
|
+
typer.echo(f" {error.format()}", err=True)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _resolve_paths(
|
|
38
|
+
wb: CustomRepoWorkbook, controller: CustomRepositoryController
|
|
39
|
+
) -> Tuple[Dict[str, int], List[WorkbookValidationError]]:
|
|
40
|
+
"""Resolve every catalog-path/FQN edge endpoint to a node_id, aggregating failures."""
|
|
41
|
+
resolved: Dict[str, int] = {}
|
|
42
|
+
errors: List[WorkbookValidationError] = []
|
|
43
|
+
endpoints = iter_path_endpoints(wb)
|
|
44
|
+
# Bulk-load every referenced warehouse object up front so the per-endpoint
|
|
45
|
+
# resolution below is a cache lookup rather than several API calls each.
|
|
46
|
+
controller.warm_warehouse_cache(endpoints)
|
|
47
|
+
for endpoint_type, value in endpoints:
|
|
48
|
+
if endpoint_type == EdgeEndpointType.CUSTOM.value:
|
|
49
|
+
matches = controller.resolve_catalog_path(parse_catalog_path(value))
|
|
50
|
+
else:
|
|
51
|
+
matches = controller.resolve_warehouse_fqn(endpoint_type, value)
|
|
52
|
+
if not matches:
|
|
53
|
+
errors.append(
|
|
54
|
+
WorkbookValidationError(
|
|
55
|
+
SHEET_EDGES, "Could not resolve endpoint to a Bigeye node", value=value
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
elif len(matches) > 1:
|
|
59
|
+
errors.append(
|
|
60
|
+
WorkbookValidationError(
|
|
61
|
+
SHEET_EDGES,
|
|
62
|
+
f"Endpoint is ambiguous (matched node_ids {matches})",
|
|
63
|
+
value=value,
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
else:
|
|
67
|
+
resolved[value] = matches[0]
|
|
68
|
+
return resolved, errors
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@app.command(name="init")
|
|
72
|
+
def init_repo(
|
|
73
|
+
output: str = typer.Option(
|
|
74
|
+
"custom_repo_template.xlsx",
|
|
75
|
+
"--output",
|
|
76
|
+
"-o",
|
|
77
|
+
help="Output .xlsx path for the blank template.",
|
|
78
|
+
),
|
|
79
|
+
force: bool = typer.Option(
|
|
80
|
+
False,
|
|
81
|
+
"--force",
|
|
82
|
+
help="Overwrite the output file if it already exists.",
|
|
83
|
+
),
|
|
84
|
+
):
|
|
85
|
+
"""Generate a blank custom repository workbook (branded, with the Instructions
|
|
86
|
+
sheet and dropdowns) for you to populate, then import with `custom-repo import`."""
|
|
87
|
+
if os.path.exists(output) and not force:
|
|
88
|
+
typer.echo(
|
|
89
|
+
f"'{output}' already exists. Choose a different --output or pass --force to overwrite.",
|
|
90
|
+
err=True,
|
|
91
|
+
)
|
|
92
|
+
raise typer.Exit(code=1)
|
|
93
|
+
|
|
94
|
+
write_workbook(CustomRepoWorkbook(repo_name=""), output)
|
|
95
|
+
log.info(f"Wrote blank custom repository template to {output}")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@app.command(name="import")
|
|
99
|
+
def import_repo(
|
|
100
|
+
bigeye_conf: str = global_options.bigeye_conf,
|
|
101
|
+
config_file: str = global_options.config_file,
|
|
102
|
+
workspace: str = global_options.workspace,
|
|
103
|
+
file: str = typer.Option(
|
|
104
|
+
..., "--file", "-f", help="Path to the custom repository .xlsx workbook."
|
|
105
|
+
),
|
|
106
|
+
cleanup_stale: bool = typer.Option(
|
|
107
|
+
False,
|
|
108
|
+
"--cleanup-stale",
|
|
109
|
+
help="Delete nodes/edges present in Bigeye but missing from the sheet. Off by default.",
|
|
110
|
+
),
|
|
111
|
+
):
|
|
112
|
+
"""Import a custom repository from an Excel workbook."""
|
|
113
|
+
client = cli_client_factory(bigeye_conf, config_file, workspace)
|
|
114
|
+
controller = CustomRepositoryController(client)
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
wb = read_workbook(file)
|
|
118
|
+
except (FileNotFoundError, ValueError) as e:
|
|
119
|
+
typer.echo(f"Could not read workbook '{file}': {e}", err=True)
|
|
120
|
+
raise typer.Exit(code=1)
|
|
121
|
+
|
|
122
|
+
validation_errors = validate_workbook(wb)
|
|
123
|
+
if validation_errors:
|
|
124
|
+
_print_errors("Import validation failed", validation_errors)
|
|
125
|
+
raise typer.Exit(code=1)
|
|
126
|
+
|
|
127
|
+
path_node_ids, unresolved = _resolve_paths(wb, controller)
|
|
128
|
+
if unresolved:
|
|
129
|
+
_print_errors("Could not resolve all catalog path references", unresolved)
|
|
130
|
+
raise typer.Exit(code=1)
|
|
131
|
+
|
|
132
|
+
config = build_config(wb, path_node_ids=path_node_ids, cleanup_stale=cleanup_stale)
|
|
133
|
+
result = controller.sync_from_config(config, wait_for_completion=True)
|
|
134
|
+
|
|
135
|
+
log.info(
|
|
136
|
+
f"Sync complete for '{wb.repo_name}': {result.nodes_synced} nodes, "
|
|
137
|
+
f"{result.edges_synced} edges submitted."
|
|
138
|
+
)
|
|
139
|
+
if result.edges_dropped:
|
|
140
|
+
log.warning(f"{result.edges_dropped} edge(s) dropped during sync:")
|
|
141
|
+
for reason in result.dropped_edge_reasons:
|
|
142
|
+
log.warning(f" - {reason}")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@app.command(name="export")
|
|
146
|
+
def export_repo(
|
|
147
|
+
bigeye_conf: str = global_options.bigeye_conf,
|
|
148
|
+
config_file: str = global_options.config_file,
|
|
149
|
+
workspace: str = global_options.workspace,
|
|
150
|
+
repo_name: str = typer.Option(
|
|
151
|
+
..., "--repo-name", help="Display name of the custom repository to export."
|
|
152
|
+
),
|
|
153
|
+
output: Optional[str] = typer.Option(
|
|
154
|
+
None,
|
|
155
|
+
"--output",
|
|
156
|
+
"-o",
|
|
157
|
+
help="Output .xlsx path. Defaults to <repo-name>.xlsx in the current directory.",
|
|
158
|
+
),
|
|
159
|
+
):
|
|
160
|
+
"""Export a custom repository to an Excel workbook."""
|
|
161
|
+
client = cli_client_factory(bigeye_conf, config_file, workspace)
|
|
162
|
+
controller = CustomRepositoryController(client)
|
|
163
|
+
|
|
164
|
+
try:
|
|
165
|
+
wb = controller.export_repository(repo_name)
|
|
166
|
+
except ValueError as e:
|
|
167
|
+
typer.echo(str(e), err=True)
|
|
168
|
+
raise typer.Exit(code=1)
|
|
169
|
+
|
|
170
|
+
output_path = output or f"{repo_name}.xlsx"
|
|
171
|
+
write_workbook(wb, output_path)
|
|
172
|
+
log.info(
|
|
173
|
+
f"Exported repository '{repo_name}' to {output_path} "
|
|
174
|
+
f"({len(wb.nodes)} nodes, {len(wb.edges)} edges)."
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@app.command(name="delete")
|
|
179
|
+
def delete_repo(
|
|
180
|
+
bigeye_conf: str = global_options.bigeye_conf,
|
|
181
|
+
config_file: str = global_options.config_file,
|
|
182
|
+
workspace: str = global_options.workspace,
|
|
183
|
+
repo_name: str = typer.Option(
|
|
184
|
+
..., "--repo-name", help="Display name of the custom repository to delete."
|
|
185
|
+
),
|
|
186
|
+
yes: bool = typer.Option(
|
|
187
|
+
False,
|
|
188
|
+
"--yes",
|
|
189
|
+
"-y",
|
|
190
|
+
help="Skip the confirmation prompt.",
|
|
191
|
+
),
|
|
192
|
+
):
|
|
193
|
+
"""Entirely delete a custom repository, including its nodes, edges, node types,
|
|
194
|
+
and integration type."""
|
|
195
|
+
client = cli_client_factory(bigeye_conf, config_file, workspace)
|
|
196
|
+
controller = CustomRepositoryController(client)
|
|
197
|
+
|
|
198
|
+
if not yes:
|
|
199
|
+
typer.confirm(
|
|
200
|
+
f"Permanently delete custom repository '{repo_name}' and all its nodes, "
|
|
201
|
+
f"edges, node types, and integration type?",
|
|
202
|
+
abort=True,
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
try:
|
|
206
|
+
result = controller.delete_repository(repo_name)
|
|
207
|
+
except ValueError as e:
|
|
208
|
+
typer.echo(str(e), err=True)
|
|
209
|
+
raise typer.Exit(code=1)
|
|
210
|
+
|
|
211
|
+
summary = f"Deleted custom repository '{result.repository_name}' (id {result.repository_id})"
|
|
212
|
+
if result.integration_type_deleted:
|
|
213
|
+
summary += f", its integration type, and {result.node_types_deleted} node type(s)"
|
|
214
|
+
else:
|
|
215
|
+
summary += " (integration type retained — shared by another repository)"
|
|
216
|
+
log.info(summary + ".")
|
|
@@ -8,10 +8,23 @@ from bigeye_cli.exceptions.exceptions import InvalidEntityException
|
|
|
8
8
|
from bigeye_cli.functions import cli_client_factory
|
|
9
9
|
from bigeye_cli import global_options
|
|
10
10
|
from bigeye_sdk.controller.lineage_controller import LineageController
|
|
11
|
+
from bigeye_sdk.controller.lineage_custom_reporting_controller import LineageCustomReporting
|
|
11
12
|
from bigeye_sdk.model.enums import MatchType
|
|
12
13
|
from bigeye_sdk.log import get_logger
|
|
13
14
|
from bigeye_sdk.model.lineage_facade import LineageConfigurationFile, SimpleLineageConfigurationFile, \
|
|
14
15
|
LineageColumnOverride
|
|
16
|
+
from bigeye_sdk.model.lineage_end_to_end import (
|
|
17
|
+
DEFAULT_MAX_PATHS,
|
|
18
|
+
EndToEndDirection,
|
|
19
|
+
Granularity,
|
|
20
|
+
default_output_filename,
|
|
21
|
+
)
|
|
22
|
+
from bigeye_sdk.model.lineage_graph_export import (
|
|
23
|
+
MANIFEST_FILENAME,
|
|
24
|
+
GraphContent,
|
|
25
|
+
GraphDirection,
|
|
26
|
+
read_fqns_file,
|
|
27
|
+
)
|
|
15
28
|
|
|
16
29
|
log = get_logger(__file__)
|
|
17
30
|
|
|
@@ -224,3 +237,135 @@ def infer_relations(
|
|
|
224
237
|
tables=matching_tables,
|
|
225
238
|
purge_lineage=purge_lineage
|
|
226
239
|
)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
@app.command(name="export-graphs")
|
|
243
|
+
def export_graphs(
|
|
244
|
+
bigeye_conf: str = global_options.bigeye_conf,
|
|
245
|
+
config_file: str = global_options.config_file,
|
|
246
|
+
workspace: str = global_options.workspace,
|
|
247
|
+
fqns_file: str = typer.Option(
|
|
248
|
+
...,
|
|
249
|
+
"--fqns-file",
|
|
250
|
+
help="Path to a CSV with a single column of fully-qualified catalog names.",
|
|
251
|
+
),
|
|
252
|
+
direction: GraphDirection = typer.Option(
|
|
253
|
+
GraphDirection.BOTH,
|
|
254
|
+
"--direction",
|
|
255
|
+
help="Direction to traverse: upstream, downstream, or both.",
|
|
256
|
+
case_sensitive=False,
|
|
257
|
+
),
|
|
258
|
+
content: GraphContent = typer.Option(
|
|
259
|
+
GraphContent.ALL,
|
|
260
|
+
"--content",
|
|
261
|
+
help="What each per-graph report contains: all, nodes, edges, or attributes.",
|
|
262
|
+
case_sensitive=False,
|
|
263
|
+
),
|
|
264
|
+
include_etl: bool = typer.Option(
|
|
265
|
+
True,
|
|
266
|
+
"--include-etl/--no-include-etl",
|
|
267
|
+
help="Include or exclude ETL operator nodes. Defaults to including them.",
|
|
268
|
+
),
|
|
269
|
+
output: Optional[str] = typer.Option(
|
|
270
|
+
None,
|
|
271
|
+
"--output",
|
|
272
|
+
"-o",
|
|
273
|
+
help="Output .zip path. Defaults to lineage_graphs.zip in the current directory.",
|
|
274
|
+
),
|
|
275
|
+
):
|
|
276
|
+
"""Bulk-export lineage graphs for a list of FQNs into a single zip.
|
|
277
|
+
|
|
278
|
+
Reads fully-qualified catalog names from a CSV, downloads each one's lineage graph,
|
|
279
|
+
and writes one folder per FQN (nodes/edges/attributes) plus a top-level manifest of
|
|
280
|
+
successes and failures.
|
|
281
|
+
"""
|
|
282
|
+
client = cli_client_factory(bigeye_conf, config_file, workspace)
|
|
283
|
+
controller = LineageCustomReporting(client)
|
|
284
|
+
|
|
285
|
+
try:
|
|
286
|
+
fqns = read_fqns_file(fqns_file)
|
|
287
|
+
except OSError as e:
|
|
288
|
+
typer.echo(f"Could not read FQNs file '{fqns_file}': {e}", err=True)
|
|
289
|
+
raise typer.Exit(code=1)
|
|
290
|
+
|
|
291
|
+
if not fqns:
|
|
292
|
+
typer.echo(f"No FQNs found in '{fqns_file}'.", err=True)
|
|
293
|
+
raise typer.Exit(code=1)
|
|
294
|
+
|
|
295
|
+
output_path = output or "lineage_graphs.zip"
|
|
296
|
+
summary = controller.export_graphs(
|
|
297
|
+
fqns=fqns,
|
|
298
|
+
direction=direction,
|
|
299
|
+
content=content,
|
|
300
|
+
include_etl=include_etl,
|
|
301
|
+
output_path=output_path,
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
log.info(
|
|
305
|
+
f"Exported {len(summary.succeeded)} of {len(fqns)} lineage graph(s) to "
|
|
306
|
+
f"{output_path} ({len(summary.failed)} failed). See {MANIFEST_FILENAME} in the zip."
|
|
307
|
+
)
|
|
308
|
+
for entry in summary.failed:
|
|
309
|
+
log.warning(f" {entry.fqn}: {entry.error}")
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
@app.command(name="export-end-to-end")
|
|
313
|
+
def export_end_to_end(
|
|
314
|
+
bigeye_conf: str = global_options.bigeye_conf,
|
|
315
|
+
config_file: str = global_options.config_file,
|
|
316
|
+
workspace: str = global_options.workspace,
|
|
317
|
+
root: List[str] = typer.Option(
|
|
318
|
+
...,
|
|
319
|
+
"--root",
|
|
320
|
+
help="A starting point: a schema/table/column warehouse FQN or a custom node "
|
|
321
|
+
"identifier. Repeatable to trace several roots into one CSV.",
|
|
322
|
+
),
|
|
323
|
+
direction: EndToEndDirection = typer.Option(
|
|
324
|
+
EndToEndDirection.BOTH,
|
|
325
|
+
"--direction",
|
|
326
|
+
help="Direction to trace: upstream, downstream, or both.",
|
|
327
|
+
case_sensitive=False,
|
|
328
|
+
),
|
|
329
|
+
granularity: Optional[Granularity] = typer.Option(
|
|
330
|
+
None,
|
|
331
|
+
"--granularity",
|
|
332
|
+
help="Hop level: schema, table, or column. Defaults to each root's own level.",
|
|
333
|
+
case_sensitive=False,
|
|
334
|
+
),
|
|
335
|
+
max_paths: int = typer.Option(
|
|
336
|
+
DEFAULT_MAX_PATHS,
|
|
337
|
+
"--max-paths",
|
|
338
|
+
help="Per-root cap on enumerated paths. Truncation is logged, never silent.",
|
|
339
|
+
),
|
|
340
|
+
output: Optional[str] = typer.Option(
|
|
341
|
+
None,
|
|
342
|
+
"--output",
|
|
343
|
+
"-o",
|
|
344
|
+
help="Output .csv path. Defaults to end_to_end_<root>.csv in the current directory.",
|
|
345
|
+
),
|
|
346
|
+
):
|
|
347
|
+
"""Export complete end-to-end lineage paths for one or more roots into a CSV.
|
|
348
|
+
|
|
349
|
+
Each row is one full lineage path and each Hop_* column is one object along it;
|
|
350
|
+
the CSV widens to the longest path discovered. Only lineage edges become hops,
|
|
351
|
+
collapsed to the chosen (or root-inferred) granularity — column/field hops roll
|
|
352
|
+
up to their containing table/object (warehouse tables, ETL targets, BI objects).
|
|
353
|
+
"""
|
|
354
|
+
client = cli_client_factory(bigeye_conf, config_file, workspace)
|
|
355
|
+
controller = LineageCustomReporting(client)
|
|
356
|
+
|
|
357
|
+
output_path = output or default_output_filename(root)
|
|
358
|
+
summary = controller.export_end_to_end(
|
|
359
|
+
roots=root,
|
|
360
|
+
direction=direction,
|
|
361
|
+
granularity=granularity,
|
|
362
|
+
output_path=output_path,
|
|
363
|
+
max_paths=max_paths,
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
log.info(
|
|
367
|
+
f"Wrote {len(summary.rows)} lineage path(s) for {len(summary.succeeded)} of "
|
|
368
|
+
f"{len(root)} root(s) to {output_path} ({len(summary.failed)} failed)."
|
|
369
|
+
)
|
|
370
|
+
for result in summary.failed:
|
|
371
|
+
log.warning(f" {result.root}: {result.error}")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "bigeye-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.8.0"
|
|
4
4
|
description = "Bigeye CLI offers developer tools for maintaining your developer workspace."
|
|
5
5
|
license = "Proprietary"
|
|
6
6
|
authors = ["Bigeye <support@bigeye.com>"]
|
|
@@ -19,7 +19,7 @@ bigeye = "bigeye_cli.__main__:app"
|
|
|
19
19
|
[tool.poetry.dependencies]
|
|
20
20
|
python = "^3.11.0"
|
|
21
21
|
click = "^8.1.8"
|
|
22
|
-
bigeye-sdk = "^0.
|
|
22
|
+
bigeye-sdk = "^0.10.0"
|
|
23
23
|
rich = "^14.1.0"
|
|
24
24
|
PyGithub = '^1.59.1'
|
|
25
25
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|