全部產品
Search
文件中心

DataWorks:Redis資料來源

更新時間:Jun 19, 2024

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

使用限制

  • 資料匯入處理程序僅支援使用獨享Data Integration資源群組

  • 使用Redis Writer向Redis寫入資料時,如果Value類型是List,重跑同步任務的同步結果不是等冪的。因此,如果Value類型是List ,重跑同步任務時,需要您手動清空Redis上相應的資料。

支援的欄位類型

Redis支援較豐富的儲存value類型,包括String(字串)、List(鏈表)、Set(集合)、ZSet(sorted set有序集合)和Hash(雜湊類型)。Redis詳情請參見redis.io

資料同步任務開發

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

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

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

Writer指令碼Demo

以下以讀取MySQL資料並寫入Redis為例,為您樣本讀取端MySQL Reader和寫入端Redis Writer的指令碼代碼範例。寫入Redis的資料同步作業。

{
    "type":"job",
    "version":"2.0",  //版本號碼
    "steps":[
        { //以下為讀取端代碼範例,讀取端的參數詳情可查看對應資料來源的Reader外掛程式文檔。
            "stepType":"mysql",   
            "parameter": {
                "envType": 0,
                "datasource": "xc_mysql_demo2",
                "column": [
                    "id",
                    "value",
                    "table"
                ],
                "connection": [
                    {
                        "datasource": "xc_mysql_demo2",
                        "table": []
                    }
                ],
                "where": "",
                "splitPk": "",
                "encoding": "UTF-8"
            },,
            "name":"Reader",
            "category":"reader"
        },
        {//以下為寫入端代碼範例。
            "stepType":"redis",                    //Redis Writer的外掛程式名,配置為redis。
            "parameter":{                          //以下為Redis Writer的主要參數。
                "expireTime":{                     //Redis value值緩衝失效時間,可配置為seconds類型或unixtime類型。"seconds":"1000"
                            }, 
                "keyFieldDelimiter":"u0001",       //寫入Redis的key的分隔字元。
                "dateFormat":"yyyy-MM-dd HH:mm:ss",//寫入Redis時,Date的時間格式。
                "datasource":"xc_mysql_demo2",     //資料來源名稱,需與添加的資料來源名稱保持一致。
                "envType": 0,                      //環境類型,開發環境:1,生產環境:0。
                "writeMode":{                      //寫入模式。
                    "type":"string"                //value類型。
                    "mode":"set",                  //value是某類型時,寫入的模式。
                    "valueFieldDelimiter":"u0001", //value之間的分隔字元。
                             },
                "keyIndexes":[0,1],                //用於源端到Redis的映射,指定源端需要作為key的列(第1列從0開始),如果源端第1列、第2列組合作為Redis的key,這裡配置為[0,1]。
                "batchSize":"1000"                 //一次性批量提交的記錄數大小。
        "column": [                        // 對於redis類型為string,set操作,如果此column沒有配置那麼value的格式是分隔字元串連的字串(csv格式,假設ID的值為1,name的值為"小王",age的值為18,sex的值為男,redis的value結果樣本:"18::男");如果配置了column,且按照如下格式配置,則redis 的value將把原列的列名和值寫入成JSON格式,假設ID的值為1,name的值為"小王",age的值為18,sex的值為男,redis的value結果樣本{"id":1,"name":"小王","age":18,"sex":"男"}
                {
                "name": "id",
                "index": "0"

                },
                {
                "name": "name",
                "index": "1"
                },
                {
                "name": "age",
                "index": "2"
                },
                {
                "name": "sex",
                "index": "3"
                }
            ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"                           //錯誤記錄數。
        },
        "speed":{
            "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
            "concurrent":1, //作業並發數。
            "mbps":"12"//限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Writer指令碼參數

參數

描述

是否必選

預設值

expireTime

Redis value值緩衝失效時間,單位為秒。如果不填該配置項,則該配置項取值為預設值0,表示永久有效。

expireTime的配置方式有以下兩種:

  • seconds方式:指定了從現在開始多長時間後資料失效,取值是失效時間相對目前時間的秒數。

  • unixtime方式:指定了從1970.1.1開始多長時間後資料失效。取值是失效時間相對1970.1.1時間的秒數。

0(0表示永久有效)

keyFieldDelimiter

寫入Redis的Key分隔字元。例如key=key1\u0001id,如果有多個Key需要拼接時,該值為必填項。如果只有一個Key,則可以忽略該配置項。

\u0001

dateFormat

寫入Redis時,Date的時間格式為yyyy-MM-dd HH:mm:ss

datasource

資料來源名稱。該配置項填寫的內容必須與添加的資料來源名稱保持一致。

selectDatabase

寫入Redis的庫選擇("0"~"databases"),Redis叢集無法做資料庫選擇。

預設寫到0號庫

writeMode

Redis Writer寫入Redis的value類型包含以下5種:

  • 字串(string)

  • 字串列表(list)

  • 字串集合(set)

  • 有序字串集合(zset)

  • 雜湊(hash)

不同的value類型,writeMode配置會略有差異,詳細說明可參見下文writeMode參數說明

說明

配置Redis Writer時,您需要配置writeMode為支援的5種寫入資料類型中的1種類型,且只能配置1種。如果您沒有配置,則writeMode取值為預設值string

string

keyIndexes

指定作為key的源端列的列序號。列序號從0開始(即第1列的序號是0,第2列的序號是1,依次類推)。

  • 源端的某一列作為Redis的key時:配置為對應列的序號即可,例如,第1列作為key,則配置為0

  • 源端的連續多列組合作為Redis的key時:配置為對應多列的序號數組,例如,第2列至第4列組合作為key,則配置為[1,3]

說明

配置keyIndexes後,Redis Writer會將其餘的列作為Value。如果您只想同步源表的某幾列作為Key,某幾列作為Value,則無需同步所有欄位,在Reader外掛程式端指定好column進行列篩選即可。

batchSize

一次性批量提交的記錄數大小。該值可以極大減少資料同步系統與Redis的網路互動次數,並提升整體輸送量。如果該值設定過大,會導致資料同步運行進程OOM異常。

1,000

timeout

寫入Redis的逾時時間,單位為毫秒。

30,000

redisMode

Redis的運行模式。具體如下:

  • 叢集模式:redisMode取值為ClusterMode,表示叢集模式。

    叢集模式下,其他資料來源寫入Redis時,與Redis叢集進行直連通訊。通常,自建Redis叢集地址阿里雲Redis直連地址需使用此模式。叢集模式暫不支援批量寫入。

  • 非叢集模式:redisMode取值為空白(即不配置任何值),表示非叢集模式。

    通常,阿里雲Redis叢集Proxy 位址、讀寫分離地址、標準版地址使用此模式,支援批量寫入。

說明

僅支援使用獨享Data Integration資源群組。

column

寫入Redis的column配置。對於Redis對應類型為string,set操作時:

  • 如果此column沒有配置,那麼value的格式是分隔字元串連的字串。(csv格式,假設ID的值為1,name的值為"小王",age的值為18,sex的值為男,Redis的value結果樣本:"18::男");

  • 如果配置了column,且按照如下格式配置,比如"column": [{"index":"0", "name":"id"}, {"index":"1", "name":"name"}] , 這樣Redis的value資料寫出到Redis後,以 {"id":"對應源頭列的值","name":"對應源頭列的值"} 的JSON形式儲存,假設ID的值為1,name的值為"小王",Redis的value結果樣本{"id":1,"name":"小王"}”

writeMode參數說明

配置Redis Writer時,您需要配置writeMode為支援的5種寫入資料類型中的1種類型,且只能配置1種。如果您沒有配置,則writeMode取值為預設值string

value類型

type參數(必選)

mode參數(必選)

valueFieldDelimiter參數(非必選)

writeMode配置範例

字串(string)

type需配置為string

mode為寫入模式參數,value為字串(string)時:

  • mode需配置為set

  • 如果需儲存的資料已經存在,則覆蓋原有的資料。

valueFieldDelimiter為value之間的分隔字元,預設值為\u0001

  • 該配置項主要用於來源資料每行超過兩列的情況,例如有三列時,各列通過分隔字元分割範例為value1\u0001value2\u0001value3

  • 如果來源資料只有兩列(即key和value)時,則無需配置。

"writeMode":{
        "type": "string",
        "mode": "set",
        "valueFieldDelimiter": "\u0001"
        }

字串列表(list)

type需配置為list

mode為寫入模式參數,value為字串列表(list)時,可配置為:

  • lpush,表示在list最左邊儲存資料。

  • rpush,表示在list最右邊儲存資料。

"writeMode":{
    "type": "list",
    "mode": "lpush|rpush",
    "valueFieldDelimiter": "\u0001"
}

字串集合(set)

type需配置為set

mode為寫入模式參數,value為字串集合(set)時:

  • mode需配置為sadd,表示向set集合中儲存資料。

  • 如果需儲存的資料已經存在,則覆蓋原有的資料。

"writeMode":{
        "type": "set",
        "mode": "sadd",
        "valueFieldDelimiter": "\u0001"
        }

有序字串集合(zset)

type需配置為zset

mode為寫入模式參數,value為有序字串集合(zset)時:

  • mode需配置為zadd,表示向zset有序集合中儲存資料。

  • 如果需儲存的資料已經存在,則覆蓋原有的資料。

無需配置此參數。

"writeMode":{
        "type": "zset",
        "mode": "zadd"
        }
說明

當value類型為zset時,資料來源的每行記錄均需遵循相應的規範。即每行記錄除key外,只能有1對score和value,並且score必須在value前面,Redis Writer方可解析出column對應的是score或value。

雜湊(hash)

type需配置為hash

mode為寫入模式參數,value為雜湊(hash)時:

  • mode需配置為hset,表示向hash有序集合中儲存資料。

  • 如果需儲存的資料已經存在,則覆蓋原有的資料。

無需配置此參數。

"writeMode":{
        "type": "hash",
        "mode": "hset"
        }
說明

當value類型為hash時,資料來源的每行記錄都需遵循相應的規範。即每行記錄除key外,只能有1對attribute和value,並且attribute必須在value前面,Redis Writer方可解析出column對應的是attribute或value。