"""
author: CT
description: sqoop 从 PG {site_name}_asin_profit_rate_calc 增量拉取利润率数据
             写入 Hive ods_asin_profit_rate 分区 (site_name, date_info)
             增量时间窗：[date_info-1天 00:00:00, 当天运行时刻的 00:00:00)
执行示例: python ods_asin_profit_rate.py us 2026-05-15
"""
import os
import sys
from datetime import datetime, timedelta

sys.path.append(os.path.dirname(sys.path[0]))

from utils.common_util import CommonUtil
from utils.secure_db_client import get_remote_engine

if __name__ == '__main__':
    site_name = CommonUtil.get_sys_arg(1, None)
    date_info = CommonUtil.get_sys_arg(2, None)
    assert site_name is not None, "site_name 不能为空！"
    assert date_info is not None, "date_info 不能为空！"

    last_date_info = (datetime.strptime(date_info, "%Y-%m-%d").date() - timedelta(days=1)).strftime("%Y-%m-%d")
    # 上限：程序运行当天 00:00:00，避免拉到 PG 当日正在写入的数据
    upper_bound = datetime.now().strftime("%Y-%m-%d") + " 00:00:00"

    hive_table    = "ods_asin_profit_rate"
    import_table  = f"{site_name}_asin_profit_rate_calc"
    partition_dict = {"site_name": site_name, "date_info": date_info}
    hdfs_path     = CommonUtil.build_hdfs_path(hive_table, partition_dict=partition_dict)

    engine = get_remote_engine(site_name=site_name, db_type='postgresql_cluster')

    query = f"""
    SELECT asin, price, category, ocean_profit, air_profit,
           package_length, package_width, package_height, weight,
           updated_time, asin_crawl_date
    FROM {import_table}
    WHERE updated_time >= '{last_date_info}' AND updated_time < '{upper_bound}' AND calc_flag = 1 AND \\$CONDITIONS
    """
    print(f"sqoop query:\n{query}")

    engine.sqoop_raw_import(
        query=query,
        hive_table=hive_table,
        hdfs_path=hdfs_path,
        partitions=partition_dict,
        check_count=True,
    )
    print("success!")
