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 種方言可用
mssqlMsSqlDialect專門用於 Microsoft SQL Server;postgresqlPostgresDialect專門用於 PostgreSQL;
要使用的方言將從連線字串中派生,但這有時可能無法實現。始終可以透過連線的額外選項來指定方言名稱
dialect_name: 'mssql'
如果某個資料庫沒有特定的方言可用,將使用預設方言;指定不存在的方言名稱時也是如此。