#google-cloud-storage #airflow
#google-облачное хранилище #поток воздуха
Вопрос:
Я хочу удалить временный файл в конце моей базы данных в корзине GCS. Когда я добавляю список значений в объект arguments, я получаю сообщение об ошибке, что файл не найден. Причина в том, что символ / является URL-адресом, закодированным /.
gcs_delete_temp = GoogleCloudStorageDeleteOperator(
task_id="gcs_delete_temp",
bucket_name=f"super_bucket",
objects=[
"rte/temp/{{ macros.ds_add(ds, -10) }}_injectee.parquet",
"rte/temp/{{ macros.ds_add(ds, -10) }}_soutiree.parquet"
]
)
Я получил ошибку:
google.api_core.исключения.Не найдено: 404 УДАЛЕНИЯ https://storage.googleapis.com/storage/v1/b/super_bucket/o/rte/temp/2020-07-25_injectee.parquet : Не найдено
Я пытался избежать их, но символ ** также закодирован в URL.
Это ошибка? Или функция?
Ответ №1:
Я бы предложил начать с попытки удалить хотя бы один временный файл из вашего хранилища GCS, а затем начать добавлять фильтры в массив объектов. Как я полагаю, это может быть связано с вашей реализацией списка объектов в вашем коде. Похоже, что Apache Airflow предоставляет фрагмент кода для удаления объектов из корзины GCS, более подробную информацию об этом можно найти здесь.
Я бы также рекомендовал вам ознакомиться с документацией по удалению файла DAG из папки dag среды в облачном хранилище. Однако этот метод потребует от вас написания команд командной строки gcloud, что также было бы эффективным методом обработки выходных данных и автоматизации задач.
Ответ №2:
Я думаю, что поведение является правильным для URI кодировки ( пожалуйста, проверьте эту страницу https://cloud.google.com/storage/docs/request-endpoints#encoding )
Например, для удаления файлов parquet в gs://my_bucket/example0/example1/part-*.parquet
эта конфигурация работает для меня :
gcs_delete_temp = GoogleCloudStorageDeleteOperator(
task_id="gcs_delete_temp",
bucket_name="my_bucket",
prefix= "example0/example1/part"
)