У меня есть ведро с примерно 5 000 000 объектов внутри (как показано в веб-интерфейсе MinIO).
Мне нужно пройти по каждому отдельному объекту (а позже сделать некоторые обработка на них).
Чтобы протестировать функциональность, я хочу начать подсчитывать каждый отдельный объект (сумма которого должна составлять то же число, что сообщает MinIO)
Я пробовал использовать boto3, используя list_object, list_object_v2 и ресурс boto3, и, конечно же, используя нумерацию страниц, но безрезультатно.
Без префиксов (т. е. подсчета целое ведро) всегда кажется, что он насчитывает около 200 тыс. объектов (чуть меньше).
Когда я начинаю определять некоторые префиксы первого уровня, счетчик увеличивается.Я не могу позволить себе перечислить все префиксы, так как структура данных очень беспорядочная, и не все данные всегда находятся на «листовых путях» (т. е. некоторые данные могут находиться рядом с какой-то «подпапкой») )
Я инициализирую клиент/ресурс следующим образом:
import boto3
custom_config = Config(
retries = {
'max_attempts': 10,
'mode': 'standard'
},
signature_version='s3v4'
)
minio_client = boto3.client(
's3',
endpoint_url=,
aws_access_key_id=,
aws_secret_access_key=,
aws_session_token=None,
verify=False,
config=custom_config,
)
minio_resource = boto3.resource(
's3',
endpoint_url=,
aws_access_key_id=,
aws_secret_access_key=,
aws_session_token=None,
verify=False,
config=custom_config,
)
А затем я пытаюсь посчитать объекты как таковые:
bucket_name =
bucket = minio_resource.Bucket(bucket_name)
cnt = 0
try:
for page in bucket.objects.all(): # ! Also tried *.page_size(1000):
for obj in page:
cnt += 1
if cnt % 10000 == 0:
print("-------------------------------")
print(obj)
print(f"Processed {cnt} objects so far")
except Exception as e:
print(f"An error occurred: {e}")
print(f"Total objects counted: {cnt}")
try:
paginator = minio_client.get_paginator('list_objects_v2')
page_iterator = paginator.paginate(Bucket=bucket_name) # Or with prefixes: , Prefix=pfx)
for page in page_iterator:
for obj in page.get('Contents', []):
cnt += 1
if cnt % 10000 == 0:
print("-------------------------------")
print(obj)
print(f"Processed {cnt} objects so far")
except Exception as e:
print(f"An error occurred: {e}")
print(f"Total objects counted: {cnt}")
Подробнее здесь: https://stackoverflow.com/questions/787 ... t-on-minio
Перечислите все объекты в корзине S3 на MinIO ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение