Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 18.09.2022
Сообщений: 242

Работа с вьюшками

14.09.2024, 11:00. Показов 645. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть три большие таблицы, каждая где-то по 200 Гб. Одна таблица по операциям за июнь, другая за июль, третья за август. Необходимо обработать эти данные уже готовым(!) скриптом с периодом с июня по август. Обработать каждую таблицу скриптом не вариант, так как потом три набора данных нереально объединить в один (а нужен именно один набор результирующих данных за три месяца). То есть получается, что нужно слить эти три таблицы в одну и только потом по объединенной таблице запускать скрипт. В связи с объединением таблиц возникает вопрос. Самый простой путь (как мне кажется) - это сделать вьюшку по всем трем таблицам и на вход скрипта отдавать эту вьюшку. НО! в скрипте по разным полям в разные моменты формируются индексы. И в связи с эти возникает вопрос - можно ли по полям вьюшки, как по полям обычной таблицы, создавать индексы? И второй вопрос - можно ли вьюшку как-то превратить в обычную таблицу? то есть объединил вьюшкой три таблицы, а потом раз и превратил вьюшку в обычную таблицу (например, если вьюшка чем-то не устраивает и нужна полноценная таблица)

Microsoft SQL Server 2019
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2024, 11:00
Ответы с готовыми решениями:

Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных
Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных. Стоимость: Договорная Срок...

Работа с строками,Работа со структурными типами данных,Работа с файлами!!
Помогите написать программы для следующих заданий....буду очень благодарен.) 1)Разработать программу которая удаляет все слова в...

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

8
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.09.2024, 11:53
почитай индексы представлений и материализованные представлени для ms sql
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
14.09.2024, 11:56
Цитата Сообщение от 2022N2022 Посмотреть сообщение
И в связи с эти возникает вопрос - можно ли по полям вьюшки, как по полям обычной таблицы, создавать индексы?
Да, если это материализованное представление.
Но вам, по здравому размышлению, нужно секционированное представление.
А индексы - создайте сразу.

https://learn.microsoft.com/ru... rver-ver15
0
2 / 2 / 0
Регистрация: 18.09.2022
Сообщений: 242
14.09.2024, 12:45  [ТС]
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
14.09.2024, 13:05
Смотрите.
По смыслу, если у вас имеются несколько одинаковых таблиц, но, например, содержащих данные из разных периодов, типа "за первый квартал", "за второй квартал" и т.д., вы можете создать секционированное представление, см:
https://learn.microsoft.com/ru... rver-ver16
Там довольно много требований, и нужно слегка модифицировать базовые таблицы (создать check constraint по столбцу секционирования), но, при условии аккуратного выполнения этих требований, вы получите обновляемую виртуальную таблицу из нескольких реальных таблиц, с которой можно будет производить все базовые DML операции.
DDL - нельзя, индекс вы по ней не создадите, конечно, но по базовым таблицам создавать их можно вполне.
Всё замечательно работает, даже если базовые таблицы расположены в разных базах, и даже - на разных серверах.
0
2 / 2 / 0
Регистрация: 18.09.2022
Сообщений: 242
14.09.2024, 17:37  [ТС]
Я пока не могу понять как ответить на поставленные вопросы.
Да, у меня имеются три таблицы за июнь, июль, август. Все таблицы имеют одинаковую структуру. Да, я создаю представление типа

SQL
1
2
3
4
5
6
7
8
9
10
CREATE VIEW tabel_all  
AS  
SELECT *  
FROM table1  
UNION ALL  
SELECT *  
FROM table2  
UNION ALL   
SELECT *  
FROM table3;
Я не знал, что вьюшки такого типа называются секционированными, но ОК. Дальше эту секционированную вьюшку мне надо будет подать на вход скрипту (на самом деле там 10 скриптов, идущих друг за другом), который будет пытаться по каким-то полям вешать индексы для ускорения обработки. Вопрос в том, что будет ли выскакивать ошибка при попытке создать индексы на вьюшке? Проблема в том, что объем таблиц очень большой и я не хочу, чтобы на 4 часе обработки вдруг оказалось, что индексы вешать нельзя и все время потрачено впустую... Если нужно какие-то условия соблюсти, подскажите.
По материализованным вьюшкам, насколько я понимаю, MS SQL 2019 не поддерживает их

P.S. Записи внутри каждой таблицы имеют уникальный идентификатор, но не имеют первичного ключа.
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
15.09.2024, 10:03
Цитата Сообщение от 2022N2022 Посмотреть сообщение
По материализованным вьюшкам, насколько я понимаю, MS SQL 2019 не поддерживает их
Разумеется, поддерживает.
Только вы не понимаете смысла этого понятия.

Цитата Сообщение от 2022N2022 Посмотреть сообщение
Я не знал, что вьюшки такого типа называются секционированными, но ОК.
Чтобы такая вьющка стала обновляемой - нужно внести изменения в базовые таблицы.
См. столбец секционирования и всё вокруг этого.

Цитата Сообщение от 2022N2022 Посмотреть сообщение
Вопрос в том, что будет ли выскакивать ошибка при попытке создать индексы на вьюшке?
Разумеется, будет.
Но, если так уж сильно припекло, пожно попытки создания индексов на такой секционированной вьюхе перехватывать и подавлять их, написав DDL триггер:
https://learn.microsoft.com/ru... rver-ver16

Цитата Сообщение от 2022N2022 Посмотреть сообщение
P.S. Записи внутри каждой таблицы имеют уникальный идентификатор, но не имеют первичного ключа.
Это ничего, это бывает.
Но, однако, старайтесь так не делать.
0
2 / 2 / 0
Регистрация: 18.09.2022
Сообщений: 242
15.09.2024, 10:42  [ТС]
Вроде бы нашел решение, но пока проверить не могу

SQL
1
2
3
4
5
6
7
8
9
10
CREATE VIEW table_all  WITH SCHEMABINDING
AS  
SELECT *  
FROM table1  
UNION ALL  
SELECT *  
FROM table2  
UNION ALL   
SELECT *  
FROM table3;
По-хорошему, надо еще потом кластерный ключ создать:
SQL
1
CREATE CLUSTERED INDEX IX_table_all ON table_all (uid)
Но, делать это не буду, к сожалению, так как кластерный ключ на 600 Гб на моем оборудовании - это сутки работы

и дальше можно использовать вьюшку как обычную таблицу, в т.ч. вешать некластеризованные индексы.

P.S. обновляемость вьюшки мне не нужна. Один раз вьюшку использовал и удалил
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
16.09.2024, 10:20
Цитата Сообщение от 2022N2022 Посмотреть сообщение
Обработать каждую таблицу скриптом не вариант, так как потом три набора данных нереально объединить в один
я бы это фиксил. Сливать 600 гигов в одно место, чтобы потом умереть его разбирать (при правильной структуре и это не проблема) — намного хуже, чем поработать отдельно с пакетами по 200 гигов и собрать в один отчёт.
Тут очень много "если".
Материализованные представления сильно замедлят операции Insert/Update/Delete в каждой из таблиц.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2024, 10:20
Помогаю со студенческими работами здесь

Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р.
Обязанности - проведение обучающих семинаров по C# Базовый (начальный уровень). Опыт преподавания не обязателен, главное чтобы вы не...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры)
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее отпускаем - она не реагирует. Public...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную работу и КПД цикла предыдущей...

Работа с ems api: корректная работа при указании веса.
Здравствуйте! Есть такой код, для работы с ems api (http://www.emspost.ru/ru/corp_clients/dogovor_docements/api/) <!DOCTYPE html...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru