(Отправка для пользователя «Снежинка», в надежде получить дополнительную помощь)
Есть ли другой способ ускорить вставку таблицы с использованием хранимой процедуры? Я начал создавать usp с целью вставки примерно миллиона строк тестовых данных в таблицу с целью нагрузочного тестирования.
Я попал на этот этап, показанный ниже, и установил значение итерации равным 10000.
Потребовалось более 10 минут, чтобы выполнить итерацию 10000 раз для вставки одного целого числа в таблицу на каждой итерации
Да - я использую хранилище данных XS, но даже если это значение увеличивается до MAX - этоЭто медленный способ быть полезным.
- создать тестовую таблицу
CREATE OR REPLACE TABLE myTable
(
myInt NUMERIC(18,0)
);
- проверить js usp с помощью оператора while с намерением вставить несколько строк вТаблица (Миллионы) для нагрузочного тестирования
CREATE OR REPLACE PROCEDURE usp_LoadTable_test()
RETURNS float
LANGUAGE javascript
EXECUTE AS OWNER
AS
$$
//set the number of iterations
var maxLoops = 10;
//set the row Pointer
var rowPointer = 1;
//set the Insert sql statement
var sql_insert = 'INSERT INTO myTable VALUES(:1);';
//Insert the fist Value
sf_startInt = rowPointer + 1000;
resultSet = snowflake.execute( {sqlText: sql_insert, binds: [sf_startInt] });
//Loop thorugh to insert all other values
while (rowPointer < maxLoops)
{
rowPointer += 1;
sf_startInt = rowPointer + 1000;
resultSet = snowflake.execute( {sqlText: sql_insert, binds: [sf_startInt] });
}
return rowPointer;
$$;
CALL usp_LoadTable_test();
До сих пор я получил следующие рекомендации:
Рекомендация № 1
Одна вещь, которую вы можете сделать, это использовать «таблицу фидеров», содержащую 1000 или более строк вместо INSERT ... VALUES , например:
INSERT INTO myTable SELECT <some transformation of columns> FROM "feeder table"
Рекомендация № 2
При выполнениимиллион вставок в одну строку, вы потребляете миллион микроперегородок - каждый по 16 МБ.
Этот кусок памяти размером 16 ТБ может быть виден в вашем счете «Снежинка» ... Обычные таблицы сохраняются в течение минимум 7 дней после удаления.
Чтобы оптимизировать хранилище, вы можете определить ключ кластеризации и загружать таблицу в порядке возрастания, при этом каждый блок заполняет как можно большую часть микроперегородки.
Рекомендация# 3
Использовать функции генерирования данных, которые работают очень быстро, если вам нужны последовательные целые числа: https://docs.snowflake.net/manuals/sql-reference/functions/seq1.html
Любые другие идеи?