forked from feldera/feldera
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_sql_view.py
More file actions
35 lines (28 loc) · 973 Bytes
/
_sql_view.py
File metadata and controls
35 lines (28 loc) · 973 Bytes
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
from enum import Enum
from typing import List
class ViewKind(Enum):
DEFAULT = 1
LOCAL = 2
MATERIALIZED = 3
class SQLView:
def __init__(self, name: str, kind: ViewKind, query: str):
self.name: str = name
self.kind = kind
query = query.strip()
if query[-1] != ';':
query += ';'
self.query: str = query
self.lateness: List[str] = []
def add_lateness(self, timestamp_column: str, lateness_expr: str):
self.lateness.append(f"LATENESS {self.name}.{timestamp_column} {lateness_expr};")
def build_ddl(self):
match self.kind:
case ViewKind.DEFAULT:
kind = ""
case ViewKind.LOCAL:
kind = " LOCAL"
case ViewKind.MATERIALIZED:
kind = " MATERIALIZED"
view = f"CREATE{kind} VIEW {self.name} AS {self.query}"
statements = self.lateness + [view]
return "\n".join(statements)