因此,我目前仅尝试简单地遍历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
答案 0 :(得分:0)
要添加到该问题的评论中,我将提出两个建议。
每个文件的批量上传到雪花的建议大小为10 MB到100 MB。
我查看了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();
}
答案 1 :(得分:0)
我相信它仍然运行插入。如果要批量插入,则应使用COPY命令。