Получи случайную криптовалюту за регистрацию!

SQLite на практике

Логотип телеграм канала @sqliter — SQLite на практике S
Логотип телеграм канала @sqliter — SQLite на практике
Адрес канала: @sqliter
Категории: Технологии
Язык: Русский
Количество подписчиков: 2.13K
Описание канала:

Все о работе с данными в sqlite // antonz.ru

Рейтинги и Отзывы

1.50

2 отзыва

Оценить канал sqliter и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

0

2 звезд

1

1 звезд

1


Последние сообщения 3

2021-11-29 14:21:18 Датасет слов английского языка

Обнаружил, что у Оксфордского университета есть списки распространенных слов и выражений английского языка. Доступны в традиционно «удобном» формате — html-амбразуре на сайте либо PDF.

Извлек их и сделал нормальные наборы данных в CSV.

Атрибутика:

— слово
— часть речи
— уровень (A1, A2, B1, B2, C1)
— ссылка на подробное определение
— ссылка на озвучку в ogg

https://github.com/nalgeon/words
653 views11:21
Открыть/Комментировать
2021-11-28 17:44:04 SQLite 3.37

Тут у sqlite вышла новая версия! Да какая — теперь он научился проверять типы данных (двадцать лет ругали, что не проверяет).

Написал обзор основных изменений:
https://habr.com/ru/news/t/592085/
719 views14:44
Открыть/Комментировать
2021-11-27 13:51:33
«Родительскому» курсу про SQLite такая популярность и не снилась
450 views10:51
Открыть/Комментировать
2021-11-27 13:50:59 500 учеников на курсе про «окошки»!

Зашел сегодня на «Степик» и увидел, что на курс по оконным функциям записались уже 500 человек. Когда его делал, совсем не рассчитывал на такую популярность.

Вообще, курс про «окошки» появился как спин-офф моего большого курса «SQLite для аналитики». Там был модуль «оконные функции», и он мне самому так понравился, что на его основе сделал отдельный курс.

Судя по всему, получилось неплохо, потому что студентов много и отзывы очень позитивные. Люди находят курс без всякой рекламы. Полностью прошли курс 40% участников — это очень недурно для онлайн-формата. Выпускники пишут, что стали регулярно использовать «окошки» в повседневной работе — лучший результат, что я могу представить.

Признаться, мне курс тоже нравится. Сам использую его как конспект, когда не уверен, как что-то работает.
455 views10:50
Открыть/Комментировать
2021-11-21 21:01:42 Быстрый поиск похожих строк на SQL
(готовое решение)

Я что-то закопался с подробной статьей про поиск похожих строк, так что вот пока готовое решение на SQLite.

Напомню, что задача в общем виде такая:

— Человек ввел произвольное слово.
— Мы хотим найти наиболее похожее слово из готового словаря.
— И сделать это быстро.

Полный перебор по словарю работает хорошо, но медленно.

Чтобы сделать быстро, понадобится расширение spellfix.

Подключаем расширение:

.load ./spellfix

Создаем таблицу для словаря:

create virtual table dictionary using spellfix1;

Загружаем в нее данные:

insert into dictionary(word)
select ... from ...;

И ищем похожие слова:

select word
from dictionary
where word match ?
limit 1

Например:

sqlite> select word from dictionary where word match 'абривиатура' limit 1;
аббревиатура

sqlite> select word from dictionary where word match 'рассчет' limit 1;
расчет

sqlite> select word from dictionary where word match 'дорга' limit 1;
дорога

Изи!

Позже отдельно распишу, как и почему все работает. И как сделать самостоятельно на любой базе.
352 views18:01
Открыть/Комментировать
2021-11-18 17:22:32 Нечеткое сравнение строк и фонетика

Пока готовлю заметку про поиск похожих строк, сделал новое расширение для SQLite. Вот что в нем есть.

Сравнение строк по похожести:

— Расстояние Левенштейна
— Расстояние Дамерау — Левенштейна
— Расстояние Хэмминга
— Сходство Джаро — Винклера
— Оптимальное выравнивание строк
— Расстояние Spellcheck

Фонетические коды:

— Soundex
— Refined Soundex
— Spellcheck

И транслитерация (привет → privet).

https://github.com/nalgeon/sqlean/blob/main/docs/fuzzy.md
529 views14:22
Открыть/Комментировать
2021-11-09 19:23:00
Возможно, странный вопрос, но все равно задам. Вы понимаете, как работают индексы в базе данных?
Final Results
5%
Знаю все нюансы
53%
Понимаю в общих чертах
29%
Знаю только, что индекс ускоряет запросы
13%
Вообще без понятия
350 voters639 views16:23
Открыть/Комментировать
2021-11-05 14:20:00 Вижу подзапрос → меняю на CTE

Многие студенты (да и не только студенты) обожают многоуровневые SQL-запросы. Пожалуйста, пожалуйста, пожалуйста, не пишите их. Используйте табличные выражения: https://antonz.ru/cte/
440 views11:20
Открыть/Комментировать
2021-11-04 23:48:35 Найти максимально похожую строку

Подписчик задал интересный вопрос:

Есть строка в переменной str1.
Есть sqlite3 и 600,000 строк внутри.
Как найти макимально приближенно похожую строку в базе? Точного сходства с str1 в базе нет!


Посмотрим на упрощенном примере. Допустим, у нас есть таблица employees, а в ней столбец name:

sqlite> select name from employees;
Дарья
Борис
Елена
Ксения
Леонид
Марина
Иван
Вероника
Григорий
Анна

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

Если бы в SQLite была функция, которая считает похожесть между двумя строками, все было бы просто:

select
name,
similarity(name, 'Вера') as sim
from employees
order by sim desc
limit 1

Но такой функции нет. Значит, либо искать расширение, в котором она найдется, либо подключить функцию из любимого языка программирования. На питоне, например, сделать это несложно:

import sqlite3
from difflib import SequenceMatcher

def similarity(a, b):
ratio = SequenceMatcher(None, a.lower(), b.lower()).ratio()
return round(ratio, 2)

db = sqlite3.connect("employees.db")
db.create_function("similarity", 2, similarity)

Теперь можно выполнить наш запрос:

cursor = db.execute(query)
result = cursor.fetchall()
print(result)

Он вернет самое похожее имя:

[('Вероника', 0.67)]

Ровно то, что мы хотели. Для 600К строк, правда, отработает не слишком быстро.
597 views20:48
Открыть/Комментировать
2021-10-12 16:10:55 Мат. статистика в SQLite

Из коробки SQLite поддерживает только min(), max() и avg(). Но с помощью расширения stats легко посчитать медиану, моду, процентили и стандартное отклонение:

select
median(num_pages),
mode(num_pages),
percentile_90(num_pages),
percentile_95(num_pages),
percentile_99(num_pages),
stddev(num_pages)
from books;
586 views13:10
Открыть/Комментировать