因此,我们使用 SQLAlchemy 创建了一个模型,并且希望将其部署在 DataBricks 上。我们模型中的表具有列的默认值。我们如何使用 SQLAlchemy 并使用 TBLPROPERTIES 表子句来部署表?
创建模型后,您可以立即侦听此事件并使用
@event.listens_for()
装饰器对创建的表执行修改:
@event.listens_for(schema.Table, "after_create")
def set_tbl_properties(target, connection, **kw):
if connection.engine.dialect.name == "databricks":
connection.execute(
DDL(f"""
ALTER TABLE {target.fullname} SET TBLPROPERTIES (
<your generic TBLPROPERTIES>
)""")
)
如果您想要依赖于表的 TBLPROPERTIES,您可以通过添加自定义属性来修改模型。这样,当您编译表创建时,您将能够添加 TBLPROPERTIES:
@compiles(schema.CreateTable, "databricks")
def compile_create_table(element, compiler, **kw):
stmt = compiler.visit_create_table(element, **kw)
databricks_opts = element.element.dialect_options["databricks"]
tblproperties = databricks_opts.get("tblproperties")
if location:
stmt = stmt.rstrip()
stmt = f"{stmt} \nTBLPROPERTIES '{tblproperties}'"
return stmt
我希望这能回答您的问题,并且您将能够使用 TBLPROPERTIES 创建表格。