Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql SQL循环读取数据,然后将数据写入文件_Mysql_Sql_R_Plyr - Fatal编程技术网

Mysql SQL循环读取数据,然后将数据写入文件

Mysql SQL循环读取数据,然后将数据写入文件,mysql,sql,r,plyr,Mysql,Sql,R,Plyr,我有一个数据集,有5700万行和23列。有一列包含不同鸟类的物种名称(大约2000个唯一名称),我想为每个唯一的物种名称提取两列数据(纬度、经度),并将每个物种的lat/long数据写入文件,以物种名称作为文件名。从我唯一知道的语言R开始,这需要很长时间。此任务的适当代码是什么 我在这里尝试使用一些伪代码来演示我猜代码大概是什么样子的: FOR i IN 1:unique(species_name) SELECT latitude,longitude WHERE species_name

我有一个数据集,有5700万行和23列。有一列包含不同鸟类的物种名称(大约2000个唯一名称),我想为每个唯一的物种名称提取两列数据(纬度、经度),并将每个物种的lat/long数据写入文件,以物种名称作为文件名。从我唯一知道的语言R开始,这需要很长时间。此任务的适当代码是什么

我在这里尝试使用一些伪代码来演示我猜代码大概是什么样子的:

FOR i IN 1:unique(species_name)
    SELECT latitude,longitude WHERE species_name=[i]
    WRITE [some code that writes a text file with species name as the file name]
LOOP END;
我想我可以在OSX上的终端上做这种事情

编辑20111211: 这是我在R的工作流程:

 require(RMySQL);
 require(plyr)
 drv <- dbDriver("MySQL")
 con <- dbConnect(drv, user = "asdfaf", dbname = "test", host = "localhost")
 splist <- read.csv("splist_use.csv")
 sqlwrite <- function(spname) {
   cat(spname) g1 <- dbGetQuery(con
     , paste("SELECT col_16,col_18 FROM dat WHERE col_11='"
     , spname, "'", sep="")
     )
   write.csv(g1, paste(spname, ".csv", sep=""))
   rm("g1") }
 l_ply(splist, sqlwrite, .progress="text" )
require(RMySQL);
需要(plyr)

drvIMHO您能做的最好的事情就是使用脚本语言(python、perl、php、shell)并从中生成文件名和查询。这不太难,但你得学一门不同的语言。SQL不适合命令式编程。

Excel文件输出是否可以接受,您是否有Excel?如果是这样,您可以使用Excel连接到数据库,并发出查询以提取数据。然后是.xls或csv格式。格式。但是,这假设您的结果小于1000000

在excel中 转到“数据”选项卡 从其他来源中选择 选择并输入首选的连接方法
从这里可以定义要运行的表或查询。(如果结果少于您所在excel版本的工作表上支持的行数),则使用您选择的方法将提取文件。应该比您当前执行的IO更快。

您是否尝试过使用MySQL输出文件功能

SELECT col_16,col_18 
FROM 
dat 
WHERE col_11= spiecesname
INTO OUTFILE '/tmp/spiecesname.csb'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
只需做一点工作,您就可以让MySQL挑出每个独特的物种名称,遍历结果并输出到一个独特的csv文件


在查询中应该有order by子句

您使用的是什么SQL server?大多数都提供了一个导出功能,我认为在您的特定情况下,这个功能会快得多。我唯一的GUI界面是SequelPro。对,我可以导出,但我必须过滤物种,然后导出,然后做2000次,这有点多。好的。我希望有一个R解决方案,从R调用MySQL,但我可能应该学习适合这个特定问题的语言。如果你对R感到满意,使用R。我知道R有一个postgres接口,也可能有一个MySQL接口。只要发布你所得到的,人们就可以在R部分、sql部分或接口部分帮助你。为了您的理智:以“只读”方式访问数据库,或者处理数据库的副本,或者确保您有备份;require(plyr)drv只需添加一个空行,并用4个空格缩进代码块。顺便说一句,我加了一个“)”,并把它切成几行,以适应表格的宽度;希望R允许这样的多行语句(我不知道R)。代码块现在完成了吗?很有趣。我不知道这是可能的。我已经使用了一个PHP/MySQL解决方案,但这是一个很好的替代方案。哦,很酷,谢谢你的提示。不久前,我从一位朋友那里找到了一个使用PHP和MySQL的解决方案,但这很好。