#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, поскольку он очень похож на то, что вы делаете.