class WeblogEntry(Base): __tablename__ = "weblog_entries" raw_text = Column(types.Nullable(types.String), primary_key=True) remote_address = Column(types.String) remote_user = Column(types.Nullable(types.String)) created_on = Column(types.DateTime) method = Column(types.String) request_uri = Column(types.String) http_version = Column(types.Nullable(types.String)) response_status = Column(types.Nullable(types.Int)) response_bytes_sent = Column(types.Nullable(types.Int)) http_referrer = Column(types.Nullable(types.String)) http_user_agent = Column(types.Nullable(types.String)) forwarded_for_ips = Column(types.Nullable(types.String)) hostname = Column(types.Nullable(types.String)) server_name = Column(types.Nullable(types.String)) request_time = Column(types.Nullable(types.Decimal(precision=10, scale=4))) upstream_status = Column(types.Nullable(types.Int)) upstream_response_time = Column( types.Nullable(types.Decimal(precision=10, scale=4))) upstream_response_length = Column(types.Nullable(types.Int)) clientip = Column(types.Nullable(types.String)) user_id = Column(types.Nullable(types.String)) session_id = Column(types.Nullable(types.String)) __table_args__ = (engines.ReplacingMergeTree( primary_key=(created_on, remote_address, method, request_uri), order_by=(created_on, remote_address, method, request_uri)), )
class TestTable(self.base): date = Column(types.Date, primary_key=True) x = Column(types.Int32) y = Column(types.String) version = Column(types.Int32) __table_args__ = (engines.ReplacingMergeTree( partition_by='date', order_by=('date', 'x'), ), )
class TestTable(self.base): date = Column(types.Date, primary_key=True) x = Column(types.Int32) y = Column(types.String) version = Column(types.Int32) __table_args__ = (engines.ReplacingMergeTree( version=version, partition_by=func.toYYYYMM(date), order_by=(date, x), ), )
def test_replacing_merge_tree_no_version(self): engine = engines.ReplacingMergeTree(partition_by='x', order_by='x', primary_key='x') with self._test_table(engine) as (table, engine): self.assertIsInstance(engine, engines.ReplacingMergeTree) self.assertIsNone(engine.version_col) self.assertEqual(engine.partition_by.columns, [table.c.x]) self.assertEqual(engine.order_by.columns, [table.c.x]) self.assertEqual(engine.primary_key.columns, [table.c.x])
class TestTable(self.base): date = Column(types.Date, primary_key=True) x = Column(types.Int32) y = Column(types.String) version = Column(types.Int32) __table_args__ = (engines.ReplacingMergeTree( 'date', ('date', 'x'), version_col='version', ), )
def test_replacing_merge_tree(self): version = Column('version', types.Int8) engine = engines.ReplacingMergeTree( version=version, partition_by='x', order_by='x', primary_key='x' ) with self._test_table(engine, version) as (table, engine): self.assertIsInstance(engine, engines.ReplacingMergeTree) self.assertEqual(engine.version_col.columns, [table.c.version]) self.assertEqual(engine.partition_by.columns, [table.c.x]) self.assertEqual(engine.order_by.columns, [table.c.x]) self.assertEqual(engine.primary_key.columns, [table.c.x])
def patch_alembic_version(context, **kwargs): migration_context = context._proxy._migration_context version = migration_context._version dt = Column('dt', types.DateTime, server_default=func.now()) version_num = Column('version_num', types.String, primary_key=True) version.append_column(dt) version.append_column(version_num) if 'cluster' in kwargs: cluster = kwargs['cluster'] version.engine = engines.ReplicatedReplacingMergeTree( kwargs['table_path'], kwargs['replica_name'], version=dt, order_by=func.tuple()) version.kwargs['clickhouse_cluster'] = cluster else: version.engine = engines.ReplacingMergeTree(version=dt, order_by=func.tuple())