Data Science. SQL hub
По всем вопросам- @workakkk @itchannels_telegram - 🔥лучшие ит-каналы @ai_machinelearning_big_data - Machine learning @pythonl - Python @pythonlbooks- python книги📚 @datascienceiot - ml книги📚 РКН: https://vk.cc/cIi9vo #VRHSZ
Больше📈 Аналитический обзор Telegram-канала Data Science. SQL hub
Канал Data Science. SQL hub (@sqlhub) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 35 825 подписчиков, занимая 3 817 место в категории Технологии и приложения и 18 104 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 35 825 подписчиков.
Согласно последним данным от 20 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -37, а за последние 24 часа — -11, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 7.26%. В первые 24 часа после публикации контент обычно набирает 3.88% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 2 603 просмотров. В течение первых суток публикация набирает 1 389 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 11.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как sql, индекс, postgres, index, sqlite.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“По всем вопросам- @workakkk
@itchannels_telegram - 🔥лучшие ит-каналы
@ai_machinelearning_big_data - Machine learning
@pythonl - Python
@pythonlbooks- python книги📚
@datascienceiot - ml книги📚
РКН: https://vk.cc/cIi9vo
#VRHSZ”
Благодаря высокой частоте обновлений (последние данные получены 21 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
INSERT INTO users (name) VALUES ('John Rush');
SELECT * FROM users;
MySQL – это надежный дедушка баз данных – он существует с самой зари времен и каким-то образом продолжает становиться все лучше.
Благодаря высокой производительности и совместимости почти со всеми языками программирования.
2. MongoDB – NoSQL Hipster Kid
// Connect to MongoDB and insert a document
const { MongoClient } = require("mongodb");
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
await client.connect();
const db = client.db("mydb");
await db.collection("users").insertOne({ name: "John Rush" });
MongoDB - это крутая NoSQL база, которую я часто использую в своих проектах.
3. PostgreSQL – The Sophisticated One
CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(255));
INSERT INTO users (name) VALUES ('John Rush');
SELECT * FROM users;
PostgreSQL, возможно, представляет собой идеальное сочетание производительности, функциональности и элегантности.
4. Oracle – The Enterprise Behemoth
CREATE TABLE users (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY, name VARCHAR2(255));
INSERT INTO users (name) VALUES ('John Rush');
SELECT * FROM users;
Oracle похож на популярного школьника, который получает одни пятерки, но при этом играет в каждой спортивной команде – он все делает хорошо!
5. Cassandra – Distributed Dynamo
from cassandra.cluster import Cluster
cluster = Cluster(["127.0.0.1"])
session = cluster.connect()
session.execute("""
CREATE KEYSPACE mykeyspace
WITH replication={'class':'SimpleStrategy', 'replication_factor':1}
""")
session.set_keyspace("mykeyspace")
session.execute("""
CREATE TABLE users (
id UUID PRIMARY KEY,
name text
)
""")
Cassandra – это королева пчел распределенных баз данных – она обладает высокой масштабируемостью и отказоустойчивостью.
6. Redis – The Speedster
import redis
r = redis.Redis(host="localhost", port=6379)
r.set("name", "John Rush")
print(r.get("name"))
Redis – это тот единственный друг, который может бегать быстрее Усэйна Болта, жонглируя горящими бензопилами. Это хранилище данных in-memory отличается молниеносной скоростью и идеально подходит для кэширования или приложений реального времени.
7. MariaDB – MySQL’s Open-Source Sibling
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
INSERT INTO users (name) VALUES ('John Rush');
SELECT * FROM users;
MariaDB имеет много общего с MySQL, но при этом делает упор на открытый исходный код и ориентированность на сообщество. Это как выбор между Pepsi и Coke – они обе утоляют жажду, просто зависит от того, какой вкус вы предпочитаете!
▪ Читать дальше
@sqlhubpip install sqlalchemy
pip install pyodbc
Давайте писать!
Во-первых, нам нужно создать базовый класс для нашей модели. Создайте файл с именем base.py и добавьте в него следующий код:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Теперь нам нужно сопоставить существующую таблицу с нашим классом. В данном случае мы сопоставим таблицу с двумя колонками с нашей моделью. Таблица представляет собой базу клиентов с полями кода и именем. Для этого мы создадим файл customer.py и добавим в него следующий код:
import sqlalchemy as sa
from base import Base # Reference to the previously created class
class Customer(Base):
__tablename__ = 'customer' # Name of the table in the database
customerid = sa.Column('customerid',sa.String(20), primary_key=True)
customername = sa.Column('customername',sa.String(20))
После того как мы создали базовый класс и класс отображения таблиц, пришло время создать модель. Для этого мы создадим отдельный файл dbmodel.py и импортируем класс таблиц клиентов, который мы только что создали, чтобы выполнять в нем запросы.
from sqlalchemy import create_engine, select
from sqlalchemy.orm import sessionmaker
from customer import Customer # Customer map class
class dbmodel(object):
db_config = ''
engine = object
def __init__(self, conn_string) -> None:
self.engine = create_engine(conn_string)
# Function to get the name of a customer by id
def get_customer_name_by_id(self, customer_id):
Session = sessionmaker(bind=self.engine, future=True)
session = Session()
result = customer_id
try:
customer_row = session.execute(
select(
Customer
).where(
Customer.customerid == customer_id
)
).scalar_one_or_none()
if customer_row is not None:
result = customer_row.customername
return result
except Exception as ex:
print(ex.args)
Обратите внимание, что в коде мы передаем строку подключения в качестве параметра. Эта строка подключения немного отличается от той, что нужна для SQLite, и мы определим ее в файле run.py, где мы соберем все вместе и запустим тест. Добавим в файл следующий код:
import sys
import dbmodel as db
def main(argv):
user = 'youruser'
password = 'yourpassword'
server = 'yourhost'
dbname = 'yourdbname'
# SQL Server connection string
connString = 'mssql+pyodbc://{0}:{1}@{2}/{3}?driver=SQL Server'.format(user, password, server, dbname)
accountToGet = 'xxx'
dbSQL = db.dbmodel(connString)
customer_name = dbSQL.get_customer_name_by_id(accountToGet)
print(customer_name)
if __name__ == '__main__':
main(sys.argv[1:])
@sqlhubUPDATE my_table SET name = 'New Name' WHERE id = 1;
В этом запросе my_table - это название вашей таблицы, name - это название столбца, значение которого нужно обновить, New Name - это новое значение, которое вы хотите установить, а id = 1 - это условие, которое определяет, какая строка должна быть обновлена. Вместо 1 вы можете использовать любое значение, которое соответствует условию.
Также вы можете использовать оператор UPDATE для обновления нескольких столбцов в одной строке.
Например, чтобы обновить значения столбцов name и age для строки с определенным значением id, используйте следующий запрос:
UPDATE my_table SET name = 'New Name', age = 30 WHERE id = 1;
В результате выполнения этого запроса значения столбцов name и age будут обновлены для строки с id равным 1.
@sqlhubimport duckdb
from repeat_helper import repeat_executor
con = duckdb.connect(database=':memory:')
con.execute("""CREATE TABLE parking_violations AS SELECT "Summons Number", "Vehicle Make", "Issue Date" FROM read_csv_auto('/Users/chengzhizhao/projects/pandas_alternatives/Parking_Violations_Issued_-_Fiscal_Year_2017.csv', delim=',', SAMPLE_SIZE=-1);""")
con.execute("""SELECT COUNT(1) FROM parking_violations""")
print(con.fetchall())
# ## Фильтрация по марке автомобиля (для BMW)
@repeat_executor(times=5)
def test_filter():
con.execute("""
SELECT * FROM parking_violations WHERE "Vehicle Make" = 'BMW'
""")
return con.fetchall()
# # ## Группировка по марке автомобиля и подсчет
@repeat_executor(times=5)
def test_groupby():
con.execute("""
SELECT COUNT("Summons Number") FROM parking_violations GROUP BY "Vehicle Make"
""")
return con.fetchall()
# # # ## SELF join
@repeat_executor(times=5)
def test_self_join():
con.execute("""
SELECT a."Summons Number"
FROM parking_violations a
INNER JOIN parking_violations b on a."Summons Number" = b."Summons Number"
""")
return con.fetchall()
# ## оконная функция
@repeat_executor(times=5)
def test_window_function():
con.execute("""
SELECT *, ROW_NUMBER() OVER (PARTITION BY "Vehicle Make" ORDER BY "Issue Date")
FROM parking_violations
""")
return con.fetchall()
test_filter()
# Время медианы - 0.410 с
test_groupby()
# # Время медианы - 0.122 с
test_self_join()
# # Время медианы - 3.364 с
test_window_function()
# # Время медианы - 6.466 с
Тест фильтрации показал достижение паритета, а в остальных трех тестах производительность намного выше по сравнению с Pandas.
Чтобы не писать на Python, можно использовать DuckDb CLI с SQL-интерфейсом в командной строке или TAD.
https://duckdb.org/
@sqlhubcreate table events (
id serial primary key,
event_time tstzrange, -- дата и время начала и конца
constraint no_screening_time_overlap exclude using gist (
event_time WITH && -- проверка на пересечение
)
);
insert into events (event_time) values ('["2023-01-01 19:00:00", "2023-01-01 20:45:00"]');
После этого Вы можете попробовать вставить еще олдну строку с интервалом пересекающим один из уже существующих в таблице. Скорей всего у Вас не получится и база данных вернет ошибку. Если же Вы преуспеете — отпишитесь в комментах!
Так же как и UNIQUE, ограничение EXCLUDE может налагаться на нруппу столбцов.
Например Вы можете использовать колонки event_start и event_end типа timestamp и также ограничить наложения по времени. Ниже пример:
CREATE TABLE events (
event_id SERIAL PRIMARY KEY,
event_name VARCHAR(100) NOT NULL,
event_start TIMESTAMPTZ NOT NULL,
event_end TIMESTAMPTZ NOT NULL,
EXCLUDE USING GIST (event_start WITH &&, event_end WITH &&)
);
Аналогично временным диапазонам можно накладывать ограничения на диапазону чисел:
CREATE TABLE ranges (
range_id SERIAL PRIMARY KEY,
start_value INTEGER NOT NULL,
end_value INTEGER NOT NULL,
EXCLUDE USING GIST (int4range(start_value, end_value, '[]') WITH &&)
);
В этом примере создается таблица ranges, которая содержит числовые диапазоны. Оператор EXCLUDE с индексом GiST указывает, что числовые диапазоны в столбцах start_value и end_value не могут перекрываться.
@sqlhub
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
