|
1 | 1 | # BigQuery View Analyzer
|
2 | 2 | [](https://pypi.python.org/pypi/bigquery-view-analyzer)
|
3 |
| -[](https://travis-ci.org/servian/bigquery-view-analyzer) |
4 |
| -[](https://coveralls.io/github/servian/bigquery-view-analyzer?branch=master) |
5 | 3 | [](https://pypi.python.org/pypi/bigquery-view-analyzer)
|
| 4 | +[](https://travis-ci.org/servian/bigquery-view-analyzer) |
6 | 5 | [](https://github.com/servian/bigquery-view-analyzer)
|
7 | 6 |
|
8 | 7 | ## Description
|
9 |
| -TBC |
| 8 | +`bigquery-view-analyzer` is a command-line tool for visualizing dependencies and managing permissions between BigQuery views. |
| 9 | + |
| 10 | +To authorize a vew, permissions must be granted at a dataset level for every view/table referenced in the view definition. This requirement cascades down to every view that's referenced by the parent view, they too must have permissions granted for every view/table they reference - and so on. This can quickly become difficult to manage if you have many nested views across multiple datasets and/or projects. |
| 11 | + |
| 12 | +`bigquery-view-analyzer` automatically resolves these dependencies and applies the relevant permissions to all views and datasets referenced by the parent view. |
| 13 | + |
10 | 14 |
|
11 | 15 | ## Installation
|
12 | 16 |
|
13 | 17 | ```bash
|
14 |
| -pip install bigquery-view-analyzer |
| 18 | +$ pip install bigquery-view-analyzer |
15 | 19 | ```
|
16 | 20 |
|
17 | 21 | ## Usage
|
18 |
| -TBC |
| 22 | + |
| 23 | +```bash |
| 24 | +$ bqva --help |
| 25 | +``` |
| 26 | + |
| 27 | + |
| 28 | +### Example |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +Given the above datasets and tables in BigQuery, to authorize `bqva-demo:dataset_4.shared_view`, the following views would need to be authorized with each of the following datasets: |
| 33 | + |
| 34 | +- Authorized views for **`dataset_1`** |
| 35 | + - `bqva-demo:dataset_3.view_a_b_c_d` |
| 36 | +- Authorized views for **`dataset_2`** |
| 37 | + - `bqva-demo:dataset_3.view_a_b_c_d` |
| 38 | + - `bqva-demo:dataset_1.view_c` |
| 39 | +- Authorized views for **`dataset_3`** |
| 40 | + - `bqva-demo:dataset_2.view_d` |
| 41 | + - `bqva-demo:dataset_4.shared_view` |
| 42 | + |
| 43 | +You can easily visualize the above view hierarchy using the `bqva tree` command. |
| 44 | + |
| 45 | +```bash |
| 46 | +# View dependency tree and authorization status for 'bqva-demo:dataset_4.shared_view' |
| 47 | +$ bqva tree --status --view "bqva-demo:dataset_4.shared_view" |
| 48 | +bqva-demo:dataset_4.shared_view |
| 49 | +└── bqva-demo:dataset_3.view_a_b_c_d (⨯) |
| 50 | + ├── bqva-demo:dataset_1.table_a (⨯) |
| 51 | + ├── bqva-demo:dataset_1.table_b (⨯) |
| 52 | + ├── bqva-demo:dataset_1.view_c (⨯) |
| 53 | + │ └── bqva-demo:dataset_2.table_c (⨯) |
| 54 | + └── bqva-demo:dataset_2.view_d (⨯) |
| 55 | + └── bqva-demo:dataset_3.table_d (⨯) |
| 56 | +``` |
| 57 | + |
| 58 | +Permissions can be applied automatically to all datasets referenced by the parent view using the `bqva authorize` command. |
| 59 | + |
| 60 | +```bash |
| 61 | +# Apply all permissions required by 'bqva-demo:dataset_4.shared_view' |
| 62 | +$ bqva authorize --view "bqva-demo:dataset_4.shared_view" |
| 63 | +bqva-demo:dataset_4.shared_view |
| 64 | +└── bqva-demo:dataset_3.view_a_b_c_d (✓) |
| 65 | + ├── bqva-demo:dataset_1.table_a (✓) |
| 66 | + ├── bqva-demo:dataset_1.table_b (✓) |
| 67 | + ├── bqva-demo:dataset_1.view_c (✓) |
| 68 | + │ └── bqva-demo:dataset_2.table_c (✓) |
| 69 | + └── bqva-demo:dataset_2.view_d (✓) |
| 70 | + └── bqva-demo:dataset_3.table_d (✓) |
| 71 | +``` |
| 72 | + |
| 73 | +If you want to revoke permissions for a view, you can do that too! |
| 74 | + |
| 75 | +```bash |
| 76 | +# Revoke all permissions granted to 'bqva-demo:dataset_4.shared_view' |
| 77 | +$ bqva revoke --view "bqva-demo:dataset_4.shared_view" |
| 78 | +bqva-demo:dataset_4.shared_view |
| 79 | +└── bqva-demo:dataset_3.view_a_b_c_d (⨯) |
| 80 | + ├── bqva-demo:dataset_1.table_a (⨯) |
| 81 | + ├── bqva-demo:dataset_1.table_b (⨯) |
| 82 | + ├── bqva-demo:dataset_1.view_c (⨯) |
| 83 | + │ └── bqva-demo:dataset_2.table_c (⨯) |
| 84 | + └── bqva-demo:dataset_2.view_d (⨯) |
| 85 | + └── bqva-demo:dataset_3.table_d (⨯) |
| 86 | +``` |
0 commit comments