Автоматически загружать данные в Redshift с помощью функции COPY - PullRequest
1 голос
/ 20 марта 2019

В документации Amazon Redshift говорится, что лучший способ загрузки данных в базу данных - использование функции COPY.Как я могу запускать его автоматически каждый день с файлом данных, загруженным на S3?

Более длинная версия: я запустил кластер Redshift и настроил базу данных.Я создал ведро S3 и загрузил файл CSV.Теперь из редактора запросов Redshift я могу легко запустить функцию COPY вручную.Как мне это автоматизировать?

Ответы [ 2 ]

1 голос
/ 26 марта 2019

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

  1. Если возможно, сожмите csv-файлы в gzips и затем включите их в соответствующие таблицы красных смещений.Это уменьшит размер вашего файла с хорошим запасом и увеличит общую производительность приема данных.

  2. Завершите схему сжатия для столбцов таблицы.Если вы хотите, чтобы красное смещение выполняло эту работу, автоматическое сжатие можно включить с помощью «COMPUPDATE ON» в команде копирования.Обратитесь к aws документации

Теперь, чтобы ответить на ваш вопрос:

Поскольку вы создали корзину S3 для нее, создайте каталоги для каждой таблицы ипоместите свои файлы там.Если ваши входные файлы имеют большой размер, разбейте их на несколько файлов (количество файлов должно быть выбрано в соответствии с количеством имеющихся у вас узлов, для обеспечения лучшего параллельного приема см. Документацию aws doc для получения более подробной информации).

Ваша команда копированиядолжен выглядеть примерно так:

PGPASSWORD=<password> psql -h <host> -d <dbname> -p 5439 -U <username> -c "copy <table_name> from 's3://<bucket>/<table_dir_path>/'     credentials 'aws_iam_role=<iam role identifier to ingest s3 files into redshift>' delimiter ',' region '<region>' GZIP COMPUPDATE ON REMOVEQUOTES IGNOREHEADER 1"

следующий шаг, чтобы создать лямбду и включить sns поверх redshift s3 bucket, этот sns должен запустить lambda, как только вы получите новые файлы в s3 bucket.Альтернативный метод заключается в настройке планировщика cloudwatch для запуска лямбды.

Может быть создана лямбда (java / python или любой другой язык), которая читает файлы s3, подключается к красному смещению и принимает файлы в таблицы с помощью команды copy.

У лямбды есть 15-минутный лимит, если это вас беспокоит, то лучше будет фаргейт.Выполнение заданий на EC2 приведет к большему количеству счетов, чем к лямбде или фаргейту (на случай, если вы забудете выключить машину ec2)

0 голосов
/ 26 марта 2019

Вы можете создать внешнюю таблицу поверх вашего ведра.Redshift автоматически просканирует все файлы в корзине.Но помните, что производительность запросов может быть не такой хорошей, как у данных, загружаемых с помощью COPY, но при этом вам не нужен планировщик.

Также, если у вас есть внешняя таблица, вы можете загрузить ее один раз, чтобы выполнить красное смещение одним CREATE TABLE AS SELECT ... FROM your_external_table.Преимущество такого подхода в том, что он идемпотентен - вам не нужно отслеживать ваши файлы - он всегда будет загружать все данные из всех файлов в корзине.

...