首页 > 解决方案 > Python Big Query - 能够检查源数据集中是否存在授权视图以及如何删除它

问题描述

我正在编写一个 python 脚本,它从 SQL 脚本创建/更新数据集中的视图。

我想知道是否可以检查数据集中是否已创建授权视图。如果是这样并且我希望删除它,是否有这样做的 python 方法?

标签: google-bigquery

解决方案


对于授权视图,我们需要创建一个单独的数据集并授予对它的访问权限。下一步是在该数据集中创建视图,并且有权访问数据集的每个人都可以访问该视图。

我可以看到以下删除授权视图的可能性:

  1. 从数据集中删除AccessEntry
  2. 从数据集中删除视图。
  3. 删除具有所有视图和访问权限的整个数据集。

让我们看一下官方文档,您可以在其中找到 Python 示例。我们需要执行两个操作。首先取消对视图的授权以删除对源数据集的访问权限,然后删除对包含该视图的数据集的访问控制。我们需要使用remove()方法:

# Unauthorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.remove(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries']) 

# Remove access controls to the dataset containing the view
analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.remove(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])

此外,在这里您可以找到多行 for 循环示例,该示例删除了访问:

source_dataset = bigquery_client.get_dataset(dataset_id)
access_entries = source_dataset.access_entries

for access_entry_data in access_entries:
    dict_auth = access_entry_data.entity_id
    if isinstance(dict_auth, dict):
        if dict_auth['tableId'] == resource:
            idx = access_entries.index(access_entry_data)
            access_entries.pop(access_entries.index(access_entry_data))
            source_dataset.access_entries = access_entries
            source_dataset = bigquery_client.update_dataset(source_dataset, ['access_entries'])

要了解更多信息AccessEntry,请访问官方文档


推荐阅读