Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform DM创建bigquery视图,然后在数据集上对其进行授权_Google Cloud Platform_Google Bigquery_Jinja2_Google Deployment Manager - Fatal编程技术网

Google cloud platform DM创建bigquery视图,然后在数据集上对其进行授权

Google cloud platform DM创建bigquery视图,然后在数据集上对其进行授权,google-cloud-platform,google-bigquery,jinja2,google-deployment-manager,Google Cloud Platform,Google Bigquery,Jinja2,Google Deployment Manager,使用Google Deployment Manager,是否有人找到了一种方法,首先在BigQuery中创建一个视图,然后授权该视图使用的一个或多个数据集(有时在不同的项目中),而这些数据集不是由Deployment Manager创建/管理的?创建一个带有视图的数据集并不太困难。以下是名为inventoryServices\u bigquery\u territory\u views.jinja的jinja模板: resources: - name: territory-{{propertie

使用Google Deployment Manager,是否有人找到了一种方法,首先在BigQuery中创建一个视图,然后授权该视图使用的一个或多个数据集(有时在不同的项目中),而这些数据集不是由Deployment Manager创建/管理的?创建一个带有视图的数据集并不太困难。以下是名为inventoryServices\u bigquery\u territory\u views.jinja的jinja模板:

resources:
- name: territory-{{properties["OU"]}}
  type: gcp-types/bigquery-v2:datasets
  properties:
    datasetReference:
      datasetId: territory_{{properties["OU"]}}
- name: files
  type: gcp-types/bigquery-v2:tables
  properties:
    datasetId: $(ref.territory-{{properties["OU"]}}.datasetReference.datasetId)
    tableReference:
      tableId: files
    view:
      query: >
        SELECT DATE(DAY) DAY, ou, email, name, mimeType
        FROM `{{properties["files_table_id"]}}`
        WHERE LOWER(SPLIT(ou, "/")[SAFE_OFFSET(1)]) = "{{properties["OU"]}}"
      useLegacySql: false
部署配置引用上述模板,如下所示:

imports:
- path: inventoryServices_bigquery_territory_views.jinja

resources:
- name: inventoryServices_bigquery_territory_views
  type: inventoryServices_bigquery_territory_views.jinja
在上面的示例中,files_table_id是需要新创建的视图授权的project.dataset.table

我见过一些在项目/文件夹/组织级别管理IAM的例子,但我需要的是数据集,而不是项目。现在看来,我似乎可以用新创建的视图更新access.view,但对于如何在不删除现有访问级别的情况下更新access.view,以及对于不同于创建新视图的项目中的数据集,我有点不知所措。谢谢你的帮助

编辑: 我尝试添加需要像这样授权视图的数据集,然后在预览模式下部署以查看它如何解释配置:

-name: files-source
  type: gcp-types/bigquery-v2:datasets
  properties:
    datasetReference:
      datasetId: {{properties["files_table_id"]}}
    access:
      view:
        projectId: {{env['project']}}
        datasetId: $(ref.territory-{{properties["OU"]}}.datasetReference.datasetId)
        tableId: $(ref.territory_files.tableReference.tableId)
但当我在预览模式下部署时,它会抛出以下错误:

errors:
- code: MANIFEST_EXPANSION_USER_ERROR
  location: /deployments/inventoryservices-bigquery-territory-views-us/manifests/manifest-1582283242420
  message: |-
    Manifest expansion encountered the following errors: mapping values are not allowed here
      in "<unicode string>", line 26, column 7:
          type: gcp-types/bigquery-v2:datasets
              ^ Resource: config
错误:
-代码:清单\扩展\用户\错误
位置:/deployments/inventoryservices bigquery territory views us/manifests/manifest-15822832420
信息:|-
清单扩展遇到以下错误:此处不允许映射值
在“”第26行第7列中:
类型:gcp类型/bigquery-v2:数据集
^资源:配置

对我来说很奇怪,很难理解这个错误,因为它指向的行/列的格式与配置中的另一个数据集完全相同,除了可能不喜欢文件源数据集已经存在,并且是从部署管理器外部创建的。

能否提供有关步骤和预期结果的更多详细信息。如果可能,请提供您的部署,使我能够在我的测试项目上尝试。我在上面的帖子中添加了部署配置文件,以使其更清晰。基本上,我已经得到了一个现有的数据集,它在视图的SQL中被SELECT*FROM
{{{properties[“files\u table\u id”]}
引用。我想通过将ISO国家代码和数据集名称作为参数传递给gcloud,为该数据集创建一组视图。但是,仅创建视图是不够的,还需要对视图进行授权。这意味着已经存在的数据集(不是由部署管理器创建或管理的)需要授予对此新创建的视图的访问权限。要授权您的视图,您可以在每个项目中使用单独的服务帐户。要向该服务帐户提供必要的权限,您可以使用角色。谢谢Serhii,但我没有遇到auth问题,更多的是关于如何设计模板的问题。现在,我已经从模板中排除了IAM(授权视图),我想我会尝试用Python来代替它。这样,您就可以在不删除旧视图的情况下更新现有授权视图列表。由于标题和错误,我认为您的问题与IAM有关。如果您解决了这个问题,请在决定切换到Python之后,如果您仍然感兴趣,请更改您的问题。