Кодирование URL-адреса googleCloudStorageDeleteOperator «/»

#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"
)