Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Всем здравствуйте!
У нас небольшая организация. Не можем нанять админа. Все делаю сам. Сейчас стоит задача по сбору данных на еженедельной основе. Есть идея реализовать таким образом: Данные в dbf файлах выкладывают на наш портал ftp. SQL server берет эти данные и схлопывает в таблицу. Еженедельно выкладывают около 10000 "легких" файлов. Файлы нам обещали выкладывать стандартезированные по полям и их форматам. Кто то решал подобные задачи? Что можете посоветовать? Интересует в плане подобных скриптов по забору данных с ftp (запаролен вход к слову тк внешние организации). Сам впервые работаю с подобной задачей. Если можно истолкуйте все как для нуба) огромное спасибо за участие!!!
Если есть предложения как настроить проще процесс - буду только благодарен.
20 сен 15, 12:54    [18172026]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
https://www.mssqltips.com/sqlservertip/2884/sql-server-integration-services-ssis-ftp-task-for-data-exchange/
20 сен 15, 14:18    [18172178]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Beginners,

По-моему, лучше формат сменить на CSV, если это возможно. Dbf - динозавр, с которым придется трахаться на x64. Даже если сейчас вдруг x32, перспектива не в пользу dbf.
По поводу организации доступа, думаю, лучше в качестве сетевого диска настроить (с сохранением логина-пароля) и обеспечить доступ службе mssql agent (там свой пользователь, но настроить можно хоть на админа).А
дальше читаем про xp_cmdshell, вспоминаем про команду dir для получения списка файлов в папке и дальше поштучно загружаем в базу. Про чтение csv welcome в поиск по форуму.
Если вдруг, как это иногда бывает, сетевой диск будет самопроизвольно отключаться, можно его пересоздавать из командной строки (тот же xp_cmdshell в помощь). Даже если он при этом работает, ничего страшного не случится.
20 сен 15, 15:21    [18172319]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Сид
Dbf - динозавр, с которым придется трахаться на x64.


select @@version;
go

select *
from 
	openrowset
	(
		'Microsoft.ACE.OLEDB.12.0',
		'dBASE IV;Database=C:\temp\fias\',
		'SELECT * FROM STRSTAT.DBF'
	)
go

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
	Apr 20 2015 17:29:27 
	Copyright (c) Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)


(1 row(s) affected)

STRSTATID              NAME                 SHORTNAME
---------------------- -------------------- --------------------
0                      Не определено        NULL
1                      Строение             стр
2                      Сооружение           сооружение
3                      Литер                литер

(4 row(s) affected)
20 сен 15, 16:29    [18172471]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31785
Сид
По-моему, лучше формат сменить на CSV, если это возможно
+1
Не то, что с dbf работать невозможно, но всё таки будет менее удобно, чем с csv или xml (для сложных структур)
20 сен 15, 19:06    [18172754]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
про возможность смены формата я просто решил учесть тех, кто, собственно, скидывает файлы. Мы ж не знаем, откуда они берутся, может быть dbf - единственный возможный (или приемлемый по срокам, деньгам и т.д.) вариант. А если всё равно - CSV.
В данном конкретном случае XML большого смысла не имеет, если, конечно, там не 100+ колонок (когда в случае ошибки убьёшься искать, в чём дело). Если действительно файлы широкие, я бы присмотрелся к варианту с XML, чтобы потом было проще поддерживать и отслеживать возможные ошибки. Ибо "Файлы нам обещали выкладывать стандартизированные по полям и их форматам" ещё не на 100% означает, что они на самом деле такими окажутся.
20 сен 15, 21:32    [18173004]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31785
Сид
В данном конкретном случае XML большого смысла не имеет, если, конечно, там не 100+ колонок (когда в случае ошибки убьёшься искать, в чём дело). Если действительно файлы широкие, я бы присмотрелся к варианту с XML, чтобы потом было проще поддерживать и отслеживать возможные ошибки.
Не только "широкие", для стложных структур (когда вам передают данные из связанных таблиц) XML тоже удобен.
Сид
Ибо "Файлы нам обещали выкладывать стандартизированные по полям и их форматам" ещё не на 100% означает, что они на самом деле такими окажутся.
Вот именно. Вам дают файл, вы его даже прочитать не можете, а они говорят "А вот наш FouTetyftrb 5.2.9 for DOS его прекрасно читает!"
21 сен 15, 10:06    [18173819]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Всем большое спасибо за советы.

Файлы не широкие и не длинные :) буквально 30 строк и 5 столбцов.

и работать можем пока только с dbf.

Можете поподробнее описать процесс пофайловой загрузки?
Я упираюсь в то, что у меня вылетают, такие ошибки:
У меня в "Связанные серверы" - "Поставщики" нет Microsoft.ACE.OLEDB.12.0. Есть только MSDASQL. Пытаюсь работать через него.

Пишу скрипт:
+

SELECT *
FROM OPENROWSET('MSDASQL','Driver={Microsoft dBase Driver (*.dbf)};
SourceDB=C:\;DefaultDir=C:\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Null=No;Deleted=No;',
'SELECT * FROM f130.dbf')


Возникает ошибка:
+

Поставщик OLE DB "MSDASQL" для связанного сервера "(null)" вернул сообщение "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию".
Сообщение 7303, уровень 16, состояние 1, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "MSDASQL" для связанного сервера "(null)".


Играл с параметрами, но ничего не выходит. Гуглил, но видимо слишком слаб в SQL Server и не понимаю, как это поправить :(

Через exec xp_fileexist 'C:\f130.dbf' файл вижу. Может кто-то подкинет пошаговую инструкцию для совсем нуба?..

Пока пытаюсь хотя бы с диска загрузить, что бы потом на ftp перенести...
21 сен 15, 18:00    [18177122]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Версия SQL Server 2008: Microsoft SQL Server Management Studio 10.50.1600.1
21 сен 15, 18:02    [18177143]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31785
Beginners
У меня в "Связанные серверы" - "Поставщики" нет Microsoft.ACE.OLEDB.12.0. Есть только MSDASQL. Пытаюсь работать через него.
Так сиквел какой версии?

Если такой, что нужен Microsoft.ACE.OLEDB.12.0, то нужно его поставить, "обойтись без него" не получится.
21 сен 15, 19:08    [18177439]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31785
Beginners
Версия SQL Server 2008: Microsoft SQL Server Management Studio 10.50.1600.1
А полная версия какая? битов сколька?
21 сен 15, 19:08    [18177442]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
вот примерно такую ситуацию я предполагал под словом "трахаться" :)
select @@version
?

Далее слово churupaha как эксперта, который может поделиться собственным опытом.
21 сен 15, 23:29    [18178192]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Извиняюсь, вчера руки не дошли ответить: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Data Center Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
22 сен 15, 09:41    [18178844]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31785
Beginners
X64
Вот поэтому MSDASQL не будет работать, нужно ставить ACE.OLEDB.12.0
22 сен 15, 10:08    [18178993]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
zero_air
Member

Откуда:
Сообщений: 53
Beginners,

Если в провайдерах на х64 нет Microsoft.ACE.OLEDB.12.0
нужно скачать и поставить Microsoft Data Access Components

https://www.microsoft.com/ru-ru/download/details.aspx?id=5793
22 сен 15, 10:56    [18179244]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Установил Microsoft.ACE.OLEDB.12.0. С компьютера я могу забрать файл. Но с ftp не понимаю как организовать подачу. Обязательно ли наличие Business Intelligence Development Studio? Пробовал действовать через мастера импорта и экспорта, выбирая источник данных Microsoft Office 12.0 Access Database Enginine OLE DB Provider , в свойствах вводя логин, пароль, нажимая Проверить соединение получал ошибку: не выполнена проверка соединения из-за ошибки при инициализации поставщика, cannot start your application, the workgroup information file is missing or opened exclusively by another user. Можете, пожалуйста, пподсказать, как мне поступить?
22 сен 15, 16:00    [18181143]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
zero_air
Member

Откуда:
Сообщений: 53
Beginners,
Ну так вышло что MS SQL ничего не знает про FTP

поэтому сделайте таск в шедуреле и "подавайте" файлы с локальной папки на сервер.
22 сен 15, 16:09    [18181178]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Итого: у меня получилось настроить на "забор" всех файлов с ftp на мой компьютер, оттуда я смог брать файлы без проблем, но по одному. Не получается понять как написать скрипт\цикл на то, что бы SQL Server с каждого файла поочередно брал строки и "вкладывал" в таблицу... Может кто то подбросить подобный скрипт?

Извиняюсь, за такие глупые вопросы, я первый раз столкнулся с SQL Server....огромное спасибо за помощь!!!
5 окт 15, 15:07    [18236703]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
К примеру, вот пытаюсь, через курсор, но не выходит тк файлы называются как говориться "Бог на душу положит" 234_666, 345_01oct15 и т.д. А переменную объявить как текст нельзя. Есть идеи как можно по-другому оформить запрос?

declare F cursor for
SELECT fname FROM dir
declare @file text
open F

fetch next from F into @file
while @@FETCH_STATUS = 0
begin
DECLARE @cmd varchar(8000)
SET @cmd =
'insert [5_302000] select * from
openrowset
(
''Microsoft.ACE.OLEDB.12.0'',
''dBASE IV;Database=C:\temp\'',
''SELECT * FROM @fname''
)'
EXEC(@cmd)
fetch next from F into @file
end
close F
deallocate F
5 окт 15, 18:07    [18237697]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Glory
Member

Откуда:
Сообщений: 104751
SET @cmd = 
'insert [5_302000] select * from 
openrowset
(
''Microsoft.ACE.OLEDB.12.0'',
''dBASE IV;Database=C:\temp\'',
''SELECT * FROM '+@file+'''
)'
5 окт 15, 20:37    [18238211]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Огромное спасибо, Glory!!! Работает!

А можете еще помочь, есть ли ограничения на название файлов или еще что-то?

Один из файлов не "берется". Вылезет ошибка:

+

Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" вернул сообщение "The Microsoft Access database engine could not find the object 'f130_01102015_302000'. Make sure the object exists and that you spell its name and the path name correctly. If 'f130_01102015_302000' is not a local object, check your network connection or contact the server administrator.".
Сообщение 7350, уровень 16, состояние 2, строка 1
Не удалось получить сведения о столбце от поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".
+


Файл есть. Наименование такое. И я его могу открыть. Я его вижу в т.ч. через exec xp_cmdshell 'dir /b c:\temp\*.dbf'....
6 окт 15, 09:24    [18239374]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beginners
Файл есть. Наименование такое. И я его могу открыть. Я его вижу в т.ч. через exec xp_cmdshell 'dir /b c:\temp\*.dbf'....

Потому что имя слишком длинное. Больше 8 символов
6 окт 15, 09:26    [18239386]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Glory
Member

Откуда:
Сообщений: 104751
И вообще бы лучше взяли бы SSIS и сделали Foreach Loop Container

Foreach File enumerator to enumerate files in a folder. The enumerator can traverse subfolders. For example, you can read all the files that have the *.log file name extension in the Windows folder and its subfolders.
6 окт 15, 09:30    [18239413]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Beginners
Member

Откуда:
Сообщений: 9
Дело в том, что попробовал SISS, но не понял где прописать что файлы нужно перебирать по очереди. У меня получилось в "Цикле по каждому элементу" перебираются все наименования, но "Задача потока данных", где источник данных "ODCB", предлагается выбрать 1 конкретный файл, тем самым я вношу 1 этот файл в свою таблицу столько раз, сколько в "Цикл по каждому элементу" перебрано элементов...
6 окт 15, 10:10    [18239621]     Ответить | Цитировать Сообщить модератору
 Re: Организация сбора данных в хд  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beginners
предлагается выбрать 1 конкретный файл, тем самым я вношу 1 этот файл в свою таблицу столько раз, сколько в "Цикл по каждому элементу" перебрано элементов...

Имя файла должно браться из текущей итерации цикла.
А не задаваться вручную
6 окт 15, 10:12    [18239634]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить