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.

В дополнение к комментариям к этому вопросу я хотел бы сделать два предложения.

  1. Рекомендуемый размер для пакетной загрузки в Snowflakes составляет от 10 до 100 МБ на файл.

  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

Другие вопросы по тегам