powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [закрыт для гостей] / Что делать с кучей данных из разных источников?, Поиск: Искать сообщения, созданные автором: Просто Трёп  
17 сообщений из 17, страница 1 из 1
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84682
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число.
Источники разных типов.
1. Простой. Один замер - один показатель.
2. Двойной. Один замер - два показателя.
3. Сложный. Один замер - от 4 до 20 показателей.

Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом.

Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84686
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Когда брался за эту задачу, думал: "А, неделя делов." А если все по-уму делать, 1С придется с нуля написать.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84733
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Может, понаделать таблиц с 1, 2, 4, 5, 6 итд столбцами?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84768
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
IT-Христ  11.07.2022, 15:33
[игнорируется]
Просто Трёп  11.07.2022, 14:01
[игнорируется]
Когда брался за эту задачу, думал: "А, неделя делов." А если все по-уму делать, 1С придется с нуля написать.
У тебя ТЗ нету, в этом твои мучения . Сложно делать не знаю что не знаю зачем.
Скажем так, ТЗ есть, но плохо сформулировано. В процессе, такскать.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84771
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
А сколько места я в базе потеряю, если будет таблица на 20 smallmoney, из которых 60% будет null?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84939
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  11.07.2022, 18:31
[игнорируется]
Сколько показаний в сутки, в год, новых сыплется в систему?
Где-то каждые 30 секунд, где-то раз в 15 минут. Ну и хранить, сколько дисков хватит.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84941
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  11.07.2022, 18:42
[игнорируется]
А отчеты и отображение дело вторичное.
Sparrow  11.07.2022, 18:59
[игнорируется]
Пивот, это дело клиента, эксел и любая отчетная система умеют делать пивот. И 1с
Это гемор, изначально заложенный в систему. Тот, кто будет потом тянуть эти данные, будет меня проклинать.
...
Изменено: 11.07.2022, 19:32 - Просто Трёп
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84944
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
IT-Христ  11.07.2022, 19:32
[игнорируется]
Просто Трёп  11.07.2022, 19:30
[игнорируется]
Sparrow  11.07.2022, 18:31
[игнорируется]
Сколько показаний в сутки, в год, новых сыплется в систему?
Где-то каждые 30 секунд, где-то раз в 15 минут. Ну и хранить, сколько дисков хватит.
Можно по принципу 1С пойти, сделать типа регистра, где сводные данные иметь. А например, годовой давности данные убирать.
А закончится все трехзвенкой. Хотелось бы обойтись базешкой и веб-мордой.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #84947
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Пока что решил сделать одну таблицу с 20 колонками смоллмани и пусть будет полупустой.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #87625
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Deff  14.07.2022, 12:44
[игнорируется]
Просто Трёп  11.07.2022, 19:34
[игнорируется]
Пока что решил сделать одну таблицу с 20 колонками смоллмани и пусть будет полупустой.
По мне так очень плохая идея. Pivot не страшно. С unpivot потом замучаешься.
Лень всё минусы расписывать - просто не делай так.
А ты не ленись. Я как представлю что у меня в таблице будет 20 одинаковых datetime вместо одного, мне грустно становится.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #87626
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Да и нагрузка на сервер... 20 инсертов или 1.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #87822
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  11.07.2022, 20:06
[игнорируется]
Просто Трёп  11.07.2022, 19:34
[игнорируется]
Пока что решил сделать одну таблицу с 20 колонками смоллмани и пусть будет полупустой.
Технически пивот в вашем случае в любой версии ms sql реализуется запросом из 20 left join.
Причем очень эффективно.

Есть пивот в верси. 2008, но там изврат.
А хорший есть толи в 2016 толи в 2018.
Пытаюсь сделать лефт джойны без дубликатов и фиктивных агрегаций, что-то не получается.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #93470
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Обвязку недолго сделать. Главный вопрос, что делать с группами, когда берутся единовременно 20 замеров. Подготовил пару запросиков, данные как раз набежали, завтра посмотрим, какой вариант быстрее. Самый медленный - явно с джойнами.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #93819
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Данных мало. всего 2700 строк в результирующей таблице.
Первый запрос - чисто посмотреть на время выполнения селекта из таблицы с одним столбцом, там в 4 раза больше строк.
Последний - селект из таблицы с четырьмя столбцами.
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
---------------------------------------------------------------------------------------------------------------------------------------
print 'simple in -----------------------------------------------------'
set statistics time on

select adt, s_id, tem from tlog
where s_id in (5, 6, 7, 8) and adt > '2022-07-14 10:55:23.400'
order by 1 asc

set statistics time off
---------------------------------------------------------------------------------------------------------------------------------------
print 'joins -----------------------------------------------------'
set statistics time on

select distinct t.adt, t1.tem v1, t2.tem v2, t3.tem v3, t4.tem v4
from tlog t
  left join tlog t1 on t.adt = t1.adt and t1.s_id = 5
  left join tlog t2 on t.adt = t2.adt and t2.s_id = 6
  left join tlog t3 on t.adt = t3.adt and t3.s_id = 7
  left join tlog t4 on t.adt = t4.adt and t4.s_id = 8
where t.adt > '2022-07-14 10:55:23.400' and t.s_id in (5, 6, 7, 8)
order by 1

set statistics time off
---------------------------------------------------------------------------------------------------------------------------------------
print 'pivot with fake aggr -----------------------------------------------------'
set statistics time on

  ;with t as (
  select adt, s_id, tem from tlog where s_id in (5, 6, 7, 8) and adt > '2022-07-14 10:55:23.400'
  )
  select adt adt, [5] v1, [6] v2, [7] v3, [8] v4 from t pivot (max(tem) for s_id in ([5], [6], [7], [8])) P

set statistics time off
---------------------------------------------------------------------------------------------------------------------------------------
print 'case with fake aggr -----------------------------------------------------'
set statistics time on

;with t as (
select adt
  ,case when s_id = 5 then tem end v1
  ,case when s_id = 6 then tem end v2
  ,case when s_id = 7 then tem end v3
  ,case when s_id = 8 then tem end v4
from tlog where adt > '2022-07-14 10:55:23.400' and s_id in (5, 6, 7, 8))
select adt, max(v1), max(v2), max(v3), max(v4) from t
group by adt
order by 1

set statistics time off
---------------------------------------------------------------------------------------------------------------------------------------
print 'optimal -----------------------------------------------------'
set statistics time on

select adt, v1, v2, v3, v4 from l_val4 where adt > '2022-07-14 10:55:23.400' and g_id = 1

set statistics time off
---------------------------------------------------------------------------------------------------------------------------------------
simple in ----------------------------------------------------- (11088 row(s) affected) SQL Server Execution Times: CPU time = 0 ms, elapsed time = 12 ms. joins ----------------------------------------------------- (2772 row(s) affected) SQL Server Execution Times: CPU time = 31 ms, elapsed time = 33 ms. pivot with fake aggr ----------------------------------------------------- (2772 row(s) affected) SQL Server Execution Times: CPU time = 16 ms, elapsed time = 11 ms. case with fake aggr ----------------------------------------------------- (2772 row(s) affected) SQL Server Execution Times: CPU time = 0 ms, elapsed time = 12 ms. optimal ----------------------------------------------------- (2773 row(s) affected) SQL Server Execution Times: CPU time = 0 ms, elapsed time = 6 ms.
Получается, нет ничего быстрее таблицы с количеством столбцов, соответствующим количеству замеров в группе. Но case с фиктивными аггрегациями тоже неплох. А pivot тоже подгружает ЦП, но не так сильно, как join.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #94234
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Дед-Папыхтет  20.07.2022, 16:34
[игнорируется]
Просто Трёп  11.07.2022, 14:00
[игнорируется]
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число.
Источники разных типов.
1. Простой. Один замер - один показатель.
2. Двойной. Один замер - два показателя.
3. Сложный. Один замер - от 4 до 20 показателей.

Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом.

Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть.
Типовая задача ETL - загружай из разных источников по расписанию свежие данные в единую БД
Привет! Рад видеть!
Это понятно, что в единую БД. Сколько столбцов делать в таблице?
Все в один столбец, а потом разворачивать пивотом (или кейсами), или все-таки для групп замеров, которые делаются единомоментно, и будут выбираться потом все скопом, делать много столбцов?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #95069
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
cat2  21.07.2022, 13:33
[игнорируется]
Продолжайте жрать кактус
Костя, а че ты смеешься? Вот у тебя 20 замеров, сделанные единовременно. 90% селектов по этим замерам будут делаться так:
Код: SQL
1.
селект все 20 замеров где время битвин трам-пам-пам
Причем возвращаться будут тысячи строк. Остальные 10% - это возможно аналитика через курсоры. Хотя вряд-ли она будет на скуле, скорее в стороннем приложении.
У тебя нет мысли, что лучше все-таки сделать таблицу с 20-ю столбцами, чем хранить все в одном столбце?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Что делать с кучей данных из разных источников?
    #95070
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [закрыт для гостей] / Что делать с кучей данных из разных источников?, Поиск: Искать сообщения, созданные автором: Просто Трёп  
Читали тему (1): Анонимы (1)
Игнорируют тему (1): erbol
Читали форум (2): Анонимы (1), Yandex Bot 4 мин.
Пользователи онлайн (16): Анонимы (8), Yandex Bot, Сантьяга 2 мин., prostozevs 3 мин., ElenaG 4 мин., IT-Клоп 4 мин., Сталкер 4 мин., XEugene 4 мин., Bing Bot 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]