Snowflake SQL, вставьте более 1 строки за раз, используя параметризованный 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
0 ответов
Я считаю, что до сих пор работает вставка. Если вы хотите выполнить массовую вставку, вам следует использовать команду COPY.
В дополнение к комментариям к этому вопросу я хотел бы сделать два предложения.
Рекомендуемый размер для пакетной загрузки в Snowflakes составляет от 10 до 100 МБ на файл.
Я просмотрел документацию по коннектору 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();
}