SQL Newbie - через раздел?

Я предполагаю, что вы хотите работать с несколькими файлами одновременно. Для этого лучший способ (на мой взгляд) - использовать multiprocessing. Чтобы использовать это, вам нужно определить элементарный шаг, и это уже сделано в вашем коде.

import numpy as np
import multiprocessing as mp
import os

def compute(file):
    mindex=np.zeros((1200,1200))
    for i in range(1200):
        var1 = xray.open_dataset(file)['variable'][:,i,:].data
        for j in range(1200):
            var2 = var1[:,j]
            ## Mathematical Calculations to find var3[i,j]## 
            mindex[i,j] = var3[i,j]
    return (file, mindex)


if __name__ == '__main__':
    N= mp.cpu_count()

    files = os.scandir(folder)

    with mp.Pool(processes = N) as p:
        results = p.map(f, [file.name for file in files])

Это должно вернуть список элементов results, в котором каждый элемент является кортежем с имя файла и матрицу mindex. При этом вы можете работать с несколькими файлами одновременно. Это особенно эффективно, если вычисление для каждого файла длинное.

0
задан marc_s 19 January 2019 в 12:43
поделиться

1 ответ

Сначала вместо создания постоянной таблицы я просто изменил ее на временную таблицу.

Итак, учитывая ваш пример, я пришел к следующему:

WITH CTE as(
select ROW_NUMBER() OVER(ORDER BY BLOCK) RN, LAG(Value1,1,VALUE1) OVER (ORDER BY BLOCK) LG, 
GatewayDetailID, Block, Value1,Value2,Vaule3
 from #tmp
), 
CTE2 as (
    select *, CASE WHEN LG <> VALUE1 THEN RN ELSE 0 END RowMark 
    from cte
    ), 
CTE3 AS (
    select MIN(Block) BL, RowMark from CTE2
    GROUP BY ROwMark
    ),
CTE4 AS (
    SELECT GatewayDetailID,Block,Value1,Value2,Vaule3,RMM from cte2 t1
    CROSS APPLY (SELECT MAX(ROWMark) RMM FROM CTE3 t9 where t1.Block >= t9.ROwMark and t1.RN >= t9.RowMark) t2
    )

SELECT GateWayDetailID,Block,Value1,Value2,Vaule3, ROW_NUMBER() OVER(Partition by RMM ORDER BY BLOCK) RN
FROM CTE4
ORDER BY BLOCK

Сначала мне нужно было получить номер строки для всех строк, а затем в зависимости от того, когда значение1 изменилось, я отметил это как новая группа. Из этого я создал CTE с датой и строкой границы для каждой группы. И, наконец, я перекрестно применил это обратно к таблице, чтобы найти каждую строку в каждой группе.

Из этого последнего CTE я просто применил простую функцию ROW_NUMBER (), разделенную на каждую группу RowMarker и номера строк poof ....

Возможно, есть лучший способ сделать это, но именно так я логически работал над этой проблемой.

0
ответ дан JM_ 19 January 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: