雪花 SQL,使用参数化 SQL 一次插入多行



所以我目前只是尝试简单地遍历 for 循环并将值批量插入到雪花中,但它似乎只是一次运行一个查询,而不是将它们一起膨胀。

我一直在寻找使用 IDbCommand 的其他解决方案,但似乎没有一个有效......

//SnowflakeConnector snowflake = snowflakeCon;
//IDbCommand snowCommand = snowflake.con.CreateCommand();
try
{
IDbCommand cmd = snowflake.con.CreateCommand();
cmd.CommandText = "insert into TEST values (?)";
//IDataReader reader = cmd.ExecuteReader(); // this crashes
var p1 = cmd.CreateParameter();
p1.ParameterName = "1";
p1.Value = 10;
p1.DbType = DbType.Int32;
cmd.Parameters.Add(p1);

for (int i = 0; i < 100; i++)
{
p1.Value = i;
cmd.ExecuteNonQuery(); // inserts one at a time instead of bulk
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

提供的文档是一个非常基本的示例;https://github.com/snowflakedb/snowflake-connector-net

为了补充这个问题的评论,我会提出两个建议。

  1. 批量上传到雪花的建议大小为每个文件 10 MB 到 100 MB。

  2. 我查看了 Snowflake .NET 连接器文档,发现它们不需要 for 循环来插入数据,请尝试以下操作(来自他们的文档(:

using (IDbConnection conn = new SnowflakeDbConnection())
{
conn.ConnectionString = connectionString;
conn.Open();
IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = "insert into t values (?),(?),(?)";
IDataReader reader = cmd.ExecuteReader();
var p1 = cmd.CreateParameter();
p1.ParameterName = "1";
p1.Value = 10;
p1.DbType = DbType.Int32;
cmd.Parameters.Add(p1);
var p2 = cmd.CreateParameter();
p2.ParameterName = "2";
p2.Value = 10000L;
p2.DbType = DbType.Int32;
cmd.Parameters.Add(p2);
var p3 = cmd.CreateParameter();
p3.ParameterName = "3";
p3.Value = (short)1;
p3.DbType = DbType.Int16;
cmd.Parameters.Add(p3);
var count = cmd.ExecuteNonQuery();
Assert.AreEqual(3, count);             
conn.Close();
}

寄件人: https://github.com/snowflakedb/snowflake-connector-net

我相信它仍然运行插入。如果要进行批量插入,则应使用 COPY 命令。

最新更新