通過Table Store控制台建立投遞任務,將Table Store資料表中的資料投遞到OSS Bucket中儲存。
前提條件
已開通OSS服務且在Table Store執行個體所在地區建立Bucket,詳情請參見開通OSS服務。
資料湖投遞支援投遞到和Table Store相同地區的任意OSS Bucket中。如需投遞到其他數倉儲存(例如MaxCompute),請提交工單申請。
注意事項
目前支援資料湖投遞功能的地區包括華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)。
資料湖投遞不支援同步刪除操作,Table Store中的刪除操作在資料投遞時會被忽略,已投遞到OSS中的資料不會被刪除。
建立資料投遞任務時存在最多1分鐘的初始化時間。
資料同步存在延遲,寫入速率穩定時,延遲在3分鐘內。資料同步的P99延遲在10分鐘內。
說明P99延遲表示過去10秒內最慢的1%的請求的平均延遲。
建立投遞任務
進入執行個體管理頁面。
在頁面上方選擇資源群組和地區,單擊執行個體名稱或者執行個體操作列的執行個體管理。
在執行個體管理頁面,單擊資料湖投遞。
(可選)建立服務關聯角色AliyunServiceRoleForOTSDataDelivery。
首次配置資料湖投遞時,需要建立Table Store服務關聯角色AliyunServiceRoleForOTSDataDelivery,該角色用於授權Table Store服務寫入OSS Bucket的許可權,具體操作,請參見Table Store服務關聯角色。
說明關於服務關聯角色的更多資訊,請參見服務關聯角色。
在資料湖投遞頁面,單擊資料湖投遞關聯角色說明。
在資料湖投遞服務關聯角色對話方塊,查看相關說明,單擊確認建立。
建立投遞任務。
在資料湖投遞頁面,單擊建立投遞任務。
在建立投遞任務對話方塊,配置投遞參數。
參數
說明
任務名稱
投遞任務名稱。
名稱只能包含英文小寫字母(a~z)、數字和虛線(-),開頭和結尾必須為英文小寫字母或數字,且長度為3~16字元。
目標region
Table Store執行個體和OSS Bucket所在地區。
目標Table
Table Store資料表名稱。
目標OSS Bucket
OSS Bucket名稱。
重要該OSS Bucket必須已存在且與Table Store執行個體在同一地區。
投遞路徑(首碼)
OSS Bucket中的目錄首碼,將Table Store的資料投遞到該OSS Bucket目錄中。投遞路徑中支援引用$yyyy、$MM、$dd、$HH、$mm五種時間變數。更多資訊,請參見按時間分區。
當投遞路徑中引用時間變數時,可以按資料的寫入時間動態產生OSS目錄,實現hive partition naming style的資料時間分區,從而按照時間分區組織OSS中的檔案分布。
當投遞路徑中不引用時間變數時,所有檔案會被投遞到固定的OSS首碼目錄中。
投遞類型
投遞任務的類型,包括如下選項:
增量:只同步增量資料。
全量:一次性全表掃描資料同步。
全量&增量:全量資料同步完成後,再同步增量資料
其中增量資料同步時可以擷取最新投遞時間和瞭解當前投遞狀態。
投遞檔案格式
投遞的資料以Parquet列存格式儲存,資料湖投遞預設使用PLAIN編碼方式,PLAIN編碼方式支援任意類型資料。
Schema產生方式
指定需要投遞的資料列,可以選擇任意欄位以任意順序、名稱寫入列存檔案,OSS的列存資料會按Schema數組中的資料列先後順序分布。
根據選擇的Schema產生方式配置投遞Schema。
當Schema產生方式配置為手動錄入時,需要手動設定投遞欄位的源表欄位、目標欄位名和目標欄位類型。
當Schema產生方式配置為自動產生時,系統會自動匹配識別投遞欄位。
重要投遞資料的欄位類型必須與資料來源的欄位類型匹配,否則會作為髒資料丟棄。關於欄位類型映射的更多資訊,請參見資料格式映射。
配置投遞Schema時,可以執行如下操作:
單擊新增投遞欄位,新增投遞欄位。
在操作列單擊表徵圖或表徵圖,調整投遞欄位的順序。
在操作列單擊表徵圖,刪除投遞欄位。
Schema配置
單擊確定。
在建表語句對話方塊,您可以查看自動產生的EMR外表的建表語句,直接複製建表語句可以在EMR中快速建立外表,便於訪問OSS中的資料。
建立投遞任務後,您可以執行如下操作:
查看OSS資料
投遞任務初始化完成且有資料投遞後,可以通過OSS的控制台、API或者SDK,計算分析引擎(例如EMR等)查看投遞到OSS的資料,具體操作,請參見檔案概覽。
OSS Object的地址格式如下所示。
oss://BucketName/TaskPrefix/TaskName_ConcurrentID_TaskPrefix__SequenceID
其中BucketName為Bucket名稱,TaskPrefix為目錄首碼,TaskName為投遞任務名稱,ConcurrentID為投遞系統內部的並發編號,從0開始流量增大時任務並發會自動增加,TaskPrefix為任務的首碼資訊,SequenceID為投遞的檔案編號,從1開始遞增。
按時間分區
資料投遞支援提取資料寫入Table Store的時間,寫入時間$yyyy(年份數字)、$MM(兩位月份數字)、$dd(兩位日期數字)、$HH(兩位小時數字)、$mm(兩位分鐘數字)轉化後可以作為投遞到OSS Bucket中的目錄首碼。
OSS中的檔案大小不宜過小,推薦4 MB或者更大,同時計算分析引擎載入OSS時,分區越多,載入事務的執行時間也會越長,因此時間分區粒度不宜過細,在多數即時寫入流量情境中,宜按天或者按小時分區,不需要到分鐘的分區粒度。
以2020年08月31日16點03分寫入Table Store的資料投遞為例,OSS中該日誌的第一個資料檔案目錄,根據投遞首碼配置,不同的檔案路徑請參見下表。
OSS Bucket | TaskName | 投遞首碼 | OSS實際檔案路徑 |
myBucket | testTask | myPrefix | oss://myBucket/myPrefix/testTask_0_myPrefix__1 |
myBucket | testTaskTimeParitioned | myPrefix/$yyyy/$MM/$dd/$HH/$mm | oss://myBucket/myPrefix/2020/08/31/16/03/testTaskTimeParitioned_0_myPrefix_2020_08_31_16_03__1 |
myBucket | testTaskTimeParitionedHiveNamingStyle | myPrefix/year=$yyyy/month=$MM/day=$dd | oss://myBucket/myPrefix/year=2020/month=08/day=31/testTaskTimeParitionedHiveNamingStyle_0_myPrefix_year=2020_month=08 |
myBucket | testTaskDs | ds=$yyyy$MM$dd | oss://myBucket/ds=20200831/testTaskDs_0_ds=20200831__0 |
資料格式映射
Parquet Logical Type | Table Store資料類型 |
Boolean | Boolean |
Int64 | Int64 |
Double | Double |
UTF8 | String |
錯誤處理
錯誤資訊 | 錯誤原因 | 處理方法 |
UnAuthorized | 沒有許可權。 | 確認RAM中的服務關聯角色AliyunServiceRoleForOTSDataDelivery是否存在。 當服務關聯角色不存在時需要重新建立投遞任務觸發Table Store為使用者建立該角色。 |
InvalidOssBucket | OSS Bucket不存在。 |
當OSS Bucket重新建立後,所有資料會重試寫入OSS Bucket,投遞進度也會正常更新。 |