0

我需要将大量数据插入新数据库。就像,很多数据,所以在这个查询的上下文中甚至纳秒计数。我习惯于activerecord-import批量插入 Postgres,但这对于这个问题的范围并不重要。这是我需要的:

对于现有数据库中的每条记录,我需要一个如下所示的数组:

[uuid, timestamp, value, unit, different_timestamp]

问题是 uuid 存储在我正在循环访问该对象的父对象上,因此#pluck除此之外,它还适用于每个组件。更烦人的是它存储为实际的 uuid,而不是字符串,并且还需要在新数据库中存储为 uuid(不是字符串)。我不确定,但我认为使用SELECTinside of#pluck会返回一个字符串。

但也许更大的问题是我需要在value再次插入之前对 的值进行转换。这是一个简单的转换,实际上只是value / 28或其他东西,但我发现很难在#pluck没有附加#each_with_object或其他东西的情况下将其工作(这大大减慢了速度)

这是现在的查询。根据上面概述的阻塞加载整个记录对我来说似乎真的很愚蠢。我希望有一个替代方案。

Klass.find_each do |klass|
    Data.where(token: klass.token).find_each do |data|
      data << [
        klass.uuid,
        data.added_at,
        data.value / conversion,
        data.unit, 
        data.created_at
      ]
    end
end

不,父母和Data现在没有关联,这不是一个选项,所以我不能急切加载或只是调用Klass.data(他们将在此转换后链接)。

所以理想情况下,这就是我正在寻找的:

Data.where(token: klass.token).pluck(:added_at, :value, :unit, :created_at)

但是使用上面列出的参数。

4

1 回答 1

1

我想知道您是否可以将 SQLJOINpluck

Klass
  .joins('INNER JOIN datas ON datas.token = klasses.token')
  .pluck('klasses.uuid', 'datas.added_at', "datas.value / #{conversion.to_f}", 'datas.unit', 'datas.created_at')
于 2018-07-19T18:06:47.097 回答