通過表格存儲控制臺創建投遞任務,將表格存儲數據表中的數據投遞到OSS Bucket中存儲。
前提條件
已開通OSS服務且在表格存儲實例所在地域創建Bucket,詳情請參見開通OSS服務。
數據湖投遞支持投遞到和表格存儲相同地域的任意OSS Bucket中。如需投遞到其他數倉存儲(例如MaxCompute),請提交工單申請。
注意事項
目前支持數據湖投遞功能的地域包括華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)。
數據湖投遞不支持同步刪除操作,表格存儲中的刪除操作在數據投遞時會被忽略,已投遞到OSS中的數據不會被刪除。
新建數據投遞任務時存在最多1分鐘的初始化時間。
數據同步存在延遲,寫入速率穩定時,延遲在3分鐘內。數據同步的P99延遲在10分鐘內。
說明P99延遲表示過去10秒內最慢的1%的請求的平均延遲。
創建投遞任務
進入實例管理頁面。
登錄表格存儲控制臺。
在頁面上方選擇資源組和地域,單擊實例名稱或者實例操作列的實例管理。
在實例管理頁面,單擊數據湖投遞。
(可選)創建服務關聯角色AliyunServiceRoleForOTSDataDelivery。
首次配置數據湖投遞時,需要創建表格存儲服務關聯角色AliyunServiceRoleForOTSDataDelivery,該角色用于授權表格存儲服務寫入OSS Bucket的權限,具體操作,請參見表格存儲服務關聯角色。
說明關于服務關聯角色的更多信息,請參見服務關聯角色。
在數據湖投遞頁面,單擊數據湖投遞關聯角色說明。
在數據湖投遞服務關聯角色對話框,查看相關說明,單擊確認創建。
創建投遞任務。
在數據湖投遞頁面,單擊創建投遞任務。
在新建投遞任務對話框,配置投遞參數。
參數
說明
任務名稱
投遞任務名稱。
名稱只能包含英文小寫字母(a~z)、數字和短橫線(-),開頭和結尾必須為英文小寫字母或數字,且長度為3~16字符。
目標region
表格存儲實例和OSS Bucket所在地域。
目標Table
表格存儲數據表名稱。
目標OSS Bucket
OSS Bucket名稱。
重要該OSS Bucket必須已存在且與表格存儲實例在同一地域。
投遞路徑(前綴)
OSS Bucket中的目錄前綴,將表格存儲的數據投遞到該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開始遞增。
按時間分區
數據投遞支持提取數據寫入表格存儲的時間,寫入時間$yyyy(年份數字)、$MM(兩位月份數字)、$dd(兩位日期數字)、$HH(兩位小時數字)、$mm(兩位分鐘數字)轉化后可以作為投遞到OSS Bucket中的目錄前綴。
OSS中的文件大小不宜過小,推薦4 MB或者更大,同時計算分析引擎加載OSS時,分區越多,加載事務的執行時間也會越長,因此時間分區粒度不宜過細,在多數實時寫入流量場景中,宜按天或者按小時分區,不需要到分鐘的分區粒度。
以2020年08月31日16點03分寫入表格存儲的數據投遞為例,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 | 表格存儲數據類型 |
Boolean | Boolean |
Int64 | Int64 |
Double | Double |
UTF8 | String |
錯誤處理
錯誤信息 | 錯誤原因 | 處理方法 |
UnAuthorized | 沒有權限。 | 確認RAM中的服務關聯角色AliyunServiceRoleForOTSDataDelivery是否存在。 當服務關聯角色不存在時需要重新新建投遞任務觸發表格存儲為用戶創建該角色。 |
InvalidOssBucket | OSS Bucket不存在。 |
當OSS Bucket重新創建后,所有數據會重試寫入OSS Bucket,投遞進度也會正常更新。 |