trans_service.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2024/6/7
  3. # @Author : 魏志亮
  4. import os
  5. import pandas as pd
  6. from pandas import DataFrame
  7. from sqlalchemy import create_engine
  8. from conf.db import mysql_config
  9. from utils.db.ConnectMysqlPool import ConnectMysqlPool
  10. from utils.file.trans_methods import read_file_to_df
  11. from utils.log.trans_log import trans_print
  12. trans = ConnectMysqlPool("trans")
  13. def get_trans_conf(wind_name, trans_type) -> dict:
  14. query_sql = "SELECT * FROM trans_conf where wind_name = %s and type = %s"
  15. res = trans.execute(query_sql, (wind_name, trans_type))
  16. print(res)
  17. if type(res) == tuple:
  18. return None
  19. return res[0]
  20. def save_to_trans_conf(data_dict=dict()):
  21. trans.save_dict(data_dict)
  22. def creat_table_and_add_partition(table_name, count, read_type):
  23. create_sql = f"""
  24. CREATE TABLE
  25. IF NOT EXISTS `{table_name}` (
  26. `wind_turbine_number` VARCHAR (20) DEFAULT NULL COMMENT '风机编号',
  27. `wind_turbine_name` VARCHAR(20) DEFAULT NULL COMMENT '风机原始名称',
  28. `time_stamp` datetime NOT NULL COMMENT '时间戳',
  29. `active_power` DOUBLE DEFAULT NULL COMMENT '有功功率',
  30. `rotor_speed` DOUBLE DEFAULT NULL COMMENT '风轮转速',
  31. `generator_speed` DOUBLE DEFAULT NULL COMMENT '发电机转速',
  32. `wind_velocity` DOUBLE DEFAULT NULL COMMENT '风速',
  33. `pitch_angle_blade_1` DOUBLE DEFAULT NULL COMMENT '桨距角1',
  34. `pitch_angle_blade_2` DOUBLE DEFAULT NULL COMMENT '桨距角2',
  35. `pitch_angle_blade_3` DOUBLE DEFAULT NULL COMMENT '桨距角3',
  36. `cabin_position` DOUBLE DEFAULT NULL COMMENT '机舱位置',
  37. `true_wind_direction` DOUBLE DEFAULT NULL COMMENT '绝对风向',
  38. `yaw_error1` DOUBLE DEFAULT NULL COMMENT '对风角度',
  39. `set_value_of_active_power` DOUBLE DEFAULT NULL COMMENT '有功功率设定值',
  40. `gearbox_oil_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱油温',
  41. `generatordrive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机驱动端轴承温度',
  42. `generatornon_drive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机非驱动端轴承温度',
  43. `cabin_temperature` DOUBLE DEFAULT NULL COMMENT '机舱内温度',
  44. `twisted_cable_angle` DOUBLE DEFAULT NULL COMMENT '扭缆角度',
  45. `front_back_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱前后振动',
  46. `side_to_side_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱左右振动',
  47. `actual_torque` DOUBLE DEFAULT NULL COMMENT '实际力矩',
  48. `given_torque` DOUBLE DEFAULT NULL COMMENT '给定力矩',
  49. `clockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '顺时针偏航次数',
  50. `counterclockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '逆时针偏航次数',
  51. `unusable` DOUBLE DEFAULT NULL COMMENT '不可利用',
  52. `power_curve_available` DOUBLE DEFAULT NULL COMMENT '功率曲线可用',
  53. `required_gearbox_speed` DOUBLE DEFAULT NULL COMMENT '齿轮箱转速',
  54. `inverter_speed_master_control` DOUBLE DEFAULT NULL COMMENT '变频器转速(主控)',
  55. `outside_cabin_temperature` DOUBLE DEFAULT NULL COMMENT '环境温度',
  56. `main_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '主轴承轴承温度',
  57. `gearbox_high_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱高速轴轴承温度',
  58. `gearboxmedium_speed_shaftbearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱中速轴轴承温度',
  59. `gearbox_low_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱低速轴轴承温度',
  60. `generator_winding1_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组1温度',
  61. `generator_winding2_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组2温度',
  62. `generator_winding3_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组3温度',
  63. `wind_turbine_status` DOUBLE DEFAULT NULL COMMENT '风机状态1',
  64. `wind_turbine_status2` DOUBLE DEFAULT NULL COMMENT '风机状态2',
  65. `turbulence_intensity` DOUBLE DEFAULT NULL COMMENT '湍流强度',
  66. `year` INT (4) DEFAULT NULL COMMENT '年',
  67. `month` INT (2) DEFAULT NULL COMMENT '月',
  68. `day` INT (2) DEFAULT NULL COMMENT '日',
  69. `param1` DOUBLE DEFAULT NULL COMMENT '预留1',
  70. `param2` DOUBLE DEFAULT NULL COMMENT '预留2',
  71. `param3` DOUBLE DEFAULT NULL COMMENT '预留3',
  72. `param4` DOUBLE DEFAULT NULL COMMENT '预留4',
  73. `param5` DOUBLE DEFAULT NULL COMMENT '预留5',
  74. `param6` DOUBLE DEFAULT NULL COMMENT '预留6',
  75. `param7` DOUBLE DEFAULT NULL COMMENT '预留7',
  76. `param8` DOUBLE DEFAULT NULL COMMENT '预留8',
  77. `param9` DOUBLE DEFAULT NULL COMMENT '预留9',
  78. `param10` DOUBLE DEFAULT NULL COMMENT '预留10',
  79. KEY `time_stamp` (`time_stamp`),
  80. KEY `wind_turbine_number` (`wind_turbine_number`)
  81. ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4
  82. """
  83. if read_type == 'second':
  84. create_sql = create_sql + f" PARTITION BY KEY (`wind_turbine_number`) PARTITIONS {count}"
  85. trans.execute(create_sql)
  86. def rename_table(table_name, renamed_table_name, save_db=True):
  87. if save_db:
  88. rename_sql = f"RENAME TABLE {table_name} TO {renamed_table_name}"
  89. try:
  90. trans.execute(rename_sql)
  91. except Exception as e:
  92. trans_print(e)
  93. def drop_table(table_name, save_db=True):
  94. if save_db:
  95. rename_sql = f"drop TABLE `{table_name}` "
  96. try:
  97. trans.execute(rename_sql)
  98. except Exception as e:
  99. trans_print(e)
  100. def save_file_to_db(table_name: str, file: str, batch_count=200000):
  101. # trans.df_batch_save(table_name, df, batch_count)
  102. env = os.environ['env']
  103. config = mysql_config['trans_' + env]
  104. username = config['user']
  105. password = config['password']
  106. host = config['host']
  107. port = config['port']
  108. dbname = config['database']
  109. engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}')
  110. for i, df in enumerate(pd.read_csv(file, chunksize=batch_count)):
  111. df.to_sql(table_name, engine, if_exists='append', index=False)
  112. count = (i + 1) * batch_count
  113. trans_print(f"Chunk {count} written to MySQL.")
  114. if __name__ == '__main__':
  115. path_prix = r"/data/download/collection_data/2完成/招远风电场-山东-大唐/清理数据/WOF063100040-WOB00013/second"
  116. files = ["WOG00030.csv", "WOG00034.csv"]
  117. for path in files:
  118. save_file_to_db("WOF063100040-WOB00013_second", path_prix + os.sep + path, batch_count=100000)