Перебирая самые последние файлы s3 и помещая их в соответствующие таблицы в Redshift - PullRequest
0 голосов
/ 08 апреля 2020

Я бы хотел пройтись по последним файлам S3 и набрать sh их для Redshift соответствующих таблиц с помощью команды COPY.

У меня есть скрипт, который читает из Bucket 1 и ежедневно отправляет файлы CSV в Bucket 2.

Конечный путь выглядит примерно так:

dev/prom/mt/table_name/table_name=2020-04-08/table_name_2020-04-08.csv

У меня есть json файл конфигурации со всеми именами source_table, target_table_names и столбцами.

tb_list = []
prefix="dev/mt/"
for obj in TARGET_BUCKET.objects.filter(Prefix=prefix):
    if obj.key.endswith(".csv"):
       # print(obj.key)
        path = "s3://bucket-name/" + obj.key

        x = obj.key.replace(prefix, "")
        x = x.split("/")
        RS_TABLE="stg_"+ x[0]     #redshift target table
        S3_OBJECT="/"+ obj.key    #full path to csv file in target bucekt

        ods_list.append("(s3_object: " + S3_OBJECT + "," + RS_TABLE + ")")

Какой будет самый быстрый и простой подход? Должен ли я создать словарь? Это будет один большой для l oop и команды COPY, вложенной внутрь?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Ваш код Python добавляет данные в виде одной длинной строки:

ods_list.append("(s3_object: " + S3_OBJECT + "," + RS_TABLE + ")")

Это не облегчает извлечение указанных полей c. Было бы лучше добавить в список словарь , который затем можно извлечь. Например:

ods_list.append({"s3_object":S3_OBJECT, "table":RS_TABLE})

Это делает его списком словарей .

Затем вы можете использовать от for l oop до go через массив, извлекающий элементы:

for object in ods_list:
    some_function(object["s3_object"], object{"table"})
0 голосов
/ 08 апреля 2020

Если ваша цель - загрузить несколько указанных c файлов в Amazon Redshift с помощью команды COPY, я бы порекомендовал Использование манифеста для указания файлов данных - Amazon Redshift .

Файл манифеста содержит список загружаемых объектов. Затем вы можете запустить одну команду COPY, которая ссылается на файл манифеста.

Однако, если вы собираетесь загружать каждый файл в отдельную таблицу, тогда для каждого файла потребуется отдельная команда COPY (или отдельный файл манифеста для каждой загружаемой таблицы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...