headers - Convierte los resultados de la consulta de MySQL a CSV(con copiar/pegar)
select export mysql (6)
A menudo trabajo en la línea de comando mysql. Una necesidad común es tomar los resultados de una consulta e importarlos en un documento de Números (similar a un documento de Excel).
¿Cuál es el método más rápido para hacer esto?
Método 1: Seleccione en archivo externo
Puede seleccionar un archivo directo directamente desde MySQL, pero esto requiere varios pasos.
- Exporte su consulta con todos los argumentos necesarios para que sea un formato CSV, como
FIELDS OPTIONALY ENCLOSED BY
DELIMITED BY
YDELIMITED BY
. - sftp en el servidor y tomar el archivo
- eliminar el archivo del servidor
Método 2: copiar / pegar
Tiendo a hacer este método. Para mí parece un poco más rápido, pero eso se debe principalmente a que no recuerdo cómo construir la consulta SELECT INTO OUTFILE
desde arriba y tengo que buscarla.
- Copie / pegue en un archivo de texto local
- Abrir en un editor de texto y reemplazar | con ,
- Guarde como un CSV y ábralo en Números.
¿Qué tal esto?:
mysql -b -e "$ MY_QUERY"> my_data.csv
El formato de salida está separado por tabuladores en lugar de por comas, pero al menos Excel y OpenOffice Calc se adaptan automáticamente a esto.
Por cierto, para mayor comodidad y para permitir la ejecución no interactiva de comandos mysql, recomiendo encarecidamente la configuración de un archivo seguro ~ / .my.cnf
(legible solo por ti) con entradas como esta:
[client]
user=YOUR_MYSQL_USER_NAME
password=YOUR_MYSQL_PASSWORD
host=YOUR_MYSQL_SERVER
port=YOUR_MYSQL_SERVER_PORT
WHATEVER_OTHER_OPTIONS_YOU_LIKE
Referencias
http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html
--batch, -B
Imprima los resultados usando la pestaña como el separador de columnas, con cada fila en una nueva línea. Con esta opción, mysql no usa el archivo de historial.
El modo por lotes da como resultado un formato de salida no tabular y el escape de caracteres especiales. Escapando puede ser deshabilitado usando el modo raw; vea la descripción de la opción --raw.
Excel tiene una función de Text to Columns
en el menú Data
que le permite especificar un delímetro personalizado. Supongo que Numbers tendría una funcionalidad similar. Si lo hace, entonces la solución es copiar y pegar directamente en su documento Numbers y luego convertir esas celdas de texto a columnas especificando |
como el delimitador
Puede ejecutar una consulta SELECT ... INTO OUTFILE
en su computadora local y hacer que guarde el archivo localmente. Si tiene instalada la utilidad de línea de comandos mysql * localmente, simplemente agregue el indicador -h <ip-address>
para conectarse a un host específico. mysql
también puede leer desde la entrada estándar, para que pueda configurar un archivo .sql que usará para importar.
Archivo SQL ( outfile.sql
):
SELECT * FROM myTable WHERE date>CURDATE()
INTO OUTFILE ''/home/me/outfile.csv'' -- Specify output file (if Windows, make sure
-- to use backslashes and escape them
-- (C://Users//<user>//...)
FIELDS
OPTIONALLY ENCLOSED BY ''"''
ESCAPED BY ''"'' -- Results in double quotation marks, which I have found Excel
-- requires (instead of using a backslash to escape)
TERMINATED BY ''//n'' -- or your line ending of choice
-- (i believe escaping is required)
Luego emitirías el siguiente comando:
mysql -u <user> -p -h <server_ip_address> <outfile.sql
Tenga en cuenta que podría ser una buena idea crear un nuevo usuario que se pueda conectar desde su dirección IP remota, con permisos FILE y solo SELECT
acceso a las tablas que necesita consultar.
Inicialmente se trata de un poco de configuración, pero al final, puede simplemente pegar el comando mysql
en un archivo por lotes y hacer que sea un proceso de dos clics.
* Creo que tienes que descargar el sistema completo MySQL, que viene con la CLI de mysql
.
Su opción 1 es la mejor, creo. Hágalo una vez e imprima las opciones correctas o incluso mejor, cree una pequeña secuencia de comandos que acepte una consulta y agregue automáticamente sus opciones de encuadernación y delimitador favoritas.
También puede omitir los pasos 2 y 3 si instala la utilidad del cliente mysql para su plataforma cliente y, si es posible, conéctese directamente al servidor mysql desde su estación de trabajo.
También puede usar la utilidad de línea de comandos mysql
con la opción -e
y canalizar la salida a un archivo. Esto generará datos en formato delimitado por tabuladores.
Usa tu primer método con la siguiente modificación:
En lugar de ejecutar el comando en el servidor, puede ejecutarlo en su máquina local y guardar el archivo directamente, sin la necesidad de sftp y eliminarlo. Para eso, tiene que enviar el puerto mysql a un puerto libre en su máquina local.
ssh -L 3306:localhost:3306 user@remoteserver
El primer "3306" es el puerto en la máquina local. "localhost" hace referencia al nombre de host remoteservers. El segundo "3306" es el puerto en la máquina remota, que se reenviará. Si el servidor MySQL se ejecuta en un puerto diferente, debe usar ese puerto. Después de iniciar sesión, mantenga la sesión ssh abierta todo el tiempo que desee.
En una nueva ventana de terminal, puede iniciar su sesión de MySQL.
mysql -hlocalhost -uUser -p --port=3306
Este método tiene la ventaja de que no tiene que exponer su servidor MySQL a Internet y está transfiriendo todos los datos a través de un túnel cifrado.