Страницы: 1
RSS
Сопоставить два списка и получить все возможные варианты номеров телефонов
 

Добрый день.

Ранее публиковалась похожая тема с урезанным объяснением.

Сделали доработки:

Итого,

Есть 2 списка.

1)ФИО и номер телефона

2)ФИО для ПОИСКА номера

Задача:

-Найти ВСЕ возможные номера телефонов ФИО ДЛЯ ПОИСКА по точному совпадению ФИО из первого списка.

   

Т.е необходимо решение, чтобы при нахождении первого совпадения – формула дальше искала и вставляла все варианты которые найдет.

Знаю, что основная задача для поиска Телефона 1 решается формулой =ВПР(D:D;A:B;2;0)

НО:

Есть дополнительные нюансы.

-ФИО и номер телефона состоит из более чем 20 000 000 строк (и список будет увеличиваться).

Основной файл CVS со списком ~2 гига.

Соответственно, эксель сразу для анализа выкатывает только 1 047 000 строк.

Нашел решение разбить этот файл.

Получается Около 19-20 файлов по 1м строк.

Могу эти 19 файлов закинуть в один основной файл на разные листы.

Возможно ли применение формы ВПР для анализа с разных листов?

Желаемый результат: Обработать при помощи формул все 20 000 000 и более строк и получить все возможные варианты номера телефонов.

1)Если технически/в рамках экселя (формул) это невозможно – прийти к максимально близкому решению в рамках функциональности экселя.

2)Предложить сторонние пути решения данной задачи (применения сторонних программ/написания ботов для данной задачи и тд)

                             

Заранее всем большое спасибо!

Также сделал вложения.

Изменено: Руслан Дергунов - 17.10.2021 17:49:56
 
закиньте это в базу и далее тяните запросами.
По вопросам из тем форума, личку не читаю.
 
Итог - в рамках Эксель это сделать технически невозможно?

Так понимаю имеете ввиду : Экспортировать в нормальную базу данных (mysql, postgresql) и далее делаю запросы?
Только единственное, с такими базами ни разу не работал. В рамках данной задачи что необходимо знать/посмотреть по этим базам данным, чтобы решить мою задачу?
 
ну запрос можно делать и к CVS, только это мало эффективно. Вы пример файла приложите на несколько десятков строк.
По вопросам из тем форума, личку не читаю.
 
OMG, 20 миллионов строк и будет ещё расти, а вы всё ещё сидите на Excel? Чем вас любая СУБД не угодила? Возьмите любую (MySQL, например), загрузите все данные туда и дополняйте их, а запросы через SQL ведите - это будет работать практически мгновенно
Изменено: New - 17.10.2021 23:54:51
 
Цитата
Руслан Дергунов написал:
Желаемый результат: Обработать при помощи формул все 20 000 000 и более строк и получить все возможные варианты номера телефонов.1)Если технически/в рамках экселя (формул) это невозможно – прийти к максимально близкому решению в рамках функциональности экселя.
Да  ну Вы что... какие 20 млн и ВПР, ну  смешно же. Ваши потребности  в этой задаче давно вышли за пределы формул Excel. Теоретически, это можно достаточно просто с точки зрения логики (но не быстро с точки зрения  времени обработки) сделать через Piwer Query, но как Вам уже написали, идеальный способ- это использовать базу данных.

То есть алгоритм будет такой:
В базу данных по заданному расписанию подтягиваются новы данные - вы запросом вытягиваете из базы данных нужный результат (а еще лучше его предварительно агрегировать на стороне базы данных, чтобы не делать преобразование такого большого объема на стороне модели данных в Excel) - а потом просто выводите результат в Excel  в нужной конфигурации.

Да, то, что Вы с этим не работали создаст Вам немало сложностей на пути, но без этого уже никак. Все попытки решить эту задачу в  Excel  либо обернуться крахом, либо будут настолько тормозными, что работать с ними просто будет невозможно.

Если провести аналогию, то можно представить мальчика, который делал бумажные самолетики, запускал их все выше и выше, но захотел отправить свой  бумажный самолет в космос и спрашивает, как это сделать с помощью рогатки.
Вот без ракеты- никак, придется построить ракету или просить тех кто эти ракеты уже строит и отправляет их в космос.
Можно пытаться самому придумывать решения с более мощными резинками для рогатки и доработкой конструкции бумажного самолета и, возможно, даже превзойти свой первоначальный показатель, но до космоса бумажный самолет всё равно не долетит.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Руслан Дергунов: в рамках Эксель это сделать технически невозможно?
можно решить коллекциями или словарями (если уникальных фамилий в списке с телефонами более миллиона, то не стоит), картами (нужна дополнительная библиотека, зато очень быстро), а также бинарным поиском по отсортированному списку
Если нужно МАКСИМАЛЬНО быстро — обратитесь к bedvit

Без Excel — это прям шаблонная задача для SQL
Изменено: Jack Famous - 18.10.2021 09:34:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Может быть справится PowerBi, не знаю на каком пределе он просит денег, не работал.
Я в другом Би работаю, там такие объёмы не проблема, но оно конечно стоит денег.
 
так может сегодня и не просит, а так как ТС пишет, что база будет и дальше расти, то моё ИМХО, тут только уже СУБД (SQLite, MySQL, Postgre, MSSQL и т.д.) нужно. Вот придёт через 4 месяца ТС и скажет - ребята, у меня тут 50 млн записей и Bi просит денег, как тут ВПР прикрутить мне, посоветуйте скорее...
Изменено: New - 18.10.2021 12:36:47
 
New, структурно я с вами полностью согласен (что для каждой задачи - своя платформа), но отдельное решение от Виталия точно справится как минимум не хуже (по скорости)
Это может быть как макрос в Excel, так и отдельный файл, который будет подключаться к нужным CSV с миллионами данных и всё делать быстро, качественно и очень просто для пользователя — если задача точечная, то, возиться с БД будет заметно сложнее, чем просто запустить программу
Изменено: Jack Famous - 18.10.2021 13:33:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А если ограничится решением, что базу окончательную в 30 - 50 - 100 м загружаю сразу и теоретически для дальнейшей работы и решение моих задач - это должно хватить.
То? То все равно SQL так понимаю )

И далее переход к результату, если все таки решено - что решение только через SQL и основываясь на сообщении Dyroffа, что кто не знает как это работает - построить самостоятельно это будет сложно (даже если получится на факт что правильно/быстро и тд), поэтому решение = обращаться к аутсорсу?

Итого:
Мне нужен инструмент,
Под инструментом я имею ввиду, что у меня будет файл/формула/база где:
1) есть исходная база 30 - 50 - 100 м строк с данными
2) я имею возможность в какой-то раздел по мере необходимости (т.е в любое время) занести список ФИО для ПОИСКА номера и мне база подготовит эксель файл (ну или формат базы, который, надеюсь, потом можно будет экспортировать как эксель) с окончательным результом в виде:
-ФИО - Возможный Номер 1 - Возможный Номер 2 - Возможный Номер 3 - Возможный Номер 4 - Возможный Номер 5 и тд.
3)Техническая реализация/скорость данной процедуры составляет адекватные сроки (здесь я имею ввиду, что например если база 30 - 50 м строк, и есть список всего из 100 ФИО для поиска номера, то исходный результат будет доступен, ну скажем за 60-180 минут, т.е. чтобы не было такого, что срок реализации условно 48 часов, конечно, если  вариантов по техническим моментам других нет - будем рассматривать и такой вариант).
4)Также при реализации инструмента необходимо обсудить возможность технических доработок  (их реальность в целом/коэф. сложности и тд) для дальнейшего использования этого файла/формулы/базы. (Здесь я имею ввиду подгрузка базы данных (дополнительных строк в разных количествах 1м-5м-10м и тд).

Соответственно дальнейший вопрос:
Кто из присутствующих здесь может это реализовать?

И второй вопрос,
Т.к. вопрос создания данного инструмента касается $ - хотелось бы уточнить:

Все запрашиваемые пункты стандартно можно реализовать в одном решении?
Или можно предоставить разные варианты, т.е.:
Реализация всех 4 пунктов - цена 1
Реализация 3 пунктов - цена 2
Реализация 2 пунктов - цена 3
Реализация 2 пунктов с доп. - цена 4

Ну думаю суть понятна вопроса. Все условия по ценам - можете отправить в Л/С.

Если есть какие-то замечания или моменты, на которые мне нужно обратить внимание перед окончательным составлением ТЗ для исполнителя - пожалуйста напишите.

Большое всем спасибо за наводки.
 
Перенести тему в ветку заказов?
 
vikttur, пока на паузе.
Хочется понять все таки какое решение оптимально использовать.

Цитата
Jack Famous написал:
отдельное решение от Виталия точно справится как минимум не хуже (по скорости)
То есть алгоритм будет такой:
В базу данных по заданному расписанию подтягиваются новы данные - вы запросом вытягиваете из базы данных нужный результат (а еще лучше его предварительно агрегировать на стороне базы данных, чтобы не делать преобразование такого большого объема на стороне модели данных в Excel) - а потом просто выводите результат в Excel  в нужной конфигурации.

Вот это решение?
 
Цитата
Руслан Дергунов: Вот это решение?
напишите ему, т.к. очень маловероятно, что он возьмёт что-то из платной ветки сам, зато, если задача интересная и по сумме договоритесь, то это будет если самое, то одно из самых быстрых и удобных решений
Цитата
Руслан Дергунов: Есть 2 списка: 1. ФИО и номер телефона 2. ФИО для ПОИСКА … файл CVS со списком ~2 гига
можно напрямую подключится к 2ум CSV, всё посчитать и вывести куда и как вам будет удобно - все уточнения выясняйте с ним. Рекламирую, потому что знаю его
Изменено: Jack Famous - 18.10.2021 14:23:57
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Возможно вам подойдут Функции:
1.GetRowsCountCSVansi(Файл(строка), ОтключениеКешированияФайла(0/1)) - возвращает кол-во строк в файле (учитываются пустые строки, расчет происходит по количеству разделителей строк)
2.GetRowCSVansi(Файл(строка), ПодстрокаДляПоиска(индекс), ОтключениеКешированияФайла(0/1)) - возвращает найденную строку по индексу
3.FindRowsInCSVansi(Файл(строка), ПодстрокаДляПоиска(строка), ВывестиВсеСтроки(0/1), ОтключениеКешированияФайла(0/1)) - возвращает найденную строку/строки по искомой подстроке
«Бритва Оккама» или «Принцип Калашникова»?
 
Пока писал сообщение, наверное выше пришел ответ.

Мое сообщение:

Хорошо.
Раскидываю мозгами.

А если разобрать бесплатное решение в рамках эксель ( 1м строк):

Есть список из 100 ФИО для поиска номера.

Вариант 1: (развернутый)

ШАГ 1: В графе телефон 1 - ищем совпадения для выборки - Решение эксель: Формула ВПР  - Результат: получаем по 1 номера телефона.
ШАГ 2: В графе телефон 2 - ищем дополнительные номера (отсекаем найденный номер в графе телефон 1 и делаем повторный поиск) - Решение эксель: Формула? - Результат: получаем еще по 1 номера телефона.
ШАГ 3: В графе Конечный результат - формируем список ТОЛЬКО из найденных номеров -  Решение эксель: Формула? - Результат: Получаем из 1м строк и проанализировав 100 ФИО для поиска номера (к примеру во всей таблице всего найдено 3 ФИО с номером ) только список из 3 ФИО, он выглядит так: ФИО - Телефон 1 - телефон 2.


Вариант 2: (упрощенный). (Если в рамках эксель ШАГ 2 в предыдущем варианте недоступна как формула).
ШАГ 1: В графе телефон 1 - ищем совпадения для выборки - Решение эксель: Формула ВПР  - Результат: получаем по 1 номера телефона.
ШАГ 3: В графе Конечный результат - формируем список ТОЛЬКО из найденных номеров -  Решение эксель: Формула? - Результат: Получаем из 1м строк и проанализировав 100 ФИО для поиска номера (к примеру во всей таблице всего найдено 3 ФИО с номером ) только список из 3 ФИО, он выглядит так: ФИО - Телефон 1 - телефон 2.

Скрин прикрепил как приблизительно планируется.


Как понимаю, задачи поставленный решить можно в рамках бесплатного решения + решается вопрос с открытием полного объема строк.

Если все верно - пойдем дальше.
Если нет, поправьте.

Спасибо.
 
FindRowsInCSVansi(Файл(строка), ПодстрокаДляПоиска(строка), ВывестиВсеСтроки(0/1), БезКеширования(0/1)) - возвращает найденную строку/строки по искомой подстроке

Итого при документированной скорости чтения SSD - 450 Мб/с, 10 ГБ читается за 22,2 сек, что близко к скорости поиска (25,45 сек. с отключенным кешированием - 40 млн.строк, ищем последнюю). т.е. скорость поиска сравнима со скоростью чтения с носителя.

Тема на этом форуме.

Если файл будет кеширован, то поиск будет доли секунды.
Изменено: bedvit - 18.10.2021 16:41:49
«Бритва Оккама» или «Принцип Калашникова»?
 
Возвращаясь к мальчику, который может делать и запускать только бумажные самолетики.

Если этот самолетик надо запустить в космос, то данное решение подсильно ему в рамках данного решения?

Или = аутсорс?
 
Цитата
Руслан Дергунов: данное решение подсильно ему в рамках данного решения?
если убрать тавтологию, то вам проще попробовать
Надстройка бесплатная и ставится, как любая другая  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Руслан Дергунов, Просто любопытно, а какова задача верхнего уровня? А то при базе в 20миллионов, это или нищебродская крупная компания котиорая не желает платить за нормальные решения, или малый бизнес по спам рассылке или .....
По вопросам из тем форума, личку не читаю.
 
Jack Famous, спасибо. Будем пытаться.

БМВ, база в миллиарды.
Просто выдергиваем сегмент определенный в 20 - 100 млн.

Скажем так: малый бизнес в структуре крупной компании.

На верхнем уровне построить данный процесс действительно проще и можно за любые деньги. Но соответственно если в руки возьмется верхний уровень, то и сливки снимут они.
А пока они к этому будут приходить, то у нас есть 3 - 5 лет, чтобы постараться нажиться/сформировать базу клиентов исключительно для себя.
Бизнес процесс чуть сложный по распределению. Но суть думаю отразил.
Изменено: Руслан Дергунов - 18.10.2021 17:30:39
 
Вы не совсем поняли. Конечная цель макроса или решения - это получить ту таблицу. Что потом с ней делать ?
Изменено: БМВ - 18.10.2021 20:37:16
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Что потом с ней делать ?
Михаил, это Вы не так поняли:
Цитата
Руслан Дергунов написал:
пока они к этому будут приходить, то у нас есть 3 - 5 лет, чтобы постараться нажиться/сформировать базу клиентов исключительно для себя
:) Остап Бендер чтил уголовный кодекс, но тогда не было интернета :) + нынешней ст.137 и подобных  :)
У всех форумчан есть возможность 3-5 лет для решения задачи ТС-а  :) (срок решения задачи не совпадает со сроком статей УК, но это упущения УК)  :)
Цитата
Руслан Дергунов написал:
суть думаю отразил
Руслан, не формируйте базу клиентов привлекая  к этому других людей, постарайтесь справляться со своими проблемами самому. Из Вашей темы ясно, что Excel вообще не при делах
Цитата
Руслан Дергунов написал:
база в миллиарды
Идите (устраивайтесь) с этой базой работать в Google, а если не справитесь с очередной задачей, обращайтесь на форумы по Excel (их много), также как и по SQL и пр. языкам и средствам.

БМВ, #20&22 +++ :)  
 
Цитата
БМВ написал: Что потом с ней делать ?
Ответ банален. Работать с ней:)

Из технической части реализации плавно переплыли в какие-то жизненные дискуссии.
Спасибо всем за ответы.
Пойду разбираться с функциями.  
Изменено: Руслан Дергунов - 18.10.2021 20:52:05
 
Цитата
Руслан Дергунов написал:
Из технической части реализации плавно переплыли в какие-то жизненные дискуссии.
Руслан, все ответы это не в обиду, а в помощь. Прочитайте название Вашей темы. Все возможные варианты номеров телефонов хранить в Excel и здесь же с ними работать - не лучший вариант. Не с функциями Excel нужно разбираться, а со средствами решения Вашей задачи. Поэтому и возникают дополнительные вопросы, на которые Вы все равно отвечаете "А я хочу вот так". Это насчет
Цитата
Руслан Дергунов написал:
технической части реализации
А насчет  заявления для запроса:
Цитата
Руслан Дергунов написал:
база в миллиарды
И как работать с такими базами Вы ищите на форумах? Google не помог?
Цитата
2.4. Не прикладывайте файлы-примеры с персональными данными
Это из правил форума.
По файлу-примеру: лично я нисколько не сомневаюсь, что Вы сами придумали и собственноручно набрали в каждой ячейке каждое из 700+   ФИО полностью :)
Извините, ничего личного. Задолбали звонки на телефон из банков с предложениями о кредитах и рекламные рассылки.
 
Цитата
Руслан Дергунов написал:
Работать с ней:)
Очень часто , с таким трудом полученный промежуточный результат делает его использование крайне затруднительным. Я именно об этом. Вопрос про компанию и спам , был только к тому, почему есть желание на использования костыля, вместо приобретения нормального решения.
По вопросам из тем форума, личку не читаю.
 
Итог:
представлены варианты решения в виде функций от bedvit'a.
реализовать лично - не могу (не хватает знаний).

Решение необходимо по примеру: Вариант 1: (развернутый)
(естественно обязательные условия: открытие всего файла >1м строк (или обращение ко всему файлу CSV (нескольким файлам))

Кто готов провести за руку до логичного конца? С предложениям - можно в личку.

Просьба перевести в ветку заказы.
Спасибо.
 
для будущих исполнителей поясните ещё, если будет СУБД
1. данная БД нужна многопользовательская (50 и более человек одновременно) или в ней будет работать один-два человека?
2. нужен ли доступ к ней из интернета
Изменено: New - 19.10.2021 00:20:17
 
Руслан Дергунов, какой бюджет? Устроит ли озвученный мной ранее вариант?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Если записей до 100 кк, то можно их грузить через PQ в модель данных и оттуда вытягивать по ФИО фильтрами сводной таблицы.
Работать будет относительно быстро, если нужно только это. Если же с полученным списком требуется дальнейшая автоматизация, то ХЗ.
Ну, и для подгрузки обновления базы при получении новых csv потребуется подождать полчаса-час.
Короче нужна БД. :D
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх