Creando una tubería con nombre en Windows

6

Quiero escribir un gran conjunto de datos de una base de datos de SQL Server 2005 utilizando BCP (programa de copia masiva).

Idealmente me gustaría hacer lo siguiente:

bcp MyDatabase..MyTable OUT STDOUT -c -t, |gzip -c c:\temp\dataset.csv.gz

Sin embargo, BCP simplemente escribe esto en un archivo literal llamado STDOUT.

También intenté:

bcp MyDatabase..MyTable OUT CON: -c -t, |gzip -c c:\temp\dataset.csv.gz

Pero esto vuelve y error de Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file.

Entonces, ¿puedo crear una tubería con nombre en cualquier lugar? He visto pistas en la web de alguna manera comenzando gzip con un extremo atado a un nombre de archivo como \\. \ nombre_pipe - pero como se hace esto?

Actualizar : Tenga en cuenta que los propios Microsoft reconocen que realmente no les importa la eficiencia con SQL Server: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk-insert-compressed-or-named-pipe-support-at-least

PP.
fuente
1
¿Por qué las cosas más simples en el mundo de Microsoft son casi imposibles?
PP.
1
Porque de una "mayoría de clientes de usuarios finales", esto no está en la "lista de cosas simples que quiero hacer". Windows tiene diferentes prioridades. Obviamente, se hizo algo bien con un impulso tan grande en Linux para mejorar su GUI para ponerse al día con Windows ... Por cierto, soy un usuario de Linux desde hace mucho tiempo y odio las ventanas
Dan McGrath

Respuestas:

1

En Unix puedes usar mkfifo para este tipo de cosas, pero por lo que sé, no hay una herramienta de línea de comandos de Windows para crear o manipular canalizaciones con nombre. No son accesibles a las herramientas de línea de comandos de la forma en que lo son las rutas convencionales y UNC.

Puede crear una canalización con nombre en Perl utilizando Win32 :: Pipe, si conoce a Perl lo suficientemente bien. Y podría escribir un cliente Perl para extraer datos de la tubería y enviarlos a STDOUT, pero esto no se puede hacer con elegancia en Windows.

njd
fuente
1

Dudo que puedas hacer eso, o incluso hacer que funcione. ¿Pero no sería más simple hacer esto en dos pasos?

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t,
gzip c:\temp\dataset.csv
shf301
fuente
1
Sí, sería más fácil, pero también conlleva el riesgo de utilizar demasiado espacio en el disco local, y escribe y vuelve a leer datos innecesariamente. Es una cosa ineficiente para hacer.
PP.