|
|
@@ -1,3 +1,5 @@
|
|
|
+# baseAnalyst.py
|
|
|
+
|
|
|
import concurrent.futures
|
|
|
import logging
|
|
|
from abc import ABC, abstractmethod
|
|
|
@@ -489,21 +491,39 @@ class BaseAnalyst(ABC):
|
|
|
def loadData(self, powerFarmID: str, timeGranularity: str, turbineCode: str, select: str, condition: str) -> pd.DataFrame:
|
|
|
selectStr = ", ".join(f"{field}" for field in select)
|
|
|
businessDB: DatabaseUtil = GetBusinessDbUtil()
|
|
|
+
|
|
|
+
|
|
|
+ # query_text = f"""SELECT wind_turbine_number,time_stamp, active_power,wind_velocity,cabin_position,true_wind_direction, rotor_speed, generator_speed,actual_torque,yaw_error1,outside_cabin_temperature,cabin_temperature,main_bearing_temperature,gearboxmedium_speed_shaftbearing_temperature,gearbox_low_speed_shaft_bearing_temperature,gearbox_high_speed_shaft_bearing_temperature,generatordrive_end_bearing_temperature,generatornon_drive_end_bearing_temperature,generator_winding1_temperature,pitch_angle_blade_1,pitch_angle_blade_2,pitch_angle_blade_3,front_back_vibration_of_the_cabin,side_to_side_vibration_of_the_cabin
|
|
|
+ # FROM `{dataBatchNum}_{timeGranularity}`
|
|
|
+ # WHERE wind_turbine_number IN ({turbineCode}) AND {condition}"""
|
|
|
+ query_text = f"""SELECT {selectStr}
|
|
|
+ FROM `{powerFarmID}_{timeGranularity}`
|
|
|
+ WHERE wind_turbine_number IN ({turbineCode}) AND {condition}"""
|
|
|
+
|
|
|
+ # select = [Field_DeviceCode, Field_Time, Field_ActiverPower, Field_WindSpeed, Field_NacPos, Field_WindDirection, Field_RotorSpeed, Field_GeneratorSpeed, Field_GeneratorTorque, Field_AngleIncluded, Field_EnvTemp, Field_NacTemp, Field_MainBearTemp, Field_GbMsBearTemp, Field_GbLsBearTemp,
|
|
|
+ # Field_GbHsBearTemp, Field_GeneratorDE, Field_GeneratorNDE, Field_GenWiTemp1, Field_PitchAngel1, Field_PitchAngel2, Field_PitchAngel3, Field_NacFbVib, Field_NacLrVib]
|
|
|
+
|
|
|
+ chunks = []
|
|
|
with businessDB.session_scope() as session:
|
|
|
- # query_text = f"""SELECT wind_turbine_number,time_stamp, active_power,wind_velocity,cabin_position,true_wind_direction, rotor_speed, generator_speed,actual_torque,yaw_error1,outside_cabin_temperature,cabin_temperature,main_bearing_temperature,gearboxmedium_speed_shaftbearing_temperature,gearbox_low_speed_shaft_bearing_temperature,gearbox_high_speed_shaft_bearing_temperature,generatordrive_end_bearing_temperature,generatornon_drive_end_bearing_temperature,generator_winding1_temperature,pitch_angle_blade_1,pitch_angle_blade_2,pitch_angle_blade_3,front_back_vibration_of_the_cabin,side_to_side_vibration_of_the_cabin
|
|
|
- # FROM `{dataBatchNum}_{timeGranularity}`
|
|
|
- # WHERE wind_turbine_number IN ({turbineCode}) AND {condition}"""
|
|
|
- query_text = f"""SELECT {selectStr}
|
|
|
- FROM `{powerFarmID}_{timeGranularity}`
|
|
|
- WHERE wind_turbine_number IN ({turbineCode}) AND {condition}"""
|
|
|
- query_result = session.execute(text(query_text)).fetchall()
|
|
|
-
|
|
|
- # select = [Field_DeviceCode, Field_Time, Field_ActiverPower, Field_WindSpeed, Field_NacPos, Field_WindDirection, Field_RotorSpeed, Field_GeneratorSpeed, Field_GeneratorTorque, Field_AngleIncluded, Field_EnvTemp, Field_NacTemp, Field_MainBearTemp, Field_GbMsBearTemp, Field_GbLsBearTemp,
|
|
|
- # Field_GbHsBearTemp, Field_GeneratorDE, Field_GeneratorNDE, Field_GenWiTemp1, Field_PitchAngel1, Field_PitchAngel2, Field_PitchAngel3, Field_NacFbVib, Field_NacLrVib]
|
|
|
-
|
|
|
- dataFrame = pd.DataFrame(query_result, columns=select)
|
|
|
-
|
|
|
- return dataFrame
|
|
|
+ # query_result = session.execute(text(query_text)).fetchall()
|
|
|
+
|
|
|
+ # dataFrame = pd.DataFrame(query_result, columns=select)
|
|
|
+
|
|
|
+ # return dataFrame
|
|
|
+
|
|
|
+ conn=session.connection()
|
|
|
+ result=conn.execution_options(stream_results=True).execute(text(query_text))
|
|
|
+ # 每次取 100000 行,可根据实际情况调整
|
|
|
+ while True:
|
|
|
+ rows = result.fetchmany(100000)
|
|
|
+ if not rows:
|
|
|
+ break
|
|
|
+ chunks.append(pd.DataFrame(rows, columns=select))
|
|
|
+
|
|
|
+ if not chunks:
|
|
|
+ return pd.DataFrame()
|
|
|
+
|
|
|
+ return pd.concat(chunks, ignore_index=True)
|
|
|
|
|
|
def dataProcess(self, powerFarmID: str, dataBatchNum: str, timeGranularity: str, turbineCode: str, select: str, customCondition) -> Tuple[pd.DataFrame, str, str]:
|
|
|
self.logger.info(
|
|
|
@@ -622,7 +642,7 @@ class BaseAnalyst(ABC):
|
|
|
dataFrameOfTurbines = pd.DataFrame()
|
|
|
if timeGranularity in ['fault', 'warn']:
|
|
|
select_conditions = self.selectAllFaultCondition(conf)
|
|
|
- maxWorkers = 5
|
|
|
+ maxWorkers = 3
|
|
|
with concurrent.futures.ThreadPoolExecutor(max_workers=maxWorkers) as executor:
|
|
|
futures = [
|
|
|
executor.submit(self.dataProcess, conf.dataContract.dataFilter.powerFarmID,
|