Трюк здесь состоит в том, чтобы разбить поиск файла и разложить его на одно вспомогательное задание, а затем обработать файлы в другое вспомогательное задание.
Вот простой пример работы:
Как нормальный, вы подключаетесь к S3, а затем вы можете перечислить все соответствующие объекты в ведре с помощью tS3List, а затем передать это tS3Get. Кроме того, у вас может быть другой способ передачи соответствующего ключа объекта, который вы хотите загрузить, в tS3Get.
В приведенной выше работе я поставил tS3Get до выборки каждого объекта, который повторяется на компоненте tS3List путем установки ключа как:
((String)globalMap.get("tS3List_1_CURRENT_KEY"))
, а затем загружать его по адресу:
"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))
Дополнительный бит, который я добавил, начинается с условной ссылки Run If
от tS3Get, которая связывает tFileUnarchive с условием:
((String)globalMap.get("tS3List_1_CURRENT_KEY")).endsWith(".zip")
Какая информация проверяется, является ли файл, загружаемый с сайта S3, файлом .zip
.
tFileUnarchive компонент, то просто нужно сказать, что расстегнуть, который будет файл, который мы только что скачали:
"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))
и где извлечь его:
"C:/Talend/5.6.1/studio/workspace/S3_downloads"
Этом затем помещает любые извлеченные файлы в то же место, что и те, которые не нуждаются в извлечении.
Отсюда мы можем теперь перебирать загрузки папку ищем для типов файлов, которые мы хотим, установив каталог в "C:/Talend/5.6.1/studio/workspace/S3_downloads"
и глобальное выражение "*.csv"
в моем случае, когда я хотел прочитать в только файлы CSV (в том числе архивного) Я был в S3.
Наконец, мы тогда читали разделители файлов, установив файл для чтения компоненты tFileInputDelimited как:
((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))
И в моем случае, я просто затем отпечатанной на консоль, но, очевидно, вы бы тогда хотите для выполнения некоторой трансформации перед загрузкой в ваш экземпляр AWS RDS.
Спасибо за ответ.Но я столкнулся с проблемой. Первое, что у меня есть ведро на S3, предположим, что «Анализ» и внутри, что у меня есть месячная папка типа «май2015» и так далее. Таким образом, tfileUnarchive извлекает с помощью папки i.e в указанном пути, который создает файл May2015/File.txt, и при попытке выполнить итерацию с помощью tfilelist он не сможет найти файл. Также здесь вы показали, как это сделать из локальной системы, но если я хочу запустить ее через кластер EMR, то как мне ее достичь. Направьте меня на это. – user3454116
Вам нужно разбить это на несколько вопросов, чтобы они были четкими и лаконичными. Я бы предложил создать новый вопрос, связанный с этим вопросом, показывая, как вы это сделали после получения вышеуказанного ответа, а затем более конкретно с вашими требованиями (Таким образом, заголовок вопроса может быть чем-то вроде «Использование tFileUnarchive для структуры вложенных папок в S3 "), и где приведенный выше ответ не совсем охватывает ваш новый вопрос. Если/после ответа на этот вопрос я задал еще один вопрос о том, как применить этот ответ к задаче EMR cluster/MapReduce. – ydaetskcoR
Привет, Спасибо за решение распаковать файлы и прочитать их. Что касается моего первого запроса вложенных структур папок, после некоторых исследований я предполагаю, что я это сделал. Я проверил параметр include subdirectories в компоненте tfilelist и, похоже, работает. Также, если у вас есть идеи по моему второму запросу, дайте мне знать. – user3454116