DatasetAccessBigquery class

Gives dataset access for a single entity. This resource is intended to be used in cases where it is not possible to compile a full list of access blocks to include in a gcp.bigquery.Dataset resource, to enable them to be added separately.

> Note: If this resource is used alongside a gcp.bigquery.Dataset resource, the dataset resource must either have no defined access blocks or a lifecycle block with ignoreChanges = [access] so they don't fight over which accesses should be on the dataset. Additionally, both resource cannot be modified in the same apply.

To get more information about DatasetAccess, see:

> Warning: You must specify the role field using the legacy format OWNER instead of roles/bigquery.dataOwner. The API does accept both formats but it will always return the legacy format which results in Terraform showing permanent diff on each plan and apply operation.

Example Usage

Bigquery Dataset Access Basic User

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const dataset = new gcp.bigquery.Dataset("dataset", {datasetId: "example_dataset"});
const bqowner = new gcp.serviceaccount.Account("bqowner", {accountId: "bqowner"});
const access = new gcp.bigquery.DatasetAccess("access", {
    datasetId: dataset.datasetId,
    role: "OWNER",
    userByEmail: bqowner.email,
});
import pulumi
import pulumi_gcp as gcp

dataset = gcp.bigquery.Dataset("dataset", dataset_id="example_dataset")
bqowner = gcp.serviceaccount.Account("bqowner", account_id="bqowner")
access = gcp.bigquery.DatasetAccess("access",
    dataset_id=dataset.dataset_id,
    role="OWNER",
    user_by_email=bqowner.email)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var dataset = new Gcp.BigQuery.Dataset("dataset", new()
    {
        DatasetId = "example_dataset",
    });

    var bqowner = new Gcp.ServiceAccount.Account("bqowner", new()
    {
        AccountId = "bqowner",
    });

    var access = new Gcp.BigQuery.DatasetAccess("access", new()
    {
        DatasetId = dataset.DatasetId,
        Role = "OWNER",
        UserByEmail = bqowner.Email,
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/bigquery"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/serviceaccount"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		dataset, err := bigquery.NewDataset(ctx, "dataset", &bigquery.DatasetArgs{
			DatasetId: pulumi.String("example_dataset"),
		})
		if err != nil {
			return err
		}
		bqowner, err := serviceaccount.NewAccount(ctx, "bqowner", &serviceaccount.AccountArgs{
			AccountId: pulumi.String("bqowner"),
		})
		if err != nil {
			return err
		}
		_, err = bigquery.NewDatasetAccess(ctx, "access", &bigquery.DatasetAccessArgs{
			DatasetId:   dataset.DatasetId,
			Role:        pulumi.String("OWNER"),
			UserByEmail: bqowner.Email,
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_bigquery_datasetaccess" "access" {
  dataset_id    = gcp_bigquery_dataset.dataset.dataset_id
  role          = "OWNER"
  user_by_email = gcp_serviceaccount_account.bqowner.email
}
resource "gcp_bigquery_dataset" "dataset" {
  dataset_id = "example_dataset"
}
resource "gcp_serviceaccount_account" "bqowner" {
  account_id = "bqowner"
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.bigquery.Dataset;
import com.pulumi.gcp.bigquery.DatasetArgs;
import com.pulumi.gcp.serviceaccount.Account;
import com.pulumi.gcp.serviceaccount.AccountArgs;
import com.pulumi.gcp.bigquery.DatasetAccess;
import com.pulumi.gcp.bigquery.DatasetAccessArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var dataset = new Dataset("dataset", DatasetArgs.builder()
            .datasetId("example_dataset")
            .build());

        var bqowner = new Account("bqowner", AccountArgs.builder()
            .accountId("bqowner")
            .build());

        var access = new DatasetAccess("access", DatasetAccessArgs.builder()
            .datasetId(dataset.datasetId())
            .role("OWNER")
            .userByEmail(bqowner.email())
            .build());

    }
}
resources:
  access:
    type: gcp:bigquery:DatasetAccess
    properties:
      datasetId: ${dataset.datasetId}
      role: OWNER
      userByEmail: ${bqowner.email}
  dataset:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: example_dataset
  bqowner:
    type: gcp:serviceaccount:Account
    properties:
      accountId: bqowner

Bigquery Dataset Access View

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const _private = new gcp.bigquery.Dataset("private", {datasetId: "example_dataset"});
const _public = new gcp.bigquery.Dataset("public", {datasetId: "example_dataset2"});
const publicTable = new gcp.bigquery.Table("public", {
    deletionProtection: false,
    datasetId: _public.datasetId,
    tableId: "example_table",
    view: {
        query: "SELECT state FROM [lookerdata:cdc.project_tycho_reports]",
        useLegacySql: false,
    },
});
const access = new gcp.bigquery.DatasetAccess("access", {
    datasetId: _private.datasetId,
    view: {
        projectId: publicTable.project,
        datasetId: _public.datasetId,
        tableId: publicTable.tableId,
    },
});
import pulumi
import pulumi_gcp as gcp

private = gcp.bigquery.Dataset("private", dataset_id="example_dataset")
public = gcp.bigquery.Dataset("public", dataset_id="example_dataset2")
public_table = gcp.bigquery.Table("public",
    deletion_protection=False,
    dataset_id=public.dataset_id,
    table_id="example_table",
    view={
        "query": "SELECT state FROM [lookerdata:cdc.project_tycho_reports]",
        "use_legacy_sql": False,
    })
access = gcp.bigquery.DatasetAccess("access",
    dataset_id=private.dataset_id,
    view={
        "project_id": public_table.project,
        "dataset_id": public.dataset_id,
        "table_id": public_table.table_id,
    })
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var @private = new Gcp.BigQuery.Dataset("private", new()
    {
        DatasetId = "example_dataset",
    });

    var @public = new Gcp.BigQuery.Dataset("public", new()
    {
        DatasetId = "example_dataset2",
    });

    var publicTable = new Gcp.BigQuery.Table("public", new()
    {
        DeletionProtection = false,
        DatasetId = @public.DatasetId,
        TableId = "example_table",
        View = new Gcp.BigQuery.Inputs.TableViewArgs
        {
            Query = "SELECT state FROM [lookerdata:cdc.project_tycho_reports]",
            UseLegacySql = false,
        },
    });

    var access = new Gcp.BigQuery.DatasetAccess("access", new()
    {
        DatasetId = @private.DatasetId,
        View = new Gcp.BigQuery.Inputs.DatasetAccessViewArgs
        {
            ProjectId = publicTable.Project,
            DatasetId = @public.DatasetId,
            TableId = publicTable.TableId,
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/bigquery"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		private, err := bigquery.NewDataset(ctx, "private", &bigquery.DatasetArgs{
			DatasetId: pulumi.String("example_dataset"),
		})
		if err != nil {
			return err
		}
		public, err := bigquery.NewDataset(ctx, "public", &bigquery.DatasetArgs{
			DatasetId: pulumi.String("example_dataset2"),
		})
		if err != nil {
			return err
		}
		publicTable, err := bigquery.NewTable(ctx, "public", &bigquery.TableArgs{
			DeletionProtection: pulumi.Bool(false),
			DatasetId:          public.DatasetId,
			TableId:            pulumi.String("example_table"),
			View: &bigquery.TableViewArgs{
				Query:        pulumi.String("SELECT state FROM [lookerdata:cdc.project_tycho_reports]"),
				UseLegacySql: pulumi.Bool(false),
			},
		})
		if err != nil {
			return err
		}
		_, err = bigquery.NewDatasetAccess(ctx, "access", &bigquery.DatasetAccessArgs{
			DatasetId: private.DatasetId,
			View: &bigquery.DatasetAccessViewArgs{
				ProjectId: publicTable.Project,
				DatasetId: public.DatasetId,
				TableId:   publicTable.TableId,
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_bigquery_datasetaccess" "access" {
  dataset_id = gcp_bigquery_dataset.private.dataset_id
  view = {
    project_id = gcp_bigquery_table.public.project
    dataset_id = gcp_bigquery_dataset.public.dataset_id
    table_id   = gcp_bigquery_table.public.table_id
  }
}
resource "gcp_bigquery_dataset" "private" {
  dataset_id = "example_dataset"
}
resource "gcp_bigquery_dataset" "public" {
  dataset_id = "example_dataset2"
}
resource "gcp_bigquery_table" "public" {
  deletion_protection = false
  dataset_id          = gcp_bigquery_dataset.public.dataset_id
  table_id            = "example_table"
  view = {
    query          = "SELECT state FROM [lookerdata:cdc.project_tycho_reports]"
    use_legacy_sql = false
  }
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.bigquery.Dataset;
import com.pulumi.gcp.bigquery.DatasetArgs;
import com.pulumi.gcp.bigquery.Table;
import com.pulumi.gcp.bigquery.TableArgs;
import com.pulumi.gcp.bigquery.inputs.TableViewArgs;
import com.pulumi.gcp.bigquery.DatasetAccess;
import com.pulumi.gcp.bigquery.DatasetAccessArgs;
import com.pulumi.gcp.bigquery.inputs.DatasetAccessViewArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var private_ = new Dataset("private", DatasetArgs.builder()
            .datasetId("example_dataset")
            .build());

        var public_ = new Dataset("public", DatasetArgs.builder()
            .datasetId("example_dataset2")
            .build());

        var publicTable = new Table("publicTable", TableArgs.builder()
            .deletionProtection(false)
            .datasetId(public_.datasetId())
            .tableId("example_table")
            .view(TableViewArgs.builder()
                .query("SELECT state FROM [lookerdata:cdc.project_tycho_reports]")
                .useLegacySql(false)
                .build())
            .build());

        var access = new DatasetAccess("access", DatasetAccessArgs.builder()
            .datasetId(private_.datasetId())
            .view(DatasetAccessViewArgs.builder()
                .projectId(publicTable.project())
                .datasetId(public_.datasetId())
                .tableId(publicTable.tableId())
                .build())
            .build());

    }
}
resources:
  access:
    type: gcp:bigquery:DatasetAccess
    properties:
      datasetId: ${private.datasetId}
      view:
        projectId: ${publicTable.project}
        datasetId: ${public.datasetId}
        tableId: ${publicTable.tableId}
  private:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: example_dataset
  public:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: example_dataset2
  publicTable:
    type: gcp:bigquery:Table
    name: public
    properties:
      deletionProtection: false
      datasetId: ${public.datasetId}
      tableId: example_table
      view:
        query: SELECT state FROM [lookerdata:cdc.project_tycho_reports]
        useLegacySql: false

Bigquery Dataset Access Authorized Dataset

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const _private = new gcp.bigquery.Dataset("private", {datasetId: "private"});
const _public = new gcp.bigquery.Dataset("public", {datasetId: "public"});
const access = new gcp.bigquery.DatasetAccess("access", {
    datasetId: _private.datasetId,
    authorizedDataset: {
        dataset: {
            projectId: _public.project,
            datasetId: _public.datasetId,
        },
        targetTypes: ["VIEWS"],
    },
});
import pulumi
import pulumi_gcp as gcp

private = gcp.bigquery.Dataset("private", dataset_id="private")
public = gcp.bigquery.Dataset("public", dataset_id="public")
access = gcp.bigquery.DatasetAccess("access",
    dataset_id=private.dataset_id,
    authorized_dataset={
        "dataset": {
            "project_id": public.project,
            "dataset_id": public.dataset_id,
        },
        "target_types": ["VIEWS"],
    })
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var @private = new Gcp.BigQuery.Dataset("private", new()
    {
        DatasetId = "private",
    });

    var @public = new Gcp.BigQuery.Dataset("public", new()
    {
        DatasetId = "public",
    });

    var access = new Gcp.BigQuery.DatasetAccess("access", new()
    {
        DatasetId = @private.DatasetId,
        AuthorizedDataset = new Gcp.BigQuery.Inputs.DatasetAccessAuthorizedDatasetArgs
        {
            Dataset = new Gcp.BigQuery.Inputs.DatasetAccessAuthorizedDatasetDatasetArgs
            {
                ProjectId = @public.Project,
                DatasetId = @public.DatasetId,
            },
            TargetTypes = new[]
            {
                "VIEWS",
            },
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/bigquery"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		private, err := bigquery.NewDataset(ctx, "private", &bigquery.DatasetArgs{
			DatasetId: pulumi.String("private"),
		})
		if err != nil {
			return err
		}
		public, err := bigquery.NewDataset(ctx, "public", &bigquery.DatasetArgs{
			DatasetId: pulumi.String("public"),
		})
		if err != nil {
			return err
		}
		_, err = bigquery.NewDatasetAccess(ctx, "access", &bigquery.DatasetAccessArgs{
			DatasetId: private.DatasetId,
			AuthorizedDataset: &bigquery.DatasetAccessAuthorizedDatasetArgs{
				Dataset: &bigquery.DatasetAccessAuthorizedDatasetDatasetArgs{
					ProjectId: public.Project,
					DatasetId: public.DatasetId,
				},
				TargetTypes: pulumi.StringArray{
					pulumi.String("VIEWS"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_bigquery_datasetaccess" "access" {
  dataset_id = gcp_bigquery_dataset.private.dataset_id
  authorized_dataset = {
    dataset = {
      project_id = gcp_bigquery_dataset.public.project
      dataset_id = gcp_bigquery_dataset.public.dataset_id
    }
    target_types = ["VIEWS"]
  }
}
resource "gcp_bigquery_dataset" "private" {
  dataset_id = "private"
}
resource "gcp_bigquery_dataset" "public" {
  dataset_id = "public"
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.bigquery.Dataset;
import com.pulumi.gcp.bigquery.DatasetArgs;
import com.pulumi.gcp.bigquery.DatasetAccess;
import com.pulumi.gcp.bigquery.DatasetAccessArgs;
import com.pulumi.gcp.bigquery.inputs.DatasetAccessAuthorizedDatasetArgs;
import com.pulumi.gcp.bigquery.inputs.DatasetAccessAuthorizedDatasetDatasetArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var private_ = new Dataset("private", DatasetArgs.builder()
            .datasetId("private")
            .build());

        var public_ = new Dataset("public", DatasetArgs.builder()
            .datasetId("public")
            .build());

        var access = new DatasetAccess("access", DatasetAccessArgs.builder()
            .datasetId(private_.datasetId())
            .authorizedDataset(DatasetAccessAuthorizedDatasetArgs.builder()
                .dataset(DatasetAccessAuthorizedDatasetDatasetArgs.builder()
                    .projectId(public_.project())
                    .datasetId(public_.datasetId())
                    .build())
                .targetTypes("VIEWS")
                .build())
            .build());

    }
}
resources:
  access:
    type: gcp:bigquery:DatasetAccess
    properties:
      datasetId: ${private.datasetId}
      authorizedDataset:
        dataset:
          projectId: ${public.project}
          datasetId: ${public.datasetId}
        targetTypes:
          - VIEWS
  private:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: private
  public:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: public

Bigquery Dataset Access Authorized Routine

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const _public = new gcp.bigquery.Dataset("public", {
    datasetId: "public_dataset",
    description: "This dataset is public",
});
const publicRoutine = new gcp.bigquery.Routine("public", {
    datasetId: _public.datasetId,
    routineId: "public_routine",
    routineType: "TABLE_VALUED_FUNCTION",
    language: "SQL",
    definitionBody: "SELECT 1 + value AS value\n",
    arguments: [{
        name: "value",
        argumentKind: "FIXED_TYPE",
        dataType: JSON.stringify({
            typeKind: "INT64",
        }),
    }],
    returnTableType: JSON.stringify({
        columns: [{
            name: "value",
            type: {
                typeKind: "INT64",
            },
        }],
    }),
});
const _private = new gcp.bigquery.Dataset("private", {
    datasetId: "private_dataset",
    description: "This dataset is private",
});
const authorizedRoutine = new gcp.bigquery.DatasetAccess("authorized_routine", {
    datasetId: _private.datasetId,
    routine: {
        projectId: publicRoutine.project,
        datasetId: publicRoutine.datasetId,
        routineId: publicRoutine.routineId,
    },
});
import pulumi
import json
import pulumi_gcp as gcp

public = gcp.bigquery.Dataset("public",
    dataset_id="public_dataset",
    description="This dataset is public")
public_routine = gcp.bigquery.Routine("public",
    dataset_id=public.dataset_id,
    routine_id="public_routine",
    routine_type="TABLE_VALUED_FUNCTION",
    language="SQL",
    definition_body="SELECT 1 + value AS value\n",
    arguments=[{
        "name": "value",
        "argument_kind": "FIXED_TYPE",
        "data_type": json.dumps({
            "typeKind": "INT64",
        }),
    }],
    return_table_type=json.dumps({
        "columns": [{
            "name": "value",
            "type": {
                "typeKind": "INT64",
            },
        }],
    }))
private = gcp.bigquery.Dataset("private",
    dataset_id="private_dataset",
    description="This dataset is private")
authorized_routine = gcp.bigquery.DatasetAccess("authorized_routine",
    dataset_id=private.dataset_id,
    routine={
        "project_id": public_routine.project,
        "dataset_id": public_routine.dataset_id,
        "routine_id": public_routine.routine_id,
    })
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var @public = new Gcp.BigQuery.Dataset("public", new()
    {
        DatasetId = "public_dataset",
        Description = "This dataset is public",
    });

    var publicRoutine = new Gcp.BigQuery.Routine("public", new()
    {
        DatasetId = @public.DatasetId,
        RoutineId = "public_routine",
        RoutineType = "TABLE_VALUED_FUNCTION",
        Language = "SQL",
        DefinitionBody = @"SELECT 1 + value AS value
",
        Arguments = new[]
        {
            new Gcp.BigQuery.Inputs.RoutineArgumentArgs
            {
                Name = "value",
                ArgumentKind = "FIXED_TYPE",
                DataType = JsonSerializer.Serialize(new Dictionary<string, object?>
                {
                    ["typeKind"] = "INT64",
                }),
            },
        },
        ReturnTableType = JsonSerializer.Serialize(new Dictionary<string, object?>
        {
            ["columns"] = new[]
            {
                new Dictionary<string, object?>
                {
                    ["name"] = "value",
                    ["type"] = new Dictionary<string, object?>
                    {
                        ["typeKind"] = "INT64",
                    },
                },
            },
        }),
    });

    var @private = new Gcp.BigQuery.Dataset("private", new()
    {
        DatasetId = "private_dataset",
        Description = "This dataset is private",
    });

    var authorizedRoutine = new Gcp.BigQuery.DatasetAccess("authorized_routine", new()
    {
        DatasetId = @private.DatasetId,
        Routine = new Gcp.BigQuery.Inputs.DatasetAccessRoutineArgs
        {
            ProjectId = publicRoutine.Project,
            DatasetId = publicRoutine.DatasetId,
            RoutineId = publicRoutine.RoutineId,
        },
    });

});
package main

import (
	"encoding/json"

	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/bigquery"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		public, err := bigquery.NewDataset(ctx, "public", &bigquery.DatasetArgs{
			DatasetId:   pulumi.String("public_dataset"),
			Description: pulumi.String("This dataset is public"),
		})
		if err != nil {
			return err
		}
		tmpJSON0, err := json.Marshal(map[string]string{
			"typeKind": "INT64",
		})
		if err != nil {
			return err
		}
		json0 := string(tmpJSON0)
		tmpJSON1, err := json.Marshal(map[string][]map[string]interface{}{
			"columns": []map[string]interface{}{
				map[string]interface{}{
					"name": "value",
					"type": map[string]string{
						"typeKind": "INT64",
					},
				},
			},
		})
		if err != nil {
			return err
		}
		json1 := string(tmpJSON1)
		publicRoutine, err := bigquery.NewRoutine(ctx, "public", &bigquery.RoutineArgs{
			DatasetId:      public.DatasetId,
			RoutineId:      pulumi.String("public_routine"),
			RoutineType:    pulumi.String("TABLE_VALUED_FUNCTION"),
			Language:       pulumi.String("SQL"),
			DefinitionBody: pulumi.String("SELECT 1 + value AS value\n"),
			Arguments: bigquery.RoutineArgumentArray{
				&bigquery.RoutineArgumentArgs{
					Name:         pulumi.String("value"),
					ArgumentKind: pulumi.String("FIXED_TYPE"),
					DataType:     pulumi.String(json0),
				},
			},
			ReturnTableType: pulumi.String(json1),
		})
		if err != nil {
			return err
		}
		private, err := bigquery.NewDataset(ctx, "private", &bigquery.DatasetArgs{
			DatasetId:   pulumi.String("private_dataset"),
			Description: pulumi.String("This dataset is private"),
		})
		if err != nil {
			return err
		}
		_, err = bigquery.NewDatasetAccess(ctx, "authorized_routine", &bigquery.DatasetAccessArgs{
			DatasetId: private.DatasetId,
			Routine: &bigquery.DatasetAccessRoutineArgs{
				ProjectId: publicRoutine.Project,
				DatasetId: publicRoutine.DatasetId,
				RoutineId: publicRoutine.RoutineId,
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_bigquery_dataset" "public" {
  dataset_id  = "public_dataset"
  description = "This dataset is public"
}
resource "gcp_bigquery_routine" "public" {
  dataset_id      = gcp_bigquery_dataset.public.dataset_id
  routine_id      = "public_routine"
  routine_type    = "TABLE_VALUED_FUNCTION"
  language        = "SQL"
  definition_body = "SELECT 1 + value AS value\n"
  arguments {
    name          = "value"
    argument_kind = "FIXED_TYPE"
    data_type = jsonencode({
      "typeKind" = "INT64"
    })
  }
  return_table_type = jsonencode({
    "columns" = [{
      "name" = "value"
      "type" = {
        "typeKind" = "INT64"
      }
    }]
  })
}
resource "gcp_bigquery_dataset" "private" {
  dataset_id  = "private_dataset"
  description = "This dataset is private"
}
resource "gcp_bigquery_datasetaccess" "authorized_routine" {
  dataset_id = gcp_bigquery_dataset.private.dataset_id
  routine = {
    project_id = gcp_bigquery_routine.public.project
    dataset_id = gcp_bigquery_routine.public.dataset_id
    routine_id = gcp_bigquery_routine.public.routine_id
  }
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.bigquery.Dataset;
import com.pulumi.gcp.bigquery.DatasetArgs;
import com.pulumi.gcp.bigquery.Routine;
import com.pulumi.gcp.bigquery.RoutineArgs;
import com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;
import com.pulumi.gcp.bigquery.DatasetAccess;
import com.pulumi.gcp.bigquery.DatasetAccessArgs;
import com.pulumi.gcp.bigquery.inputs.DatasetAccessRoutineArgs;
import static com.pulumi.codegen.internal.Serialization.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var public_ = new Dataset("public", DatasetArgs.builder()
            .datasetId("public_dataset")
            .description("This dataset is public")
            .build());

        var publicRoutine = new Routine("publicRoutine", RoutineArgs.builder()
            .datasetId(public_.datasetId())
            .routineId("public_routine")
            .routineType("TABLE_VALUED_FUNCTION")
            .language("SQL")
            .definitionBody("""
SELECT 1 + value AS value
            """)
            .arguments(RoutineArgumentArgs.builder()
                .name("value")
                .argumentKind("FIXED_TYPE")
                .dataType(serializeJson(
                    jsonObject(
                        jsonProperty("typeKind", "INT64")
                    )))
                .build())
            .returnTableType(serializeJson(
                jsonObject(
                    jsonProperty("columns", jsonArray(jsonObject(
                        jsonProperty("name", "value"),
                        jsonProperty("type", jsonObject(
                            jsonProperty("typeKind", "INT64")
                        ))
                    )))
                )))
            .build());

        var private_ = new Dataset("private", DatasetArgs.builder()
            .datasetId("private_dataset")
            .description("This dataset is private")
            .build());

        var authorizedRoutine = new DatasetAccess("authorizedRoutine", DatasetAccessArgs.builder()
            .datasetId(private_.datasetId())
            .routine(DatasetAccessRoutineArgs.builder()
                .projectId(publicRoutine.project())
                .datasetId(publicRoutine.datasetId())
                .routineId(publicRoutine.routineId())
                .build())
            .build());

    }
}
resources:
  public:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: public_dataset
      description: This dataset is public
  publicRoutine:
    type: gcp:bigquery:Routine
    name: public
    properties:
      datasetId: ${public.datasetId}
      routineId: public_routine
      routineType: TABLE_VALUED_FUNCTION
      language: SQL
      definitionBody: |
        SELECT 1 + value AS value
      arguments:
        - name: value
          argumentKind: FIXED_TYPE
          dataType:
            fn::toJSON:
              typeKind: INT64
      returnTableType:
        fn::toJSON:
          columns:
            - name: value
              type:
                typeKind: INT64
  private:
    type: gcp:bigquery:Dataset
    properties:
      datasetId: private_dataset
      description: This dataset is private
  authorizedRoutine:
    type: gcp:bigquery:DatasetAccess
    name: authorized_routine
    properties:
      datasetId: ${private.datasetId}
      routine:
        projectId: ${publicRoutine.project}
        datasetId: ${publicRoutine.datasetId}
        routineId: ${publicRoutine.routineId}

Import

This resource does not support import.

Constructors

DatasetAccessBigquery(String name, {DatasetAccessArgs? args, CustomResourceOptions? options})
Creates a new DatasetAccessBigquery. name The Pulumi resource name. args Arguments used to configure this DatasetAccessBigquery. The set of arguments for DatasetAccess. options Resource options controlling this resource's behavior.
DatasetAccessBigquery.reference(String urn)
Creates a typed reference to an existing DatasetAccessBigquery resource.

Properties

apiUpdatedMember ↔ Output<bool>
If true, represents that that the iamMember in the config was translated to a different member type by the API, and is stored in state as a different member type
latefinal
authorizedDataset ↔ Output<DatasetAccessAuthorizedDataset?>
Grants all resources of particular types in a particular dataset read access to the current dataset. Structure is documented below.
latefinal
childResources → Set<Resource>
finalinherited
completionSources ↔ Map<String, IOutputCompletionSource>
latefinalinherited
condition ↔ Output<DatasetAccessCondition?>
Condition for the binding. If CEL expression in this field is true, this access binding will be considered. Structure is documented below.
latefinal
datasetId ↔ Output<String>
A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
latefinal
deletionPolicy ↔ Output<String>
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE. When a 'terraform destroy' or 'pulumi up' would delete the resource, the command will fail if this field is set to "PREVENT" in Terraform state. When set to "ABANDON", the command will remove the resource from Terraform management without updating or deleting the resource in the API. When set to "DELETE", deleting the resource is allowed.
latefinal
domain ↔ Output<String?>
A domain to grant access to. Any users signed in with the domain specified will be granted the specified access
latefinal
groupByEmail ↔ Output<String?>
An email address of a Google Group to grant access to.
latefinal
hashCode → int
The hash code for this object.
no setterinherited
iamMember ↔ Output<String?>
Some other type of member that appears in the IAM Policy but isn't a user, group, domain, or special group. For example: allUsers
latefinal
id ↔ Output<String>
getter/setter pairinherited
isCustom → bool
Returns whether this resource is provider-managed.
no setterinherited
isProtected → bool
Returns whether this resource is protected from deletion.
no setterinherited
isRemote → bool
Whether this resource is registered as remote.
no setterinherited
isResourceReference → bool
Whether this instance represents a resource value returned over RPC.
finalinherited
project ↔ Output<String>
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
latefinal
resourceTransforms → List<ResourceTransform>
Inherited/explicit async transforms.
no setterinherited
role ↔ Output<String?>
Describes the rights granted to the user specified by the other member of the access object. Basic, predefined, and custom roles are supported. Predefined roles that have equivalent basic roles are swapped by the API to their basic counterparts, and will show a diff post-create. See official docs.
latefinal
routine ↔ Output<DatasetAccessRoutine?>
A routine from a different dataset to grant access to. Queries executed against that routine will have read access to tables in this dataset. The role field is not required when this field is set. If that routine is updated by any user, access to the routine needs to be granted again via an update operation. Structure is documented below.
latefinal
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
specialGroup ↔ Output<String?>
A special group to grant access to. Possible values include:
latefinal
transformations → List<ResourceTransformation>
Inherited/explicit legacy transformations.
no setterinherited
urn ↔ Output<String>
latefinalinherited
userByEmail ↔ Output<String?>
An email address of a user to grant access to. For example: fred@example.com
latefinal
view ↔ Output<DatasetAccessView?>
A view from a different dataset to grant access to. Queries executed against that view will have read access to tables in this dataset. The role field is not required when this field is set. If that view is updated by any user, access to the view needs to be granted again via an update operation. Structure is documented below.
latefinal

Methods

failId(Object error) → void
Completes this resource ID with an error when registration fails.
inherited
failOutputs(Object error) → void
Completes all output properties with error.
inherited
failUrn(Object error) → void
Completes this resource URN with an error when registration fails.
inherited
getProvider(String moduleMember) → ProviderResource?
Returns provider for moduleMember's package, if configured.
inherited
getResourceName() → String
Returns this resource's logical name.
inherited
getResourceType() → String
Returns this resource's Pulumi type token.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
registerOutput<T>(String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output<T>
Registers a dynamic output property for this resource.
inherited
resolveId(String? value, {required bool isKnown}) → void
Resolves the provider-assigned ID for this resource.
inherited
resolveOutputs(Struct outputs) → void
Resolves all output properties from a monitor response payload.
inherited
resolveUrn(String value) → void
Resolves this resource's URN once assigned by the engine.
inherited
serializeProperties(Map<String, dynamic> properties) → Future<Struct>
Serializes resource properties for RPC transmission.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

get(String name, Input<String> id, {DatasetAccessState? state, CustomResourceOptions? options}) → DatasetAccessBigquery
Gets an existing DatasetAccessBigquery resource's state with the given name and id.