Files
ts-anomaly-td/ts_anomaly_td/schema.py
T

61 lines
1.7 KiB
Python

"""TDengine DDL 模块:supertable / subtable 创建。"""
import logging
logger = logging.getLogger(__name__)
def create_database(conn, db_name: str = "ts_anomaly") -> None:
"""创建数据库(不存在时创建)。"""
conn.execute_no_result(f"CREATE DATABASE IF NOT EXISTS {db_name} KEEP 36500")
logger.info("database %s ready", db_name)
def use_database(conn, db_name: str = "ts_anomaly") -> None:
"""切换到指定数据库。"""
conn.execute_no_result(f"USE {db_name}")
def create_supertable(conn, stable: str) -> None:
"""创建 supertable(不存在时创建)。
Args:
stable: 数据集名称,如 finance_001
"""
sql = (
f"CREATE STABLE IF NOT EXISTS ds_{stable} "
f"(ts TIMESTAMP, value DOUBLE, label INT) "
f"TAGS (series_id INT)"
)
conn.execute_no_result(sql)
logger.info("supertable ds_%s ready", stable)
def create_subtable(conn, stable: str, series_id: int = 1) -> None:
"""创建 subtable(不存在时创建)。
Args:
stable: 数据集名称
series_id: 时序 ID(单变量数据集为 1)
"""
sql = (
f"CREATE TABLE IF NOT EXISTS s_{stable} "
f"USING ds_{stable} TAGS ({series_id})"
)
conn.execute_no_result(sql)
logger.info("subtable s_%s ready (series_id=%d)", stable, series_id)
def setup_schema(conn, stable: str, db_name: str = "ts_anomaly") -> None:
"""一键建库建表。
Args:
conn: TDConnection 实例
stable: 数据集名称
db_name: 数据库名称
"""
create_database(conn, db_name)
use_database(conn, db_name)
create_supertable(conn, stable)
create_subtable(conn, stable)