Spaces:
Runtime error
Runtime error
from typing import Sequence, Optional, Union | |
from clickhouse_connect.driver import Client | |
class TableContext: | |
def __init__(self, client: Client, | |
table: str, | |
columns: Union[str, Sequence[str]], | |
column_types: Optional[Sequence[str]] = None, | |
engine: str = 'MergeTree', | |
order_by: str = None): | |
self.client = client | |
self.table = table | |
if isinstance(columns, str): | |
columns = columns.split(',') | |
if column_types is None: | |
self.column_names = [] | |
self.column_types = [] | |
for col in columns: | |
col = col.strip() | |
ix = col.find(' ') | |
self.column_types.append(col[ix + 1:].strip()) | |
self.column_names.append(col[:ix].strip()) | |
else: | |
self.column_names = columns | |
self.column_types = column_types | |
self.engine = engine | |
self.order_by = self.column_names[0] if order_by is None else order_by | |
def __enter__(self): | |
if self.client.min_version('19'): | |
self.client.command(f'DROP TABLE IF EXISTS {self.table}') | |
else: | |
self.client.command(f'DROP TABLE IF EXISTS {self.table} SYNC') | |
col_defs = ','.join(f'{name} {col_type}' for name, col_type in zip(self.column_names, self.column_types)) | |
self.client.command(f'CREATE TABLE {self.table} ({col_defs}) ENGINE {self.engine} ORDER BY {self.order_by}') | |
return self | |
def __exit__(self, exc_type, exc_val, exc_tb): | |
self.client.command(f'DROP TABLE IF EXISTS {self.table}') | |