From 48aa4aea6973fef18689818447935ec75bb483f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Sat, 22 Feb 2025 17:12:41 +0800 Subject: [PATCH] 'commit' --- ClickHouse/C2_SyncData.py | 25 +++--------------- .../__pycache__/data_mapper.cpython-310.pyc | Bin 2417 -> 2924 bytes ClickHouse/mappers/data_mapper.py | 21 ++++++++++++--- ClickHouse202502221710.rar | Bin 0 -> 17552 bytes 4 files changed, 20 insertions(+), 26 deletions(-) create mode 100644 ClickHouse202502221710.rar diff --git a/ClickHouse/C2_SyncData.py b/ClickHouse/C2_SyncData.py index ce5f65dd..dbfe9b97 100644 --- a/ClickHouse/C2_SyncData.py +++ b/ClickHouse/C2_SyncData.py @@ -13,42 +13,23 @@ def main(): mysql_conn = MySQLConnector(MYSQL_CONFIG) ch_conn = ClickHouseConnector(CH_CONFIG) - mapper = DataMapper( - date_columns=[ - 'order_time', 'charge_begin_time', 'charge_end_time', - 'pay_time', 'cancel_time', 'finish_time', 'report_time', - 'create_time', 'update_time' - ], - uint64_columns=[ - 'id', 'user_id', 'company_id', 'station_id', 'equipment_id', - 'connector_id', 'user_coupon_id', 'invoice_id', 'charge_market_id', - 'company_activity_id', 'charge_begin_soc', 'charge_end_soc', - 'charge_cur_soc', 'charge_duration', 'charge_settle_type', - 'order_type', 'pay_method', 'coupon_type', 'ticket_status', - 'charge_discount_type', 'settle_method', 'settle_status', - 'cancel_type', 'cancel_code', 'finish_type', 'finish_code', - 'boot_mode', 'settlement_type', 'is_parking_coupon', 'exception_flag', - 'has_shallow_report', 'has_deep_report', 'shallow_report_is_received', - 'com_charge_discount_type', 'special_channel_order_source' - ] - ) # 要处理的表名 tableName = 't_equipment_charge_order' # 创建同步服务 service = SyncService( - mysql_conn=mysql_conn, ch_conn=ch_conn, mapper=mapper, schema_path="schemas/" + tableName + ".sql" + mysql_conn=mysql_conn, ch_conn=ch_conn, mapper=DataMapper(ch_conn, tableName), + schema_path="schemas/" + tableName + ".sql" ) try: # 创建ClickHouse表 service.create_ch_table() # 同步数据 - service.sync_data(batch_size=5000, table=tableName) + service.sync_data(table=tableName, batch_size=5000) except Exception as e: logger.error(f"同步失败: {str(e)}", exc_info=True) finally: ch_conn.disconnect() - if __name__ == "__main__": main() diff --git a/ClickHouse/mappers/__pycache__/data_mapper.cpython-310.pyc b/ClickHouse/mappers/__pycache__/data_mapper.cpython-310.pyc index 6b4568365a7315aa78ea33ab16219ed0894ab7d9..eb24ebeb1bd13e128ad7a35ef38ed4f55ea2133c 100644 GIT binary patch delta 1205 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 literal 0 HcmV?d00001