Sha256: dec7e5c96abb5fa23703390aca47743aae2a586db9b36e168a28b813744b007f

Contents?: true

Size: 773 Bytes

Versions: 5

Compression:

Stored size: 773 Bytes

Contents

require 'chicago/etl/sink'

module Chicago
  module ETL
    # Wrapper around a dataset to allowed buffered inserts.
    #
    # @api public
    class BufferingInsertWriter < Sink
      # The number of rows written before inserting to the DB.
      BUFFER_SIZE = 10_000
      
      def initialize(dataset, column_names, key=nil)
        super([], column_names, key)
        @dataset = dataset
      end
      
      def flush
        @dataset.insert_replace.import(column_names, output)
        output.clear
      end

      protected

      def write(row)
        output << @column_names.map {|name| row[name] }
        flush if reached_buffer_limit?
      end

      private

      def reached_buffer_limit?
        output.size >= BUFFER_SIZE
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
chicago-etl-0.0.13 lib/chicago/etl/buffering_insert_writer.rb
chicago-etl-0.0.12 lib/chicago/etl/buffering_insert_writer.rb
chicago-etl-0.0.11 lib/chicago/etl/buffering_insert_writer.rb
chicago-etl-0.0.10 lib/chicago/etl/buffering_insert_writer.rb
chicago-etl-0.0.9 lib/chicago/etl/buffering_insert_writer.rb