Ответ 1
Я не очень хорошо знаком с Amazon, но позвольте мне попытаться ответить на большинство ваших вопросов, чтобы вы могли двигаться дальше. Другие люди могут отредактировать этот ответ или дополнительные сведения. Спасибо!
Не уверен, какой должен быть оператор Create table в Redshift
У вашего оператора create table vehicle_status(...)
нет проблем, хотя вы можете добавить distribution key
sort key
и encoding
на основе вашего требования, подробнее здесь и здесь
Согласно документам AWS Kenesis, ваша таблица должна присутствовать в Redshift
, поэтому вы можете подключиться к Redshift
с помощью команды psql
и запустить create statement
вручную.
Каким должен быть Синтаксис COPY в кирсисе Кинсиса.
Синтаксис Copy
останется таким же, как вы его запускаете через psql
или firhose
, к счастью, сценарий копирования, который вы придумали, работает без ошибок, я попробовал его в своем экземпляре с небольшой модификацией прямого предложения ключей 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 firehouse настроен на возвращение только json в мое ведро s3.
Я использовал только ваши данные json
и он работает, поэтому я не вижу здесь никакой проблемы.
Как упомянуть Maniphest в команде COPY
Это хороший вопрос, я мог бы попытаться объяснить это, надеюсь, здесь вы имеете в виду menifest
.
Если вы видите команду над копией, она отлично работает для одного файла или пары файлов, но думаю, что у вас много файлов, здесь идет концепция menifest
. Прямо из документов Amazon: "Вместо того, чтобы поставлять объектный путь для команды COPY, вы указываете имя текстового файла в формате JSON, в котором явно указаны файлы для загрузки".
Короче говоря, если вы хотите загружать несколько файлов в один снимок, что также предпочтительнее Redshift
, вы можете создать простой menifest
с json и предоставить его в команде copy.
{ "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;
Вот подробный справочник для манифеста.
Надеюсь, это даст вам некоторые идеи, как двигаться дальше, и если есть особая ошибка, которую вы видите, я был бы счастлив переориентироваться на ответ.