是否有针对我的情况使用 ActiveRecord#Pluck 的有效方法?
Is there an efficient means of using ActiveRecord#Pluck for my situation?
我需要将大量数据插入新数据库。例如,lot 数据,因此在此查询的上下文中,即使纳秒也很重要。我正在使用 activerecord-import
批量插入到 Postgres 中,但这对于这个问题的范围来说并不重要。这是我需要的:
对于现有数据库中的每条记录,我需要一个如下所示的数组:
[uuid, timestamp, value, unit, different_timestamp]
问题是 uuid 存储在我循环访问该对象的父对象上,因此 #pluck
对除此之外的每个组件都有效。更烦人的是,它存储为实际的 uuid,而不是字符串,并且需要在新数据库中也存储为 uuid(而不是字符串)。我不确定,但我 认为 在 #pluck
中使用 SELECT
将 return 一个字符串。
但也许更大的问题是我需要在再次插入之前对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)
但是使用上面列出的参数。
我想知道你是否可以将 SQL JOIN
与 pluck
:
结合起来
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')
我需要将大量数据插入新数据库。例如,lot 数据,因此在此查询的上下文中,即使纳秒也很重要。我正在使用 activerecord-import
批量插入到 Postgres 中,但这对于这个问题的范围来说并不重要。这是我需要的:
对于现有数据库中的每条记录,我需要一个如下所示的数组:
[uuid, timestamp, value, unit, different_timestamp]
问题是 uuid 存储在我循环访问该对象的父对象上,因此 #pluck
对除此之外的每个组件都有效。更烦人的是,它存储为实际的 uuid,而不是字符串,并且需要在新数据库中也存储为 uuid(而不是字符串)。我不确定,但我 认为 在 #pluck
中使用 SELECT
将 return 一个字符串。
但也许更大的问题是我需要在再次插入之前对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)
但是使用上面列出的参数。
我想知道你是否可以将 SQL JOIN
与 pluck
:
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')