Spaces:
Sleeping
Sleeping
File size: 9,440 Bytes
08c9602 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | import re
from functools import wraps
def _quote_identifier(identifier: str) -> str:
"""Quote SQL identifiers that contain special characters."""
def quote_part(part: str) -> str:
if re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", part):
return part
return f'"{part}"'
return ".".join(quote_part(p) for p in identifier.split("."))
def _sanitize_table(func):
@wraps(func)
def wrapper(table, *args, **kwargs):
table = _quote_identifier(table)
return func(table, *args, **kwargs)
return wrapper
@_sanitize_table
def get_main_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
@_sanitize_table
def get_flex_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
bucket,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
@_sanitize_table
def get_bidder_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
body[0]:slotTargeting:hb_bidder[0]::varchar as HB_BIDDER,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
@_sanitize_table
def get_deal_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
body[0]:slotTargeting:hb_deal[0]::varchar as HB_DEAL,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for Ad Unit Data
@_sanitize_table
def get_ad_unit_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
split(body[0]['adUnitPath'],'/')[2]::varchar as Ad_Unit,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for Browser Data
@_sanitize_table
def get_browser_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
case
when lower(useragent) like '%edg%' then 'Edge'
when (lower(useragent) like '%cros%' or lower(useragent) like '%chrome%' or lower(useragent) like '%crios%') then 'Chrome'
when lower(useragent) like '%firefox%' then 'Firefox'
when lower(useragent) like '%applewebkit%' then 'Safari'
else 'other'
end as browser,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for Device Data
@_sanitize_table
def get_device_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
case
when (useragent like '%Windows%' or useragent like '%Macintosh%') THEN 'desktop'
when (useragent like '%Android%' or useragent like '%iPhone%' or useragent like '%Mobi%') THEN 'phone'
when (useragent like '%iPad%' or useragent like '%Tablet%') THEN 'tablet'
else 'other'
end as device,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for Random Integer Data
@_sanitize_table
def get_random_integer_query(
table, start_datetime, end_datetime, message_filter, campaign_id
):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
body[0]:siteTargeting:ri[0]::varchar as Random_Integer,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for hb_pb Data
@_sanitize_table
def get_hb_pb_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
body[0]:slotTargeting:hb_pb[0]::varchar as hb_pb,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
# New function for hb_size Data
@_sanitize_table
def get_hb_size_query(table, start_datetime, end_datetime, message_filter, campaign_id):
return f"""
SELECT
to_date(convert_timezone('UTC', 'America/New_York', datetime)) AS EST_DATE,
extract(hour FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_HOUR,
extract(minute FROM convert_timezone('UTC', 'America/New_York', datetime)) AS EST_MINUTE,
body[0]:slotTargeting:hb_size[0]::varchar as hb_size,
count(*) as CNT
FROM {table}
WHERE convert_timezone('UTC', 'America/New_York', datetime) BETWEEN '{start_datetime}' AND '{end_datetime}'
and message in ('{message_filter}')
and body[0]:campaignId::varchar in ('{campaign_id}')
and body[0]:slotTargeting:hb_pb[0]::DOUBLE >= 0.15
GROUP BY ALL
"""
|