|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite3, сделать выборку из большого файла csv |
|
Прочие БД - [решено] SQLite3, сделать выборку из большого файла csv
|
Старожил Сообщения: 211 |
Профиль | Отправить PM | Цитировать Доброго времени суток! Есть большая таблица csv 1.2ГБ, которая постоянно дополняется данными в конец таблицы. В таблице 52 столбца и уже более 20 миллионов строк. Мне нужно сделать выборку из этой таблицы по списку из AD самых свежих данных, по имени и дате. Я ранее пытался сделать это с помощью powershell и даже сделал, но производительность очень мала и ждать приходится более 8 часов. Мне на этом форуме сразу посоветовали работать с таблицей как с базой данных, я сопротивлялся, но мне прислали еще несколько таблиц больших размеров и мне все же придется научиться работать с базами. Как мне и посоветовали начать с SQLite3. Скачал, распаковал, запустил, создал базу test, импортировал туда свою таблицу. Через sqlitestudio видно, что все названия столбцов импортировались удачно, так же как и данные. В базе есть два столбца, по которым ориентируюсь: Data, System_Unit_Name. Нужно выбрать уникальное значение из System_Unit_Name с самой старшей датой из столбца Data, далее экспортировать всю строку (все 52 столбца) в таблицу или другую базу, чтобы далее работать с ней. Далее уже наверное буду скриптом сравнивать с AD и вылавливать нужные данные. Возможно с базами не так работают, но это мой первый опыт. В идеале я хочу завернуть все в скрипт powershell, чтобы полностью автоматизировать процесс. Проблема в том, что я не могу самостоятельно составить такой запрос. Надеюсь кто-нибудь поможет, ну или вообще я все неправильно придумал и это не осуществимо.
|
|
Отправлено: 17:38, 16-09-2021 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
Отправлено: 18:49, 20-09-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
Пробовал COLLATE NOCASE, но это работает только для WHERE |
|
Последний раз редактировалось Griboed0ff, 21-09-2021 в 08:00. Отправлено: 00:19, 21-09-2021 | #12 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Пока только идея возвести AD_list(System_Unit_Name) и all_pc(System_Unit_Name) в один регистр, а уже потом делать выборки.
Решение: UPDATE all_pc SET System_Unit_Name = LOWER(System_Unit_Name); UPDATE AD_list SET System_Unit_Name = LOWER(System_Unit_Name); CREATE TABLE IF NOT EXISTS all_pc_result AS SELECT * FROM all_pc, AD_list USING(System_Unit_Name) WHERE Ping <> 'No' GROUP BY System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2))); Скрытый текст
Теперь попытаюсь это автоматизировать через PSSQLite (модуль для powershell). Запрашивать нужную аушку, создавать свежий список в ad_list. Далее выборка из таблицы с данными. Далее экспорт таблицы csv. Но обсуждение наверное не для этой ветки форума.
|
Последний раз редактировалось Griboed0ff, 21-09-2021 в 12:48. Отправлено: 10:11, 21-09-2021 | #13 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать замена Lke
Цитата Griboed0ff:
CREATE TABLE IF NOT EXISTS all_pc_result AS SELECT all_pc.* FROM all_pc, AD_list ON lower(AD_list.System_Unit_Name)=lower(all_pc.System_Unit_Name) WHERE Ping <> 'No' GROUP BY AD_list.System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2))) |
|
Последний раз редактировалось El Sanchez, 21-09-2021 в 18:40. Причина: замена like(foo, bar) на lower(foo)=lower(bar) Отправлено: 14:22, 21-09-2021 | #14 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
Оставил вариант с понижением регистра. Столкнулся с проблемой экспорта таблицы в csv, криво выгружает кириллицу. |
|
Отправлено: 21:16, 21-09-2021 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
Так-то, в Вашем оригинальном CSV была UTF-8 без BOM. |
|
Отправлено: 16:54, 23-09-2021 | #16 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Iska:
sqlite3.exe -header D:\SQlite3\base_test\all_pc_info.db -tabs "select * from all_pc_result" > $outfile Цитата Iska:
|
||
Последний раз редактировалось Griboed0ff, 24-09-2021 в 07:24. Отправлено: 07:14, 24-09-2021 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:33, 24-09-2021 | #18 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Iska:
То есть кракозябры только после экспорта из базы. |
|
Отправлено: 09:58, 24-09-2021 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
Скрытый текст
Ровно так же будет выглядеть и $outfile, если его кодировка будет в UTF-8. Другое дело, если мы будем делать импорт внешних данных из подобного .csv — там можно указать кодировку исходного файла: Скрытый текст
и тогда кириллица будет нормально отображаться. Что касается Notepad++ — убедитесь, что выбрана правильная кодировка файла: Скрытый текст
|
|
Отправлено: 06:37, 25-09-2021 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Создание переменчивой переменной из csv файла | Dillaname | Скриптовые языки администрирования Windows | 4 | 26-02-2021 15:38 | |
CMD/BAT - Создание .bat файла для выборки строк из .csv файла в .xlsx | GODolubOFF | Скриптовые языки администрирования Windows | 10 | 14-12-2015 15:34 | |
PowerShell - [решено] Добавление информации из csv-файла в AD с обработкой | IvanXXL | Скриптовые языки администрирования Windows | 12 | 23-07-2014 10:49 | |
CMD/BAT - [решено] Периеминование файла doc.csv в Документ_дата_время.csv | kagorec | Скриптовые языки администрирования Windows | 2 | 29-03-2014 18:40 | |
PowerShell - [решено] Перекодировка файла .csv из windows-1251 в utf-8 | sea707 | Скриптовые языки администрирования Windows | 2 | 02-09-2012 21:41 |
|