|
|
|
|
@@ -7,7 +7,7 @@ This module allows managing a single BigQuery dataset, including access configur
|
|
|
|
|
- [IAM roles](#iam-roles)
|
|
|
|
|
- [Authorized Views, Datasets, and Routines](#authorized-views-datasets-and-routines)
|
|
|
|
|
- [Dataset options](#dataset-options)
|
|
|
|
|
- [Tables and views](#tables-and-views)
|
|
|
|
|
- [Tables, views and routines](#tables-views-and-routines)
|
|
|
|
|
- [Tag bindings](#tag-bindings)
|
|
|
|
|
- [TODO](#todo)
|
|
|
|
|
- [Variables](#variables)
|
|
|
|
|
@@ -192,9 +192,9 @@ module "bigquery-dataset" {
|
|
|
|
|
# tftest modules=1 resources=1 inventory=options.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Tables and views
|
|
|
|
|
## Tables, views and routines
|
|
|
|
|
|
|
|
|
|
Tables are created via the `tables` variable, or the `view` variable for views. Support for external tables will be added in a future release.
|
|
|
|
|
Tables are created via the `tables` variable. Support for external tables will be added in a future release.
|
|
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
|
locals {
|
|
|
|
|
@@ -247,7 +247,7 @@ module "bigquery-dataset" {
|
|
|
|
|
# tftest modules=1 resources=2 inventory=partitioning.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To create views use the `view` variable. If you're querying a table created by the same module `terraform apply` will initially fail and eventually succeed once the underlying table has been created. You can probably also use the module's output in the view's query to create a dependency on the table.
|
|
|
|
|
To create views use the `views` variable. If you're querying a table created by the same module `terraform apply` will initially fail and eventually succeed once the underlying table has been created. You can probably also use the module's output in the view's query to create a dependency on the table.
|
|
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
|
locals {
|
|
|
|
|
@@ -277,10 +277,34 @@ module "bigquery-dataset" {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# tftest modules=1 resources=3 inventory=views.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To create routines use the `routines` variable.
|
|
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
|
module "bigquery-dataset" {
|
|
|
|
|
source = "./fabric/modules/bigquery-dataset"
|
|
|
|
|
project_id = "my-project"
|
|
|
|
|
id = "my_dataset"
|
|
|
|
|
routines = {
|
|
|
|
|
custom_masking_routine = {
|
|
|
|
|
routine_type = "SCALAR_FUNCTION"
|
|
|
|
|
language = "SQL"
|
|
|
|
|
data_governance_type = "DATA_MASKING"
|
|
|
|
|
definition_body = "SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')"
|
|
|
|
|
return_type = "{\"typeKind\" : \"STRING\"}"
|
|
|
|
|
arguments = {
|
|
|
|
|
ssn = {
|
|
|
|
|
data_type = "{\"typeKind\" : \"STRING\"}"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
# tftest modules=1 resources=2 inventory=routines.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Tag bindings
|
|
|
|
|
|
|
|
|
|
Refer to the [Creating and managing tags](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) documentation for details on usage.
|
|
|
|
|
@@ -326,7 +350,7 @@ module "bigquery-dataset" {
|
|
|
|
|
| [access](variables.tf#L17) | Map of access rules with role and identity type. Keys are arbitrary and must match those in the `access_identities` variable, types are `domain`, `group`, `special_group`, `user`, `view`. | <code title="map(object({ role = string type = string }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [access_identities](variables.tf#L33) | Map of access identities used for basic access roles. View identities have the format 'project_id\|dataset_id\|table_id'. | <code>map(string)</code> | | <code>{}</code> |
|
|
|
|
|
| [authorized_datasets](variables.tf#L39) | An array of datasets to be authorized on the dataset. | <code title="list(object({ dataset_id = string, project_id = string, }))">list(object({…}))</code> | | <code>[]</code> |
|
|
|
|
|
| [authorized_routines](variables.tf#L48) | An array of authorized routine to be authorized on the dataset. | <code title="list(object({ project_id = string, dataset_id = string, routine_id = string }))">list(object({…}))</code> | | <code>[]</code> |
|
|
|
|
|
| [authorized_routines](variables.tf#L48) | An array of routines to be authorized on the dataset. | <code title="list(object({ project_id = string, dataset_id = string, routine_id = string }))">list(object({…}))</code> | | <code>[]</code> |
|
|
|
|
|
| [authorized_views](variables.tf#L58) | An array of views to be authorized on the dataset. | <code title="list(object({ dataset_id = string, project_id = string, table_id = string # this is the view id, but we keep table_id to stay consistent as the resource }))">list(object({…}))</code> | | <code>[]</code> |
|
|
|
|
|
| [dataset_access](variables.tf#L68) | Set access in the dataset resource instead of using separate resources. | <code>bool</code> | | <code>false</code> |
|
|
|
|
|
| [description](variables.tf#L74) | Optional description. | <code>string</code> | | <code>"Terraform managed."</code> |
|
|
|
|
|
@@ -337,9 +361,10 @@ module "bigquery-dataset" {
|
|
|
|
|
| [location](variables.tf#L109) | Dataset location. | <code>string</code> | | <code>"EU"</code> |
|
|
|
|
|
| [materialized_views](variables.tf#L115) | Materialized views definitions. | <code title="map(object({ query = string allow_non_incremental_definition = optional(bool) deletion_protection = optional(bool) description = optional(string, "Terraform managed.") enable_refresh = optional(bool) friendly_name = optional(string) labels = optional(map(string), {}) refresh_interval_ms = optional(bool) require_partition_filter = optional(bool) options = optional(object({ clustering = optional(list(string)) expiration_time = optional(number) }), {}) partitioning = optional(object({ field = optional(string) range = optional(object({ end = number interval = number start = number })) time = optional(object({ type = string expiration_ms = optional(number) field = optional(string) })) })) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [options](variables.tf#L148) | Dataset options. | <code title="object({ default_collation = optional(string) default_table_expiration_ms = optional(number) default_partition_expiration_ms = optional(number) delete_contents_on_destroy = optional(bool, false) is_case_insensitive = optional(bool) max_time_travel_hours = optional(number, 168) storage_billing_model = optional(string) })">object({…})</code> | | <code>{}</code> |
|
|
|
|
|
| [tables](variables.tf#L167) | Table definitions. Options and partitioning default to null. Partitioning can only use `range` or `time`, set the unused one to null. | <code title="map(object({ deletion_protection = optional(bool) description = optional(string, "Terraform managed.") friendly_name = optional(string) labels = optional(map(string), {}) require_partition_filter = optional(bool) schema = optional(string) external_data_configuration = optional(object({ autodetect = bool source_uris = list(string) avro_logical_types = optional(bool) compression = optional(string) connection_id = optional(string) file_set_spec_type = optional(string) ignore_unknown_values = optional(bool) metadata_cache_mode = optional(string) object_metadata = optional(string) json_options_encoding = optional(string) reference_file_schema_uri = optional(string) schema = optional(string) source_format = optional(string) max_bad_records = optional(number) csv_options = optional(object({ quote = string allow_jagged_rows = optional(bool) allow_quoted_newlines = optional(bool) encoding = optional(string) field_delimiter = optional(string) skip_leading_rows = optional(number) })) google_sheets_options = optional(object({ range = optional(string) skip_leading_rows = optional(number) })) hive_partitioning_options = optional(object({ mode = optional(string) require_partition_filter = optional(bool) source_uri_prefix = optional(string) })) parquet_options = optional(object({ enum_as_string = optional(bool) enable_list_inference = optional(bool) })) })) options = optional(object({ clustering = optional(list(string)) encryption_key = optional(string) expiration_time = optional(number) max_staleness = optional(string) }), {}) partitioning = optional(object({ field = optional(string) range = optional(object({ end = number interval = number start = number })) time = optional(object({ type = string expiration_ms = optional(number) field = optional(string) })) })) table_constraints = optional(object({ primary_key_columns = optional(list(string)) foreign_keys = optional(object({ referenced_table = object({ project_id = string dataset_id = string table_id = string }) column_references = object({ referencing_column = string referenced_column = string }) name = optional(string) })) })) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [tag_bindings](variables.tf#L252) | Tag bindings for this dataset, in key => tag value id format. | <code>map(string)</code> | | <code>{}</code> |
|
|
|
|
|
| [views](variables.tf#L259) | View definitions. | <code title="map(object({ query = string deletion_protection = optional(bool) description = optional(string, "Terraform managed.") friendly_name = optional(string) labels = optional(map(string), {}) use_legacy_sql = optional(bool) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [routines](variables.tf#L167) | Routine definitions. | <code title="map(object({ description = optional(string) routine_type = string language = optional(string) definition_body = string imported_libraries = optional(list(string)) determinism_level = optional(string) data_governance_type = optional(string) return_table_type = optional(string) arguments = optional(map(object({ argument_kind = optional(string) mode = optional(string) data_type = optional(string) })), {}) spark_options = optional(object({ archive_uris = optional(list(string), []) connection = string container_image = optional(string) file_uris = optional(list(string), []) jar_uris = optional(list(string), []) main_file_uri = optional(string) main_class = optional(string) properties = optional(map(string), {}) py_file_uris = optional(list(string), []) runtime_version = optional(string) })) remote_function_options = optional(object({ connection = string endpoint = optional(string) max_batching_rows = optional(string) user_defined_context = optional(map(string), {}) })) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [tables](variables.tf#L205) | Table definitions. Options and partitioning default to null. Partitioning can only use `range` or `time`, set the unused one to null. | <code title="map(object({ deletion_protection = optional(bool) description = optional(string, "Terraform managed.") friendly_name = optional(string) labels = optional(map(string), {}) require_partition_filter = optional(bool) schema = optional(string) external_data_configuration = optional(object({ autodetect = bool source_uris = list(string) avro_logical_types = optional(bool) compression = optional(string) connection_id = optional(string) file_set_spec_type = optional(string) ignore_unknown_values = optional(bool) metadata_cache_mode = optional(string) object_metadata = optional(string) json_options_encoding = optional(string) reference_file_schema_uri = optional(string) schema = optional(string) source_format = optional(string) max_bad_records = optional(number) csv_options = optional(object({ quote = string allow_jagged_rows = optional(bool) allow_quoted_newlines = optional(bool) encoding = optional(string) field_delimiter = optional(string) skip_leading_rows = optional(number) })) google_sheets_options = optional(object({ range = optional(string) skip_leading_rows = optional(number) })) hive_partitioning_options = optional(object({ mode = optional(string) require_partition_filter = optional(bool) source_uri_prefix = optional(string) })) parquet_options = optional(object({ enum_as_string = optional(bool) enable_list_inference = optional(bool) })) })) options = optional(object({ clustering = optional(list(string)) encryption_key = optional(string) expiration_time = optional(number) max_staleness = optional(string) }), {}) partitioning = optional(object({ field = optional(string) range = optional(object({ end = number interval = number start = number })) time = optional(object({ type = string expiration_ms = optional(number) field = optional(string) })) })) table_constraints = optional(object({ primary_key_columns = optional(list(string)) foreign_keys = optional(object({ referenced_table = object({ project_id = string dataset_id = string table_id = string }) column_references = object({ referencing_column = string referenced_column = string }) name = optional(string) })) })) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
| [tag_bindings](variables.tf#L290) | Tag bindings for this dataset, in key => tag value id format. | <code>map(string)</code> | | <code>{}</code> |
|
|
|
|
|
| [views](variables.tf#L297) | View definitions. | <code title="map(object({ query = string deletion_protection = optional(bool) description = optional(string, "Terraform managed.") friendly_name = optional(string) labels = optional(map(string), {}) use_legacy_sql = optional(bool) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
|
|
|
|
|
|
## Outputs
|
|
|
|
|
|
|
|
|
|
@@ -350,9 +375,11 @@ module "bigquery-dataset" {
|
|
|
|
|
| [id](outputs.tf#L37) | Fully qualified dataset id. | |
|
|
|
|
|
| [materialized_view_ids](outputs.tf#L52) | Map of fully qualified materialized view ids keyed by view ids. | |
|
|
|
|
|
| [materialized_views](outputs.tf#L57) | Materialized view resources. | |
|
|
|
|
|
| [self_link](outputs.tf#L62) | Dataset self link. | |
|
|
|
|
|
| [table_ids](outputs.tf#L77) | Map of fully qualified table ids keyed by table ids. | |
|
|
|
|
|
| [tables](outputs.tf#L82) | Table resources. | |
|
|
|
|
|
| [view_ids](outputs.tf#L87) | Map of fully qualified view ids keyed by view ids. | |
|
|
|
|
|
| [views](outputs.tf#L92) | View resources. | |
|
|
|
|
|
| [routine_ids](outputs.tf#L62) | Map of fully qualified routine ids keyed by routine ids. | |
|
|
|
|
|
| [routines](outputs.tf#L67) | Routine resources. | |
|
|
|
|
|
| [self_link](outputs.tf#L72) | Dataset self link. | |
|
|
|
|
|
| [table_ids](outputs.tf#L87) | Map of fully qualified table ids keyed by table ids. | |
|
|
|
|
|
| [tables](outputs.tf#L92) | Table resources. | |
|
|
|
|
|
| [view_ids](outputs.tf#L97) | Map of fully qualified view ids keyed by view ids. | |
|
|
|
|
|
| [views](outputs.tf#L102) | View resources. | |
|
|
|
|
|
<!-- END TFDOC -->
|
|
|
|
|
|