OSS數(shù)據(jù)源
OSS數(shù)據(jù)源為您提供讀取和寫入OSS的雙向通道,本文為您介紹DataWorks的OSS數(shù)據(jù)同步的能力支持情況。
支持的字段類型與使用限制
離線讀
OSS Reader實(shí)現(xiàn)了從OSS讀取數(shù)據(jù)并轉(zhuǎn)為數(shù)據(jù)集成協(xié)議的功能,OSS本身是無結(jié)構(gòu)化數(shù)據(jù)存儲。對于數(shù)據(jù)集成而言,OSS Reader支持的功能如下。
支持 | 不支持 |
|
|
準(zhǔn)備OSS數(shù)據(jù)時(shí),如果數(shù)據(jù)為CSV文件,則必須為標(biāo)準(zhǔn)格式的CSV文件。例如,如果列內(nèi)容在半角引號(")內(nèi),需要替換成兩個(gè)半角引號(""),否則會(huì)造成文件被錯(cuò)誤分割。
離線寫
OSS Writer實(shí)現(xiàn)了從數(shù)據(jù)同步協(xié)議轉(zhuǎn)為OSS中的文本文件功能,OSS本身是無結(jié)構(gòu)化數(shù)據(jù)存儲,目前OSS Writer支持的功能如下。
支持 | 不支持 |
|
|
類型分類 | 數(shù)據(jù)集成column配置類型 |
整數(shù)類 | LONG |
字符串類 | STRING |
浮點(diǎn)類 | DOUBLE |
布爾類 | BOOLEAN |
日期時(shí)間類 | DATE |
實(shí)時(shí)寫
支持實(shí)時(shí)寫入的能力。
支持實(shí)時(shí)寫入Hudi格式版本:0.12.x。
數(shù)據(jù)同步任務(wù)開發(fā)
OSS數(shù)據(jù)同步任務(wù)的配置入口和通用配置流程指導(dǎo)可參見下文的配置指導(dǎo),詳細(xì)的配置參數(shù)解釋可在配置界面查看對應(yīng)參數(shù)的文案提示。
創(chuàng)建數(shù)據(jù)源
在進(jìn)行數(shù)據(jù)同步任務(wù)開發(fā)時(shí),您需要在DataWorks上創(chuàng)建一個(gè)對應(yīng)的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源。
單表離線同步任務(wù)配置指導(dǎo)
腳本模式配置的全量參數(shù)和腳本Demo請參見下文的附錄:腳本Demo與參數(shù)說明。
單表實(shí)時(shí)同步任務(wù)配置指導(dǎo)
操作流程請參見配置單表增量數(shù)據(jù)實(shí)時(shí)同步、DataStudio側(cè)實(shí)時(shí)同步任務(wù)配置。
整庫(實(shí)時(shí))全增量同步配置指導(dǎo)
操作流程請參見數(shù)據(jù)集成側(cè)同步任務(wù)配置。
常見問題
附錄:腳本Demo與參數(shù)說明
附錄:離線任務(wù)腳本配置方式
如果您配置離線任務(wù)時(shí)使用腳本模式的方式進(jìn)行配置,您需要在任務(wù)腳本中按照腳本的統(tǒng)一格式要求編寫腳本中的reader參數(shù)和writer參數(shù),腳本模式的統(tǒng)一要求請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下的數(shù)據(jù)源的Reader參數(shù)和Writer參數(shù)的指導(dǎo)詳情。
OSS Reader腳本Demo:通用示例
{
"type":"job",
"version":"2.0",//版本號。
"steps":[
{
"stepType":"oss",//插件名。
"parameter":{
"nullFormat":"",//定義可以表示為null的字符串。
"compress":"",//文本壓縮類型。
"datasource":"",//數(shù)據(jù)源。
"column":[//字段。
{
"index":0,//列序號。
"type":"string"http://數(shù)據(jù)類型。
},
{
"index":1,
"type":"long"
},
{
"index":2,
"type":"double"
},
{
"index":3,
"type":"boolean"
},
{
"format":"yyyy-MM-dd HH:mm:ss", //時(shí)間格式。
"index":4,
"type":"date"
}
],
"skipHeader":"",//類CSV格式文件可能存在表頭為標(biāo)題情況,需要跳過。
"encoding":"",//編碼格式。
"fieldDelimiter":",",//字段分隔符。
"fileFormat": "",//文本類型。
"object":[]//object前綴。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":""http://錯(cuò)誤記錄數(shù)。
},
"speed":{
"throttle":true,//當(dāng)throttle值為false時(shí),mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時(shí),表示限流。
"concurrent":1 //作業(yè)并發(fā)數(shù)。
"mbps":"12",//限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
OSS Reader腳本Demo:ORC或Parquet文件讀取OSS
目前通過復(fù)用HDFS Reader的方式完成OSS讀取ORC或Parquet格式的文件,在OSS Reader已有參數(shù)的基礎(chǔ)上,增加了Path、FileFormat等擴(kuò)展配置參數(shù),參數(shù)含義請參見HDFS Reader。
以O(shè)RC文件格式讀取OSS,示例如下。
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61/orc__691b6815_9260_4037_9899_****", "column": [ { "index": 0, "type": "long" }, { "index": "1", "type": "string" }, { "index": "2", "type": "string" } ] } }
以Parquet文件格式讀取OSS,示例如下。
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"oss", "parameter":{ "nullFormat":"", "compress":"", "fileFormat":"parquet", "path":"/*", "parquetSchema":"message m { optional BINARY registration_dttm (UTF8); optional Int64 id; optional BINARY first_name (UTF8); optional BINARY last_name (UTF8); optional BINARY email (UTF8); optional BINARY gender (UTF8); optional BINARY ip_address (UTF8); optional BINARY cc (UTF8); optional BINARY country (UTF8); optional BINARY birthdate (UTF8); optional DOUBLE salary; optional BINARY title (UTF8); optional BINARY comments (UTF8); }", "column":[ { "index":"0", "type":"string" }, { "index":"1", "type":"long" }, { "index":"2", "type":"string" }, { "index":"3", "type":"string" }, { "index":"4", "type":"string" }, { "index":"5", "type":"string" }, { "index":"6", "type":"string" }, { "index":"7", "type":"string" }, { "index":"8", "type":"string" }, { "index":"9", "type":"string" }, { "index":"10", "type":"double" }, { "index":"11", "type":"string" }, { "index":"12", "type":"string" } ], "skipHeader":"false", "encoding":"UTF-8", "fieldDelimiter":",", "fieldDelimiterOrigin":",", "datasource":"wpw_demotest_oss", "envType":0, "object":[ "wpw_demo/userdata1.parquet" ] }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"dt=${bizdate}", "truncate":true, "datasource":"0_odps_wpw_demotest", "envType":0, "column":[ "id" ], "emptyAsNull":false, "table":"wpw_0827" }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"" }, "locale":"zh_CN", "speed":{ "throttle":false, "concurrent":2 } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
OSS Reader腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項(xiàng)填寫的內(nèi)容必須要與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
Object | OSS的Object信息,此處可以支持填寫多個(gè)Object。例如xxx的bucket中有yunshi文件夾,文件夾中有l(wèi)l.txt文件,則Object直接填yunshi/ll.txt。 支持使用調(diào)度參數(shù)并配合調(diào)度,靈活生成Object文件名稱與路徑。
說明
| 是 | 無 |
parquetSchema | 以Parquet文件格式讀取OSS時(shí)配置,當(dāng)且僅當(dāng)fileFormat為parquet時(shí)生效,具體表示parquet存儲的類型說明。您需要確保填寫parquetSchema后,整體配置符合JSON語法。
parquetSchema的配置格式說明如下:
配置示例如下所示。
| 否 | 無 |
column | 讀取字段列表,type指定源數(shù)據(jù)的類型,index指定當(dāng)前列來自于文本第幾列(以0開始),value指定當(dāng)前類型為常量,不是從源頭文件讀取數(shù)據(jù),而是根據(jù)value值自動(dòng)生成對應(yīng)的列。 默認(rèn)情況下,您可以全部按照String類型讀取數(shù)據(jù),配置如下。
您可以指定column字段信息,配置如下。
說明 對于您指定的column信息,type必須填寫,index/value必須選擇其一。 | 是 | 全部按照STRING類型讀取。 |
fileFormat | 文本類型。源頭OSS的文件類型。例如csv、text,兩種格式均支持自定義分隔符。 | 是 | csv |
fieldDelimiter | 讀取的字段分隔符。 說明 OSS Reader在讀取數(shù)據(jù)時(shí),需要指定字段分割符,如果不指定默認(rèn)為(,),界面配置中也會(huì)默認(rèn)填寫為(,)。 如果分隔符不可見,請?zhí)顚慤nicode編碼。例如,\u001b、\u007c。 | 是 | , |
lineDelimiter | 讀取的行分隔符。 說明 當(dāng)fileFormat取值為text時(shí),本參數(shù)有效。 | 否 | 無 |
compress | 文本壓縮類型,默認(rèn)不填寫(即不壓縮)。支持壓縮類型為gzip、bzip2和zip。 | 否 | 不壓縮 |
encoding | 讀取文件的編碼配置。 | 否 | utf-8 |
nullFormat | 文本文件中無法使用標(biāo)準(zhǔn)字符串定義null(空指針),數(shù)據(jù)同步提供nullFormat定義哪些字符串可以表示為null。 例如:
| 否 | 無 |
skipHeader | 類CSV格式文件可能存在表頭為標(biāo)題情況,需要跳過。默認(rèn)不跳過,壓縮文件模式下不支持skipHeader。 | 否 | false |
csvReaderConfig | 讀取CSV類型文件參數(shù)配置,Map類型。讀取CSV類型文件使用的CsvReader進(jìn)行讀取,會(huì)有很多配置,不配置則使用默認(rèn)值。 | 否 | 無 |
OSS Writer腳本Demo:通用示例
{
"type":"job",
"version":"2.0",
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"oss",//插件名。
"parameter":{
"nullFormat":"",//數(shù)據(jù)同步系統(tǒng)提供nullFormat,定義哪些字符串可以表示為null。
"dateFormat":"",//日期格式。
"datasource":"",//數(shù)據(jù)源。
"writeMode":"",//寫入模式。
"writeSingleObject":"false", //表示是否將同步數(shù)據(jù)寫入單個(gè)oss文件。
"encoding":"",//編碼格式。
"fieldDelimiter":","http://字段分隔符。
"fileFormat":"",//文本類型。
"object":""http://Object前綴。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"http://錯(cuò)誤記錄數(shù)。
},
"speed":{
"throttle":true,//當(dāng)throttle值為false時(shí),mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時(shí),表示限流。
"concurrent":1, //作業(yè)并發(fā)數(shù)。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
OSS Writer腳本Demo:ORC或Parquet文件寫入OSS腳本配置demo
目前通過復(fù)用HDFS Writer的方式完成OSS寫ORC或Parquet格式的文件。在OSS Writer已有參數(shù)的基礎(chǔ)上,增加了Path、FileFormat等擴(kuò)展配置參數(shù),參數(shù)含義請參見HDFS Writer。
ORC或Parquet文件寫入OSS的示例如下:
以下僅為示例,請根據(jù)您自己具體的列名稱和類型修改對應(yīng)的參數(shù),請勿直接復(fù)制使用。
以O(shè)RC文件格式寫入OSS
寫ORC文件,當(dāng)前僅支持腳本模式,您需要轉(zhuǎn)腳本模式配置,其中fileFormat需要配置為
orc
,path需要配置為寫入文件的路徑,column配置格式為{"name":"your column name","type": "your column type"}
。當(dāng)前支持寫入的ORC類型如下:
字段類型
離線寫OSS(ORC格式)
TINYINT
支持
SMALLINT
支持
INT
支持
BIGINT
支持
FLOAT
支持
DOUBLE
支持
TIMESTAMP
支持
DATE
支持
VARCHAR
支持
STRING
支持
CHAR
支持
BOOLEAN
支持
DECIMAL
支持
BINARY
支持
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61", "fileName": "orc", "writeMode": "append", "column": [ { "name": "col1", "type": "BIGINT" }, { "name": "col2", "type": "DOUBLE" }, { "name": "col3", "type": "STRING" } ], "writeMode": "append", "fieldDelimiter": "\t", "compress": "NONE", "encoding": "UTF-8" } }
以Parquet文件格式寫入OSS
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "parquet", "path": "/tests/case61", "fileName": "test", "writeMode": "append", "fieldDelimiter": "\t", "compress": "SNAPPY", "encoding": "UTF-8", "parquetSchema": "message test { required int64 int64_col;\n required binary str_col (UTF8);\nrequired group params (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired binary value (UTF8);\n}\n}\nrequired group params_arr (LIST) {\nrepeated group list {\nrequired binary element (UTF8);\n}\n}\nrequired group params_struct {\nrequired int64 id;\n required binary name (UTF8);\n }\nrequired group params_arr_complex (LIST) {\nrepeated group list {\nrequired group element {\n required int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_complex (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired group value {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_struct_complex {\nrequired int64 id;\n required group detail {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}", "dataxParquetMode": "fields" } }
OSS Writer腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,該配置項(xiàng)填寫的內(nèi)容必須與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
object | OSS Writer寫入的文件名,OSS使用文件名模擬目錄的實(shí)現(xiàn)。OSS對于Object的名稱有以下限制:
如果您不需要后綴隨機(jī)UUID,建議您配置 | 是 | 無 |
writeMode | OSS Writer寫入前,數(shù)據(jù)的處理:
| 是 | 無 |
writeSingleObject | OSS寫數(shù)據(jù)時(shí),是否寫單個(gè)文件:
說明 當(dāng)寫入ORC、parquet類型數(shù)據(jù)時(shí),writeSingleObject參數(shù)不生效,即使用該參數(shù)無法在多并發(fā)場景下,寫入單個(gè)ORC或parquet文件。若要寫入單個(gè)文件,您可以將并發(fā)設(shè)置為1,但文件名會(huì)添加隨機(jī)后綴,并且設(shè)置并發(fā)為1時(shí),將影響同步任務(wù)的速度。 | 否 | false |
fileFormat | 文件寫出的格式,支持以下幾種格式:
| 否 | text |
compress | 寫入OSS的數(shù)據(jù)文件的壓縮格式(需使用腳本模式任務(wù)配置)。 說明 csv、text文本類型不支持壓縮,parquet/orc文件支持gzip、snappy等壓縮。 | 否 | 無 |
fieldDelimiter | 寫入的字段分隔符。 | 否 | , |
encoding | 寫出文件的編碼配置。 | 否 | utf-8 |
parquetSchema | 以Parquet文件格式寫入OSS的必填項(xiàng),用來描述目標(biāo)文件的結(jié)構(gòu),所以此項(xiàng)當(dāng)且僅當(dāng)fileFormat為parquet時(shí)生效,格式如下。
配置項(xiàng)說明如下:
說明 每行列設(shè)置必須以分號結(jié)尾,最后一行也要寫上分號。 示例如下。
| 否 | 無 |
nullFormat | 文本文件中無法使用標(biāo)準(zhǔn)字符串定義null(空指針),數(shù)據(jù)同步系統(tǒng)提供nullFormat定義可以表示為null的字符串。例如,您配置 | 否 | 無 |
header | OSS寫出時(shí)的表頭,例如, | 否 | 無 |
maxFileSize(高級配置,向?qū)J讲恢С郑?/p> | OSS寫出時(shí)單個(gè)Object文件的最大值,默認(rèn)為10,000*10MB,類似于在打印log4j日志時(shí),控制日志文件的大小。OSS分塊上傳時(shí),每個(gè)分塊大小為10MB(也是日志輪轉(zhuǎn)文件最小粒度,即小于10MB的maxFileSize會(huì)被作為10MB),每個(gè)OSS InitiateMultipartUploadRequest支持的分塊最大數(shù)量為10,000。 輪轉(zhuǎn)發(fā)生時(shí),Object名字規(guī)則是在原有Object前綴加UUID隨機(jī)數(shù)的基礎(chǔ)上,拼接_1,_2,_3等后綴。 說明 默認(rèn)單位為MB。 配置示例:"maxFileSize":300, 表示設(shè)置單個(gè)文件大小為300M。 | 否 | 100,000 |
suffix(高級配置,向?qū)J讲恢С郑?/p> | 數(shù)據(jù)同步寫出時(shí),生成的文件名后綴。例如,配置suffix為.csv,則最終寫出的文件名為fileName****.csv。 | 否 | 無 |
附錄2:parquet類型數(shù)據(jù)的轉(zhuǎn)化策略
如果您沒有配置parquetSchema,那么DataWorks側(cè)會(huì)根據(jù)源端字段類型,按照一定的策略進(jìn)行相應(yīng)數(shù)據(jù)類型轉(zhuǎn)換,轉(zhuǎn)換策略如下。
轉(zhuǎn)換后的數(shù)據(jù)類型 | Parquet type | Parquet logical type |
CHAR / VARCHAR / STRING | BINARY | UTF8 |
BOOLEAN | BOOLEAN | 不涉及 |
BINARY / VARBINARY | BINARY | 不涉及 |
DECIMAL | FIXED_LEN_BYTE_ARRAY | DECIMAL |
TINYINT | INT32 | INT_8 |
SMALLINT | INT32 | INT_16 |
INT/INTEGER | INT32 | 不涉及 |
BIGINT | INT64 | 不涉及 |
FLOAT | FLOAT | 不涉及 |
DOUBLE | DOUBLE | 不涉及 |
DATE | INT32 | DATE |
TIME | INT32 | TIME_MILLIS |
TIMESTAMP/DATETIME | INT96 | 不涉及 |