Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails-在临时表上创建和操作?_R_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Rails-在临时表上创建和操作?

Rails-在临时表上创建和操作?,r,ruby-on-rails,ruby,activerecord,R,Ruby On Rails,Ruby,Activerecord,我的背景是R的数据科学,但在我目前的职位上,我通过Rails和ActiveRecord获取数据。我想对我的数据执行转换,创建新列,并以一种临时方式保存它,允许我像常规表一样继续查询它,但不需要实际更改数据库 在R中,这可能类似于: new_table <- old_table[old_table$date >= '2020-01-01'] new_table$average <- mean(new_table$value) new_table='2020-01-01'] 新表

我的背景是R的数据科学,但在我目前的职位上,我通过Rails和ActiveRecord获取数据。我想对我的数据执行转换,创建新列,并以一种临时方式保存它,允许我像常规表一样继续查询它,但不需要实际更改数据库

在R中,这可能类似于:

new_table <- old_table[old_table$date >= '2020-01-01']
new_table$average <- mean(new_table$value)
new_table='2020-01-01']

新表$average由于您的问题含糊不清,我将给出一个可能不适合您使用的一般性答案,但这是目前最好的猜测。有很多方法可以直接使用Rails中的DB连接进行查询,如我上面评论中的链接所述。但作为一个实验,我想看看这是否可行,至少在一个使用Postgres的项目中是这样。我希望它是DB不可知的,所以我避免直接调用DB连接

首先在Rails控制台中创建一个临时类:

rails c
Loading development environment (Rails...

class MyTempTable < ActiveRecord::Base
end
=> nil
这将直接从查询创建临时表。如果需要新临时表中多个表的数据,可以使用join语句,并且可以添加所需的任何其他列

结束编辑

现在您有了一个类,它的行为类似于一个具有常用ActiveRecord方法的表。Rails现在假定数据库中有一个名为my_temp_tables的表(必须是复数)。然后,您可以创建一个临时表(如果您的DBMS支持临时表),如下所示:

MyTempTable.find_by_sql('create temp table my_temp_tables(col1, col2... ')
现在您有了一个包含所需列的临时表。然后可以使用

MyTempTable.find_by_sql('INSERT INTO my_temp_tables SELECT * FROM ....')
然后,您可以像对待Rails中的任何其他模型一样对待MyTestable。如果希望一个表中的所有列与另一个表中的某些列联接,可以如上所述创建临时表,只需首先创建所有列(至少在Postgres中,在MSSQL中,可以直接从select=>join语句创建临时表插入)。如果您是Rails新手,可以通过在现有表上执行此操作来获取列名:

some_columns = SomeTable.column_names
=> ["id", "name", "serial", "purchased", ...]
现在您有了一个列名数组,所以不必键入所有列名。您可以从各个表中列出所需的列,将它们剪切并经过
create temp table…
语句,然后
INSERT
将连接的数据插入
mytentable

如果您经常这样做,您可能希望在文本文件中保留所有列名的列表。您还可以创建完成所有这些任务的Rake任务,并将数据保存为某种格式,或者将其发送到任何应该发送的地方。这样,您可以将所有内容都放在一个文件中,您可以运行它,它将创建临时表,完成工作,然后在关闭临时类和表时消失

你可能想研究一些红宝石,可能有一些现有的宝石可以做你想要的。但作为概念证明,这是可行的。您还可以启动本地Rails应用程序,使用脚本将所需数据导入表中,然后随意刷新和重新创建数据

任何知道更好方法的Rails专家,请添加答案或编辑此答案。这对我来说主要是一个思想实验,因为我想看看这是否可能

如果您想创建以后可以访问的视图,可以使用类似gem的


或者像这样的问题可能会引起兴趣:

因为你的问题很模糊,我会给出一个大概的答案,可能不适合你使用,但这是一个最好的猜测。有很多方法可以直接使用Rails中的DB连接进行查询,如我上面评论中的链接所述。但作为一个实验,我想看看这是否可行,至少在一个使用Postgres的项目中是这样。我希望它是DB不可知的,所以我避免直接调用DB连接

首先在Rails控制台中创建一个临时类:

rails c
Loading development environment (Rails...

class MyTempTable < ActiveRecord::Base
end
=> nil
这将直接从查询创建临时表。如果需要新临时表中多个表的数据,可以使用join语句,并且可以添加所需的任何其他列

结束编辑

现在您有了一个类,它的行为类似于一个具有常用ActiveRecord方法的表。Rails现在假定数据库中有一个名为my_temp_tables的表(必须是复数)。然后,您可以创建一个临时表(如果您的DBMS支持临时表),如下所示:

MyTempTable.find_by_sql('create temp table my_temp_tables(col1, col2... ')
现在您有了一个包含所需列的临时表。然后可以使用

MyTempTable.find_by_sql('INSERT INTO my_temp_tables SELECT * FROM ....')
然后,您可以像对待Rails中的任何其他模型一样对待MyTestable。如果希望一个表中的所有列与另一个表中的某些列联接,可以如上所述创建临时表,只需首先创建所有列(至少在Postgres中,在MSSQL中,可以直接从select=>join语句创建临时表插入)。如果您是Rails新手,可以通过在现有表上执行此操作来获取列名:

some_columns = SomeTable.column_names
=> ["id", "name", "serial", "purchased", ...]
现在您有了一个列名数组,所以不必键入所有列名。您可以从各个表中列出所需的列,将它们剪切并经过
create temp table…
语句,然后
INSERT
将连接的数据插入
mytentable

如果您经常这样做,您可能希望在文本文件中保留所有列名的列表。您还可以创建完成所有这些任务的Rake任务,并将数据保存为某种格式,或者将其发送到任何应该发送的地方。这样,您可以将所有内容都放在一个文件中,您可以运行它,它将创建临时表,完成工作,然后在关闭临时类和表时消失

你可能想研究一些红宝石,可能有一些现有的宝石可以做你想要的。但作为概念证明,这是可行的。您还可以启动本地Rails应用程序,使用脚本将所需数据导入表中,然后随意刷新和重新创建数据

任何Rails专家