199 lines
6.4 KiB
Python
199 lines
6.4 KiB
Python
import os
|
|
import yaml
|
|
from sqlalchemy import Table, Column, Date, Integer, String, Float, Text, MetaData, UniqueConstraint, DateTime
|
|
from sqlalchemy.sql import func
|
|
|
|
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
|
CONFIG_PATH = os.path.join(BASE_DIR, 'conf', 'config.yaml')
|
|
|
|
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
|
|
cfg = yaml.safe_load(f)
|
|
|
|
table_prefix = cfg.get('table_prefix', '')
|
|
tables = cfg.get('tables', {})
|
|
|
|
def get_full_table_name(key):
|
|
name_in_cfg = tables.get(key, '')
|
|
if name_in_cfg:
|
|
if name_in_cfg.startswith(table_prefix):
|
|
return name_in_cfg
|
|
else:
|
|
return table_prefix + name_in_cfg
|
|
else:
|
|
return table_prefix + key
|
|
|
|
metadata = MetaData()
|
|
|
|
def get_full_table_name(key):
|
|
# config.yaml에서 tables: 항목의 실제 테이블명 가져오기
|
|
name_in_cfg = tables.get(key, '')
|
|
if name_in_cfg:
|
|
# 이미 prefix 포함된 이름일 수 있으니 확인
|
|
if name_in_cfg.startswith(table_prefix):
|
|
return name_in_cfg
|
|
else:
|
|
return table_prefix + name_in_cfg
|
|
else:
|
|
# 기본은 prefix + key
|
|
return table_prefix + key
|
|
|
|
# 테이블 변수명은 prefix 제외한 key를 그대로 사용
|
|
ga4_by_date = Table(
|
|
get_full_table_name('ga4_by_date'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('activeUsers', Integer),
|
|
Column('screenPageViews', Integer),
|
|
Column('sessions', Integer),
|
|
)
|
|
|
|
ga4_by_source = Table(
|
|
get_full_table_name('ga4_by_source'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('sessionSource', String(255), primary_key=True),
|
|
Column('sessions', Integer),
|
|
)
|
|
|
|
ga4_by_medium = Table(
|
|
get_full_table_name('ga4_by_medium'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('sessionMedium', String(255), primary_key=True),
|
|
Column('sessions', Integer),
|
|
)
|
|
|
|
ga4_by_device = Table(
|
|
get_full_table_name('ga4_by_device'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('deviceCategory', String(255), primary_key=True),
|
|
Column('activeUsers', Integer),
|
|
)
|
|
|
|
ga4_by_country = Table(
|
|
get_full_table_name('ga4_by_country'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('country', String(255), primary_key=True),
|
|
Column('activeUsers', Integer),
|
|
)
|
|
|
|
ga4_by_city = Table(
|
|
get_full_table_name('ga4_by_city'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('city', String(255), primary_key=True),
|
|
Column('activeUsers', Integer),
|
|
)
|
|
|
|
air = Table(
|
|
get_full_table_name('air'), metadata,
|
|
Column('date', Date, primary_key=True, nullable=False),
|
|
Column('station', String(32), nullable=False),
|
|
Column('pm25', Float),
|
|
Column('pm10', Float),
|
|
Column('so2', Float),
|
|
Column('co', Float),
|
|
Column('no2', Float),
|
|
Column('o3', Float),
|
|
)
|
|
|
|
weather = Table(
|
|
get_full_table_name('weather'), metadata,
|
|
Column('date', Date, primary_key=True, nullable=False),
|
|
Column('stnId', Integer, nullable=False),
|
|
Column('avgTa', Float),
|
|
Column('minTa', Float),
|
|
Column('minTaHrmt', String(4)),
|
|
Column('maxTa', Float),
|
|
Column('maxTaHrmt', String(4)),
|
|
Column('sumRnDur', Float),
|
|
Column('mi10MaxRn', Float),
|
|
Column('mi10MaxRnHrmt', String(4)),
|
|
Column('hr1MaxRn', Float),
|
|
Column('hr1MaxRnHrmt', String(4)),
|
|
Column('sumRn', Float),
|
|
Column('maxInsWs', Float),
|
|
Column('maxInsWsWd', Integer),
|
|
Column('maxInsWsHrmt', String(4)),
|
|
Column('maxWs', Float),
|
|
Column('maxWsWd', Integer),
|
|
Column('maxWsHrmt', String(4)),
|
|
Column('avgWs', Float),
|
|
Column('hr24SumRws', Float),
|
|
Column('maxWd', Integer),
|
|
Column('avgTd', Float),
|
|
Column('minRhm', Float),
|
|
Column('minRhmHrmt', String(4)),
|
|
Column('avgRhm', Float),
|
|
Column('avgPv', Float),
|
|
Column('avgPa', Float),
|
|
Column('maxPs', Float),
|
|
Column('maxPsHrmt', String(4)),
|
|
Column('minPs', Float),
|
|
Column('minPsHrmt', String(4)),
|
|
Column('avgPs', Float),
|
|
Column('ssDur', Float),
|
|
Column('sumSsHr', Float),
|
|
Column('hr1MaxIcsrHrmt', String(4)),
|
|
Column('hr1MaxIcsr', Float),
|
|
Column('sumGsr', Float),
|
|
Column('ddMefs', Float),
|
|
Column('ddMefsHrmt', String(4)),
|
|
Column('ddMes', Float),
|
|
Column('ddMesHrmt', String(4)),
|
|
Column('sumDpthFhsc', Float),
|
|
Column('avgTca', Float),
|
|
Column('avgLmac', Float),
|
|
Column('avgTs', Float),
|
|
Column('minTg', Float),
|
|
Column('avgCm5Te', Float),
|
|
Column('avgCm10Te', Float),
|
|
Column('avgCm20Te', Float),
|
|
Column('avgCm30Te', Float),
|
|
Column('avgM05Te', Float),
|
|
Column('avgM10Te', Float),
|
|
Column('avgM15Te', Float),
|
|
Column('avgM30Te', Float),
|
|
Column('avgM50Te', Float),
|
|
Column('sumLrgEv', Float),
|
|
Column('sumSmlEv', Float),
|
|
Column('n99Rn', Float),
|
|
Column('iscs', Text),
|
|
Column('sumFogDur', Float),
|
|
)
|
|
|
|
ga4 = Table(
|
|
get_full_table_name('ga4'), metadata,
|
|
Column('date', Date, primary_key=True),
|
|
Column('source', String(255), primary_key=True),
|
|
Column('medium', String(255), primary_key=True),
|
|
Column('deviceCategory', String(50), primary_key=True),
|
|
Column('country', String(100), primary_key=True),
|
|
Column('city', String(100), primary_key=True),
|
|
Column('activeUsers', Integer),
|
|
Column('screenPageViews', Integer),
|
|
mysql_engine='InnoDB',
|
|
mysql_charset='utf8mb4'
|
|
)
|
|
|
|
pos = Table(
|
|
get_full_table_name('pos'), metadata,
|
|
Column('idx', Integer, primary_key=True, autoincrement=True),
|
|
Column('date', Date, nullable=False),
|
|
Column('ca01', String(50), nullable=False),
|
|
Column('ca02', String(50), nullable=False),
|
|
Column('ca03', String(50), nullable=False),
|
|
Column('barcode', Integer, nullable=False),
|
|
Column('name', String(100), nullable=False),
|
|
Column('qty', Integer, nullable=False),
|
|
Column('tot_amount', Integer, nullable=False),
|
|
Column('tot_discount', Integer, nullable=False),
|
|
Column('actual_amount', Integer, nullable=False),
|
|
UniqueConstraint('date', 'ca01', 'ca02', 'ca03', 'name', 'barcode', name='uniq_pos_composite')
|
|
)
|
|
|
|
holiday = Table(
|
|
get_full_table_name('holiday'), metadata,
|
|
Column('date', String(8), primary_key=True, comment='날짜 (YYYYMMDD)'),
|
|
Column('name', String(50), nullable=False, comment='휴일명'),
|
|
Column('created_at', DateTime, server_default=func.now(), comment='등록일시'),
|
|
Column('updated_at', DateTime, server_default=func.now(), onupdate=func.now(), comment='수정일시'),
|
|
comment='한국천문연구원 특일정보'
|
|
)
|