将数据流式传输到 BQ - 服务帐户所需的理想最低权限
Posted
技术标签:
【中文标题】将数据流式传输到 BQ - 服务帐户所需的理想最低权限【英文标题】:Streaming data to BQ - ideal least privilege needed for the Service Account 【发布时间】:2020-10-31 08:02:09 【问题描述】:将数据流式传输到 BQ - https://cloud.google.com/bigquery/docs/reference/rest/v2/tabledata/insertAll
请问为什么需要对数据集进行BigQuery Metadata Viewer
访问? (尽管目的地故事已经存在)
仅在表级别使用 BigQuery 数据编辑器时,会出现以下错误:
google.api_core.exceptions.Forbidden: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/DATASET/tables/TABLE/insertAll: Access Denied: Dataset PROJECT:DATASET: User does not have bigquery.datasets.get permission for dataset PROJECT:DATASET.
===== 更新:
使用 Python 客户端库google-cloud-bigquery==1.28.0
这是最少的代码
table_ref = bigquery.DatasetReference(project = BQ_PROJECT, dataset_id = BQ_DATASET).table(table_id = BQ_TABLE)
table = client.get_table(table_ref)
rows_to_insert = [
"col1": "streaming-r1", "col2": "A", "col3": "3",
"col1": "streaming-r2-", "col2": "B", "col4": 1,
]
stream_resp = client.insert_rows(table_ref,rows_to_insert,
selected_fields=table.schema)
【问题讨论】:
我相信你的Service Account在插入之前必须检查表是否存在,所以它需要对数据集(包含在BigQuery Metadata Viewer中)的bigquery.datasets.get
权限并不异常。似乎只授予对表的访问权限是不够的。
您是直接使用 API 还是使用客户端库?如果是客户端库,您可以分享您使用的语言吗? (和一段代码)
@guillaumeblaquiere 我用最少的代码更新了我的问题。
@norbjd 这是有道理的。你能分享一段执行此检查的代码吗(我在 PY 客户端库中找不到)...但想知道为什么它需要以这种方式工作。如果表不存在,则响应可能会抛出错误......我可以想象这样一个场景,项目所有者不愿意给我任何数据集级别的访问权限,而实际上我的代码只流式传输到特定的表。跨度>
我在图书馆查到了。没有奇怪的电话。这是 API 的要求。
【参考方案1】:
我在 Google Cloud Platform (1) 中创建了以下功能请求,关于您关于能够在没有数据集权限的情况下将数据插入表中的建议。
当项目所有者出于安全原因不想向所有人授予数据集访问权限时,这会很有帮助。相反,如果表不存在而无需“bigquery.datasets.get”权限,则抛出异常会很有用。
确保您对它进行投票 (2),以便它更有可能被实施。您还可以订阅 (3) 功能请求,以便每次线程上有新消息时都可以收到通知。
【讨论】:
非常感谢!虽然我无法在 CC 中添加我的电子邮件:(它不会为我显示广告可编辑字段)但我评论它希望这会订阅我的通知列表。 您好,我已按要求将您添加到抄送列表中,不客气:)以上是关于将数据流式传输到 BQ - 服务帐户所需的理想最低权限的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery - 将数据流式传输到 BigQuery
Mobile first server(版本 7.1)所需的 websphere 应用程序服务器(网络部署)的最低版本是多少?