Создание именованного канала в Windows

Я хочу написать большой набор данных из базы данных SQL Server 2005, используя BCP (программу массового копирования).

В идеале я хотел бы сделать следующее:

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

Однако BCP просто записывает это в буквальный файл с именем STDOUT.

Я также попробовал:

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

но это возвращает и ошибка Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file,

Итак, я могу создать именованный канал в любом месте? Я видел в Интернете намеки на запуск gzip с одним концом, связанным с именем файла, вроде \\. \ named_pipe - но как это сделать?

Обновление: обратите внимание, что сами Microsoft признают, что они действительно не заботятся об эффективности с SQL Server: http://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk-insert-compressed-or-named-pipe-support-at-least крайней мере,

3 ответа

Решение

В Unix вы можете использовать mkfifo для такого рода вещей, но, насколько я знаю, нет инструмента командной строки Windows для создания именованных каналов или манипулирования ими. Они недоступны для инструментов командной строки, как обычные и UNC-пути.

Вы можете создать именованный канал в Perl, используя Win32::Pipe, если вы достаточно хорошо знаете Perl. И вы могли бы написать Perl-клиент, который будет извлекать данные из канала и отправлять их в STDOUT, но в Windows это действительно невозможно сделать элегантно.

Я просто искал то же самое!

Этот парень, кажется, выполнил bcp to gzip с фоновой работой:

http://jcarlossaez.spaces.live.com/blog/cns!B3378F057444B65C!108.entry

Я сомневаюсь, что вы можете сделать это, или даже заставить его работать. Но не проще ли сделать это в два этапа?

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t,
gzip c:\temp\dataset.csv
Другие вопросы по тегам