您可以通過PolarDB提供的OSSOUTFILE功能,將資料庫內的資料表匯出為CSV檔案,並儲存在OSS引擎上。
前提條件
您的PolarDB叢集需滿足如下條件之一:
核心版本為MySQL 8.0.1,且修訂版本為8.0.1.1.30及以上。
核心版本為MySQL 8.0.2,且修訂版本為8.0.2.2.8及以上。
如何確認叢集版本,詳情請參見查詢版本號碼。
注意事項
暫不支援通過DMS串連PolarDB將資料檔案匯出至OSS引擎,相應的報錯為:
Can not issue executeUpdate() or executeLargeUpdate() for SELECTs您可以通過用戶端或者命令列串連到PolarDB後進行匯出。詳情請參見串連資料庫叢集(中文下線重新導向)。
建議您在唯讀節點執行匯出任務。您可以在SQL語句中添加HINT文法
/*FORCE_SLAVE*/或直接連接唯讀節點進行匯出。
參數說明
參數 | 說明 |
loose_oss_outfile_buffer_size | 每個OSSOUTFILE線程可以佔用的記憶體大小。取值範圍:102400~536870912。預設值為134217728。單位:Byte。一般來說,佔用記憶體越大,匯出速度越快。 |
loose_max_oss_outfile_threads | PolarDB可以同時啟動的OSSOUTFILE線程數量。取值範圍:1~100。預設值為1。單位:個。 您可以使用 說明 叢集版本為PolarDB MySQL版8.0.1.1.38及以上的版本時,該參數已失效。 |
使用OSSOUTFILE功能匯出CSV格式的資料檔案到OSS引擎過程中佔用叢集最大的總記憶體為:
loose_max_oss_outfile_threads * loose_oss_outfile_buffer_size盡量不要使OSSOUTFILE功能佔用的總記憶體超過節點記憶體的5%,否則可能會影響當前節點上的其他業務。
使用說明
文法
SELECT * FROM table_name INTO OSSOUTFILE 'outfile_path' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';COLUMNS TERMINATED BY:表示每個欄位之間的分隔字元。OPTIONALLY ENCLOSED BY:表示欄位兩端的標識符,加上OPTIONALLY後,只會在字串類型的欄位兩端加標識符,否則會在所有類型的欄位兩端加標識符。NULL_MARKER BY:表示NULL值輸出到文本的字元。NULL的輸出值有如下三種定義方式,優先順序從高到低:NULL_MARKER:直接定義NULL的輸出值,
NULL_MARKER可以定義為任意值,優先順序最高。ESCAPED BY:只能寫單字元,NULL的輸出值為字元+N。例如,
ESCAPED BY '\',則NULL會被輸出為\N,優先順序第二。NULL(預設):如果以上兩者都沒有,則預設NULL的輸出值為字串“NULL”,優先順序最低。NULL的兩端沒有
ENCLOSED標識符。
LINES TERMINATED BY:每一行之間的分隔字元。
詳情請參見MySQL官方文檔。
參數說明
參數 | 說明 |
outfile_path | 主要標識輸出到OSS的檔案位置,包含如下幾部分內容:
上述三者之間用 |
table_name | 表名稱。 |
操作步驟
建立OSS Server
CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS ( EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou-internal.aliyuncs.com", "oss_bucket": "polardb", "oss_access_key_id": "*******", "oss_access_key_secret": "********", "oss_prefix":"B_outfile"}'); 此處以高版本建立OSS Server語句為例。實際操作時,請根據您叢集的核心版本進行調整。
oss_endpoint需為內網地址,規則格式為oss-{xxx}-internal.aliyuncs.com。
匯出至OSS
以上傳的OSS檔案oss://polardb/B_outfile/tpch/1t/parallel-lineitem.CSV為例:
bucket名稱:polardb。
路徑及檔案名稱:
B_outfile/tpch/1t/parallel-lineitem.CSV為例。
SELECT * FROM lineitem INTO OSSOUTFILE 'outserver/tpch/1t/parallel-lineitem.CSV' COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' NULL_MARKER BY 'NULL' LINES TERMINATED BY '\n';查詢任務佔用記憶體數與線程數
若您的叢集核心版本為8.0.1.1.38及以上版本時,您可以通過以下命令查看當前置出任務即時佔用的總記憶體數和匯流排程數。
查看匯出任務即時佔用的總記憶體數,單位為位元組。
SHOW STATUS LIKE "%Oss_outfile_memory_used%";查看匯出任務即時佔用的匯流排程數。
SHOW STATUS LIKE "%Oss_outfile_threads_running%";
當您使用的是叢集地址執行匯出任務時,必須保證SHOW STATUS命令和匯出命令在同一個節點執行,才能查詢當前節點中匯出命令佔用的記憶體資源資訊。