SQL 方言¶
Dialect
在 DbApiHook
实现和数据库之间提供了一个抽象层。对于某些数据库,有多种连接类型可用,例如原生、ODBC 或 JDBC。由于 OdbcHook
和 JdbcHook
是通用钩子,允许您与任何具有相应驱动程序的数据库交互,因此需要一个抽象层,以便我们可以根据连接的数据库运行专门的查询,这就是引入方言的原因。
默认的 Dialect
类提供以下操作,它们底层使用 SQLAlchemy 执行,但可以通过每个数据库的专门实现进行重载
placeholder
指定预处理语句中使用的数据库特定占位符(默认值:%s);inspector
返回 SQLAlchemy 检查器,它允许我们检索数据库元数据;extract_schema_from_table
允许我们从字符串中提取模式名称。get_column_names
使用 SQLAlchemy 检查器返回给定表和模式(可选)的列名。get_primary_keys
使用 SQLAlchemy 检查器返回给定表和模式(可选)的主键。get_target_fields
返回不是 identity 或自增列的列名,如果未指定 target_fields 参数且 Airflow 属性core.dbapihook_resolve_target_fields
设置为 True(默认值:False),则DbApiHook
的 insert_rows 方法将使用此方法。reserved_words
使用 SQLAlchemy 检查器返回目标数据库中 SQL 的保留字。generate_insert_sql
为目标数据库生成 insert SQL 语句。generate_replace_sql
为目标数据库生成 upsert SQL 语句。
目前仅有 3 种方言可用
mssql
MsSqlDialect
专门用于 Microsoft SQL Server;postgresql
PostgresDialect
专门用于 PostgreSQL;
要使用的方言将从连接字符串中派生,但这有时可能无法实现。始终可以通过连接的额外选项来指定方言名称
dialect_name: 'mssql'
如果某个数据库没有特定的方言可用,将使用默认方言;指定不存在的方言名称时也是如此。