def union_all! datastream
      keys = self.headers | datastream.headers

      output = []

      (self.data + datastream.data).each do |input_row|

        output_row = {}

        keys.each do |key|
          output_row[key] = input_row[key]
        end

        output << output_row
      end

      self.data = output
      self
    end
def union_all! datastream
      keys = self.headers | datastream.headers

      output = []

      (self.data + datastream.data).each do |input_row|

        output_row = {}

        keys.each do |key|
          output_row[key] = input_row[key]
        end

        output << output_row
      end

      self.data = output
      self
    end
TODO: union_all! creates new rows. It should not.