У меня есть вариант использования внешних функций.
Выполните действия, описанные в Пример внешней функции
Создав ту же функцию в приведенном выше репозитории GitHub, я смог протестировать лямбда-функцию отдельно и с помощью API на AWS, но когда я вызываю внешнюю функцию из Snowflake, она возвращает эту ошибку.
Ошибка анализа ответа JSON для внешней функции EXT_FUNC_TEST с идентификатором пакета запроса: 1234. Ошибка: объект JSON верхнего уровня должен содержать элемент массива JSON «данные».
Обновление: вот ввод и ответ тестовой полезной нагрузки в лямбда
вход
{"body": "{ \"data\": [ [ 0, 1 ], [ 1, 5], [2, \"a string\" ] ] }"}
ответ
{"statusCode": 200, "body": "{\"data\": [[0, 4], [1, 8], [2, \"Error processing this row...\"]]}"}
Вызов Snowflake select Ext_Func_test(3)
генерирует ввод в CloudWatch как
{"data": [[0, 3]]}
как включить body
во вход?
Snowflake ожидает, что ответ будет в определенном формате. https://docs.snowflake.com/en/sql-reference/external-functions-general.html#data-format-sent-by-snowflake
Что-то вроде:
{
"data":
[
[ 0, 1995 ],
[ 1, 1974 ],
[ 2, 1983 ],
[ 3, 2001 ]
]
}
Похож ли ответ на приведенный выше пример, когда вы тестируете свою лямбду из AWS API?
Я думаю, что вы не используете интеграцию лямбда-прокси. Именно поэтому вы не видите в запросе элемент body. Можете ли вы проверить, включена ли интеграция Lambda Proxy в API?
вы правы, это была недостающая часть, спасибо.
да с тестовой полезной нагрузкой. обновил вопрос с дополнительной информацией