【发布时间】:2021-02-28 22:57:20
【问题描述】:
我的背景是 R 的数据科学,但在我目前的职位上,我正在通过 Rails 和 ActiveRecord 提取数据。我想对我的数据执行转换并创建新列并以临时方式保存它,这样我就可以像常规表一样继续查询它,但实际上不对数据库进行更改。
在 R 中,这可能类似于:
new_table <- old_table[old_table$date >= '2020-01-01']
new_table$average <- mean(new_table$value)
我会使用这个 new_table 并执行我可以对 old_table 执行的任意数量的查询,一旦我关闭我的应用程序,我希望这个临时表也会被删除。
这种特殊的转换很简单,不需要新表,但是例如,我想用我的 new_table 加入许多表。如果我可以执行一次转换然后加入它会更容易,而不是加入 old_table 并每次都执行转换。
【问题讨论】:
-
当你说它会更容易你关心在源代码中更容易编写和维护什么?还是让数据库引擎更简单、更高效?
-
源代码当然更容易。我认为数据库引擎也会更容易,因为它似乎计算量较小,因为我只运行一次必要的转换。这不正确吗?
-
根据您使用的数据库服务器,物化视图可能是您正在寻找的。可以通过一些技巧在 Postgres 和 MySql 中创建一个
-
您可以使用视图,并且有一些宝石。但是您也可以使用其中一种 SQL 方法或直接访问该系统直接在数据库中创建临时表。这是一个很好的例子...honeybadger.io/blog/…
-
不清楚您最后所说的“每次”和“关闭应用程序”是什么意思。传统的 Rails 应用程序是 Web 应用程序,并使用 ActiveRecord 进行持久化。在这种情况下,你是如何使用 Rails 的?您是否正在描述您想要跨多个不同的网页视图执行以与数据交互的工作?或者这是您从控制台执行的操作?如果没有更多细节,您的问题将很难回答。
标签: r ruby-on-rails ruby activerecord