全部產品
Search
文件中心

DataWorks:OpenSearch資料來源

更新時間:Jun 19, 2024

DataWorksData Integration支援使用OpenSearch Writer將資料寫至OpenSearch,本文為您介紹DataWorks的OpenSearch資料離線寫入能力。

支援的版本

  • V3版本使用二方包,依賴pom為:com.aliyun.opensearch aliyun-sdk-opensearch 2.1.3。
  • 如果您需要使用OpenSearchWriter外掛程式,請務必使用JDK 1.6-32及以上版本,您可以使用java -version查看Java版本號碼。

使用限制

  • OpenSearch Writer僅支援使用獨享Data Integration資源群組,不支援使用公用Data Integration資源群組自訂資源群組
  • OpenSearch的列是無序的,因此OpenSearch Writer寫入時,需嚴格按照指定的列的順序寫入。如果指定的列比OpenSearch的列少,則其餘列使用預設值或null。

    例如,您需要匯入的欄位列表有b、c兩個欄位,但OpenSearch表中的欄位有a、b、c三列,在列配置中可以寫為"column":["c","b"],表示會把Reader的第一列和第二列匯入OpenSearch的c欄位和b欄位,而OpenSearch表中新插入的a欄位會被置為預設值或null。

  • 當前僅支援使用指令碼模式將離線資料寫入OpenSearch。

支援的欄位類型

OpenSearch Writer支援大部分OpenSearch類型,請注意檢查您的資料類型。OpenSearch Writer針對OpenSearch類型的轉換列表,如下所示。
類型分類OpenSearch資料類型
整數類INT
浮點類DOUBLE和FLOAT
字串類TEXT、LITERAL和SHORT_TEXT
日期時間類INT
布爾類LITERAL

資料同步任務開發

常見問題

列配置錯誤的處理

為保證寫入資料的可靠性,避免多餘列資料丟失造成資料品質故障。對於寫入多餘的列,OpenSearch Writer將報錯。例如OpenSearch表欄位為a、b、c,如果OpenSearch Writer寫入的欄位多於3列,OpenSearch Writer將報錯。

表配置注意事項

OpenSearch Writer一次只能寫入一個表。

任務重跑和Failover

重跑後會自動根據ID覆蓋。所以插入OpenSearch的列中,必須有一個ID,該ID是OpenSearch的一行記錄的唯一標識。唯一標識一樣的資料,會被覆蓋掉。

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

附錄:離線任務指令碼配置方式

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

OpenSearch Writer指令碼Demo

{
    "type": "job",
    "version": "1.0",
    "configuration": {
        "reader": {},
        "writer": {
            "plugin": "opensearch",
            "parameter": {
                "accessId": "*********",
                "accessKey": "********",
                "host": "http://yyyy.aliyuncs.com",
                "indexName": "datax_xxx",
                "table": "datax_yyy",
                "column": [
                "appkey",
                "id",
                "title",
                "gmt_create",
                "pic_default"
                ],
                "batchSize": 500,
                "writeMode": add,
                "version":"v2",
                "ignoreWriteError": false
            }
        }
    }
}

OpenSearch Writer指令碼參數

參數描述是否必選預設值
accessId存取金鑰中的AccessKey ID。
accessKey存取金鑰中的AccessKey Secret,相當於登入密碼。
host

OpenSearch已連線的服務地址,您可以在應用詳情頁面進行查看。

indexNameOpenSearch專案的名稱。
table寫入資料的表名,不能填寫多張表,因為DataX不支援同時匯入多張表。
column需要匯入的欄位列表。當匯入全部欄位時,可以配置為"column":["*"]。當需要插入部分OpenSearch列時,填寫需要插入的列,例如:"column":["id","name"]

OpenSearch支援列篩選、列換序,例如:表有a、b和c三個欄位,只需同步c,b兩個欄位,則可以配置為["c","b"]。匯入處理程序中,欄位a自動補空,設定為null。

batchSize單次寫入的資料條數。OpenSearch寫入為批量寫入,通常OpenSearch的優勢在於查詢,寫入的每秒處理事務數(TPS)不高,請根據帳號申請的資源進行設定。

通常OpenSearch的單條資料小於1 MB,單次寫入小於2 MB。

如果是分區表,該選項必填。如果是非分區表,該選項不可填寫。300
writeModeOpenSearch Writer通過配置"writeMode":"add/update",保證寫入的等冪性:
  • "add":當出現寫入失敗再次運行時,OpenSearch Writer將清理該條資料,並匯入新資料(原子操作)。
  • "update":表示該條插入資料以修改的方式插入(原子操作)。
    說明 OpenSearch的批量插入並非原子操作,有可能會部分成功,部分失敗。writeMode參數的選擇較為重要,目前V3版本暫不支援update操作。
ignoreWriteError忽略寫錯誤。

配置樣本:"ignoreWriteError":true。OpenSearch為批量寫入,是否忽略當前批次的寫失敗。如果忽略,則繼續執行其它的寫操作。如果不忽略,則直接結束當前任務,並返回錯誤。建議使用預設值。

false
versionOpenSearch的版本資訊,例如"version":"v3"。由於V2版本對於push操作的限制較多,建議使用V3版本。v2