Я пытаюсь отправить записи вызовов API на S3, а затем только конкретные поля для красного смещения. Например, моя программа посылает следующий JSON в S3 успешно:Kinesis to Redshift COPY Команда с использованием JSONPaths Ошибка файла
{
"user": "user_name",
"type": "GET",
"date": "2016-03-22 16:14:13",
"data": [{
"EmpID": 1,
"LastName": "Smith",
"FirstName": "Bob",
"DOB": "1910-01-01",
"SSN": "123456789",
"HireDate": "1910-01-01",
"City": "Town",
"Address": "123 Abc"
}]
}
поле «данные» могут содержать одну запись как пример выше или много записей, если запрос возвращает несколько результатов. Я хочу скопировать только данные из данных в таблицу «Сотрудник» на красном смещении с теми же именами столбцов. Копировать с помощью json 'auto' не работает, потому что он анализирует только поля верхнего уровня. В попытке решить эту проблему, я создал следующий JSON трактов файл:
{
"jsonpaths": [
"$.data[0].EmpID",
"$.data[0].LastName",
"$.data[0].FirstName",
"$.data[0].DOB",
"$.data[0].SSN",
"$.data[0].HireDate",
"$.data[0].City",
"$.data[0].Address",
]
}
Ниже приведен пример запуска моей программы:
- Глажу AWS Веб-проект Java на сервере Tomcat
- Введите http://localhost:000/projectname/rest/employee/1 (который успешно возвращает объект json для идентификатора сотрудника 1 из моего MS SQL se RVer база данных)
- Создает объект JSON в верхней части этого поста с метаданными о вызове и результат запроса
- Пишет этот объект успешно «s3: // ковшом/префикс /»
- пытается запустите команду копирования и выполните сбой. Когда я перехожу на вкладку загрузки моего красшеского кластера для получения дополнительной информации о том, почему загрузка не удалась, статус команды завершен, и в поле SQL указано «Сотрудник КОПИРОВАНИЯ ANALYZE»
Когда я пытаюсь запустить ручную версию команда копирования ниже, я получаю следующее сообщение об ошибке: «ошибка: XX000: файл манифеста не в правильном формате JSON»
COPY employee FROM 's3://bucket/prefix/filename' CREDENTIALS 'aws_access_key_id=<>;aws_secret_access_key=<>' JSON 's3://bucket/jsonpaths.json';
в попытке решить манифест проблемы, я создал следующий файл:
{
"entries": [
{"url":"s3://bucket/prefix/file", "mandatory":true}
]
}
затем выполняет команду копирования:
COPY employee
FROM 's3://bucket/manifest.json'
CREDENTIALS'aws_access_key_id=<>;aws_secret_access_key=<>'
MANIFEST
Это дает stl_load_error: «Разделитель не найден» с сырым значением поля как файл в формате JSON, сохраненные на s3. Если я добавлю строку jsonPaths из предыдущей команды копирования, я получаю ту же ошибку манифеста, что и раньше.
Вопросы:
-Есть файл мои JSONPaths в правильном формате?
-Это лучший способ извлечь из нижних уровней JSONArray?
- Правильный ли формат файла манифеста? Зачем нужен файл манифеста?
Примечание: перед тем, как добавить метаданные, я проверил соединение s3 с redshift только с полями, которые я хотел загрузить, и он загрузился успешно, поэтому маловероятно, что мое назначение красного смещения настроено неправильно.
Благодарим за помощь!
Большое спасибо! Не могу поверить, что я пропустил это. Команда автоматической копии, выпущенная с Kinesis, по-прежнему не работает, но команда ручного копирования работает как минимум. – awsQuestion
Какую часть вы пропустили? Последняя запятая или изменение обозначений на нотацию массива (против точечной нотации)? – TheProletariat
@ketan vijayvargiya, как бы вы справились с этим для всех объектов, используя обозначение скобки? –