# #go #snowflake-cloud-data-platform
Вопрос:
Я использую gosnowflake для перебора всех строк большой таблицы в Snowflake ~10-50 миллионов строк, используя приведенный ниже код.
db, err := sql.Open("snowflake", dsn)
defer db.Close()
query = `SELECT * from TEST_TABLE`
rows, err := db.QueryContext(ctx, query)
defer rows.Close()
for rows.Next() {
err := rows.Scan(...)
if err != nil {
log.Fatalf("failed to get result. err: %v", err)
}
}
Для больших таблиц приведенный выше код приводит к исключению нехватки памяти. Используя инструмент pprof, похоже, что большая часть памяти используется gosnowflake. Ниже приведен один пример изображения анализа pprof, показывающего использование ~5-6 ГБ памяти для образца таблицы с ~10 млн строк.
Использование памяти продолжает линейно увеличиваться в зависимости от общего количества строк в исходной таблице snowflake.
Есть ли способ перебирать большие таблицы наборов данных, не превышая при этом заданный лимит памяти, например 2 ГБ, кроме разбиения на страницы, что потребует нескольких запросов и будет дорогостоящим?