Criando um pipe nomeado no Windows

6

Eu quero escrever um grande conjunto de dados de um banco de dados do SQL Server 2005 usando o BCP (programa de cópia em massa).

Idealmente, gostaria de fazer o seguinte:

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

No entanto, o BCP apenas grava isso em um arquivo literal chamado STDOUT.

Eu também tentei:

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

mas isso retorna e erro de Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file .

Então, posso criar um pipe nomeado em qualquer lugar? Eu vi dicas na web de alguma forma começando gzip com uma extremidade amarrada a um nome de arquivo como \\. \ named_pipe - mas como isso é feito?

Atualização : Observe que a própria Microsoft reconhece que eles realmente não se importam com eficiência com o SQL Server: link

    
por PP. 03.02.2010 / 11:14

3 respostas

1

No Unix você pode usar mkfifo para esse tipo de coisa, mas até onde eu sei, não existe uma ferramenta de linha de comando do Windows para criar ou manipular pipes nomeados. Eles não são acessíveis às ferramentas de linha de comando da mesma forma que os caminhos convencionais e UNC.

Você pode criar um pipe nomeado em Perl usando Win32 :: Pipe, se você conhece Perl bem o suficiente. E você poderia escrever um cliente Perl para extrair dados do pipe e enviá-los para o STDOUT, mas isso realmente não pode ser feito com elegância no Windows.

    
por 03.02.2010 / 18:40
1

Eu duvido que você possa fazer isso, ou até mesmo fazê-lo funcionar. Mas não seria mais simples fazer isso em duas etapas?

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t,
gzip c:\temp\dataset.csv
    
por 03.02.2010 / 21:26
1

Eu estava apenas procurando a mesma coisa!

Esse cara parece ter feito o bcp para gzip com um trabalho em segundo plano:

link

    
por 04.02.2010 / 02:50