1

我正在尝试从 ruby​​ 脚本将 5.6m 行插入 SQLserver db 并找到最快的方法。第一个解决方案是编写一个 SQL Insert 语句并在里面传递值

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

但当我使用 TinyTDS 时,一次限制为 1000 行。(如果我能以任何方式修复它,建议我。我想在一个 SQL 中一次 35k 行)

我尝试的第二种方法是使用ActiveRecord Import我遇到问题的 gem。所以我的数据在循环中,在第一批插入后它给了我一个错误,比如

ArgumentError: struct size differs

红宝石脚本:

  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

所以这里的问题是它为第一个循环插入了所有 70k 行,但是当我的广告系列 ID 发生第二个循环时,它只会给我一个错误说ArgumentError: struct size differs

FctCoupon.import column, batchData, batch_size: 35000如果我在插入 35k 行后提到一个 batch_size ,它会给出相同的错误

4

0 回答 0