---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Biglake"
description: |-
  Databases are containers of tables.
---

# google\_biglake\_database

Databases are containers of tables.


To get more information about Database, see:

* [API documentation](https://cloud.google.com/bigquery/docs/reference/biglake/rest/v1/projects.locations.catalogs.databases)
* How-to Guides
    * [Manage open source metadata with BigLake Metastore](https://cloud.google.com/bigquery/docs/manage-open-source-metadata#create_databases)

<div class = "oics-button" style="float: right; margin: 0 0 -15px">
  <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=biglake_database&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
    <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
  </a>
</div>
## Example Usage - Biglake Database


```hcl
resource "google_biglake_catalog" "catalog" {
    name = "my_catalog"
    location = "US"
}

resource "google_storage_bucket" "bucket" {
  name                        = "my_bucket"
  location                    = "US"
  force_destroy               = true
  uniform_bucket_level_access = true
}

resource "google_storage_bucket_object" "metadata_folder" {
  name    = "metadata/"
  content = " "
  bucket  = google_storage_bucket.bucket.name
}

resource "google_biglake_database" "database"  {
    name = "my_database"
    catalog = google_biglake_catalog.catalog.id
    type = "HIVE"
    hive_options {
        location_uri = "gs://${google_storage_bucket.bucket.name}/${google_storage_bucket_object.metadata_folder.name}"
        parameters = {
          "owner": "John Doe"
        }
    }
}
```

## Argument Reference

The following arguments are supported:


* `type` -
  (Required)
  The database type.

* `hive_options` -
  (Required)
  Options of a Hive database.
  Structure is [documented below](#nested_hive_options).

* `catalog` -
  (Required)
  The parent catalog.

* `name` -
  (Required)
  The name of the database.


<a name="nested_hive_options"></a>The `hive_options` block supports:

* `location_uri` -
  (Optional)
  Cloud Storage folder URI where the database data is stored, starting with "gs://".

* `parameters` -
  (Optional)
  Stores user supplied Hive database parameters. An object containing a
  list of"key": value pairs.
  Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

- - -



## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `{{catalog}}/databases/{{name}}`

* `create_time` -
  Output only. The creation time of the database. A timestamp in RFC3339
  UTC "Zulu" format, with nanosecond resolution and up to nine fractional
  digits. Examples: "2014-10-02T15:01:23Z" and
  "2014-10-02T15:01:23.045123456Z".

* `update_time` -
  Output only. The last modification time of the database. A timestamp in
  RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine
  fractional digits. Examples: "2014-10-02T15:01:23Z" and
  "2014-10-02T15:01:23.045123456Z".

* `delete_time` -
  Output only. The deletion time of the database. Only set after the
  database is deleted. A timestamp in RFC3339 UTC "Zulu" format, with
  nanosecond resolution and up to nine fractional digits. Examples:
  "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".

* `expire_time` -
  Output only. The time when this database is considered expired. Only set
  after the database is deleted. A timestamp in RFC3339 UTC "Zulu" format,
  with nanosecond resolution and up to nine fractional digits. Examples:
  "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".


## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.

## Import


Database can be imported using any of these accepted formats:

* `{{catalog}}/databases/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Database using one of the formats above. For example:

```tf
import {
  id = "{{catalog}}/databases/{{name}}"
  to = google_biglake_database.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Database can be imported using one of the formats above. For example:

```
$ terraform import google_biglake_database.default {{catalog}}/databases/{{name}}
```
