Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
Есть таблица фактов порядка 500 млн строк и около 30 столбцов с данными на каждый день, начиная с 2010 года по текущую дату.
Задача - создать процесс обновления таблицы из источника таким образом, чтобы не перезагружать всю таблицу каждый раз целиком, а обновлять только последние 4ре месяца, таким образом сегодня мы обновим только данные за Август-Ноябрь, в следующем месяце обновим только Сентябрь-Декабрь итд..

Звучит всё довольно просто, но сомневаюсь какой выбрать подход..
Какие в голове набросал варианты:

- разбить таблицу на две файловые группы и применить партиционирование (две партиции - current и archive, таким образом, чтобы от месяца к месяца плавающее окно всегда менялось)
- разбить данные на две физические таблицы - FactCurrent и FactArchive - и в конце загрузки "склеивать" их воедино (получается подход схожий с партиционированием по сути)
- применять конструкцию merge при загрузке, но тут придется с индексами повозиться, таблица повторюсь очень тяжелая..

Наверняка многие сталкивались с такой же задачей - когда нужно обновлять только свежие данные а старые не трогать, как решали подобную задачу?
21 ноя 16, 17:09    [19917390]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
для начала

select @@version 
21 ноя 16, 17:25    [19917515]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
Jun 28 2012 08:36:30
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
21 ноя 16, 17:27    [19917530]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Чем партиционирование не устраивает?
21 ноя 16, 17:32    [19917570]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
Верблюд,

даст ли оно прирост в скорости обновления/вставки записей если все партиции old и archive будут в одной файловой группе?
21 ноя 16, 17:33    [19917581]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
aleks2
Guest
Верблюд
Чем партиционирование не устраивает?

Тем, что оно бесполезно. В данной конкретной задаче.

Кластерный индекс по дате - вот и фсе.

ЗЫ. Ну и наезд тредстартера на merge - неуместен. Просто, он не умеет его готовить.
21 ноя 16, 17:48    [19917667]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
aleks2,
опишите более подробно если не сложно, как вы себе это видите?
у меня в таблице фактов есть также ID элемента, т.е. уникальный ключ таблицы фактов это Date + ID, это как то повлияет на ваш ответ?
21 ноя 16, 18:00    [19917723]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Просмотр диапазонов - типовая задача для кластеризованного индекса.
21 ноя 16, 18:02    [19917731]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Santa89,

а что у Вас там еще есть? Выкладывайте сразу.
21 ноя 16, 18:03    [19917738]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
Владислав Колосов,
да стандартная таблица фактов:
признак даты (date_time), id элемента (id), и погнал набор атрибутов + десяток числовых значений (мер)
21 ноя 16, 18:09    [19917759]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
aleks2
Верблюд
Чем партиционирование не устраивает?

Тем, что оно бесполезно. В данной конкретной задаче.


Да ладно. ALTER TABLE … SWITCH в помощь

Вот почитайте

https://msdn.microsoft.com/ru-ru/library/dd425070(en-us).aspx
https://technet.microsoft.com/ru-ru/library/ms191160(v=sql.105).aspx
21 ноя 16, 18:18    [19917806]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
aleks2
Guest
Santa89
aleks2,
опишите более подробно если не сложно, как вы себе это видите?
у меня в таблице фактов есть также ID элемента, т.е. уникальный ключ таблицы фактов это Date + ID, это как то повлияет на ваш ответ?

Чаво видеть то?

Если у тя Date - первое поле кластерного индекса, то ничего больше и лучше сделать те не светит.
21 ноя 16, 18:23    [19917834]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
aleks2
Guest
Верблюд
aleks2
пропущено...

Тем, что оно бесполезно. В данной конкретной задаче.


Да ладно. ALTER TABLE … SWITCH в помощь

Вот почитайте

https://msdn.microsoft.com/ru-ru/library/dd425070(en-us).aspx
https://technet.microsoft.com/ru-ru/library/ms191160(v=sql.105).aspx


Мало уметь читать - надо уметь понимать прочитанное.
21 ноя 16, 18:25    [19917845]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
aleks2
Верблюд
пропущено...


Да ладно. ALTER TABLE … SWITCH в помощь

Вот почитайте

https://msdn.microsoft.com/ru-ru/library/dd425070(en-us).aspx
https://technet.microsoft.com/ru-ru/library/ms191160(v=sql.105).aspx


Мало уметь читать - надо уметь понимать прочитанное.


И что надо понимать, объясни мне, непонимающему.
21 ноя 16, 18:27    [19917857]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
aleks2,
т.е. ты предлагаешь просто сделать кластерный индекс по date_time, и каждый раз при загрузке таблицы фактов дропать последние 4 месяца в таблице фактов и вставлять их из источника?
21 ноя 16, 18:29    [19917865]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
aleks2
Guest
Santa89
aleks2,
т.е. ты предлагаешь просто сделать кластерный индекс по date_time, и каждый раз при загрузке таблицы фактов дропать последние 4 месяца в таблице фактов и вставлять их из источника?

Ты, вроде, обновлять собирался?
21 ноя 16, 18:31    [19917871]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
aleks2,
да нет, зачем.
полей слишком много, проще ведь написать delete - insert, чем update по каждому полю. к тому же в "свежих" данных исчезнуть записи которые были в старых.
21 ноя 16, 18:36    [19917885]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
* могут исчезнуть
21 ноя 16, 18:40    [19917896]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
aleks2
Guest
Santa89
aleks2,
да нет, зачем.
полей слишком много, проще ведь написать delete - insert, чем update по каждому полю. к тому же в "свежих" данных исчезнуть записи которые были в старых.


Если те лень писать поля - следуй за кораблем пустыни.
Учи switch out.

ЗЫ. Дурацкое дело - нехитрое.
21 ноя 16, 18:41    [19917899]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Santa89,

Партиционируйте все по месяцам. Не парьтесь со скользящим партиционированием. Кексов наедитесь немерено. Сделайте функцию партиционирования до 2020 года и не парьтесь.

Каков характер обновлений? Если все за 4 месяца удалить-вставить (заменить), это одно, если понемногу строчек поменять в каждом месяце это другое?
21 ноя 16, 18:49    [19917926]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
aleks2,

Я думаю, что и merge и партиционирование уместны.
21 ноя 16, 18:50    [19917930]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Santa89
Member

Откуда:
Сообщений: 1526
a_voronin,
да..как вариант.
интересует прежде всего именно как удалять-вставлять только свежие данные за текущение 4мес. всем скопом
21 ноя 16, 18:54    [19917941]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1321
+1 за ALTER TABLE … SWITCH
21 ноя 16, 19:24    [19918018]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Santa89
a_voronin,
да..как вариант.
интересует прежде всего именно как удалять-вставлять только свежие данные за текущение 4мес. всем скопом


Делайте их в другой таблице с аналогичной структурой и партиционированием и затем ALTER TABLE … SWITCH PARTITION как уже говорили
21 ноя 16, 19:34    [19918045]     Ответить | Цитировать Сообщить модератору
 Re: Подход к обновлению большой таблицы SSIS  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Santa89
интересует прежде всего именно как удалять-вставлять только свежие данные за текущение 4мес. всем скопом
То есть за последние 4 месяца данные во время загрузки полностью заменяются на новые?
Тогда да, используйте секционирование, штатное или своё.

"Своё" - делайте 2 таблицы для активных и архивных данных, объединяя их через вьюху.

"Штатное" - обычное сиквельное секционирование; с активной секцией будете работать, переключая её на время загрузки в самостоятельную таблицу.
Проблема штатного секционирование только в том, что придётся наверняка постоянно менять параметры секционирования, что требует немалых ресурсов. Но это зависит от того, что такое у вас "за последние 4 месяца".
22 ноя 16, 09:48    [19919098]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить