全部產品
Search
文件中心

DataWorks:Databricks資料來源

更新時間:Nov 11, 2025

本文為您介紹DataWorks的Databricks資料同步的能力和支援情況。

使用說明

  • 使用限制

    • 資源群組:Databricks Reader 僅支援 Serverless資源群組,並且需要為資源群組綁定的VPC配置公網 NAT Gateway和EIP。

    • 讀模數式:資料同步僅支援 JDBC模式讀取資料。

  • 並發讀取與資料一致性問題

    Databricks Reader 通過 splitPk 配置對資料進行切分,並啟動多個並發任務以提高同步效率。但請注意以下關鍵點:

    • 多個並發任務不屬於同一個資料庫事務,且存在時間間隔。

    • 在資料來源持續寫入的情況下,並發讀取可能導致擷取的資料快照不完整或不一致。

    解決方案:由於技術限制,無法實現跨多線程的完美一致性快照。我們提供以下兩種工程上的解決方案,請根據業務情境權衡選擇:

    • 方案一:配置為單線程同步,不設定資料切片(splitPk)。可以保證資料嚴格一致,但同步速度較慢。

    • 方案二:在同步期間確保資料來源為靜態。例如,通過鎖表、臨時關閉應用寫入或暫停備庫同步等方式。同步速度較快,但可能對線上業務造成影響。

  • 編碼處理

    Databricks Reader 底層使用 JDBC 進行資料幫浦,JDBC 會自動處理不同資料庫的編碼識別與轉換。因此,您無需手動設定編碼。

  • 增量資料同步

    Databricks Reader 通過執行 SELECT ... WHERE ... 語句來抽取資料,實現增量同步處理的關鍵在於 WHERE 條件的構造。

    1. 推薦方式(基於時間戳記欄位):

      1. 在您的來源資料庫表中,設計一個時間戳記欄位(例如 modify_time)。

      2. 當應用對資料進行新增或更新(包括邏輯刪除)時,務必同步更新該時間戳記欄位。

      3. 在同步任務中,使用該時間戳記欄位作為 WHERE 條件,即可拉取上一同步點之後發生變化的資料。

    2. 不支援的情況:如果業務表中沒有可用於區分新增或修改的欄位(如時間戳記或自增ID),Databricks Reader 無法進行增量同步處理,只能進行全量資料同步。

支援的欄位類型

在進行離線讀取時,Databricks Reader支援大部分Databricks類型,但也存在個別類型未被支援的情況,請注意檢查您的資料類型。

Databricks Reader針對Databricks類型的轉換列表,如下所示。

類型分類

Databricks資料類型

整數類

TINYINT、SMALLINT、INT、BIGINT

浮點類

FLOAT、DOUBLE、DECIMAL

字串類

STRING

日期時間類

DATE、TIMESTAMP、TIMESTAMP_NTZ

布爾類

BOOLEAN

複雜類型

ARRAY、MAP、STRUCT

其他類型

INTERVAL、 BINARY、GEOGRAPHY(srid)、GEOMETRY(srid)

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見資料來源管理詳細的配置參數解釋可在配置介面查看對應參數的文案提示

資料同步任務開發

資料同步任務的配置入口和通用配置流程可參見下文的配置指導。

單表離線同步任務配置指導

常見問題(FAQ)

  • Q:讀取報錯:[Databricks][JDBCDriver](500313) Error getting the data value from result set: Column13:[Databricks][JDBCDriver](500312) Error in fetching data rows: Timestamp Conversion has failed.

    A:Databricks 的 TIMESTAMP 類型取值範圍超過 JAVA Timestamp 取值範圍,如果出現了超出範圍的值,JDBC Driver 會報錯。可以通過修改 column 配置解決,例如"column": ["CAST(col_timestamp AS STRING)"]

附錄:指令碼Demo與參數說明

離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下介紹指令碼模式下資料來源的參數配置詳情。

Reader指令碼Demo

{
  "type": "job",
  "version": "2.0",
  "steps": [
    {
      "stepType": "databricks",
      "parameter": {
        "datasource": "databricks",
        "schema": "schema1",
        "table": "table1",
        "readMode": "jdbc",
        "where": "id>1",
        "splitPk": "id",
        "column": [
          "c1",
          "c2"
        ]
      },
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "stream",
      "parameter": {},
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting": {
    "errorLimit": {
      "record": "0"
    },
    "speed": {
      "concurrent": 1
    }
  }
}

Reader指令碼參數

參數

描述

是否必選

預設值

datasource

資料來源名稱,指令碼模式支援添加資料來源,此配置項填寫的內容必須要與添加的資料來源名稱保持一致。

column

所配置的表中需要同步的列名集合,使用JSON的數組描述欄位資訊。

  • 支援列裁剪,即可以匯出部分列。

  • 支援列換序,即可以不根據表Schema資訊順序匯出列。

  • 支援常量配置,您需要遵循Databricks的SQL文法格式。

舉例:"column":["id", "1", "'const name'", "null", "upper('abc_lower')", "2.3" , "true"]

  • id為普通列名。

  • 1為整型數字常量。

  • 'const name'為字串常量(需要加上一對單引號)。

  • null為空白指標。

  • upper('abc_lower')為函數運算式。

  • 2.3為浮點數。

  • true為布爾值。

column必須顯式需指定同步的列集合,不允許為空白 。

splitPk

Databricks Reader進行資料幫浦時,如果指定splitPk,表示您希望使用splitPk代表的欄位進行資料分區。資料同步系統會啟動並發任務進行資料同步,以提高資料同步的效能:

  • 推薦使用者使用表主鍵作為splitPk,因為表主鍵通常情況下比較均勻,因此切分出來的分區也不容易出現資料熱點。

  • 目前splitPk僅支援整型資料切分,不支援浮點、字串和日期等其它類型。如果您指定其它非支援類型,Databricks Reader將報錯。

where

過濾條件,Databricks Reader根據指定的columntablewhere條件拼接完整,並根據該SQL抽取資料。 在實際業務情境中,通常會選擇當天的資料進行同步,可以指定where條件為gmt_create>${bizdate}where條件可以有效地進行業務增量同步處理。如果該值為空白,代表同步全表所有的資訊。

schema

所選取的需要同步的schema。

table

所選取的需要同步的表,一個作業只能支援一個表同步。

readMode

資料讀模數式,目前僅支援JDBC模式。

jdbc