tabla - MySQL volcado en archivos de texto CSV con nombres de columna en la parte superior?
importar archivo sql a sql server (2)
Posible duplicado:
Cómo exportar / volcar una tabla MySql en un archivo de texto que incluye los nombres de campo (también llamados encabezados o nombres de columna)
Uso este fragmento de SQL para volcar una tabla en archivos de texto CSV:
SELECCIONE * FROM marca INTO OUTFILE "e: /brand.csv" CAMPOS TERMINADOS POR '','' CERRADO POR '''' ''LÍNEAS TERMINADAS POR'' / n '''';
Sin embargo, este enfoque no agrega los nombres de las columnas al comienzo del archivo CSV. Mi pregunta es cómo seleccionar todos los nombres de columna / campo, al igual que lo que hace phpMyAdmin cuando exporta la tabla y selecciona "Poner nombres de campos en la primera fila".
Descubrí una manera de tener que ingresar esos nombres manualmente siempre que ejecute MySQL 5 o superior. Aquí está, escrito como un script bash para ejecutar en una línea de comandos de Unix:
DBNAME=<database_name>
TABLE=<table_name>
FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv
#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = ''$TABLE'';" | awk ''{print $1}'' | grep -iv ^COLUMN_NAME$ | sed ''s/^/"/g;s/$/"/g'' | tr ''/n'' '','' > $FNAME
#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME
#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE ''/var/mysql/tempfile.csv'' FIELDS TERMINATED BY '','' OPTIONALLY ENCLOSED BY ''/"'' FROM $TABLE;"
#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME
#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv
Si bien no es la solución más elegante, estoy seguro de que puede ser comprimida en una sola línea por alguien que sabe SQL y / o bash un poco mejor que yo ...
Lo que hace es:
- usa el esquema de información de MySQL para crear un CSV vacío con encabezados de columna
- agrega una nueva línea adicional a ese CSV vacío para que sus datos comiencen a aparecer una nueva línea
- utiliza una consulta bastante estándar "SELECT * INTO OUTFILE ..." para crear un archivo CSV lleno de datos
- Anexa el archivo de datos en el archivo con los encabezados de columna
- borra el archivo de datos (temporal)
¡Buena suerte, y si lo limpias, publica tus resultados!
Creo que esto hace lo que quieres. Estoy usando mysql 5.1.60, esto arroja nombres de campo en la primera línea. Esto usará "/ t" como el separador de campo, no estoy seguro de cómo pedir una coma.
echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv