|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Добрый день, Пытаюсь импортировать файлы в таблицу с поддержкой filestream. Гоняю по списку всех файлов запросы типа: Код: sql 1. 2. 3. 4. 5. 6.
Некоторые файлы, у который длинные имена выдают такую ошибку: Msg 4861, Level 16, State 1, Line 1 Cannot bulk load because the file "\\Server\Folder\subfolder1\...\subfolder7\Very ._Long file name.pdf" could not be opened. Operating system error code (null). Есть ли предел у длины тропинки или имени файла для запроса выше? Если есть, то какой он? У меня максимальная длина тропинки плюс имя файла равна 308. Если я скопирую папку которая меня интересует на локальный диск, то смогу сократить длину полного имени файла на 37 символов. Не уверен, что этого будет достаточно. Как еще можно обойти такое ограничение? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 03:34 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m Как еще можно обойти такое ограничение? Спасибо. Попробуйте добавить \\?\unc : \\?\unc\server\share..... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 04:08 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
x1ca4064 Roust_m Как еще можно обойти такое ограничение? Спасибо. Попробуйте добавить \\?\unc : \\?\unc\server\share..... Не помогает. Даже если я скопирую папки на локальный диск, то некоторые файлы с длинной тропинкой не импортируются. При таком методе максимальная длина тропинки плюс длина имени файла 235. Если я копирую папку на локальный диск, то удается скопировать файлы с длинной полного имени (тропинка плюс имя файла) до 258. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 04:31 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m Не помогает. Даже если я скопирую папки на локальный диск, то некоторые файлы с длинной тропинкой не импортируются. Что происходит, когда выполняете команду (в cmd): copy \\?\unc\server\folder\...\"Very ._Long file name.pdf" 000 или copy "\\?\unc\server\folder\...\Very ._Long file name.pdf" 000 Файл 000 появляется? Если нет, что пишет? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 04:38 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
x1ca4064 Roust_m Не помогает. Даже если я скопирую папки на локальный диск, то некоторые файлы с длинной тропинкой не импортируются. Что происходит, когда выполняете команду (в cmd): copy \\?\unc\server\folder\...\"Very ._Long file name.pdf" 000 или copy "\\?\unc\server\folder\...\Very ._Long file name.pdf" 000 Файл 000 появляется? Если нет, что пишет? Пишет в обоих случаях: The specified path is invalid. Но если сделать: copy \\server\folder\...\"Very ._Long file name.pdf" 000 То появляется файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 04:47 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m Но если сделать: copy \\server\folder\...\"Very ._Long file name.pdf" 000 То появляется файл. Это говорит о том, что этот путь короче 260 символов. Для проверки я создал путь+имя длиной 483 символа: cmd не может принять такую длину, но программно такой файл открывается (с использованием \\?\unc), поэтому сервер тоже должен это мочь. Как вариант можете попробовать использовать команду subst - это позволит сократить путь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 05:14 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
x1ca4064 Roust_m Но если сделать: copy \\server\folder\...\"Very ._Long file name.pdf" 000 То появляется файл. Это говорит о том, что этот путь короче 260 символов. Для проверки я создал путь+имя длиной 483 символа: cmd не может принять такую длину, но программно такой файл открывается (с использованием \\?\unc), поэтому сервер тоже должен это мочь. Как вариант можете попробовать использовать команду subst - это позволит сократить путь. Мне не нужно открыть файл, мне его нужно вставить в таблицу базы. Как мне сделать чтобы запрос ниже работал с длинными именами/тропинками: Код: sql 1. 2. 3. 4. 5. 6.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 06:04 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m Мне не нужно открыть файл, мне его нужно вставить в таблицу базы. для того, чтобы вставить файл в таблицу, его нужно прочесть, а для этого его надо открыть. Как мне сделать чтобы запрос ниже работал с длинными именами/тропинками Попробуйте: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 06:42 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Для особо упертых есть ишо имена 8.3. Но на новых версиях осей - это надо включать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 07:12 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
x1ca4064 Roust_m Мне не нужно открыть файл, мне его нужно вставить в таблицу базы. для того, чтобы вставить файл в таблицу, его нужно прочесть, а для этого его надо открыть. Как мне сделать чтобы запрос ниже работал с длинными именами/тропинками Попробуйте: Код: sql 1. 2. 3. 4. 5. 6.
Не помогает: Msg 4861, Level 16, State 1, Line 16 Cannot bulk load because the file "\\?\unc\Server\Folder\subfolder1\...\subfolder7\testttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt.txt" could not be opened. Operating system error code (null). При этом файл с именем "testttttttttttttttttttttttttttttttttttttttt.txt" в той же папке прекрасно вставляется в таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 07:33 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
aleks222 Для особо упертых есть ишо имена 8.3. Но на новых версиях осей - это надо включать. Как это мне может помочь? Все файлы на файловом сервере. Включать там что-либо я не могу. Существующие файлы/папки переименовывать я тоже не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 07:35 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m aleks222 Для особо упертых есть ишо имена 8.3. Но на новых версиях осей - это надо включать. Как это мне может помочь? Все файлы на файловом сервере. Включать там что-либо я не могу. Существующие файлы/папки переименовывать я тоже не могу. А запустить внешний командник , который будет перебирать файлы и последовательно запускать скрипт. не судьба ? В том числе и переименовывать файл Типа Код: powershell 1.
ну или выбрать длинные имена, и уже попросить автора их сделать покороче. типа Код: powershell 1.
На худой конец сделать в команднике короткий линк . типа Код: powershell 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 08:22 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
bantik Roust_m пропущено... Как это мне может помочь? Все файлы на файловом сервере. Включать там что-либо я не могу. Существующие файлы/папки переименовывать я тоже не могу. А запустить внешний командник , который будет перебирать файлы и последовательно запускать скрипт. не судьба ? В том числе и переименовывать файл Типа Код: powershell 1.
ну или выбрать длинные имена, и уже попросить автора их сделать покороче. типа Код: powershell 1.
На худой конец сделать в команднике короткий линк . типа Код: powershell 1.
Ничего переименовывать я не могу и просить авторов это сделать тоже, ибо файлов около 150-ти тысяч и в имени файла зашито его предназначение. При переименовании эта информация потеряется. Линки создавать при таком количестве файлов тоже не вижу смысла. Структуру папок надо тоже сохранить. Я думаю, что при длине полного имение файла больше некоторого порогового значения просто копировать файл на локальный диск и оттуда его в базу вставлять. А тропинку при этом записывать старую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 08:45 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m, https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 10:02 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m bantik пропущено... На худой конец сделать в команднике короткий линк . типа Код: powershell 1.
Ничего переименовывать я не могу и просить авторов это сделать тоже, ибо файлов около 150-ти тысяч и в имени файла зашито его предназначение. При переименовании эта информация потеряется. Линки создавать при таком количестве файлов тоже не вижу смысла. Структуру папок надо тоже сохранить. Я думаю, что при длине полного имение файла больше некоторого порогового значения просто копировать файл на локальный диск и оттуда его в базу вставлять. А тропинку при этом записывать старую. То что вы делаете - по сути обычный ETL "геморрой". И есть куча инструментов для профессиональной работы. потому как вы все равно потом придете что нужен более сложный процесс - типа - инкрементальная загрузка, многопоточный запуск, запуск по расписанию и пр. Если идти step by step то придется все выбрасывать и начинать с нуля, как только появится новая проблема. Или писать свой "велосипедик" и постоянно его поддерживать. вот я и говорю - зачем - если есть PowerCenter и PowerMart от Informatica, IBM Data Stage и Data Manager, SSIS от Microsoft и пр ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 10:53 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m, у Вас символы пробела в именах, попробуйте заключить строку в двойные кавычки N'"\\Server\Folder\subfolder1\...\subfolder7\Very ._Long file name.pdf"' ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 11:35 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Владислав Колосов Roust_m, у Вас символы пробела в именах, попробуйте заключить строку в двойные кавычки N'"\\Server\Folder\subfolder1\...\subfolder7\Very ._Long file name.pdf"' Дело не в этом, я в скрипт вогнал условие, если длина полного (с папкой) имени файл больше 240 символов, то скопировать этот файл в локальную папку "C:\tmp\" и вставить файл оттуда. Все сразу заработало. При этом в таблицу я вставляю исходную папку с длинным именем. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 03:46 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
invm Да, я уже понял, что дело в длине имени папки и файла. Хорошо знать значение лимита. Как ни странно "\\?\UNC\server\" не помогает. Можно попробовать поменять эту настройку в реестре. Я пока в скрипт включил условие, что если длина имени файла больше определенного значения, то сначала скопировать этот файл в локальную папку и потом импортировать. Таких файлов всего несколько сотен. Как workaround пока подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 03:52 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Ваще, тредстартер херней мается. Не он один, канешно. 1. Делаем FileTable 2. Разрешаем нетранзакционный доступ. 3. XCOPY.exe справится. 4. Бинго! ЗЫ. У FileTable есть недокументированная возможность экономить место - можно включить сжатие файловой системы NTFS. И наслаждаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 07:14 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Трехкратная экономия... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 07:19 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
bantik Roust_m пропущено... Ничего переименовывать я не могу и просить авторов это сделать тоже, ибо файлов около 150-ти тысяч и в имени файла зашито его предназначение. При переименовании эта информация потеряется. Линки создавать при таком количестве файлов тоже не вижу смысла. Структуру папок надо тоже сохранить. Я думаю, что при длине полного имение файла больше некоторого порогового значения просто копировать файл на локальный диск и оттуда его в базу вставлять. А тропинку при этом записывать старую. То что вы делаете - по сути обычный ETL "геморрой". И есть куча инструментов для профессиональной работы. потому как вы все равно потом придете что нужен более сложный процесс - типа - инкрементальная загрузка, многопоточный запуск, запуск по расписанию и пр. Если идти step by step то придется все выбрасывать и начинать с нуля, как только появится новая проблема. Или писать свой "велосипедик" и постоянно его поддерживать. вот я и говорю - зачем - если есть PowerCenter и PowerMart от Informatica, IBM Data Stage и Data Manager, SSIS от Microsoft и пр У меня разовая задача проанализировать какие файлы есть, выбрать из них определенную категорию, например сертификаты по оказанию первой помощи и скормить Amazon для распознавания текста, чтобы найти у кого сертификат действующий а у кого истек. База плюс немного кода в PowerShell с этим прекрасно справятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 08:49 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
aleks222 Ваще, тредстартер херней мается. Не он один, канешно. 1. Делаем FileTable 2. Разрешаем нетранзакционный доступ. 3. XCOPY.exe справится. 4. Бинго! ЗЫ. У FileTable есть недокументированная возможность экономить место - можно включить сжатие файловой системы NTFS. И наслаждаться... Это неплохая идея, интересно, а в этом случае нет ограничения на длину тропинки и файла? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 08:51 |
|
Импорт 150-ти тысяч файлов с длинной тропинкой в базу
|
|||
---|---|---|---|
#18+
Roust_m aleks222 Ваще, тредстартер херней мается. Не он один, канешно. 1. Делаем FileTable 2. Разрешаем нетранзакционный доступ. 3. XCOPY.exe справится. 4. Бинго! ЗЫ. У FileTable есть недокументированная возможность экономить место - можно включить сжатие файловой системы NTFS. И наслаждаться... Это неплохая идея, интересно, а в этом случае нет ограничения на длину тропинки и файла? Наивный чукотский юноша. Ограничения на длину пути заштопаны в глубины ОСи. Еще со времен MS DOS. В FileTable тоже есть ограничения. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 10:34 |
|
|
start [/forum/topic.php?fid=46&fpage=21&tid=1684589]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 427ms |
0 / 0 |