Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сгруппировать данные и создать xml колонку / 25 сообщений из 28, страница 1 из 2
22.08.2018, 15:19
    #39691835
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
Всем привет,

есть большая таблица с суммами по дням и очень хочется её сократить в размере.
Для этого хочу оставить только одну запись в месяц на клиента, а обороты запихать в отдельный столбец XML и хранить там.
Код: 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.
drop table if exists #TableA;
CREATE TABLE #TableA (value_day date, customer_id varchar(64), turn decimal(18,4));

INSERT #TableA (value_day, customer_id, turn) VALUES
(DATEFROMPARTS(2018,06,01) ,'customer1',500),
(DATEFROMPARTS(2018,06,02) ,'customer1',0),
(DATEFROMPARTS(2018,06,03) ,'customer1',11),
(DATEFROMPARTS(2018,06,04) ,'customer1',22),
(DATEFROMPARTS(2018,06,05) ,'customer1',33),
(DATEFROMPARTS(2018,06,06) ,'customer1',4),
(DATEFROMPARTS(2018,06,07) ,'customer1',0),
(DATEFROMPARTS(2018,06,08) ,'customer1',0),
(DATEFROMPARTS(2018,06,09) ,'customer1',0),
(DATEFROMPARTS(2018,06,10) ,'customer1',5),

(DATEFROMPARTS(2018,06,01) ,'customer2',6),
(DATEFROMPARTS(2018,06,02) ,'customer2',50),
(DATEFROMPARTS(2018,06,03) ,'customer2',448.55),
(DATEFROMPARTS(2018,06,04) ,'customer2',854.11),
(DATEFROMPARTS(2018,06,05) ,'customer2',59855),
(DATEFROMPARTS(2018,06,06) ,'customer2',45.22),
(DATEFROMPARTS(2018,06,07) ,'customer2',10),
(DATEFROMPARTS(2018,06,08) ,'customer2',0),
(DATEFROMPARTS(2018,06,09) ,'customer2',8),
(DATEFROMPARTS(2018,06,10) ,'customer2',99);
	
select *
from #TableA



В результате должна получится сгруппированная таблица со столбцами:
- дата (конец отчетного месяца). Тип данных - дата.
- клиент (customer1 / customer2). Тип данных - строка.
- обороты по дням. Тип данных - XML.
Например для customer1:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<days>
  <d val="01.06.2018">500</d>
  <d val="02.06.2018">0</d>
  <d val="03.06.2018">11</d>
  ...
  <d val="10.06.2018">5</d>
</days>



Как бы это вывернуть?
...
Рейтинг: 0 / 0
22.08.2018, 15:40
    #39691848
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155,

авторочень хочется её сократить в размере.
а в чём вы размер меряете?
...
Рейтинг: 0 / 0
22.08.2018, 16:18
    #39691904
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
...
Рейтинг: 0 / 0
22.08.2018, 16:20
    #39691906
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
и в чём профит? Ничего положительного вы не делаете данным желанием
...
Рейтинг: 0 / 0
22.08.2018, 16:23
    #39691907
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
TaPaKUser2155Там записи по дням на каждый день года.
Я хочу оставить только одну строку на один месяц, а суммы спрятать в XML.
и в чём профит? Ничего положительного вы не делаете данным желаниемПрофит в исключении неприятно большого (для неспециалиста) количества строк.
Неспециалисты думают, что чем меньше строк, тем быстрее и проще. А тем более таблиц, таблицы - это вообще зло, лучше всего одна.
...
Рейтинг: 0 / 0
22.08.2018, 16:35
    #39691916
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
alexeyvg,

авторПрофит в исключении неприятно большого (для неспециалиста) количества строк.
посмотрел в похожей табличке почти 1 млдр... хай будэ :)
...
Рейтинг: 0 / 0
22.08.2018, 16:48
    #39691923
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
TaPaK,

у меня гораздо больше. Я готов пожертвовать временем (пусть вычисления дольше идут) лишь бы это схлопнуть.
...
Рейтинг: 0 / 0
22.08.2018, 16:51
    #39691925
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155TaPaK,

у меня гораздо больше. Я готов пожертвовать временем (пусть вычисления дольше идут) лишь бы это схлопнуть.
так профит в чём от ваших хлопков?
...
Рейтинг: 0 / 0
22.08.2018, 16:54
    #39691926
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
TaPaK,

Таблица меньшего размера.
...
Рейтинг: 0 / 0
22.08.2018, 16:57
    #39691932
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155TaPaK,

Таблица меньшего размера. нет
...
Рейтинг: 0 / 0
22.08.2018, 16:59
    #39691934
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155TaPaK,

Таблица меньшего размера.Заведите справочник кастомеров, после чего экономии от "хлопанья" не станет.
...
Рейтинг: 0 / 0
22.08.2018, 17:05
    #39691938
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
Гавриленко Сергей АлексеевичUser2155TaPaK,

Таблица меньшего размера.Заведите справочник кастомеров, после чего экономии от "хлопанья" не станет.
и прекратить хранить нулевые обороты :)
...
Рейтинг: 0 / 0
22.08.2018, 17:14
    #39691942
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
TaPaK,

думаю да, убрать записи где нулевые обороты будет правильно.
XML в данном случае какой-то кривой вариант.
...
Рейтинг: 0 / 0
22.08.2018, 17:16
    #39691944
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155Таблица меньшего размера.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select
 a.value_day, a.customer_id, a.turn, b.x as days_data
into
 #TableB
from
 (select min(value_day), customer_id, sum(turn) from #TableA group by customer_id) a(value_day, customer_id, turn) cross apply
 (select value_day as [@val], turn as [*] from #TableA where customer_id = a.customer_id for xml path('d'), root('days'), type) b(x);

select * from #TableA;
select * from #TableB;

select sum(datalength(value_day) + datalength(customer_id) + datalength(turn)) from #TableA;
select sum(datalength(value_day) + datalength(customer_id) + datalength(turn) + datalength(days_data)) from #TableB;
...
Рейтинг: 0 / 0
22.08.2018, 17:19
    #39691948
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
invm,

жесть. Т.е. новая таблица в три раза больше :-)
...
Рейтинг: 0 / 0
22.08.2018, 17:20
    #39691949
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155invm,

жесть. Т.е. новая таблица в три раза больше :-)
Ох... кто вам вообще даверил такие изыскания
...
Рейтинг: 0 / 0
22.08.2018, 17:24
    #39691952
User2155
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
TaPaK,

спокойствие, только спокойствие. Я ж не создал эту колонку, а только думал что получится. ))
...
Рейтинг: 0 / 0
22.08.2018, 17:32
    #39691960
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155Всем привет,

есть большая таблица с суммами по дням и очень хочется её сократить в размере .

...

Как бы это вывернуть?

ну, если в размере, то проверьте это:
sp_estimate_data_compression_savings
...
Рейтинг: 0 / 0
22.08.2018, 19:10
    #39692005
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
User2155TaPaK,

думаю да, убрать записи где нулевые обороты будет правильно.
XML в данном случае какой-то кривой вариант.А что, у вас customer_id действительно имеет тип varchar(64), и там названия, или это просто для примера?
Для большой таблицы так делать недопустимо.

А убирать нулевые обороты хоть и очевидно полезное решение для сокращения таблицы, но запросы могут усложниться и замедлиться, придётся же искать ближайшее значение, а не просто джойнить по дате и кастомеру.
Так что нужно это тщательно взвесить.
...
Рейтинг: 0 / 0
22.08.2018, 20:03
    #39692011
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
дык у xml как бы и оверхед немаленький, в xml возможно имеет смысл убирать только в случае если вам приходят в систему данные в xml и оперативный доступ к данным вам попросту не нужен, надо просто сохранить значения в бд на какой-то крайний случай.
у меня такое было, приходила информация в xml и я ее как есть сохранял в БД потому что в нее мне надо было добавить некоторое количество данных и отправить обратно. И чтобы не формировать этот xml по новой я просто брал что пришло ранее и добивал туда нужное после чего отправлял обратно.
...
Рейтинг: 0 / 0
23.08.2018, 09:53
    #39692189
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
К чему такие сложности?
Код: sql
1.
DATEFROMPARTS(2018,06,01)


достаточно половины дозы
Код: sql
1.
'20180601'
...
Рейтинг: 0 / 0
23.08.2018, 13:37
    #39692392
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
энди,

на тему оверхеда. поле nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESS.

records_countuncomressed_sizecompressed_sizecompression_prcnt9997920835Mb1555Mb7.46%
про размеры не пинаем, это только один день из всего содержимого
...
Рейтинг: 0 / 0
23.08.2018, 13:43
    #39692394
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
ShIgorэнди,

на тему оверхеда. поле nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESS.

records_countuncomressed_sizecompressed_sizecompression_prcnt9997920835Mb1555Mb7.46%
про размеры не пинаем, это только один день из всего содержимого А если распечатать на бумаге, а записи удалить, то вообще экономия будет места на диске будет потрясающая!
...
Рейтинг: 0 / 0
23.08.2018, 14:01
    #39692410
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
ShIgorполе nvarchar(max) в нем xml. использую встроенные функции COMPRESS/DECOMPRESSВидимо, настоящие джедаи никогда не пользуются типом данных xml.
...
Рейтинг: 0 / 0
23.08.2018, 15:32
    #39692488
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сгруппировать данные и создать xml колонку
invm,

а что-то отличается от способа его хранения? я что-то пропустил?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сгруппировать данные и создать xml колонку / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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