Я не очень хорошо знаком с Amazon, но позвольте мне попытаться ответить на большинство ваших вопросов, чтобы вы могли двигаться дальше. Другие люди могут редактировать этот ответ или дополнительную информацию. Спасибо!
Не уверен, каким должен быть оператор Создать таблицу в Redshift
Ваш оператор создания create table vehicle_status(...)
не имеет проблем, хотя вы можете добавить distribution key
, sort key
и encoding
в зависимости от ваших требований, см. Дополнительные здесь и здесь
Согласно документам AWS Kenesis ваша таблица должна присутствовать в Redshift
, следовательно, вы можете подключиться к Redshift
с помощью команды psql
и запустить create statement
вручную.
Каким должен быть синтаксис COPY в Kinesis firhose.
Синтаксис Copy
останется неизменным, если вы запустите его через psql
или firhose
, к счастью, созданный вами скрипт копирования работает без ошибок, я попробовал его в моем случае с небольшой модификацией direct AWS/SECRET
ключ снабжен, а не работает нормально, здесь sql
, который я запускаю, работал нормально и скопировал 1 запись данных в таблицу vehicle_status
.
На самом деле ваша структура пути json сложна, поэтому json 'auto'
не будет работать. Вот рабочая команда, я создал для вас пример файла jsonpath
с 4 примерами полей, и вы можете следовать той же структуре, чтобы создать файл jsonpath
со всеми точками данных.
COPY vehicle_status (heart_beat, cdc_id, operator, status) FROM 's3://XXX/development/test_file.json' CREDENTIALS 'aws_access_key_id=XXXXXXXXXXXXXXXXX;aws_secret_access_key=MYXXXXXXXXXXXXXXXXXXXXXX' json 's3://XXX/development/yourjsonpathfile';
И ваш json path file
должен иметь содержимое, аналогичное приведенному ниже.
{
"jsonpaths": [
"$['NewImage']['heart_beat']['N']",
"$['NewImage']['cdc_id']['N']",
"$['NewImage']['operator']['S']",
"$['NewImage']['status']['S']"
]
}
Я проверил это, и оно работает.
Как мне использовать JsonPaths здесь. Пожарная служба Kinesis Data настроена на возврат только json в мое ведро s3.
Я использовал только данные вашего примера json
, и это работает, поэтому здесь я не вижу проблем.
Как упомянуть Maniphest в команде COPY
Это хороший вопрос, я мог бы попытаться объяснить его, я надеюсь, здесь вы имеете в виду menifest
.
Если вы видите выше команду копирования, она отлично работает для одного файла или пары файлов, но подумайте, что у вас много файлов, вот вам и концепция menifest
.
Прямо из документов Amazon, "Вместо указания пути к объекту для команды COPY вы указываете имя текстового файла в формате JSON, в котором явно перечисляются загружаемые файлы."
Короче говоря, если вы хотите загрузить несколько файлов за один снимок, что также является предпочтительным способом Redshift
, вы можете создать простой menifest
с json и предоставить его в команде копирования.
{
"entries": [
{"url":"s3://mybucket-alpha/2013-10-04-custdata", "mandatory":true},
{"url":"s3://mybucket-alpha/2013-10-05-custdata", "mandatory":true},....
]
}
загрузите манифест в S3
и используйте его в вашей команде копирования, как показано ниже.
COPY vehicle_status (heart_beat, cdc_id, latitude, not_deployed_counter, reg_ind, operator, d_dttm, z_id, last_end_trip_dttm, land_ind, s_ind, status_change_dttm, case_ind, last_po_change_dttm, violated_duration, vehicle_id, longitude, file_status, unhired_duration, eo_lat, reply_eo_ind, license_ind, indiscriminately_parked_ind, eo_lng, officer_id, case_status, color_status_cd, parking_id, ttr_dttm, deployed_ind, status) FROM 's3://XXX/development/test.menifest' CREDENTIALS 'aws_access_key_id=XXXXXXXXXXXXXXXXX;aws_secret_access_key=MYXXXXXXXXXXXXXXXXXXXXXX' json 's3://yourbucket/jsonpath' menifest;
Вот подробный справочник для menifest .
Я надеюсь, что это даст вам некоторые идеи, как двигаться дальше, и если вы заметите конкретную ошибку, я был бы рад перефокусироваться на ответ.