Загрузка данных из s3 в красное смещение с помощью команды копирования

arrays json amazon-s3 amazon-redshift

687 просмотра

1 ответ

102 Репутация автора

У меня есть сценарий, в котором мне нужно загрузить данные из Amazon S3 в базу данных Amazong Redshift.

Все файлы в S3 - это JSON, которые находятся в разных папках в корзине. Каждая папка указывает дату, когда она была сгенерирована.

Например, это пример структуры папок в S3:

  1. Ведро (B1)
    A. Папка (F1)
    i. file1.json, file2.json ... т. д. B. Папка (F2)
    ii. file22.json, file23.json ... и так далее

Каждый из файлов JSON не имеет одного корневого элемента. У них есть следующий формат -

file1.json

{
Key : Value,
Key1 : [ some  array],
Key2 : value3,
}

{
Key : Value1,
Key1 : [ some  array1],
Key2 : value2,
}

Я хочу знать, есть ли способ загрузить эти данные рекурсивно (так как json находится в нескольких папках) в красное смещение с помощью команды copy.

(ИЛИ ЖЕ)

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

Автор: FirstName Источник Размещён: 17.07.2016 09:52

Ответы (1)


0 плюса

921 Репутация автора

Вариант 1. Соответствие ключевого префикса

В S3 нет таких вещей как папки. Вместо этого пути принимаются как ключи объекта . Пока ваши ключи следуют общему шаблону и при условии, что нет никаких других файлов, кроме тех, которые вы хотите импортировать, которые соответствуют этому шаблону, например:

s3
└── b1-bucket
    ├── f1/20160728/file1.json
    ├── f1/20160728/file2.json
    ├── f1/20160729/file1.json
    └── f2/20160728/file1.json

Затем следующая COPYкоманда будет сопоставлять (и копировать) все эти файлы:

COPY your_table FROM 's3://b1-bucket/f' CREDENTIALS '' FORMAT AS JSON 'auto';

Как указано в документации :

Параметр s3: // copy_from_s3_objectpath может ссылаться на один файл или набор объектов или папок с одинаковым префиксом ключа.

Вариант 2: файл манифеста

Другой вариант - добавить в COPYинструкцию файл манифеста, который в основном представляет собой просто файл, содержащий список файлов, которые вы хотите импортировать:

{
  "entries": [
    {"url":"s3://b1-bucket/f1/20160728/file1.json", "mandatory":true},
    {"url":"s3://b1-bucket/f1/20160728/file2.json", "mandatory":true},
    {"url":"s3://b1-bucket/f1/20160729/file1.json", "mandatory":true},
    {"url":"s3://b1-bucket/f2/20160728/file1.json", "mandatory":true}
  ]
}

См. Http://docs.aws.amazon.com/redshift/latest/dg/loading-data-files-using-manifest.html.

Автор: moertel Размещён: 28.07.2016 09:55
Вопросы из категории :
32x32