使用 MergeTree 引擎、Clickhouse 创建分区键时出错

Error creating partition key using MergeTree engine, Clickhouse

我一直在尝试使用 infi.clickhouse_orm 创建模型,但分区键存在问题

我的模特:

from infi.clickhouse_orm import Model,  UInt16Field, Float32Field, StringField, MergeTree,DateField

class OHLC(Model):

__tablename__ = 'ohlc'

id = UInt16Field()
min = Float32Field()
max = Float32Field()


start_date = DateField()
interval = StringField()

engine = MergeTree(partition_key=['id'])

我收到错误:

DB::Exception: Syntax error: .. SETTINGS index_granularity=8192. Expected one of: Arrow, token, non-empty parenthesized list of expressions

正在创建我的数据库

""" SqlAlchemy ClickHouse database session maker """

db = Database('test', db_url=os.environ['TEST_CONNECTION'],
              username=os.environ['CLICKHOUSE_USER'], password=os.environ['CLICKHOUSE_PASSWORD'])
db.create_database()
db.create_table(OHLC)

MergeTree-引擎需要table声明中的主键order_by-参数:

..
engine = MergeTree(partition_key=['id'], order_by=['id'])
..

from infi.clickhouse_orm.engines import MergeTree
from infi.clickhouse_orm.fields import UInt16Field, Float32Field, StringField, DateField
from infi.clickhouse_orm.models import Model
from sqlalchemy import create_engine


class OHLC(Model):
    __tablename__ = 'ohlc'
    id = UInt16Field()
    min = Float32Field()
    max = Float32Field()
    start_date = DateField()
    interval = StringField()
    engine = MergeTree(partition_key=['id'], order_by=['id'])


engine = create_engine('clickhouse://default:@localhost/test_001')

with engine.connect() as conn:
    conn.connection.create_database()
    conn.connection.create_table(OHLC)

requirements.txt

sqlalchemy==1.3.18
sqlalchemy-clickhouse==0.1.5.post0
infi.clickhouse_orm==1.3.0

使用 id 作为 partition key 看起来很可疑,考虑将其定义为 toYYYYMM(start_date) 或像这样:

class OHLC(Model):
    __tablename__ = 'ohlc'
    id = UInt16Field()
    min = Float32Field()
    max = Float32Field()
    start_date = DateField()
    interval = StringField()
    engine = MergeTree(partition_key=['toYYYYMM(start_date)'], order_by=['id'])