MAX_BATCH_ROWS не работает для внешней функции в snowflake

#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 любят, когда вы повышаете голос и принимаете их ответы (если они полезны для вас).