繁体   English   中英

使用 SqlAlchemy 创建聚集列存储索引(MS SQL Server)?

[英]Create Clustered Columnstore index(MS SQL Server) using SqlAlchemy?

如何使用 SqlAlchemy python 库在表上创建聚集列存储索引?

我可以在此处的文档中看到对聚集索引的支持,但找不到如何向其中添加 columnstore 关键字。

您可以通过侦听表after_create事件并注入一些自定义 SQL 来解决此问题:

engine = sqlalchemy.create_engine(...)
metadata = MetaData(engine)
table = students = Table(
   'students', metadata, 
   Column('id', Integer), 
   Column('name', String(100)), #Must be fixed length!
   Column('lastname', String(100)),
)

event.listen(
    table, 
    "after_create", 
    DDL("CREATE CLUSTERED COLUMNSTORE INDEX ix_%(table)s_columnstore ON %(fullname)s")
)

table.create()

这是文档

有关DDL()更多信息

sqlalchemy 允许您注入自定义 SQL 处理程序,因此这应该可以工作:

# Create a custom mssql_columnstore argument for Indexes:
Index.argument_for("mssql", "columnstore", None)

# Custom SQL generator for columnstore indexes
@compiles(CreateIndex, "mssql")
def compile_create_index(create, compiler, **kw):
    preparer = compiler.preparer
    mssql_opts = create.element.dialect_options["mssql"]

    columnstore = mssql_opts.get("columnstore", None)
    if(not columnstore):
        stmt = compiler.visit_create_index(create, **kw)
        return stmt

    name = preparer.format_index(create.element)
    table_name = preparer.format_table(create.element.table)
    stmt = f"CREATE CLUSTERED COLUMNSTORE INDEX {name} ON {table_name}"
    return stmt

engine = makeEngine()
metadata = MetaData(engine)
table = students = Table(
   'students', metadata, 
   Column('id', Integer), 
   Column('name', String(100)), 
   Column('lastname', String(100)),
   # Use the columnstore index flag here:
   Index('idx_id', mssql_columnstore = True),
)


table.create()

我基于之前的 stackoverflow 答案编写了此代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM