Как вы ищете ведро amazon s3?

У меня есть ведро с тысячами файлов. Как я могу искать ведро? Есть ли инструмент, который вы можете порекомендовать?

Ответ 1

S3 не имеет собственного "поиска в этом ковше", поскольку фактическое содержимое неизвестно - также, поскольку S3 основан на ключевом/значении, нет никакого способа доступа к множеству узлов одновременно, а также более традиционных хранилищ данных, которые предлагают (SELECT * FROM ... WHERE ...) (в модели SQL).

Что вам нужно сделать, это выполнить ListBucket, чтобы получить список объектов в ведре, а затем перебрать все элементы, выполняющие пользовательскую операцию, которую вы реализуете, - это ваш поиск.

Ответ 2

Просто примечание, которое нужно добавить здесь: теперь 3 года спустя, но этот пост является вершиной в Google, когда вы вводите "Как искать ведро S3".

Возможно, вы ищете что-то более сложное, но если вы приземлились здесь, пытаясь понять, как просто найти объект (файл) по названию, это безумно просто:

откройте ведро, выберите "none" с правой стороны и начните вводить имя файла.

http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html

Ответ 3

Вот короткий и уродливый способ поиска имени файла поиска с помощью AWS CLI:

aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-

Ответ 4

Существуют (по крайней мере) два разных варианта использования, которые можно охарактеризовать как "поиск в ковше":

  • Найдите что-то внутри каждого объекта, хранящегося в ведре; это предполагает общий формат для всех объектов в этом ковше (скажем, текстовых файлов) и т.д. Иными словами, вы вынуждены делать то, на что ответил Коди Коглан. В документах AWS S3 есть пример кода, показывающий, как это сделать с помощью AWS SDK для Java: Листинговые ключи Использование AWS SDK для Java (там вы" Также найду примеры PHP и С#).

  • Элемент списка Поиск чего-то в объекте ключей, содержащегося в этом ведре; У S3 есть частичная поддержка для этого, в виде разрешающих точных совпадений + совпадений после разграничения. Это объясняется более подробно в Руководство для разработчиков AWS S3. Это позволяет, например, реализовать "папки", используя в качестве объектных ключей что-то вроде

    folder/subfolder/file.txt
    Если вы следуете этому соглашению, большинство графических интерфейсов S3 (например, AWS Console) покажут вам представление папки вашего ведра.

Ответ 5

Существует несколько вариантов, ни один из которых не является простым решением "одного кадра":

  • Поиск по ключевым словам.. Поиск ключей, начинающихся с некоторой строки, если вы тщательно разрабатываете имена ключей, то у вас может быть довольно быстрое решение.

  • Поиск метаданных, прикрепленных к ключам: при отправке файла в AWS S3 вы можете обрабатывать контент, извлекать некоторую метаинформацию и прикреплять эту метаинформацию в виде пользовательских заголовков в ключ, Это позволяет получать имена ключей и заголовки без необходимости получения полного содержимого. Поиск должен выполняться последовательно, для этого нет опции поиска "sql like". С большими файлами это может сэкономить много сетевого трафика и времени.

  • Сохранить метаданные на SimpleDB: как предыдущий пункт, но с сохранением метаданных в SimpleDB. Здесь у вас есть sql, как select statement. В случае больших наборов данных вы можете столкнуться с ограничениями SimpleDB, которые можно преодолеть (метаданные разделов на нескольких доменах SimpleDB), но если вы заходите очень далеко, вам может понадобиться использовать другую базу данных metedata.

  • Последовательный полнотекстовый поиск содержимого - обработка всех ключей один за другим. Очень медленно, если у вас слишком много ключей для обработки.

Мы сохраняем 1440 версий файла в день (по одной в минуту) в течение нескольких лет, используя веером с версией, это легко возможно. Но получение какой-то более старой версии требует времени, так как нужно последовательно перейти к версии по версии. Когда-то я использую простой индекс CSV с записями, показывающий время публикации плюс идентификатор версии, имея это, я мог бы быстро перейти к более старой версии.

Как вы видите, AWS S3 не предназначен для полнотекстового поиска, это простая служба хранения.

Ответ 6

AWS выпустила новую услугу для запроса кодов S3 с SQL: Amazon Athena https://aws.amazon.com/athena/

Ответ 7

Учитывая, что вы находитесь в AWS... Я бы подумал, что вы захотите использовать свои инструменты CloudSearch. Поместите данные, которые вы хотите найти в своей службе... укажите на клавиши S3.

http://aws.amazon.com/cloudsearch/

Ответ 8

Поиск по префиксу в консоли S3

непосредственно в представлении консоли консоли AWS.

введите описание изображения здесь

Копирование требуемых файлов с помощью s3-dist-cp

Когда у вас есть тысячи или миллионы файлов, другой способ получить нужные файлы - скопировать их в другое место, используя распределенную копию. Вы запускаете это на EMR в задании Hadoop. Замечательная вещь о AWS заключается в том, что они предоставляют свою собственную версию S3 s3-dist-cp. Он позволяет группировать нужные файлы, используя регулярное выражение в поле groupBy. Вы можете использовать это, например, на пользовательском шаге по EMR

[
    {
        "ActionOnFailure": "CONTINUE",
        "Args": [
            "s3-dist-cp",
            "--s3Endpoint=s3.amazonaws.com",
            "--src=s3://mybucket/",
            "--dest=s3://mytarget-bucket/",
            "--groupBy=MY_PATTERN",
            "--targetSize=1000"
        ],
        "Jar": "command-runner.jar",
        "Name": "S3DistCp Step Aggregate Results",
        "Type": "CUSTOM_JAR"
    }
]

Ответ 9

Если вы работаете в Windows и у вас нет времени, чтобы найти хорошую альтернативу grep, быстрый и грязный способ будет выглядеть так:

aws s3 ls s3://your-bucket/folder / --recursive > myfile.txt

а затем выполните быстрый поиск в myfile.txt

Бит "папка" не является обязательным.

PS если у вас не установлен AWS CLI - вот один вкладыш, использующий менеджер пакетов Chocolatey

choco install awscli

PPS Если у вас нет менеджера пакетов Chocolatey - получите его! Ваша жизнь в Windows станет в 10 раз лучше. (Я никак не связан с Chocolatey, но на самом деле, это просто необходимо).

Ответ 10

Это немного старая ветка - но, возможно, поможет кто-то, кто все еще ищет - я тот, кто ищет это год.

Решением может быть "AWS Athena", где вы можете выполнять поиск по таким данным, как этот

'SELECT user_name FROM S3Object WHERE cast(age as int) > 20'

https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/

В настоящее время цена составляет 5 долларов США за данные объемом 1 ТБ - например, если при поиске по одному файлу объемом 1 ТБ в три раза стоимость составляет 15 долларов США, но, например, если в "преобразованном столбчатом формате" есть только 1 столбец, то, что вы хотите прочитать, вы заплатите 1/3 от цены, значит, $ 1,67/ТБ.

Ответ 11

Другая опция - зеркальное отображение ведра S3 на вашем веб-сервере и перемещение по локальной сети. Фокус в том, что локальные файлы пустые и используются только как скелет. В качестве альтернативы, локальные файлы могут содержать полезные метаданные, которые вам обычно нужно получить от S3 (например, файлы, mimetype, author, timestamp, uuid). Когда вы указываете URL-адрес для загрузки файла, выполните поиск локально и укажите ссылку на адрес S3.

Локальное перемещение файлов легко, и этот подход для управления S3 является агностическим. Локальное перемещение файлов также позволяет избежать обслуживания и запросов к базе данных файлов или задержек, делая серию удаленных вызовов API для аутентификации и получения содержимого ведра.

Вы можете разрешить пользователям загружать файлы прямо на ваш сервер через FTP или HTTP, а затем передавать пакет новых и обновленных файлов в Amazon в нерабочее время, просто переписывая каталоги для файлов любого размера. По завершении передачи файла на Amazon замените файл веб-сервера пустым одноименным именем. Если локальный файл имеет какой-либо файл, то он служит непосредственно, потому что его ожидает пакетный перенос.

Ответ 12

Попробуйте выполнить следующую команду:

aws s3api list-objects --bucket your-bucket --prefix sub-dir-path --output text --query 'Contents[].{Key: Key}'

Затем вы можете передать это в grep, чтобы получить конкретные типы файлов, чтобы делать с ними что угодно.

Ответ 14

Как я это сделал: У меня есть тысячи файлов в s3. Я видел панель свойств одного файла в списке. Вы можете увидеть URI этого файла, и я скопировал его в браузер - это был текстовый файл, и он выглядел красиво. Теперь я заменил uuid в URL-адресе с помощью uuid, который у меня был под рукой, и бум там, файл.

Я бы хотел, чтобы AWS имел лучший способ поиска файла, но это сработало для меня.

Ответ 15

Я сделал что-то, как показано ниже, чтобы найти шаблоны в моем ковше.

def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
    var s3Client = new AmazonS3Client()
    var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
    var objectListing: ObjectListing = null
    var res: List[String] = List()

    do {
      objectListing = s3Client.listObjects(listObjectsRequest)
      res = res ++ objectListing.getCommonPrefixes
      listObjectsRequest.setMarker(objectListing.getNextMarker)
    } while (objectListing.isTruncated)
    res
  }

Для больших копеек это занимает слишком много времени, так как все сводки объектов возвращаются Aws, а не только те, которые соответствуют префиксу и разделителю. Я ищу способы улучшить производительность, и до сих пор я только нашел, что я должен назвать ключи и упорядочить их в ведрах правильно.

Ответ 17

Я пробовал следующим образом

aws s3 ls s3://Bucket1/folder1/2019/ --recursive |grep filename.csv

Это выводит фактический путь, где файл существует

2019-04-05 01:18:35     111111 folder1/2019/03/20/filename.csv