Skip to content

Instantly share code, notes, and snippets.

@ethanquix
Last active June 2, 2020 03:14
Show Gist options
  • Save ethanquix/7e12248557e6d644b9af0b91fe77869a to your computer and use it in GitHub Desktop.
Save ethanquix/7e12248557e6d644b9af0b91fe77869a to your computer and use it in GitHub Desktop.
import sys
# HOW TO RUN THIS SCRIPT:
# python3 script.py MYFILE.SQL
# TRANSFORM:
# CASE WHEN ('bid_requests' in ({{.METRICS}})) THEN bid_requests ELSE NULL END as bid_requests,
# TO
# {{if index .METRICS_AS_MAP "bid_requests"}}bid_requests,{{end}}
def processMetrics(src: str) -> str:
out = '{{if index .METRICS_AS_MAP "||KEY||"}}||DATA||{{end}}'
spaces = src.split("C")[0]
src = src.replace("CASE WHEN ('", "")
# Get key
key = src.split("'")[0].strip()
# Get data
src = src.split("THEN")
src = "THEN".join((src[1:]))
src = src.replace("ELSE NULL END", "")
src = src.replace("{{end}}", "")
out = out.replace("||KEY||", key)
out = out.replace("||DATA||", src.lstrip().rstrip())
return spaces + out
# TRANSFORM:
# CASE WHEN 'sitename' in ({{.GROUPBYOPTIONS}}) THEN site_id ELSE null end,
# TO
# {{if index .GROUP_BY_AS_MAP "sitename"}}site_id,{{end}}
def processGroupByOptionsInGroupBy(src: str) -> str:
out = '{{if index .GROUP_BY_AS_MAP "||KEY||"}}||DATA||{{end}}'
spaces = src.split("C")[0]
src = src.replace("CASE WHEN '", "")
# Get key
key = src.split("'")[0].strip()
# Get data
src = src.split("THEN")
src = "THEN".join((src[1:]))
src = src.replace(" ELSE null end", "")
src = src.replace("{{end}}", "")
out = out.replace("||KEY||", key)
out = out.replace("||DATA||", src.lstrip().rstrip())
return spaces + out
# TRANSFORM:
# {{if .GROUPBYOPTIONS}}CASE WHEN ('biddername' in ({{.GROUPBYOPTIONS}})) THEN bidder_id ELSE NULL END as bidder_id,{{end}}
# TO
# {{if index .GROUP_BY_AS_MAP "biddername"}}bidder_id,{{end}}
def processGroupByOptions(src: str) -> str:
out = '{{if index .GROUP_BY_AS_MAP "||KEY||"}}||DATA||{{end}}'
spaces = src.split("{")[0]
src = src.replace("{{if .GROUPBYOPTIONS}}CASE WHEN ('", "")
# Get key
key = src.split("'")[0].strip()
# Get data
src = src.split("THEN")
src = "THEN".join((src[1:]))
src = src.replace("ELSE NULL END", "")
src = src.replace("{{end}}", "")
out = out.replace("||KEY||", key)
out = out.replace("||DATA||", src.lstrip().rstrip())
return spaces + out
with open(sys.argv[1]) as f:
lines = [line.rstrip() for line in f]
out = ""
for l in lines:
if "{{if .GROUPBYOPTIONS}}CASE WHEN" in l:
out += processGroupByOptions(l) + "\n"
elif "in ({{.METRICS}})" in l:
out += processMetrics(l) + "\n"
elif "in ({{.GROUPBYOPTIONS}})" in l:
out += processGroupByOptionsInGroupBy(l) + "\n"
else:
out += l + "\n"
print(out)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment