У меня есть проблема с решением проблемы с проблемой - мы используем monetDB в сочетании с JAVA-программой jdbc. Я хотел бы получить некоторые рекомендации, если я могу решить свою проблему с использованием SQL-запросов, если мне нужно написать скрипт или, возможно, выполнить мои вычисления в JAVA.Наиболее эффективная техника для извлечения данных из нескольких таблиц SQL
У нас есть приблизительно 3 месяца данных (~ 90 таблиц) каждый с датой в названии таблицы, каждая таблица содержит временные торговые данные, упрощенные таким образом.
TableMarch1
Time Symbol Vol
9:30 X 100
9:31 Y 200
9:31 X 100
...
TableMarch2
Time Symbol Vol
9:30 X 500
9:31 Y 300
9:31 Y 100
...
Моя задача состоит в том, чтобы проанализировать деятельность в разные периоды суток с интервалом в 15 минут (то есть (9: 30-9: 45, 9: 45-10:. 00) Таблицы могут содержать много символов но мы будем анализировать один за раз.
В идеале я хотел бы объединить общий объем для каждого символа за каждый период времени для каждой даты, но было бы также приемлемо объединить данные и рассчитать общее количество позже:
Result table1(930-945)
Date Time Sym Total Volume
March 1 9:30-9:45 X 200
March 1 9:30-9:45 Y 300
March 2 9:30-9:45 X 500
...
Result table 2(945-1000)
March 1 9:45-10:00 X 1000
March 1 9:45-10:00 Y 500
Так что, в конечном итоге, я могу выполнять статистические вычисления для каждого в terval для одного символа. Я не уверен, что есть эффективный способ вытащить данные из всех устаревших таблиц и создать новые представления/таблицы на основе временных интервалов. Я могу перенаправить проблему только для тестирования и запроса всех этих таблиц на лету через JDBC, но это чрезвычайно дорогостоящая операция для запроса данных из 90 таблиц 1 за раз и деления ВСЕ данных на 15-минутные ведра а затем сделайте статистические расчеты оттуда, поэтому я чувствую, что должен быть способ создать новую структуру в базе данных, которая упростит получение этих данных, но я не уверен в том, как это сделать, без ручного управления вытаскиванием данных из каждая таблица 1 за раз.
Могу ли я извлекать данные из нескольких таблиц с помощью одного оператора SQL каким-либо образом, чтобы создать представление или новую таблицу с моими желаемыми результатами (в принципе, любой метод, позволяющий писать новый запрос для КАЖДОГО ОДНОГО случая и даты)? Есть ли способ написать оператор case, который будет вставляться в другую таблицу в зависимости от случая? Есть ли способ настроить monetdb для более эффективного выполнения этих запросов? Или мне нужно написать скрипт для обработки одной таблицы за раз и просто вытащить все в новые таблицы?
Я никогда не работал с MonetDB, но мне кажется, что независимо от того, является ли базовый механизм хранения и поиска ориентированным на столбцы (например, MonetDB) или ориентированным на ряд (например, более традиционные СУБД), любой анализ по датам будет огромной неприятностью, если ваши данные фрагментированы в отдельных таблицах для каждой даты. У меня возникли проблемы с представлением о том, как объединение данных в одну большую таблицу с датой * значением * для каждой «записи» (или «наблюдения» или любого другого выбора) может не облегчить вашу жизнь. –
Горд, я считал, что, однако, таблицы слишком велики, около 30 столбцов и ~ 35 миллионов или ~ 6 ГБ записей в день. Я объединил таблицы в еженедельные таблицы и достиг почти 200-миллиметровых записей, обращаясь к большой таблице, к сожалению, слишком дорогостоящей с точки зрения памяти при запросе данных из нескольких дат даже на нашем массивном 32-ядерном сервере с 256 ГБ памяти. Конечная цель состоит в том, чтобы объединить исторический анализ с каналом в реальном времени с одними и теми же данными, чтобы уменьшить латентность, а стоимость является приоритетом, даже если она включает более сложное решение. – Gadesxion