Выполните итерацию по большому набору данных из таблицы snowflake в приложении с помощью gosnowflake

# #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 ГБ, кроме разбиения на страницы, что потребует нескольких запросов и будет дорогостоящим?