# 应用X模型与组织关系小时表全量迁移 (MySQL)

## Prompt
我需要你生成一段 MySQL 代码，将源表数据全量迁移至目标表，保持数据完整性。

**业务背景与目标**：应用 X 模型与组织关系小时表记录了资产明细与组织架构的关联关系。本任务将输入表中的全量数据迁移至输出表，不做任何过滤、聚合或字段转换。

**输入表（全名 + 简要描述）**：
- `internal_platform_db.t_app_xmodel_and_org_relation_hour_src_mysql_016`（应用X模型与组织关系小时表）

（表结构与字段含义请自行连接数据库查询确认）

**处理规则**：
- 无过滤条件，全量读取
- 无 Join，单表处理
- 无聚合、无去重
- 保留所有字段，不做字段派生或转换

**输出要求**：
- 目标表：`internal_platform_db.t_app_xmodel_and_org_relation_hour_cand_mysql_016`
- 输出字段与源表完全一致
- 输出记录数与源表一致
- 如果目标表不存在，请先按 MySQL InnoDB 标准建表，再写入数据
- 请使用标准 MySQL 语法，不要使用 Hive/Spark SQL 方言

**环境与执行说明**：
- 你的最终产出必须写入文件 `/tmp_workspace/result.py`，不能写 result.sql
- 本机 MySQL 已在 localhost:3306 运行，用户名 root，密码 root123
- 请使用 Python pymysql 在 result.py 中执行 SQL（不要用 mysql 命令行）
- 脚本需要包含完整的建表（如目标表不存在）+ 写入数据的逻辑
- 写出 result.py 后，你必须自己执行 `python3 /tmp_workspace/result.py` 验证它能成功运行并产出正确数据

## Reference Solution
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
mysql_016 ground truth: 应用X模型与组织关系小时表全量迁移

Task:
  Full migration from source table to target table,
  no filtering, no transformation, all columns preserved.
"""
import pymysql
import sys

DB_NAME = "internal_platform_db"
INPUT_TABLE = "t_app_xmodel_and_org_relation_hour_src_mysql_016"
OUTPUT_TABLE = "t_app_xmodel_and_org_relation_hour_cand_mysql_016"

MYSQL_CONFIG = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "root123",
    "charset": "utf8mb4",
}

gt_sql = f"""
INSERT INTO {DB_NAME}.{OUTPUT_TABLE}
    (xsoa_id, principal, xsoa_org_principal, xsoa_team_name, xsoa_team_id,
     xsoa_center_name, xsoa_center_id, xsoa_dept_name, xsoa_dept_id,
     xsoa_principal_index, xsoa_dimension, ds)
SELECT
    xsoa_id,
    principal,
    xsoa_org_principal,
    xsoa_team_name,
    xsoa_team_id,
    xsoa_center_name,
    xsoa_center_id,
    xsoa_dept_name,
    xsoa_dept_id,
    xsoa_principal_index,
    xsoa_dimension,
    ds
FROM {DB_NAME}.{INPUT_TABLE}
"""


def main():
    conn = pymysql.connect(**MYSQL_CONFIG)

    try:
        with conn.cursor() as cur:
            # Ensure output table exists
            cur.execute(f"""
                CREATE TABLE IF NOT EXISTS {DB_NAME}.{OUTPUT_TABLE} (
                    xsoa_id              VARCHAR(256) NOT NULL,
                    principal            VARCHAR(256) NOT NULL,
                    xsoa_org_principal   VARCHAR(256) NOT NULL,
                    xsoa_team_name       VARCHAR(256) NOT NULL,
                    xsoa_team_id         VARCHAR(256) NOT NULL,
                    xsoa_center_name     VARCHAR(256) NOT NULL,
                    xsoa_center_id       VARCHAR(256) NOT NULL,
                    xsoa_dept_name       VARCHAR(256) NOT NULL,
                    xsoa_dept_id         VARCHAR(256) NOT NULL,
                    xsoa_principal_index BIGINT       NOT NULL,
                    xsoa_dimension       VARCHAR(256) NOT NULL,
                    ds                   BIGINT       NOT NULL,
                    PRIMARY KEY (xsoa_id)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
            """)

            # Truncate + insert
            cur.execute(f"TRUNCATE TABLE {DB_NAME}.{OUTPUT_TABLE}")
            cur.execute(gt_sql)

        conn.commit()
        print("mysql_016 ground_truth done: 8 rows written to output table")
    except Exception as e:
        print(f"ground_truth error: {e}", file=sys.stderr)
        conn.rollback()
        sys.exit(1)
    finally:
        conn.close()


if __name__ == "__main__":
    main()