resource "google_bigquery_dataset" "shared_udf" {
dataset_id = "shared_udf"
location = local.japan_tokyo_region
}
locals {
japan_tokyo_region = "asia-northeast1"
udfs = {
example : <<EOF
CREATE OR REPLACE FUNCTION ${google_bigquery_dataset.shared_udf.dataset_id}.example(x INT64)
RETURNS INT64
LANGUAGE js AS """
return x*2;
""";
EOF
}
}
resource "null_resource" "udfs" {
for_each = local.udfs
triggers = {
udf = each.value
project_id = var.project_id
location = local.japan_tokyo_region
udf_dataset_id = google_bigquery_dataset.shared_udf.dataset_id // destroy時のwarningへの暫定対応 望ましくないがとりあえず https://github.com/hashicorp/terraform/issues/23679
}
provisioner "local-exec" {
interpreter = ["bq", "query", "--use_legacy_sql=false", "--project_id=${self.triggers.project_id}", "--location=${self.triggers.location}"]
command = each.value
}
provisioner "local-exec" {
interpreter = ["bq", "query", "--use_legacy_sql=false", "--project_id=${self.triggers.project_id}", "--location=${self.triggers.location}"]
command = "DROP FUNCTION IF EXISTS ${self.triggers.udf_dataset_id}.${each.key}"
when = destroy
}
}