# lib/db_schema.py from sqlalchemy import Table, Column, Date, Float, Integer, String, Text, MetaData metadata = MetaData() # 날짜별 메트릭 fg_manager_static_ga4_by_date = Table( 'fg_manager_static_ga4_by_date', metadata, Column('date', Date, primary_key=True), Column('activeUsers', Integer), Column('screenPageViews', Integer), Column('sessions', Integer), ) # 날짜 + 유입 소스별 세션 fg_manager_static_ga4_by_source = Table( 'fg_manager_static_ga4_by_source', metadata, Column('date', Date, primary_key=True), Column('sessionSource', String(255), primary_key=True), Column('sessions', Integer), ) # 날짜 + 유입 매체별 세션 fg_manager_static_ga4_by_medium = Table( 'fg_manager_static_ga4_by_medium', metadata, Column('date', Date, primary_key=True), Column('sessionMedium', String(255), primary_key=True), Column('sessions', Integer), ) # 날짜 + 장치 카테고리별 activeUsers fg_manager_static_ga4_by_device = Table( 'fg_manager_static_ga4_by_device', metadata, Column('date', Date, primary_key=True), Column('deviceCategory', String(255), primary_key=True), Column('activeUsers', Integer), ) # 날짜 + 국가별 activeUsers fg_manager_static_ga4_by_country = Table( 'fg_manager_static_ga4_by_country', metadata, Column('date', Date, primary_key=True), Column('country', String(255), primary_key=True), Column('activeUsers', Integer), ) # 날짜 + 도시별 activeUsers fg_manager_static_ga4_by_city = Table( 'fg_manager_static_ga4_by_city', metadata, Column('date', Date, primary_key=True), Column('city', String(255), primary_key=True), Column('activeUsers', Integer), ) fg_manager_static_air = Table( 'fg_manager_static_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), ) fg_manager_static_weather = Table( 'fg_manager_static_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), ) fg_manager_static_ga4 = Table( 'fg_manager_static_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' )