DataWorks數據集成支持使用Doris Writer導入表數據至Doris。本文為您介紹DataWorks的Doris數據同步能力支持情況。
支持的Doris版本
Doris Writer使用的驅動版本是MySQL Driver 5.1.47,該驅動支持的內核版本如下。驅動能力詳情請參見Doris官網文檔。
Doris 版本 | 是否支持 |
0.x.x | 支持 |
1.1.x | 支持 |
1.2.x | 支持 |
2.x | 支持 |
使用限制
數據集成僅支持離線寫入Doris。
支持的字段類型
不同Doris版本支持不同的數據類型和聚合模型。各版本Doris的全量字段類型請參見Doris的官方文檔,下面為您介紹Doris當前主要字段的支持情況。
類型 | 支持模型 | Doris版本 | 離線寫入(Doris Writer) |
SMALLINT | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
INT | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
BIGINT | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
LARGEINT | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
FLOAT | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
DOUBLE | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
DECIMAL | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
DECIMALV3 | Aggregate,Unique,Duplicate | 1.2.1+、2.x | 支持 |
DATE | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
DATETIME | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
DATEV2 | Aggregate,Unique,Duplicate | 1.2.x、2.x | 支持 |
DATATIMEV2 | Aggregate,Unique,Duplicate | 1.2.x、2.x | 支持 |
CHAR | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
VARCHAR | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
STRING | Aggregate,Unique,Duplicate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
VARCHAR | Aggregate,Unique,Duplicate | 1.1.x、1.2.x、2.x | 支持 |
ARRAY | Duplicate | 1.2.x、2.x | 支持 |
JSONB | Aggregate,Unique,Duplicate | 1.2.x、2.x | 支持 |
HLL | Aggregate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
BITMAP | Aggregate | 0.x.x、1.1.x、1.2.x、2.x | 支持 |
QUANTILE_STATE | Aggregate | 1.2.x、2.x | 支持 |
實現原理
Doris Writer通過Doris原生支持的StreamLoad方式導入數據,Doris Writer會將Reader端讀取到的數據緩存在內存中,并拼接成文本,然后批量導入至Doris數據庫。更多詳情請參見Doris官方文檔。
數據同步前準備
在DataWorks上進行數據同步前,您需要參考本文提前在Doris側進行數據同步環境準備,以便在DataWorks上進行Doris數據同步任務配置與執行時服務正常。以下為您介紹Doris同步前的相關環境準備。
準備工作1:確認Doris的版本
數據集成對Doris版本有要求,您可以參考上文支持的Doris版本章節,查看當前待同步的Doris是否符合版本要求。您可以在Doris的官方網站下載對應的版本,并且安裝。
準備工作2:創建賬號,并配置賬號權限
您需要規劃一個數據倉庫的登錄賬號用于后續操作,同時,您需要為該賬號設置密碼,以便后續連接到數據倉庫。如果您要使用Doris默認的root用戶進行登錄,那么您需要為root用戶設置密碼。root用戶默認沒有密碼,您可以在Doris上執行SQL來設置密碼:
SET PASSWORD FOR 'root' = PASSWORD('密碼')
準備工作3:配置Doris的網絡連接
使用StreamLoad導入數據,需要訪問FE節點的私網地址。如果訪問FE的公網地址,則會被重定向到BE節點的內網IP(數據操作問題)。因此,您需要將Doris的網絡與數據集成使用的Serverless資源組或獨享數據集成資源組打通,使之通過內網地址進行訪問。網絡打通的具體操作可以參考網絡連通方案。
創建數據源
在進行數據同步任務開發時,您需要在DataWorks上創建一個對應的數據源,操作流程請參見創建并管理數據源,詳細的配置參數解釋可在配置界面查看對應參數的文案提示。
下面對Doris數據源的幾個配置項進行說明:
JdbcUrl:請填寫JDBC連接串,包含IP、端口號、數據庫和連接參數。支持公網IP和私網IP,如果使用公網IP,請確保數據集成資源組能夠正常訪問Doris所在的主機。
FE endpoint:請填寫FE節點的IP和端口。如果您的集群中有多個FE節點,可以配置多個FE節點的IP和端口,每個IP和端口以逗號分隔,例如
ip1:port1,ip2:port2
。在測試連通性時,會對所有的FE endpoint做連通性測試。用戶名:請填寫Doris數據庫的用戶名。
密碼:請填寫Doris數據庫對應用戶的密碼。
數據同步任務開發
數據同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過向導模式配置離線同步任務、通過腳本模式配置離線同步任務。
腳本模式配置的全量參數和腳本Demo請參見下文的附錄:腳本Demo與參數說明。
附錄:腳本Demo與參數說明
離線任務腳本配置方式
如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統一的腳本格式要求,在任務腳本中編寫相應的參數,詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數據源的參數配置詳情。
Reader腳本Demo
{
"type": "job",
"version": "2.0",//版本號。
"steps": [
{
"stepType": "doris",//插件名。
"parameter": {
"column": [//列名。
"id"
],
"connection": [
{
"querySql": [
"select a,b from join1 c join join2 d on c.id = d.id;"
],
"datasource": ""http://數據源名稱。
}
],
"where": "",//過濾條件。
"splitPk": "",//切分鍵。
"encoding": "UTF-8"http://編碼格式。
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"http://錯誤記錄數。
},
"speed": {
"throttle": true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
"concurrent": 1,//作業并發數。
"mbps": "12"http://限流,此處1mbps = 1MB/s。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Reader腳本參數
腳本參數名 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須與添加的數據源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱。一個數據集成任務只能從一張表中讀取數據。 table用于配置范圍的高級用法示例如下:
說明 任務會讀取匹配到的所有表,具體讀取這些表中column配置項指定的列。如果表不存在,或者讀取的列不存在,會導致任務失敗。 | 是 | 無 |
column | 所配置的表中需要同步的列名集合,使用JSON的數組描述字段信息 。默認使用所有列配置,例如
| 是 | 無 |
splitPk | Doris Reader進行數據抽取時,如果指定splitPk,表示您希望使用splitPk代表的字段進行數據分片,數據同步因此會啟動并發任務進行數據同步,提高數據同步的效能。
| 否 | 無 |
where | 篩選條件,在實際業務場景中,往往會選擇當天的數據進行同步,將where條件指定為
| 否 | 無 |
querySql(高級模式,向導模式不支持此參數的配置) | 在部分業務場景中,where配置項不足以描述所篩選的條件,您可以通過該配置項來自定義篩選SQL。配置該項后,數據同步系統會忽略tables、columns和splitPk配置項,直接使用該項配置的內容對數據進行篩選。例如,需要進行多表join后同步數據,使用 說明 querySql需要區分大小寫,例如,寫為querysql會不生效。 | 否 | 無 |
Writer腳本Demo
{
"stepType": "doris",//插件名。
"parameter":
{
"postSql"://執行數據同步任務之后率先執行的SQL語句。
[],
"preSql":
[],//執行數據同步任務之前率先執行的SQL語句。
"datasource":"doris_datasource",//數據源名。
"table": "doris_table_name",//表名。
"column":
[
"id",
"table_id",
"table_no",
"table_name",
"table_status"
],
"loadProps":{
"column_separator": "\\x01",//指定CSV格式的列分隔符
"line_delimiter": "\\x02"http://指定CSV格式的行分隔符
}
},
"name": "Writer",
"category": "writer"
}
Writer腳本參數
參數 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須與添加的數據源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱。 | 是 | 無 |
column | 目標表需要寫入數據的字段,字段之間用英文逗號分隔。例如 | 是 | 無 |
preSql | 執行數據同步任務之前率先執行的SQL語句。目前向導模式僅允許執行一條SQL語句,腳本模式可以支持多條SQL語句,例如,執行前清空表中的舊數據。 | 否 | 無 |
postSql | 執行數據同步任務之后執行的SQL語句。目前向導模式僅允許執行一條SQL語句,腳本模式可以支持多條SQL語句,例如,加上某個時間戳。 | 否 | 無 |
maxBatchRows | 每批次導入數據的最大行數,與batchSize共同控制每批次的導入數量。每批次數據達到兩個閾值之一,即開始導入這一批次的數據。 | 否 | 500000 |
batchSize | 每批次導入數據的最大數據量,與maxBatchRows共同控制每批次的導入數量。每批次數據達到兩個閾值之一,即開始導入這一批次的數據。 | 否 | 104857600 |
maxRetries | 每批次導入數據失敗后的重試次數。 | 否 | 3 |
labelPrefix | 每批次上傳文件的 label 前綴。最終的label將有 | 否 | datax_doris_writer_ |
loadProps | StreamLoad的請求參數,主要用于配置導入的數據格式。默認以CSV格式導入。如果loadProps沒有配置,則采用默認的CSV格式,以
如果您需要指定為JSON格式導入,則配置如下所示。
| 否 | 無 |
聚合類型腳本(Doris Writer寫入聚合類型)
Doris Writer支持寫入聚合類型,但是需要在腳本模式中做額外的配置。如下所示。
例如,對于如下一張Doris的表,其中,uuid是bitmap類型(聚合類型)、sex是HLL類型(聚合類型)。
CREATE TABLE `example_table_1` (
`user_id` int(11) NULL,
`date` varchar(10) NULL DEFAULT "10.5",
`city` varchar(10) NULL,
`uuid` bitmap BITMAP_UNION NULL, -- 聚合類型
`sex` HLL HLL_UNION -- 聚合類型
) ENGINE=OLAP AGGREGATE KEY(`user_id`, `date`,`city`)
COMMENT 'OLAP' DISTRIBUTED BY HASH(`user_id`) BUCKETS 32
往表中插入原始數據:
user_id,date,city,uuid,sex
0,T0S4Pb,abc,43,'54'
1,T0S4Pd,fsd,34,'54'
2,T0S4Pb,fa3,53,'64'
4,T0S4Pb,fwe,87,'64'
5,T0S4Pb,gbr,90,'56'
2,iY3GiHkLF,234,100,'54'
通過Doris Writer寫入聚合類型時,不僅需要在writer.parameter.column中指定該列,還需要在writer.parameter.loadProps.columns中配置聚合函數。例如,為uuid使用聚合函數bitmap_hash,為sex使用聚合函數hll_hash。
腳本模式示例:
{
"stepType": "doris",//插件名。
"writer":
{
"parameter":
{
"column":
[
"user_id",
"date",
"city",
"uuid",// 聚合類型bitmap
"sex"http:// 聚合類型HLL
],
"loadProps":
{
"format": "csv",
"column_separator": "\\x01",
"line_delimiter": "\\x02",
"columns": "user_id,date,city,k1,uuid=bitmap_hash(k1),k2,sex=hll_hash(k2)"http:// 需要指定聚合函數
},
"postSql":
[
"select count(1) from example_tbl_3"
],
"preSql":
[],
"datasource":"doris_datasource",//數據源名。
"table": "doris_table_name",//表名。
}
"name": "Writer",
"category": "writer"
}
}