Проверьте, существует ли большой двоичный объект

#google-cloud-storage #airflow #google-cloud-composer

#google-облачное хранилище #воздушный поток #google-cloud-composer

Вопрос:

Я пытаюсь создать DAG, который сначала проверяет, существует ли заданный путь / большой двоичный объект в облачном хранилище Google. Большой двоичный объект — это объект, содержащий некоторые НЕОБРАБОТАННЫЕ данные, а не тот, который установлен на рабочих объектах Composer.

В качестве альтернативы, было бы удобно проверить, существует ли он и содержит ли файлы (список> 1) за один раз, но существование — это уже хорошая вещь, чтобы вернуться.

До сих пор я пытался использовать статистику gsutil с помощью команды bash, библиотеки google.cloud.storage и gcs_hook безрезультатно. Все они возвращают False для папки, в существовании которой я совершенно уверен

 def check_folder(templates_dict,**kwargs):
    bucket = 'bucketname'
    blob_name = templates_dict['blob_name']
    # Blob name is something along the lines of '2019-04-10/11/' 
    gcs = GoogleCloudStorageHook()
    flag = gcs.exists(bucket,blob_name)
    if flag:
        print(flag)
        return('this_is_true')
    else:
        print(flag)
        return('this_is_not_true')
  

Для заданного blob_name, которое, я уверен, существует, я ожидаю значение true, но оно всегда возвращает False . Есть идеи, что происходит? Спасибо!

Ответ №1:

exists Функция в GoogleCloudStorageHook проверяет наличие объекта и не поддерживает использование префиксов. Если вы хотите проверить, есть ли какие-либо данные в вашем данном префиксе, вы бы хотели использовать эту list функцию.

Пример:

 if bool(hook.list(bucket, prefix=prefix)):
    print('some data is in my folder!')
  

Вы также можете проверить реализацию датчика GoogleCloudStoragePrefixSensor, поскольку он очень похож на то, что вы делаете.