Я пытаюсь вставить строки длиной 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-строк,выдайте ту же ошибку