ActiveRecord Импорт с SQL-сервера - PullRequest
       60

ActiveRecord Импорт с SQL-сервера

0 голосов
/ 27 сентября 2019

Я пытаюсь вставить строки длиной 5,6 м в базу данных SQLserver из сценария ruby ​​и нахожу самый быстрый способ.Первым решением было написать оператор SQL Insert и передать значения внутри, например

("INSERT INTO fct_coupons_distributed (coupon_campaign_id, coupon_unique_code) VALUES #{batchData}"

, но, поскольку я использую TinyTDS, ограничение составляет 1000 строк за раз.(предложите мне, если я могу это исправить каким-либо образом. Я хотел бы, чтобы 35k строк за раз в одном SQL)

Второй способ, который я попробовал, - использовать ActiveRecord Import gem, с которым у меня возникают проблемы.так что мои данные находятся в цикле и после первой пакетной вставки выдает ошибку типа

ArgumentError: struct size differs

Ruby Script:

  def create_coupons
    campaign = [483, 482]
    start_at = Time.now
    puts start_at
    column = [:coupon_campaign_id, :coupon_unique_code]
    batchData = []
    campaign.each_with_index do |camp_id, index|
      puts "-----------------------------#{index + 1}/80-----------------------------------------"
      70000.times do
        coupon_code = ([*('A'..'Z'),*('0'..'9')]-%w(0 1 I O)).sample(12).join
        batchData << [camp_id, coupon_code]
      end
      FctCoupon.import column, batchData
    end
    puts "start_at: #{start_at}"
    puts "end_at: #{Time.now}"
  end

, поэтому проблема здесьчто он вставляет все 70-килобайтные строки для первого цикла, но когда второй цикл происходит для идентификатора моей кампании, он просто выдает мне сообщение о том, что ArgumentError: struct size differs

то же самое, если я упоминаю batch_size FctCoupon.import column, batchData, batch_size: 35000 после вставки 35k-строк,выдайте ту же ошибку

...