Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, есть проект. Первая часть проекта, есть перенос базы из mdb(около 10 таблиц) в ms sql(в соответствующую,конечно предварительно созданную). Так вот, в принципе одну таблицу перенес( десятки тысяч строк). Но есть нюанс,в акцессной базе есть поля- даты. В ms sql есть соответствующие в таблице поля с типом datetime.Если запись корректна, то переносится без проблем. переношу так: одна из строк конструкции insert into ...... ...... Код: plaintext 1. RecordSetOleDB - метод OleDbDataReader,в общем возвращается дата из таблицы mdb, затем конвертирую и принципе всё ок. Но если в mdb поле дата заполнено не корректно,например так 01.01.182 или 01.01.248, то возникает ошибка, не помню дословно, но суть в том что не может нормально сковертировать. по сути правильно. Варианты: 1.отрубить руки кто заполнял, конечно вариант хороший,но не по делу 2. можно ли в таком формате и инсёртить в базу?но у меня же поле в базе datetime 3.думал на крайняк,проходить предварительно базу акцесс и смотреть,если попадается строка с неправильной датой,то обнулять её типа 2222-01-01 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 22:36 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
denis_stell, 3.1 - инвалидные даты в NULL предварительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 22:40 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
denis_stell1.отрубить руки кто заполнял, конечно вариант хороший,но не по делу Зато отрубить руки тому, кто использует непараметризованные запросы - по делу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 23:01 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
K C++ вопрос не относится, вообще-то. Это ближе к проектированию систем и администрированию баз данных. В общем случае миграция делается так: - Читаешь строку из исходной таблицы. - Проверяешь на правильность данных. - Если нашел кривые данные - пытаешься догадаться что оператор имел в виду когда печатал чушь. Например если ты знаешь что работаешь с датой рождения и видишь человека родившегося в 2070-ом году - догадываешься что это должен быть 1970 и исправляешь. - Если исправить не получается - либо обнуляешь кривые данные, либо сбрасываешь в какое-то специальное значение, либо убиваешь строку (или весь логический объект) целиком. - Не забывай записывать все случаи исправлений-убиваний записывать в журнал. Потом читай его и ищи где можно улучшить процедуру исправления кривых данных. После нескольких прогонов получишь конфетку. И все... Параметризованные запросы используются или нет, в данном случае не важно. Ты уже будешь контролировать все данные уходящие в целевую базу так что проблем из-за "склееных" запросов не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 01:01 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
denis_stell2. можно ли в таком формате и инсёртить в базу?но у меня же поле в базе datetime Инсёртить можно, только нифига не проINSERT-ится. (т.е. грубо говоря, нельзя). Естественно, надо исправлять. denis_stell3.думал на крайняк,проходить предварительно базу акцесс и смотреть,если попадается строка с неправильной датой,то обнулять её типа 2222-01-01 Лучше NULL. Если схема данных позволяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 15:21 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Заполнять NULL-ом. А если есть поле COMMENT то добавить туда запись о некорректной дате и прикрепить строку даты как есть. Далее - посадить девочек-пионерок чтоб вручную исправили все даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:26 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
mayton, до загрузки лучше данные чистить, таково ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 21:34 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Изопропилmayton, до загрузки лучше данные чистить, таково ИМХО Когда грузят данные из сторонних систем то их обычно льют в промежуточные таблицы как есть. С битыми датами, денежными величинами, кривыми ключами. Потом из этих промежуточных какой-то логикой чистят и грузят что можно в таблицу бизнес-фактов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:02 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
mayton, насколько система "сторонняя" - не сказазно - скорее своё добро мамонта, а его не грех почистить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:22 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
maytonИзопропилmayton, до загрузки лучше данные чистить, таково ИМХО Когда грузят данные из сторонних систем то их обычно льют в промежуточные таблицы как есть. С битыми датами, денежными величинами, кривыми ключами. Потом из этих промежуточных какой-то логикой чистят и грузят что можно в таблицу бизнес-фактов. Как бы если это всё можно проделать на клиенте до заливки, то лучше так и делать. Загрузка в БД во временное хранилище оправдано только, если другими способами как в БД (используя естественно SQL или PL SQL) данные не обработать. А так -- это напрасная трата времени и ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:46 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
MasterZivЗагрузка в БД во временное хранилище оправдано только, если другими способами как в БД (используя естественно SQL или PL SQL) данные не обработать. А так -- это напрасная трата времени и ресурсов.Не знаю при каких условиях данные нельзя почистить на клиенте. Вот как раз временные хранилища в БД я назову напрасной тратой времени и ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 00:03 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
White Owl, Ну я как бы тоже на это намекал. Но всякое бывает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 01:47 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
всем спасибо. сделал следующим образом, до загрузки контроль данных,при котором все "кривые" даты затираются в NULL, а исходные даты помещаю в примечание. Столкунлся с проблемой,точнее может с моей неопытностью пока что как то так: В общем как и было оговорено, есть база на access, импортирую в ms sql. Всего получилось нужных 6 таблиц, всего порядка 300000-500000 записей. mdb грузится каждый день, в файле некоторые данные добавляются,некоторые просто новые. реализовал 6 потоков, в потоковой функции сам импорт. работа с mdb через OleDbConnection OleDbDataReader OleDbCommand итд с ms sql SqlConnection,SqlCommand.... часть кода while (RecordSetOleDB_BL.Read()) // прохожусь по базе акцесс, и тут 2 действия 1) если в базе уже есть данные удаляю Код: plaintext 1. 2. 2) сам импорт Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. в конце выхожу из команд, закрываю соединения итд . В общем отрабатывает, но очень долго, как ускорить процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 17:16 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
denis_stell, Во-первых нужен только один поток, так как вы пишете на один диск, и тут чем больше потоков тем медленнее запись. Во-вторых не изобретайте велосипед, а воспользуйтесь каким-либо штатным средством, их великое множество, как минимум вспоминаю Data Pump и Linked Server в скуле. В третьих используйте bulk insert. Всего-то надо пару insert into select from запросов написать. И вообще вам в соответствующий форум надо обращаться (MS SQL Server, MS Access). Едете в Париж через Австралию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 17:23 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
sherzod_, Замечание о потоках верно, все остальное не верно. Ни блочные заливки, ни "штатные средства" ему не помогут. Первое умрет на этапе кривых данных (прочитай первый пост топика). А "штатные средства" либо тоже умрут на кривых данных, либо потребуют не малых денег, а потом еще и не малого времени на настройку. denis_stell, Мне сильно кажется что ты занимаешься переливкой данных. Читаешь из одной таблицы и пишешь в другую. Так? Если "да", то очень плохо. Сделай на клиенте структуры (классы) представляющие собой бизнес-объекты. Потом заполняешь эти объекты из одной базы, и после того как собрал объект целиком - пишешь в новую базу. Простой цикл в один поток. Просто, легко и надежно. Этот подход даст тебе намного более удобный для дальнейшей работы лог ошибок. Сможешь писать туда что-нибудь в духе: "Клиент ФЫВА имеет плохую дату в дне рождения. Клиент ЯЧСМ имеет три контракта в списке контрактов, но найдено только два контракта найдено в реальности". Потом отдаешь этот список начальству и тем кто вбивает данные в старую базу - они исправляют данные. Заодно сможешь с легкостью изменить структуру хранения данных в новой БД. У меня подобные схемы работали (и работают) очень даже замечательно. А по скорости работы зависит от объема исходной базы и драйверов доступа к базам. Когда-то, на заре века, у меня двухгиговая DBF база превращалась таким образом в ASA7 за два часа. Сегодня 50Г данных переливаются из MS SQL 2008 в ASE 15 за час. В обоих случаях программы-превращатели написаны на С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 19:16 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Да ему бы хотя бы параметризованные запросы освоить... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 19:22 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
White Owl, о чем это вы. Это стандартная ДБА задача. Какие еще программы на компилируемых языках. Люди на TransactSQL биллинги целые пишут, включая работу с устройствами, файлами и со всем остальным, а вы говорите на плохих данных ляжет ). Ровно один запрос на каждую таблицу, независимо от того что там с данными, ровно два запроса при использовании bulk insert. При том что править их в десятки раз быстрее, поправил-попробовал, поправил-попробовал. А тут компилируй, подключись, запусти, посмотри, ищи ошибку. Смех да и только. Топикстартер, напишите в MS SQL Server что надо сделать, вам за 5 минут решение предложат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:10 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
sherzod_White Owl, о чем это вы. Это стандартная ДБА задача. Какие еще программы на компилируемых языках. Люди на TransactSQL биллинги целые пишут, включая работу с устройствами, файлами и со всем остальным, а вы говорите на плохих данных ляжет ).Это далеко не стандартная задача и уж совсем не для DBA. Это задача для дата-архитектора, а не администратора сервера. sherzod_ Ровно один запрос на каждую таблицу, независимо от того что там с данными, ровно два запроса при использовании bulk insert.Вот это и есть твоя ошибка. Ты не смотришь на то "что там с данными". Да, в идеальном мире, источником данных будет идеальная база с идеальной целостностью данных. Тогда действительно данные типа "имя" или данные типа "адрес" можно получить разом по всем контрагентам за один запрос. Но в реальности, мы вынуждены жить с базами в которых бывают контрагенты без имени и имена без контрагентов. А так же, задача миграции с одной базы на другую всегда сопровождается сменой структуры базы. Раньше имя хранилось так, а теперь имя будет хранится сяк. Раньше накладные хранились в двух таблицах, а сейчас будут в двадцати-двух. Смену структуры хранения ты в конечно в несколько запросов упихать сможешь, но bulk insert обломается. sherzod_ При том что править их в десятки раз быстрее, поправил-попробовал, поправил-попробовал. А тут компилируй, подключись, запусти, посмотри, ищи ошибку. Смех да и только.Смейся. Когда сам попробуешь позаниматься мигрированием БД - будешь смеяться еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:37 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
White Owl, Вы понимаете что TransactSQL может все? В том числе обработать любые ошибки в данных. Это полноценный язык программирования предназначенный именно для таких задач. Но даже это не важно. Важно то что в даже рамках ANSI SQL указанная задача преобразования дат решается простым coalesce. А миграцией данных тут каждый первый занимался. На скульру как никак находимся. И уж точно никакой DB специалист не станет писать для миграции программу на си или плюсах. Это нонсенс. У нас для таких задач максимум что написано (причем на шарпе), так это скриптовалка, которая анализируя схему выдает скрипты дифов схем. А вы говорите миграция на плюсах. Не 80-й год ведь. Пока вы там неделю ваять будете и баги править, DBA вам скриптик накатает минут за 5 для одной таблицы, со всеми обработками ошибок. Еще на фортране посоветуйте миграцию сделать. И не путайте роли. Дело архитектора схему разработать а не скриптики миграции писать, последнее теоретически делает дба или разработчик, а практически дба или дба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:31 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
sherzod_DBA вам скриптик накатает минут за 5 для одной таблицы, со всеми обработками ошибок. а DBA то здесь причём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:59 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Ребят, то что грузиться через С(точнее проект на С#), это только маленькая часть всего проекта,это только парс данных,для анализа данных в последующем,расчета прибыльности филиала и много чего ещё. сначала подумал,за способ.который когда то сам делал,что то типа этого,к примеру Код: sql 1. 2. . но решил,что средствами visual studio,т.е. анализирую данные здесь в коде,конвертации даты,времени и других полей. Если рассматривать параметризированные запросы, будут ли они отрабатывать быстрее?чем в моём случае? Хранимые процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:06 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
denis_stell, проще на аксессе данные в порядок привести и из него загрузить куда надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:08 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
Изопропил, так у меня и реализовано,изменение некорректных данных, но если правильно понимаю, при переносе из акцесса, в любом случае же нужно данные подбивать? например те же даты(корректные) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:15 |
|
||
|
как лучше сделать
|
|||
|---|---|---|---|
|
#18+
[quot White Owl Мне сильно кажется что ты занимаешься переливкой данных. Читаешь из одной таблицы и пишешь в другую. Так? Если "да", то очень плохо. Сделай на клиенте структуры (классы) представляющие собой бизнес-объекты. Потом заполняешь эти объекты из одной базы, и после того как собрал объект целиком - пишешь в новую базу. [/quot] именно переливка и уже понял,что плохо. интересен ваш вариант, можете привести пример(код), на пальцах или ссылку где есть что-то подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38352268&tid=2020048]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 195ms |

| 0 / 0 |
