Выбор (разреженных) точек данных из большой таблицы, соответствующих определенным критериям - PullRequest
0 голосов
/ 06 января 2020

Я часто нахожусь в сценарии, где у меня есть (python) DataFrame со столбцами A, B, C, и я хотел бы добавить столбец D из таблицы базы данных, где D - значения из этой таблицы которые соответствуют A, B, C. Поэтому я хочу выполнить объединение SQL между двумя таблицами, но одна из этих таблиц - это мой DataFrame, который находится в динамической памяти c (RAM). Одним из способов является создание временной таблицы, а затем вставка всех данных из этого DataFrame, но я считаю, что некоторые серверы БД имеют ограничение на количество строк, которые вы можете вставить в таблицу на оператор вставки, поэтому мне нужно разделить и добавить больше логи c. Другой способ, который, как я обнаружил, не имеет этого предела, заключается в следующем методе:

SET QUOTED_IDENTIFIER ON;
DECLARE @xml xml;
SET @xml = '<contract Expiry="199602" StartDate="12-Dec-1995 00:00:00" EndDate="09-Jan-1996 23:59:59"/>
<contract Expiry="199603" StartDate="10-Jan-1996 00:00:00" EndDate="07-Feb-1996 23:59:59"/>
<contract Expiry="201908" StartDate="13-May-2019 12:16:25" EndDate="10-Jun-2019 10:57:15"/>
<contract Expiry="201909" StartDate="10-Jun-2019 10:57:16" EndDate="30-Jun-2019 23:00:00"/>';

exec sp_executesql N'SELECT close_date, [close] FROM t_prices_futures_min15 price
                    inner join (SELECT t.data.value(''@Expiry'', ''int'') AS xmlExpiry,
                                       t.data.value(''@StartDate'', ''datetime'') AS xmlStartDate,
                                       t.data.value(''@EndDate'', ''datetime'') AS xmlEndDate
                                FROM @queryXML.nodes(''/contract'') t(data) ) cont ON price.contract_expiry = cont.xmlExpiry AND price.close_date >= cont.xmlStartDate AND price.close_date <= cont.xmlEndDate
                    WHERE FUTURES_ID = @FuturesID ORDER BY close_date',
                    N'@FuturesID VARCHAR(10),@queryXML xml','CBL',@xml;

Вышеуказанное довольно сложно. Есть ли простая техника для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...