全部產品
Search
文件中心

DataWorks:FTP資料來源

更新時間:Oct 24, 2024

FTP資料來源為您提供讀取和寫入FTP雙向通道的功能,本文為您介紹DataWorks的FTP資料同步的能力支援情況。

使用限制

FTP Reader實現了從遠程FTP檔案讀取資料並轉為資料同步協議的功能,遠程FTP檔案本身是無結構化資料存放區。對於資料同步而言,目前FTP Reader支援的功能如下所示:

支援

不支援

  • 支援且僅支援讀取TXT的檔案,並要求TXT中的schema為一張二維表。

  • 支援類CSV格式檔案,自訂分隔字元。

  • 支援多種類型資料讀取(使用STRING表示)、支援列裁剪和列常量。

  • 支援遞迴讀取、支援檔案名稱過濾。

  • 支援文本壓縮,現有壓縮格式為gzip、bzip2、zip、lzo和lzo_deflate。

  • 多個File可以支援並發讀取。

  • 單個File支援多線程並發讀取,此處涉及到單個File內部切分演算法。

  • 單個File在壓縮情況下,從技術上無法支援多線程並發讀取。

FTP Writer實現了從Data Integration協議轉為FTP檔案功能,FTP檔案本身是無結構化資料存放區。目前FTP Writer支援的功能如下:

支援

不支援

  • 支援且僅支援寫入文本類型(不支援BLOB,如視頻資料)的檔案,且要求文本中schema為一張二維表。

  • 支援類CSV和TEXT格式的檔案,自訂分隔字元。

  • 支援多線程寫入,每個線程寫入不同子檔案。

  • 單個檔案不能支援並發寫入。

  • FTP本身不提供資料類型,FTP Writer均將資料以STRING類型寫入FTP檔案。

  • 寫出時不支援文本壓縮。

支援的欄位類型

遠程FTP檔案本身不提供資料類型,該類型是DataX FtpReader定義。

DataX內部類型

遠程FTP檔案資料類型

LONG

LONG

DOUBLE

DOUBLE

STRING

STRING

BOOLEAN

BOOLEAN

DATE

DATE

建立資料來源

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

資料同步任務開發

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

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

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

離線任務指令碼配置方式

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

Reader指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼。
    "steps":[
        {
            "stepType":"ftp",//外掛程式名。
            "parameter":{
                "path":[],//檔案路徑。
                "nullFormat":"",//null值。
                "compress":"",//壓縮格式。
                "datasource":"",//資料來源。
                "column":[//欄位。
                    {
                        "index":0,//序號。
                        "type":""//欄位類型。
                    }
                ],
                "skipHeader":"",//是否包含表頭。
                "fieldDelimiter":",",//資料行分隔符號。
                "encoding":"UTF-8",//編碼格式。
                "fileFormat":"csv"//文本類型。
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "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"
            }
        ]
    }
}

Reader指令碼參數

參數

描述

是否必選

預設值

datasource

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

path

遠程FTP檔案系統的路徑和檔案名稱資訊,需要填寫包含路徑和檔案尾碼的完整檔案路徑和檔案名稱。這裡可以支援填寫多個路徑。

  • 當指定單個遠程FTP檔案,FTP Reader暫時只能使用單線程進行資料幫浦。後期會在非壓縮檔情況下針對單個File進行多線程並發讀取。

  • 當指定多個遠程FTP檔案,FTP Reader支援使用多線程進行資料幫浦。線程並發數通過通道數指定。

  • 當指定萬用字元,FTP Reader嘗試遍曆出多個檔案資訊。例如,指定/代表讀取/目錄下所有的檔案,指定/bazhen/代表讀取bazhen目錄下遊所有的檔案。FTP Reader目前僅支援星號(*)作為檔案萬用字元,並支援使用調度參數配合調度,靈活設定檔名與檔案路徑。

說明
  • 通常不建議您使用星號(*),易導致任務運行報JVM記憶體溢出的錯誤。

  • 資料同步會將一個作業下同步的所有Text File視作同一張資料表。您必須自己保證所有的File能夠適配同一套Schema資訊。

  • 您必須保證讀取檔案為類CSV格式,並且提供給資料同步系統許可權可讀。

  • 如果Path指定的路徑下沒有符合匹配的檔案抽取,同步任務將報錯。

column

讀取欄位列表,type指定來源資料的類型,index指定當前列來自於文本第幾列(以0開始),value指定當前類型為常量,不從源標頭檔讀取資料,而是根據value值自動產生對應的列。

預設情況下,您可以全部按照STRING類型讀取資料,配置為"column":["*"]。您可以指定column欄位資訊,配置如下。

{
    "type": "long",
    "index": 0    //從遠程FTP檔案文本第一列擷取INT欄位。
  },
  {
    "type": "string",
    "value": "alibaba"  //從FTP Reader內部產生alibaba的字串欄位作為當前欄位。
  }

對於您指定的column資訊,type必須填寫,index和value必須選擇其一。

fieldDelimiter

讀取的欄位分隔符號。

說明

FTP Reader在讀取資料時,需要指定欄位分割符,如果不指定會預設為(,),介面配置也會預設填寫(,)。

,

skipHeader

類CSV格式檔案可能存在表頭為標題情況,需要跳過。預設不跳過,壓縮檔模式下不支援skipHeader。

false

encoding

讀取檔案的編碼配置。

utf-8

nullFormat

文字檔中無法使用標準字串定義null(null 指標),資料同步提供nullFormat定義哪些字串可以表示為null。 例如:

  • 配置nullFormat:"null",等同於“可見字元”,如果源頭資料是null,則資料同步視作null欄位。

  • 配置nullFormat:"\u0001",等同於“不可見字元”,如果源頭資料是字串"\u0001",則資料同步視作null欄位。

  • 不寫"nullFormat"這個參數,等同於“未配置”,代表來源是什麼資料就直接按照什麼資料寫入目標端,不做任何轉換。

markDoneFileName

標檔檔案名稱,資料同步前檢查標檔檔案。如果標檔檔案不存在,等待一段時間重新檢查標檔檔案,如果檢查到標檔檔案開始執行同步任務。

maxRetryTime

表示檢查標檔檔案重試次數,預設重試60次,每一次稍候再試為1分鐘,共60分鐘。

60

csvReaderConfig

讀取CSV類型檔案參數配置,Map類型。讀取CSV類型檔案使用的CsvReader進行讀取,會有很多配置,不配置則使用預設值。

fileFormat

讀取的檔案類型,預設情況下檔案作為csv格式檔案進行讀取,內容被解析為邏輯上的二維表結構處理。如果您配置為binary,則表示按照純粹二進位格式進行複製傳輸。

通常在FTP、OSS等儲存之間進行目錄結構點對點複寫時使用,通常無需配置該項。

Writer指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼。
    "steps":[
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ftp",//外掛程式名。
            "parameter":{
                "path":"",//檔案路徑。
                "fileName":"",//檔案名稱。
                "nullFormat":"null",//null值。
                "dateFormat":"yyyy-MM-dd HH:mm:ss",//時間格式。
                "datasource":"",//資料來源。
                "writeMode":"",//寫入模式。
                "fieldDelimiter":",",//資料行分隔符號。
                "encoding":"",//編碼格式。
                "fileFormat":""//文本類型。
            },
            "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指令碼參數

參數

描述

是否必選

預設值

datasource

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

timeout

串連FTP伺服器連線逾時時間,單位毫秒。

60,000(1分鐘)

path

FTP檔案系統的路徑資訊,FTP Writer會寫入Path目錄下多個檔案。

fileName

FTP Writer寫入的檔案名稱,該檔案名稱會添加隨機的尾碼作為每個線程寫入實際檔案名稱。

singleFileOutput

FtpWriter寫入的檔案名稱受fileName控制,預設行會添加隨機的尾碼作為每個線程寫入實際檔案名稱。如果您不需要預設添加的隨機尾碼,您可以將singleFileOutput配置為true,寫出檔案名稱將會是您指定的完整檔案名稱。

false

writeMode

FTP Writer寫入前資料清理處理模式:

  • truncate:當singleFileOutput為true時,寫入前會清理目錄下同名檔案;當singleFileOutput為false時,寫入前會清理目錄下fileName首碼的所有檔案。

  • append:寫入前不做任何處理,Data IntegrationFTP Writer直接使用fileName寫入,並保證檔案名稱不衝突。

  • nonConflict:如果目錄下有fileName首碼的檔案,直接報錯。

fieldDelimiter

寫入的欄位分隔符號。

是,單字元

skipHeader

類CSV格式檔案可能存在表頭為標題情況,需要跳過。預設不跳過,壓縮檔模式下不支援skipHeader

false

compress

支援gzipbzip2兩種壓縮形式。

無壓縮

encoding

讀取檔案的編碼配置。

utf-8

nullFormat

文字檔中無法使用標準字串定義null(null 指標),Data Integration提供nullFormat定義哪些字串可以表示為null。

例如您配置nullFormat="null",如果源頭資料是null 指標null,Data Integration序列化為null字面值字串(4個字元)。

dateFormat

日期類型的資料序列化到檔案中時的格式,例如"dateFormat":"yyyy-MM-dd"

fileFormat

檔案寫出的格式,包括CSV和TEXT兩種,CSV是嚴格的CSV格式,如果待寫資料包括資料行分隔符號,則會按照CSV的轉義文法轉義,轉義符號為雙引號。TEXT格式是用資料行分隔符號簡單分割待寫資料,對於待寫資料包括資料行分隔符號情況下不做轉義。

TEXT

header

header:txt文本(包括csv、text等)寫出時的表頭,指令碼模式支援配置表頭資訊,例如"header":["id","name","age"],表示將id、name、age作為表頭寫入ftp檔案的第一行。

markDoneFileName

  • 標檔檔案名稱,同步任務結束後產生標檔檔案,根據此標檔檔案可以判斷同步任務是否成功。此處應配置為絕對路徑。

  • 在離線周期任務情境下,建議標檔檔案攜帶調度參數。例如標檔檔案設定為/user/ftp/markDone_${bizdate}.txt,其中${bizdate}為調度參數。