Разорванный список файлов в корзине GCS

# #google-cloud-platform #google-bigquery #terraform #google-cloud-storage

Вопрос:

У меня есть ведро gcs с несколькими вложенными паркетными файлами. Я хочу просмотреть файл parquet как внешние таблицы в BQ.

Например:

 path1 >> path2 >> path3 >> path4 >> *.parquet
path11 >> path22 >> path33 >> *.parquet
 

Есть ли способ, которым я могу перечислить uri gcs, используя terraform? Затем используйте gcs_uri в терраформе, написанной как таковая:

 variable my_table_config {
  default = {
    first_table  = { gcs_path = "path11/path22/path33/*.parquet"}
    second_table = { gcs_path = "path1/path2/path3/path3/path4/*.parquet"}
  }
}

resource "google_bigquery_dataset" "my_dataset" {
   # create table
}


resource "google_bigquery_table" "my_dataset_external_tables" {
  dataset_id  = google_bigquery_dataset.my_dataset.dataset_id
  for_each    = var.my_table_config # start loop here
  table_id    = each.key

  external_data_configuration {
    autodetect    = true
    source_format = "PARQUET"
    ignore_unknown_values = true
    source_uris = [
      "gs://my-gcs-bucket/${(each.value).gcs_path}" # get path of parquet files
    ]
  }
  project = var.project
}
 

Приведенная выше терраформа будет работать, если у меня будет небольшое количество gcs_uri (я могу добавить my_table_config ). Но у меня еще более тысячи gcs_uri дел. Я ищу что-то, что можно автоматизировать для извлечения gcs_uri. Пожалуйста, помогите. Спасибо.

Комментарии:

1. Рассматривали ли вы возможность использования подстановочных знаков, например, gsutil ls gs://bucket_name/*/**.parquet в облачной оболочке, а затем, возможно, вы сможете использовать цикл в terraform, чтобы использовать их все по одному?

2. О да. Я только подумал *.parquet , я попробую

3. Если проблема решена, я бы предложил опубликовать ее в качестве ответа, чтобы помочь другим пользователям, которые могут столкнуться с этим сценарием. Спасибо!