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

3623
PP.

Я хочу написать большой набор данных из базы данных 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- вставить сжатый или названные однотрубную Опорно-на- крайней мере ,

6
Почему самые простые вещи в мире Microsoft практически невозможны. PP. 14 лет назад 1
Потому что от «большинства клиентов конечного пользователя» это не входит в «список простых вещей, которые я хочу сделать». У Windows разные приоритеты. Очевидно, что он сделал что-то правильно с таким большим толчком в Linux, чтобы улучшить свой графический интерфейс, чтобы догнать Windows ... Кстати, я давний пользователь Linux и ненавижу Windows Dan McGrath 14 лет назад 1

3 ответа на вопрос

1
njd

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

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

1
shf301

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

bcp MyDatabase..MyTable OUT c:\temp\dataset.csv -c -t, gzip c:\temp\dataset.csv 
Да, это было бы проще, но также сопряжено с риском использования слишком большого объема локального дискового пространства и излишней записи и повторного чтения данных. Это неэффективная вещь. PP. 14 лет назад 1
1
Peter Radocchia

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

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

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