SQL 方言

DialectDbApiHook 實現和資料庫之間提供了一個抽象層。對於某些資料庫,有多種連線型別可用,例如原生、ODBC 或 JDBC。由於 OdbcHookJdbcHook 是通用 Hook,允許您與任何具有相應驅動程式的資料庫進行互動,因此需要一個抽象層,使得我們可以根據連線的資料庫執行專門的查詢,這就是引入方言的原因。

預設的 Dialect 類提供了以下操作,它們底層使用 SQLAlchemy 來執行,但可以針對每個資料庫透過專門的實現進行過載

  • placeholder 指定了預處理語句中使用的特定於資料庫的佔位符(預設為:%s);

  • inspector 返回 SQLAlchemy 的 Inspector,允許我們檢索資料庫元資料;

  • extract_schema_from_table 允許我們從字串中提取模式名稱。

  • get_column_names 使用 SQLAlchemy Inspector 返回給定表和模式(可選)的列名。

  • get_primary_keys 使用 SQLAlchemy Inspector 返回給定表和模式(可選)的主鍵。

  • get_target_fields 返回不是標識列或自增列的列名,如果在呼叫 DbApiHookinsert_rows 方法時未指定 target_fields 引數,並且 Airflow 屬性 core.dbapihook_resolve_target_fields 設定為 True(預設為 False),則會使用此方法。

  • reserved_words 使用 SQLAlchemy Inspector 返回目標資料庫在 SQL 中的保留字。

  • generate_insert_sql 為目標資料庫生成 INSERT SQL 語句。

  • generate_replace_sql 為目標資料庫生成 UPSERT SQL 語句。

目前只有 3 種方言可用

  • default Dialect 重用了 DbApiHook 中已有的通用功能;

  • mssql MsSqlDialect 專門用於 Microsoft SQL Server;

  • postgresql PostgresDialect 專門用於 PostgreSQL;

要使用的方言將從連線字串中派生,但這有時不可行。始終可以透過連線的 Extra 選項來指定方言名稱

dialect_name: 'mssql'

如果某個資料庫沒有可用的特定方言,或者指定了一個不存在的方言名稱,則將使用預設方言。

此條目有幫助嗎?