首页 > 解决方案 > 使用 gosnowflake 从应用程序中的雪花表中迭代大型数据集

问题描述

我正在使用gosnowflake使用下面的代码在 Snowflake ~10-50Million 行中迭代一个大表的所有行。

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 分析图像,显示了一个具有约 10M 行的示例表使用了约 5-6GB 内存。

在此处输入图像描述

内存使用量根据源雪花表中的总行数线性增加。

有没有办法在不超过配置的内存限制(如 2 GB)的情况下迭代大型数据集表,而不是分页,这将是多个查询并且成本很高?

标签: gosnowflake-cloud-data-platform

解决方案


推荐阅读