#snowflake-cloud-data-platform
#snowflake-cloud-data-platform
Вопрос:
Я создал внешнюю функцию, подобную приведенной ниже, с помощью MAX_BATCH_ROWS (это последняя версия snowflake)
create or replace external function my_ext_function(columnValue varchar, schemeName varchar, current_user varchar, current_role varchar, current_available_roles varchar)
returns variant
MAX_BATCH_ROWS = 100000
api_integration = [aws_api_integration]
HEADERS = ('accept','application/json')
CONTEXT_HEADERS = (current_user, current_role)
as '[aws_api_post_url]'
Позже я создал внутреннюю функцию, подобную приведенной ниже, для доступа к внешней функции
create or replace function my_ext_function_internal(columnValue varchar, schemaName varchar)
returns variant
as $$ select my_ext_function(columnValue::string, schemaName, current_user, 'null', 'null') $$
Выше отлично работает, за исключением MAX_BATCH_ROWS. Внешняя функция вызывает шлюз API в AWS, который привязан к моей лямбда-функции. У меня есть операторы печати в lambda для отображения строк, поступающих из snowflake, и это всегда где-то между 1950 и 2050 годами. Увеличение или уменьшение MAX_BATCH_ROWS не имеет никакого значения.
Как я могу убедиться, что snowflake отправляет 100 тыс. строк за один раз в мою лямбда-функцию? Как я могу проверить, что snowflake отправляет строки, предписанные в MAX_BATCH_ROWS. Высоко ценю любой ответ.
Ответ №1:
Размеры пакета не гарантированы:
Поскольку размер пакета и порядок строк не гарантированы, написание функции, которая возвращает значение для строки, зависящей от любой другой строки в этом пакете или предыдущих пакетах, может привести к недетерминированным результатам.
Также обратите внимание, что, поскольку размер пакета не гарантируется, подсчет пакетов не имеет смысла.
MAX_BATCH_ROWS
действует как подсказка, но фактический размер каждого пакета невозможно контролировать.
Комментарии:
1. Спасибо за ваше подтверждение! Кстати, люди из Stack Overflow любят, когда вы повышаете голос и принимаете их ответы (если они полезны для вас).