ApsaraDB for SelectDB結合OSSObject Storage Service提供了內網高速匯入功能,且單次匯入資料量可達百GB層級。本文介紹如何通過OSS Load匯入資料至雲資料庫 SelectDB 版執行個體中。
前提條件
已擷取AccessKey資訊。具體操作,請參見建立AccessKey。
已開通OSS服務,並建立與ApsaraDB for SelectDB執行個體位於相同地區的儲存空間(Bucket)。具體操作,請參見開通OSS服務和建立儲存空間。
請確保OSS儲存空間(Bucket)與ApsaraDB for SelectDB執行個體在同一地區,並使用阿里雲VPC網路訪問OSS。
匯入文法
LOAD LABEL load_label
(
data_desc1[, data_desc2, ...]
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "REGION",
"AWS_ENDPOINT" = "ENDPOINT",
"AWS_ACCESS_KEY" = "AccessKey ID",
"AWS_SECRET_KEY"="AccessKey Secret"
)
PROPERTIES
(
"key1"="value1", ...
);雲資料庫 SelectDB 版支援從所有相容AWS S3協議的Object Storage Service系統中匯入資料,因此匯入文法中採用了AWS、S3等關鍵詞。
參數說明
data_desc1用於描述一組需要匯入的檔案,其完整定義如下。
[MERGE|APPEND|DELETE]
DATA INFILE
(
"file_path1"[, file_path2, ...]
)
[NEGATIVE]
INTO TABLE `table_name`
[PARTITION (p1, p2, ...)]
[COLUMNS TERMINATED BY "column_separator"]
[FORMAT AS "file_type"]
[(column_list)]
[COLUMNS FROM PATH AS (c1, c2, ...)]
[PRECEDING FILTER predicate]
[SET (column_mapping)]
[WHERE predicate]
[DELETE ON expr]
[ORDER BY source_sequence]
[PROPERTIES ("key1"="value1", ...)]參數名稱 | 參數說明 |
| 資料合併類型,預設為 |
| 指定需要匯入的檔案路徑。 可以是多個,可以使用萬用字元。路徑最終必須匹配到檔案,如果只匹配到目錄則匯入會失敗。 |
| 本次匯入為一批”負“匯入。這種方式僅針對具有整型SUM彙總類型的彙總資料表。該方式會將匯入資料中,SUM彙總列對應的整型數值取反。主要用於沖抵之前置入錯誤的資料。 |
| 指定僅匯入表的某些分區,不在分區範圍內的資料將被忽略。 |
| 指定資料行分隔符號。僅在 |
| 指定檔案類型,支援 |
| 用於指定原始檔案中的列順序。詳細資料,請參見資料轉換。 |
| 指定從匯入檔案路徑中抽取的列。 |
| 前置過濾條件。資料首先根據 |
| 指定列的轉換函式。 |
| 根據條件對匯入的資料進行過濾。詳細資料,請參見資料轉換。 |
| 需配合 |
| 僅針對Unique Key模型的表。用於指定匯入資料中表示Sequence Col的列。主要用於匯入時保證資料順序。 |
| 指定匯入的format的一些參數。如匯入的檔案是 |
雲端儲存體服務配置參數說明如下。
參數名稱 | 參數說明 |
| Object Storage Service的服務提供者,固定為OSS。 |
| 訪問OSS資料的地區。 |
| 訪問OSS資料的 重要 請確保OSS儲存空間(Bucket)與您的ApsaraDB for SelectDB執行個體在同一地區。 |
| 訪問OSS資料的 |
| 訪問OSS資料的 |
PROPERTIES的常用參數定義如下。
參數名稱 | 參數說明 |
| 匯入逾時時間,單位:秒,預設為 |
| 最大容忍可過濾(資料不規範等原因)的資料比例。預設為 |
| 匯入記憶體限制,單位:Byte,預設為 |
| 是否對資料進行嚴格限制,預設為 |
| 指定某些受時區影響的函數的時區,如 |
| 匯入並發度,預設為 |
| 用於設定發送批處理資料的並行度,如果並行度的值超過BE配置中的 |
| 是否只匯入資料到對應分區的一個tablet,預設值為 |
使用樣本
建立待匯入的SelectDB資料表,樣本如下。
CREATE TABLE test_table ( id int, name varchar(50), age int, address varchar(50), url varchar(500) ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1");建立待匯入的檔案
test_file.txt,樣本如下。1,yang,32,shanghai,http://example.com 2,wang,22,beijing,http://example.com 3,xiao,23,shenzhen,http://example.com 4,jess,45,hangzhou,http://example.com 5,jack,14,shanghai,http://example.com 6,tomy,25,hangzhou,http://example.com 7,lucy,45,shanghai,http://example.com 8,tengyin,26,shanghai,http://example.com 9,wangli,27,shenzhen,http://example.com 10,xiaohua,37,shanghai,http://example.com通過以下方式進行OSS Load,樣本如下。
LOAD LABEL test_db.test_label_1 ( DATA INFILE("s3://your_bucket_name/test_file.txt") INTO TABLE test_table COLUMNS TERMINATED BY "," ) WITH S3 ( "AWS_PROVIDER" = "OSS", "AWS_REGION" = "oss-cn-beijing", "AWS_ENDPOINT" = "oss-cn-beijing-internal.aliyuncs.com", "AWS_ACCESS_KEY" = "<your_access_key>", "AWS_SECRET_KEY"="<your_secret_key>" ) PROPERTIES ( "timeout" = "3600" );說明Object Storage Service的路徑固定以“s3://”開頭。
取消匯入
當OSS Load作業狀態不為CANCELLED或FINISHED時,可以手動取消匯入。取消時需要指定待取消匯入任務的Label。匯入任務取消後,已寫入的資料也會復原,不會生效。
文法
CANCEL LOAD
[FROM db_name]
WHERE [LABEL = "load_label" | LABEL like "label_pattern"];參數說明
參數名稱 | 參數說明 |
| 資料庫名稱。不指定的時使用當前預設資料庫。 |
| 匯入任務的 |
使用樣本
撤銷資料庫
example_db上,Label為example_db_test_load_label的匯入作業。CANCEL LOAD FROM example_db WHERE LABEL = "example_db_test_load_label";撤銷資料庫example_db上,所有包含
example_的匯入作業。CANCEL LOAD FROM example_db WHERE LABEL like "example_";
查看匯入
OSS Load是一個非同步匯入處理程序,語句執行成功僅代表匯入任務提交成功,並不代表資料匯入成功。匯入狀態需要通過SHOW LOAD命令查看。
文法
SHOW LOAD
[FROM db_name]
[
WHERE
[LABEL [ = "your_label" | LIKE "label_matcher"]]
[STATE = ["PENDING"|"ETL"|"LOADING"|"FINISHED"|"CANCELLED"|]]
]
[ORDER BY ...]
[LIMIT limit][OFFSET offset];參數說明
參數名稱 | 參數說明 |
| 資料庫名稱。不指定的場合使用當前預設資料庫。 |
| 匯入任務的 |
| 匯入狀態。只查看指定狀態的匯入任務。 |
| 指定排序依據。 |
| 顯示 |
| 從位移量offset開始顯示查詢結果。預設情況下位移量為 |
使用樣本
展示資料庫
example_db的匯入任務,Label中包含字串"2014_01_02",展示儲存時間最久的10個。SHOW LOAD FROM example_db WHERE LABEL LIKE "2014_01_02" LIMIT 10;展示資料庫
example_db的匯入任務,指定Label為"load_example_db_20140102"並按LoadStartTime降序排序。SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" ORDER BY LoadStartTime DESC;展示資料庫example_db的匯入任務,指定Label為"load_example_db_20140102",state為"loading"。
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" AND STATE = "loading";展示資料庫
example_db的匯入任務,按LoadStartTime降序排序,並從位移量5開始顯示10條查詢結果。SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC limit 5,10; SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC limit 10 offset 5;