31.10.2013, 11:08 | #1 |
Сенбернар
|
Забавная задачка
Дано :
- есть кастомный функционал, который не описан (совсем), но как-то (достаточно криво и не слишком надежно) работает - есть табличка в нем, которая, понятно, тоже не описана.. и в которой пара миллионов записей Требуется получить : описание использования (наполнения) таблицы. То есть : - какие поля используются, какие - нет. По наполнению, перекрестные ссылки - не предлагать ) - что в какие поля пишется. То есть - если это Enum - получить по одной записи для каждого значения этого Enum-а, упоминаемого в наполнении таблицы. Если это поле Id клиента - достаточно одной записи, где оно заполнено, все - не надо ) Вот как-то так. Вопросы : - оно вообще, кроме как "глазами и руками" + Ёксель - решаемо? - если решаемо, то как, хотя бы примерно (я без идей пока) Если нужны подробности - добавлю.
__________________
Best Regards, Roman |
|
31.10.2013, 11:18 | #2 |
Участник
|
А почему "перекрестные ссылки не предлагать"? Если уж заниматься реверс-инжинирингом, то перекрестные ссылки тут - первейший инструмент Они не помогут разве что в случае, когда "кастомный функционал" работает с использованием механизмов отражения и/или написан вне приложения, скажем, в сторонней системе, работающей через Business Connector. Это - ваш случай?..
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
31.10.2013, 11:54 | #3 |
Сенбернар
|
Они не дадут наполнения. Требуется именно описание типа "что может быть записано в это поле" пока что. И все комбинации заполнения, имеющиеся в жизни (из тех, что сейчас есть в таблице)
Цитата:
Единственное, что пока на голову приходит - выгрузить всю эту беду в Ёксель, и там уже шаманить с фильтрами etc.. === PS : Это там интеграция с типа "интернет-магазином" так классно сделана..
__________________
Best Regards, Roman Последний раз редактировалось RVS; 31.10.2013 в 11:57. Причина: PS |
|
31.10.2013, 13:03 | #4 |
Участник
|
Excel, сводная таблица. По скорости надо проверить, что быстрее - выгрузить в ексель и там строить сводную или напрямую к SQL подключиться.
__________________
Ivanhoe as is.. |
|
31.10.2013, 13:24 | #5 |
Участник
|
Цитата:
Чтобы ничего не делать и все было готово ? Так не бывает. Алгоритм заполнения все равно придется разбирать и понимать. Вам все равно по результатам предоставления этой таблички начнут задавать каверзные вопросы. |
|
31.10.2013, 15:30 | #6 |
Administrator
|
Цитата:
Ну да, получается разматывание по коду. Зато есть некоторая гарантия полноты. Все равно эмпирически придется догадываться. Так что, если какие-то "ветки" кода удастся легко размотать - это будет 100%-е обоснование - что туда пишется.
__________________
Возможно сделать все. Вопрос времени |
|
31.10.2013, 16:25 | #7 |
Участник
|
А как обойти ограничение в миллион строк в экселе?
|
|
31.10.2013, 16:28 | #8 |
Участник
|
На языке SQL для каждого поля таблицы пишете свой отдельный запрос:
select count(*), Field1 from MyTable group by Field1 select count(*), Field2 from MyTable group by Field2 select count(*), Field3 from MyTable group by Field3 и так далее. С помощью этих запросов узнаете, какие значения записываются в каждое поле, и как часто встречаются те или иные значения. Если считать частоту использования конкретных значений не надо, а просто получить уникальные значения для каждого поля, то такой запрос: select distinct Field1 from MyTable Последний раз редактировалось Ace of Database; 31.10.2013 в 16:31. |
|
31.10.2013, 16:29 | #9 |
Участник
|
Предварительной группировкой или двумя - тремя листами
__________________
Ivanhoe as is.. |
|
31.10.2013, 16:47 | #10 |
Сенбернар
|
Цитата:
Я, я.. натюрлих.. и можно - без хлеба )))) Позабавили, спасибо.. Цитата:
Тему снимаю, проблему не решил, но .. обошел.
__________________
Best Regards, Roman |
|
31.10.2013, 17:37 | #11 |
Moderator
|
В общем - по моему собственному опыту борьбы с недокументированным кодом: Это - не программистская задача. Попытка проанализировать код и понять чего он делает очень трудоемка даже для граммотно написаного кода, а уж для безграмотно - она заведомо тупиковая. Надо сначала долго трясти пользователей с вопросами о том что система делает и что она должна делать. После сличения показаний многих пользователей, можно лезть в код и разбираться (с отладчиком) как оно работает. Всякие перекрестные ссылки помогают, но основной инструмент - допрос пользователей и отладчик...
|
|
|
За это сообщение автора поблагодарили: RVS (5). |
31.10.2013, 18:05 | #12 |
Участник
|
Малопонятный недокументированный код нужно просто тереть, сделав бэкап кода и данных, и потом по конкретному ТЗ, проснувшегося индивида (или он уволен уже и не проснется) и его ору "а где такая кнопочка??!!" вытрясять ТЗ и сценарии использования.
Таким образом переходил как-то с АХ2.5 на АХ3.0 потеряв кучищу разных модов по пути, перенося сперва все нужно-понятное, а далее еще пяток по принципу 3-4 мес использования и запроса "а вот раньше тут было..". Конечно, предварительно проверить по перекрестным ссылкам (и я туда же), где эти самые данные используются дальше (то есть, чем и почему они там пишутся не столь важно), куда дальше идут. Явно же есть отчеты или обработки, где они на входе. Если данные только пишутся... то однозначно тереть, как диверсию. (проверив до кучи, не юзаются ли они внешним обменом или ОЛАПОМ....) - но метод их стирания (переимонования таблицы) однозначно это выявит за пару дней (месяцев ) |
|
|
За это сообщение автора поблагодарили: S.Kuskov (3). |
31.10.2013, 18:16 | #13 |
Сенбернар
|
Цитата:
Цитата:
Вот и выкручиваемся, как только можно..
__________________
Best Regards, Roman |
|
01.11.2013, 11:35 | #14 |
Модератор
|
|
|
01.11.2013, 11:48 | #15 |
Сенбернар
|
Цитата:
Неделя времени на детальное описание процесса ) Которого, как сейчас выясняется, не понимает никто. Все, кто это писал (IBS), и кто это принимал (на клиенте) - давно уже об этом забыли.. Смоделировать все руками - просто времени нет понять, что, вообще, там творится. Отсюда, собственно, и возник вопрос о наполнении буферной таблички, куда данные из внешней системы валятся.. Сабж был - "забавная задачка". Она реально забавная, правда )
__________________
Best Regards, Roman |
|
01.11.2013, 11:59 | #16 |
Участник
|
Еще как вариант (если конечно производительность позволит) настроить логирование этой таблички в sysDatabaseLog
А в sysDatabaseLog добавить еще поле со стеком вызова и с числовым хешем от этого стека вызова. Дать поработать, затем проанализировать историю изменений. |
|
01.11.2013, 13:01 | #18 |
Участник
|
Вместо совета вешать инфо в инсерт посоветую вешать в инсерт свой разбор полетов - в табличку (потом ее читать, тк инфо в пакетнике будет тормозить и не видно, да и после ххх записей повиснет)
Писать в свой лог дату, время, какие-то ТТХ записи (может дельту с ориг(), и стек вызова, откуда эта запись приехала. Тогда через пару дней наблюдений отловятся конкретные сценарии использования: кто что пишет, когда, как часто. И только по ним уже ручками (головой) получить ответ "зачем". Ну и код этих внешних обработчиков поизучать или, куда они дальше это дают\берут. ==== О пока писал, не обновлял форум, а этот совет выше уже дали |
|
01.11.2013, 13:10 | #19 |
Сенбернар
|
Коллеги, повторяю - там есть срок. Неделя. Не-де-ля..
С логами - напомнило - "поздно пить боржоми".. Мои извинения. Решу - отпишусь, если кому интересно )
__________________
Best Regards, Roman |
|
01.11.2013, 13:34 | #20 |
Участник
|
Ну почему же поздно.
Если это инет магазин то даже однодневная статистика может дать неплохую выборку. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Задачка с запросом в форме | 16 | |||
Интересная задачка, сможете помочь?) | 7 | |||
order by и group by | 19 | |||
Интересная задачка по getFirst - getNext | 12 |
|