Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash&;MySQL。需要一种方法查询数据库一次并按帐户ID排序_Mysql_Bash_Loops - Fatal编程技术网

Bash&;MySQL。需要一种方法查询数据库一次并按帐户ID排序

Bash&;MySQL。需要一种方法查询数据库一次并按帐户ID排序,mysql,bash,loops,Mysql,Bash,Loops,好的,我在一个数据库表中有大约200个唯一的帐户ID,看起来像这样 账户ID,字段1,字段2,字段3 目前我有一个bash脚本,它首先获取所有帐户的ID,然后通过每个ID循环,将数据转储到CSV文件中。非常直截了当。问题是数据库在过去几年中变得巨大,我的脚本已经变得低效,因为它循环了200次,即200个查询到数据库。目前,每个查询可能需要5到60分钟,这对于每天运行的脚本来说是不好的 是否有一种方法可以查询数据库一次而不是200次,并按帐户ID将数据排序到CSV中 今天我的脚本如下所示: #!/

好的,我在一个数据库表中有大约200个唯一的帐户ID,看起来像这样

账户ID,字段1,字段2,字段3

目前我有一个bash脚本,它首先获取所有帐户的ID,然后通过每个ID循环,将数据转储到CSV文件中。非常直截了当。问题是数据库在过去几年中变得巨大,我的脚本已经变得低效,因为它循环了200次,即200个查询到数据库。目前,每个查询可能需要5到60分钟,这对于每天运行的脚本来说是不好的

是否有一种方法可以查询数据库一次而不是200次,并按帐户ID将数据排序到CSV中

今天我的脚本如下所示:

#!/bin/bash

# Get all ACCOUNT_ID's from database as $a
for a in `echo "select ACCOUNT_ID from table;" | $MYSQL -u $USER -p$PASS -h $HOST $DBNAME -N`

# Loop through database
do

  # For each ACCOUNT_ID query database and dump to CSV file
  $MYSQL -u $USER -p$PASS -h $HOST $DBNAME -s -N -e "select ACCOUNT_ID,FIELD1,FIELD2,FIELD3 FROM table WHERE ACCOUNT_ID=${a};" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' >> /path/${a}-filename.csv

done

如果你不想让我们展示真实的剧本。这里有一点帮助

您只需将输出通过管道传输到awk,将其拆分为单独的文件,如下图所示,并且您只需使用一个查询

 $MYSQL -u $USER -p$PASS -h $HOST $DBNAME -s -N -e \
 "select ACCOUNT_ID,FIELD1,FIELD2,FIELD3 FROM table ORDER BY ACCOUNT_ID;" | \
    sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' | \
    awk -F, '{gsub(/"/, "", $1); print > "ppp/"$1"-filename.csv"}'

那是原稿吗??这行不通。“table”是MySQL中的一个关键字,如果没有反勾号,就不能将其用作表名。因此,请发布您的真实脚本,我们可以帮助您为什么总是将输出附加到文件“>>/path/${a}-filename.csv”中。这是正确的吗??是否要为每个ID使用上次运行的旧数据创建一个自己的文件?脚本和查询比较复杂,有很多表联接,因此这不是实际的脚本。只是一个调低版本的相同的东西。是的,我需要一个CSV文件为每个帐户ID和在这个文件中的旧数据(总是附加)?这是完美的工作。非常感谢。一个小问题。它将CSV文件保存为:“2”-filename.CSV(2是帐户ID)。如何保存文件名中没有引号的文件?试试这个:awk-F,{gsub(/“/,”,$1);print>“ppp/“$1”-filename.csv”}在我的回答中已经更改了它。这也可以使用MySQL OUTFILE吗?嘿,Bernd,我刚刚发现了一个问题,直到现在我才发现。当我查看我的csv文件时,我丢失了数据之前的“前导”。见下文。