全部產品
Search
文件中心

AnalyticDB:匯入與匯出

更新時間:Jul 25, 2025

本文介紹AnalyticDB MySQL中匯入匯出的常見問題及解決方案。

說明

當常見問題情境中未明確產品系列時,表明該問題僅適用於AnalyticDB for MySQL數倉版

常見問題概覽

如何停止非同步匯入匯出任務?

登入雲原生資料倉儲AnalyticDB MySQL控制台,在診斷優化頁的導入/導出任務頁簽下找到目標非同步任務,查看該非同步任務的異步任務名,然後運行CANCEL JOB "${非同步任務名}"語句取消該非同步任務。更多關於非同步匯入匯出任務的詳情,請參見非同步提交匯入任務

如何使用SQL查看當前庫裡RUNNING的匯入任務?

使用如下SQL進行查詢:

SELECT * FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where status = "RUNNING"

通過JDBC使用程式匯入資料至AnalyticDB for MySQL叢集時,為什麼匯入效能不佳?

  • 保證資料來源的資料生產速度足夠大,如果資料來源來自其他系統或檔案,排查用戶端是否有輸出瓶頸。

  • 保證資料處理速度,排查資料生產消費是否同步,保證有足夠的資料等待匯入AnalyticDB for MySQL

  • 保證用戶端機器負載,檢查CPU使用率或磁碟IO使用率等系統資源是否充足。

湖倉版叢集的資料接入功能(APS),是否會單獨收取鏈路費用?

不會收取鏈路的費用。但是APS任務需要運行在叢集的資源群組上,佔用資源並消耗資源費用。

通過建立OSS外表匯入或匯出資料時,應該選擇內網地址還是公網地址?

建立OSS外表時需要選擇內網地址,因為AnalyticDB for MySQL的OSS外表,後台節點是通過內網而非公網訪問OSS。

如何解決建立MaxCompute外表時,出現endpoint unreachable報錯?

原因:建立MaxCompute外表時,指定的endpoint無法訪問,會出現endpoint unreachable報錯。

解決方案:請開啟ENI網路,再將建表語句中的endpoint替換為執行個體所在地區對應的VPC網路Endpoint,重新執行建表語句。

重要
  • 開啟和關閉ENI網路會導致資料庫連接中斷大約2分鐘,無法讀寫。請謹慎評估影響後再開啟或關閉ENI網路。

  • 登入雲原生資料倉儲AnalyticDB MySQL控制台,在叢集管理 > 叢集資訊網路資訊地區,開啟ENI網路開關。

如何解決建立MaxCompute外表時,出現Odps external table endpoint should not contain special character報錯?

原因:建立MaxCompute外表時,endpoint配置錯誤。

解決方案:請將建表語句中的endpoint替換為執行個體所在地區對應的VPC網路Endpoint,重新執行建表語句。

如何解決建立MaxCompute外表時,出現Project not found - 'xxx'報錯?

  • 原因1:MaxCompute中不存在該專案,或專案名稱拼字錯誤。

    解決方案:修改建表語句中對應的專案名稱,再重新建立外表。

  • 原因2:MaxCompute中存在該專案,但是與AnalyticDB for MySQL叢集不在同一地區。

    解決方案:需確保AnalyticDB for MySQL叢集與MaxCompute專案在同一地區,再重新建立外表。

如何解決匯入MaxCompute資料時,出現“復原此次寫入,採用每次寫入一行方式提交”報錯?

原因:由於AnalyticDB MySQL串連層限制,使用DataX匯入資料時可能會出現上述報錯。

解決方案:請修改JDBC串連串,添加rewriteBatchedStatements=false參數後重新匯入資料

如何解決匯入MaxCompute資料時,出現Query Exceeded Maximum Time Limit報錯?

原因:因為MaxCompute表比較大,匯入資料消耗的時間長,超過了AnalyticDB MySQL中INSERT操作的時間限制。

解決方案:修改INSERT_SELECT_TIMEOUT參數後重新匯入資料。具體操作,請參見Config和Hint配置參數

如何解決匯入MaxCompute資料時,出現cant submit job for job queue is full報錯?

原因:AnalyticDB for MySQL叢集同時執行的非同步任務超過了限制。您可以提交工單,聯絡支援人員查詢叢集同時執行非同步任務的數量限制。

解決方案:

  • 您需等待已提交的非同步任務執行完成後,再重新提交非同步匯入任務。如何查詢非同步任務狀態,請參見非同步提交匯入任務

  • 您可以提交工單,聯絡支援人員修改叢集同時執行非同步任務的數量限制。

如何解決匯入MaxCompute資料時,出現Query execution error: odps partition num: 191 > 192, specific odps partitions報錯?

原因:AnalyticDB for MySQL叢集同時匯入的分區數超過了限制。

解決方案:根據MaxCompute表的具體分區數,在SQL語句前添加Hint /*RC_INSERT_ODPS_MAX_PARTITION_NUM=<value>*/,調整分區數的限制。

如何解決查詢MaxCompute資料時,出現ODPS Table XXX should be a partitioned table and has at least one partition in max_pt() function報錯?

原因:MaxCompute外表為非分區外表,MAX_PT函數報錯。

解決方案:需確保MaxCompute表為分區表,且至少存在一個分區。然後重新建立MaxCompute外表並使用MAX_PT函數查詢外表資料。

如何解決查詢MaxCompute資料時,出現ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist報錯?

原因:MaxCompute外表沒有分區。

解決方案:需確保MaxCompute表為分區表,且至少存在一個分區。然後重新建立MaxCompute外表並查詢外表資料。

如何解決查詢MaxCompute資料時,出現Receive error response with code 500報錯?

原因:AnalyticDB for MySQL使用Native引擎執行SQL語句,但Native引擎不支援MaxCompute外表。

解決方案:在SQL語句前添加Hint /*native_engine_task_enabled=false*/,關閉Native引擎,使用Java引擎執行SQL語句。

如何解決查詢MaxCompute資料時,出現Query execution error報錯?

  • 原因1:MaxCompute的許可權配置錯誤,AccessKey不能正確讀取MaxCompute表。

    解決方案:修改MaxCompute的讀寫權限,再重新查詢資料。

  • 原因2:AnalyticDB for MySQL的表結構、列名與MaxCompute不一致。

    解決方案:在AnalyticDB MySQL中重新建立與MaxCompute表結構、列名一致的外表,再重新查詢資料。

  • 原因3:MaxCompute對應的分區不存在。

    解決方案:修改查詢資料語句中指定的MaxCompute分區,再重新查詢資料。

  • 原因4:MaxCompute小檔案過多。

    解決方案:開啟MaxCompute的合并小檔案功能,再重新查詢資料,樣本語句如下。更多關於MaxCompute合并小檔案的資訊,請參見合并小檔案

    ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;

如何將MaxCompute中類型為array<string>的資料匯入至AnalyticDB MySQL叢集?

原因:MaxCompute外表不支援巢狀型別,無法直接將類型為array<string>的資料匯入至AnalyticDB MySQL。

解決方案:您可以將MaxCompute中的資料以Parquet的格式匯入至OSS,再通過AnalyticDB for MySQL讀取OSS中以Parquet格式儲存的資料。

如何最佳化MaxCompute匯入資料的速度?

  • 若儲存節點負載較低,您可以調整SQL_OUTPUT_BATCH_SIZE的取值後重新匯入資料。樣本語句如下:

    set adb_config SQL_OUTPUT_BATCH_SIZE = 6000;
  • 若MaxCompute分區過多,您可以將ENABLE_ODPS_MULTI_PARTITION_PART_MATCH的取值修改為false後重新匯入資料 。樣本語句如下:

    set adb_config ENABLE_ODPS_MULTI_PARTITION_PART_MATCH=false;

若仍有問題,請聯絡提交工單阿里雲支援人員。

為什麼使用INSERT OVERWRITE語句將AnalyticDB MySQL叢集中的資料匯出至MaxCompute外表時,資料沒有被覆蓋?

MaxCompute外表不支援資料覆蓋。

為什麼使用INSERT INTO SELECT語句向MaxCompute外表寫入資料時,會出現ErrorCode=SlotExceeded, ErrorMessage=Region: cn-hangzhou Project: XXX Slot Quota Exceeded報錯?

原因:向MaxCompute外表寫入資料時,寫入slot超過MaxCompute的限制。

解決方案:兩種方法任選一種即可。

  • 您可以使用獨享資料服務資源群組進行資料轉送,相較於公用Data Transmission Service資源群組,獨享Data Transmission Service資源群組有更多的slot額度。

  • INSERT INTO SELECT匯入任務的並發數預設為16,您可以在SQL語句前添加Hint /*TASK_WRITER_COUNT=<value>*/,降低並發數。其中value取值範圍為大於0的整數。

為什麼使用INSERT INTO SELECT語句向MaxCompute外表寫入資料時,會出現Catalog Service Failed. ErrorCode:202. ErrorMessage:ODPS-0110044: Flow control triggered - Request rejected by catalog server throttling, threshold 8.00, fallback or retry later報錯?

原因:向MaxCompute外表寫入資料時,如果涉及新增分區,將在MaxCompute側調用createPartition建立該分區。如果建立分區頻率過高,會觸發MaxCompute的流控機制,導致報錯。

解決辦法:檢查INSERT INTO SELECT匯入任務是否存在多個分區同時寫入的情況,若存在,請在SQL語句前添加Hint /*TASK_WRITER_COUNT=<value>*/,降低並發數。其中value取值範圍為大於0的整數。若不存在,請提交工單聯絡支援人員協助處理。

為什麼MaxCompute匯入資料的量與AnalyticDB MySQL叢集不一致?

原因:AnalyticDB MySQL會去掉主鍵重複的資料。

解決方案:請確認MaxCompute中是否存在主鍵重複的資料。

DTS同步資料至AnalyticDB MySQL叢集時,若源庫中存在AnalyticDB MySQL叢集不支援的資料類型會報錯嗎?

若源庫中存在AnalyticDB for MySQL不支援的資料類型(例如地理位置資料等類型),AnalyticDB for MySQL在進行結構初始化時會丟棄掉不支援資料類型的列。

支援的資料類型,請參見基礎資料類型複雜資料類型

DTS同步資料至AnalyticDB MySQL叢集時,是否支援修改源表中的欄位類型?

資料同步過程中,可以修改源表中的欄位類型,目前僅支援整數資料型別之間、浮點數據類型之間的列類型更改,並且只能將取值範圍小的資料類型更改為取值範圍大的資料類型,或者將單精確度資料類型更改為雙精確度資料類型。

  • 整數資料型別:支援Tinyint、Smallint、Int、Bigint間,小類型到大類型的更改,例如支援將Tinyint更改為Bigint,不支援將Bigint更改為Tinyint。

  • 浮點數據類型:支援將Float更改為Double類型,不支援將Double更改為Float類型。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決修改源表資料類型導致的報錯?

報錯:

  • ‘id' is LONG type, Can't change column type to DECIMAL
  • modify precision is not supported, col=id, type decimal, old=11, new=21

原因:詳細資料請參見DTS同步資料至AnalyticDB MySQL叢集時,是否支援修改源表中的欄位類型?

解決方案:

  • 非整庫同步:建議重新同步這張表(即先從同步對象中去掉,然後刪除目標庫的表,再把這張表加入到同步對象中),DTS會重新進行包括schema拉取的全量同步,這樣會跳過此類型的DDL。

  • 整庫同步:在AnalyticDB MySQL中建立一張表,表名要不同於報錯的表,表結構需要和源表的表結構一致,通過INSERT INTO SELECT將源表中的資料寫入建立表中,刪除報錯的表,然後通過Rename將新表更名為報錯的表名,重啟DTS任務即可。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決非法日期值寫入的報錯?

報錯:

Cannot parse "2013-05-00 00:00:00": Value 0 for dayOfMonth must be in the range [1,31]]

原因:AnalyticDB MySQL不支援非法日期值的寫入。

解決方案:

  • 任務處於全量初始化階段時,將源表的值修改為合法值即可(例如將上面的報錯值改為2013-05-01 00:00:00)。

  • 任務處於增量同步處理階段時,把這張表從同步對象中去掉,修改源表值為合法值,把表添加到同步對象中,然後重啟同步任務。

  • 整庫同步的增量同步處理階段時,請聯絡阿里雲支援人員開啟非法值寫入開關。開關開啟後,所有非法值的寫入會被轉為null。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決無主鍵表同步的報錯?

報錯:

DTS-077004: Record Replicator error. cause by [[17003,2020051513063717201600100703453067067] table not exist => xxx_table] 

原因:目前AnalyticDB MySQL不支援無主鍵表的同步。

解決方案:只會在整庫同步時才會發生,需要先判斷源庫是否為無主鍵表,如果是,請手動在目標庫建立表並且保證建立的表有主鍵,建表後重啟DTS任務即可。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決建表欄位預設值過長的報錯?

報錯:

default value is too long

解決方案:請提交工單聯絡阿里雲支援人員升級AnalyticDB MySQL叢集到最新版本。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決寫入單條記錄超過16 MB的報錯?

報錯:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (120468711 > 33554432). You can change this value on the server by setting the max_allowed_packet' variable.

解決方案:請提交工單聯絡阿里雲支援人員升級AnalyticDB MySQL叢集到最新版本。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決磁碟空間不足的報錯?

報錯:

disk is over flow

解決方案:刪除部分資料以釋放足夠的磁碟空間,或者聯絡阿里雲支援人員對AnalyticDB MySQL叢集進行擴容,保證磁碟空間足夠後再重啟DTS任務即可。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決缺少表或者缺少欄位的報錯?

報錯:

table not exist => t1

解決方案:先確認在DTS配置的時候是否選擇了所有DDL同步(比如建表語句、其他DDL語句等),如果沒有的話選中即可。

DTS同步資料至AnalyticDB MySQL叢集時,如何解決多表歸併欄位擷取不到值的情況?

報錯:

No value present 

原因:在多表歸併情境下,如果變更了多個源表中其中一個表的欄位(例如:新增欄位),會導致多個源表的欄位不一致,在將資料寫入到目標表時,出現上述報錯。

解決方案:請提交工單聯絡DTS支援人員處理。

DTS同步資料至AnalyticDB MySQL叢集時,如果源執行個體中的資料庫名、表名或者列名中含有劃線(-)會報錯嗎?

由於AnalyticDB for MySQL中不允許資料庫名、表名或者列名中含有劃線(-),為保證資料同步成功,系統會將中劃線(-)映射為底線(_)。

如果在資料同步過程中遇到其他因資料庫名、表名或者列名造成的同步失敗(例如表名中含有空格、中文等),請聯絡阿里雲支援人員。

說明

更多AnalyticDB for MySQL的使用限制,請參見使用限制

DTS同步資料至AnalyticDB MySQL叢集時,如何排查AnalyticDB MySQL叢集中的資料延遲問題?

  • DTS同步鏈路規格預設為medium模式,源庫的資料寫入量過大時,若想達到規格同步效能上限,需要升級執行個體配置

  • 無主鍵表的主鍵選擇可能會導致熱點行更新,而熱點行更新速度很慢,可以向AnalyticDB for MySQL提工單解決該問題。

  • AnalyticDB for MySQL叢集的寫入效能已達到瓶頸,需要升級AnalyticDB for MySQL規格。

DataWorks匯入資料至AnalyticDB MySQL叢集時,為什麼寫入TPS不滿足預期?

當用戶端匯入壓力不足時,會導致叢集CPU使用率、磁碟IO使用率及寫入回應時間處於較低水位。資料庫伺服器端雖然能夠及時消費用戶端發送的資料,但由於總發送量較小,導致寫入TPS不滿足預期。您可以調大單次匯入的批量插入條數及增加任務期望最大並發數,資料匯入效能會隨著匯入壓力的增加而線性增加。

DataWorks匯入資料至AnalyticDB MySQL叢集時,為什麼匯入的目標表存在資料扭曲?

當匯入的目標表存在資料扭曲時,叢集部分節點負載過高,影響匯入效能。此時,叢集CPU使用率、磁碟IO使用率處於較低水位,但寫入回應時間較高,同時您可以在診斷最佳化資料建模診斷頁面的傾斜診斷表中發現目標表。您可以重新設計表結構後再匯入資料,詳情請參見表結構設計

使用adb-import.sh匯入本機資料時,如何查驗用戶端或其所在伺服器負載是否存在瓶頸?

若用戶端存在瓶頸,將無法最大化壓測資料庫,您可以通過以下兩種方法查看用戶端或其所在伺服器負載是否存在瓶頸:

  • 通過登入雲原生資料倉儲AnalyticDB MySQL控制台,單擊左側導航的監控資訊診斷與最佳化來查驗用戶端自身以及所在伺服器負載是否存在瓶頸。

  • 通過以下常用命令來查驗用戶端自身以及所在伺服器負載是否存在瓶頸。

命令

說明

top

查看CPU使用率。

free

查看記憶體佔用。

vmstat 1 1000

查看綜合負載。

dstat -all --disk-utiliostat 1 1000

查看磁碟的讀頻寬和使用率。

jstat -gc <pid> 1000

查看匯入工具Java進程的記憶體回收(Garbage Collection,簡稱GC)詳情,如果GC頻繁,可以嘗試適當擴大JVM參數jvmopts中的堆記憶體大小,例如將其擴大到-Xmx16G -Xms16G

使用adb-import.sh匯入本機資料時,如何將匯入指令碼參數化?

如果確保匯入檔案的行資料行分隔符號一致,可修改匯入指令碼中的tableNamedataPath參數,通過傳入不同的表名和檔案路徑參數,實現一個指令碼匯入多個表的需求。

樣本如下:

tableName=$1
dataPath=$2

使用參數化的方式執行匯入。

# sh adb-import.sh table_name001 /path/table_001
# sh adb-import.sh table_name002 /path/table_002
# sh adb-import.sh table_name003 /path/table_003

使用adb-import.sh匯入本機資料時,如何將匯入程式放在後台運行?

您可以執行如下命令在後台運行匯入程式:

# nohup sh adb-import.sh &

匯入程式在後台開始運行後,您可以執行以下命令查看檢查日誌,如果列印異常資訊棧則說明匯入存在錯誤,需要根據異常資訊進行問題排查。命令如下:

# tail -f nohup.out

您還可以使用如下命令查看匯入進程是否仍正常執行:

# ps -ef|grep import

使用adb-import.sh匯入本機資料時,如何忽略匯入程式中的錯誤行?

匯入程式中的錯誤行可以分為如下兩類:

  • 執行SQL出錯。

    針對此類錯誤,您可以通過設定參數ignoreErrors=true來忽略錯誤行。此時會在執行結果中列印詳細的出錯檔案、起始行號(因設定了batchSize,錯誤行會在起始行號後的batchSize行內)以及執行出錯的SQL。

  • 檔案列數不符合預期。

    當檔案列數不符合預期時,系統會立即停止匯入該檔案並列印出錯誤資訊,但由於該錯誤是由於非法檔案導致的,因此並不會被忽略,您需要手動排查檔案的正確性。此類錯誤會列印如下錯誤資訊:

    [ERROR] 2021-03-22 00:46:40,444 [producer- /test2/data/lineitem.csv.split00.100-41] analyticdb.tool.ImportTool
    (ImportTool.java:591) -bad line found and stop import! 16, file = /test2/data/tpch100g/lineitem.csv.split00.100, rowCount = 7, current row = 3|123|179698|145|73200.15|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-
    23|NONE|AIR|ongside of the furiously brave acco|

使用adb-import.sh匯入本機資料時,如何縮小匯入失敗原因的排查範圍?

為協助更快的定位匯入失敗原因,您可以從如下幾個方面來縮小失敗原因的排查範圍:

  • 當匯入失敗時,AnalyticDB for MySQL匯入工具會列印錯誤記錄檔以及詳細的錯誤原因,預設會截斷SQL語句(最長支援1000個字元),若需要列印更全的SQL資訊,您可以使用如下命令將failureSqlPrintLengthLimit參數擴大至一個合理值(例如1500):

    printErrorSql=true
    failureSqlPrintLengthLimit=1500;
  • 由於SQL設定了batchSize,通常是上千行批量執行的SQL,不利於分辨錯誤行,您可以縮小batchSize參數(例如設定為10)以便於定位錯誤的行。參數修改命令如下:

    batchSize=10;
  • 如果檔案已進行了切分且已知錯誤的行所在的檔案分區,為了複現問題,可通過修改dataPath參數來匯入存在錯誤行的單個檔案,查看錯誤資訊。語句如下:

    dataPath=/u01/this/is/the/directory/where/product_info/stores/file007;

使用adb-import.sh匯入本機資料時,如何在Windows環境下運行匯入程式?

Windows環境暫未提供bat批處理指令碼,您可以直接使用如下方法調用JAR檔案來執行:

usage: java -jar adb-import-tool.jar [-a <arg>] [-b <arg>] [-B <arg>] [-c <arg>] 
      [-D <arg>] [-d <arg>] [-E <arg>] [-f <arg>] [-h <arg>] [-I <arg>] 
      [-k <arg>] [-l <arg>] [-m <arg>] [-n <arg>] [-N <arg>] [-O <arg>]
      [-o <arg>] [-p <arg>] [-P <arg>] [-Q <arg>] [-s <arg>]  [-S <arg>]
      [-t <arg>] [-T <arg>] [-u <arg>] [-w <arg>][-x <arg>] [-y <arg>] [-z <arg>]

參數

是否必填

說明

-h,--ip <arg>

必填

AnalyticDB for MySQL叢集的串連地址。

-u,--username <arg>

AnalyticDB for MySQL叢集的資料庫帳號。

-p,--password <arg>

AnalyticDB for MySQL叢集的資料庫帳號對應的密碼。

-P,--port <arg>

AnalyticDB for MySQL叢集使用的連接埠號碼。

-D,--databaseName <arg>

AnalyticDB for MySQL叢集的資料庫名稱。

-f,--dataFile <arg>

需要匯入的檔案或檔案夾的絕對路徑,支援如下幾種匯入情境:

  • 僅匯入單個檔案或單個檔案夾。

  • 同時匯入多個檔案,多個檔案的路徑間用英文逗號(,)分隔。

-t,--tableName <arg>

需要匯入的表名。

-a,--createEmptyFinishFilePath <arg>

選填

匯入完畢後是否產生一個標誌檔案。預設為空白字串,表示不產生。若需要產生標誌檔案,直接輸入檔案名稱即可。例如您可以設定-a file_a,即可產生一個名為file_a的標誌檔案。

-b,--batchSize <arg>

設定INSERT INTO tablename VALUES (..),(..)中批量寫入VALUES的數量。預設值:1。

說明

為更好地實現資料批量寫入效果,建議將該值設定在1024~4096之間。

-B,--encryptPassword <arg>

資料庫密碼是否使用密碼編譯演算法加密。預設值:false,表示不使用密碼編譯演算法加密資料庫密碼。

-c,--printRowCount <arg>

每個檔案匯入完畢後是否列印目標表實際行數。預設值:false,表示不列印。

-d,--skipHeader <arg>

是否跳過表頭。預設值:false,表示不跳過表頭。

-E,--escapeSlashAndSingleQuote <arg>

是否轉義列中的\以及'符號。預設值:true,表示需要轉義。

說明

轉義對於用戶端字串解析的效能有一定損失,若確保需要匯入的檔案中沒有逸出字元,可以設定該參數為false。

-I,--ignoreErrors <arg>

匯入資料遇到錯誤,是否忽略失敗批次。預設值:false,表示不忽略。

-k,--skipLineNum <arg>

跳過的行數,類似IGNORE number {LINES | ROWS}參數。預設值:0,表示不跳過。

-l,--delimiter <arg>

資料行分隔符號。AnalyticDB for MySQL預設使用可見符\\|作為資料行分隔符號。同時也支援使用不可見符作為分隔字元,如需使用不可見符,需要使用十六進位來表示。例如,\x07\x07需使用十六進位表示為hex0707

-m,--maxConcurrentNumOfFilesToImport <arg>

當dataFile是一個檔案夾時,並行讀取檔案的數量。預設值:Integer.MAX_VALUE,表示讀所有檔案。

-n,--nullAsQuotes <arg>

當需要匯入的檔案中存在||時,是否需要將其設定為''。預設值:false,表示不將||設定為'',而是設定為null。

-N,--printErrorSql <arg>

匯入資料遇到錯誤,是否列印出錯的SQL。預設值:true,表示列印出錯誤的SQL。

-O,--connectionPoolSize <arg>

AnalyticDB for MySQL資料庫連接池大小。預設值:2。

-o,--encoding <arg>

檔案編碼方式。取值範圍:GBK或UTF-8(預設值)。

-Q,--disableInsertOnlyPrintSql <arg>

匯入資料庫時是否不執行INSERT,僅列印INSERT的SQL命令。選填,預設值:false,表示執行INSERT。

-s,--lineSeparator <arg>

行分隔字元。AnalyticDB for MySQL預設使用可見符\\n作為行分隔字元。同時也支援使用不可見符作為分隔字元,如需使用不可見符,需要使用十六進位來表示。例如,\x0d\x06\x08\x0a需使用十六進位表示為hex0d06080a

-S,--printErrorStackTrace <arg>

當匯入資料遇到錯誤,且printErrorSql=true時,是否列印出錯的棧資訊。預設值:false,表示不列印。

-w,--windowSize <arg>

INSERT SQL的緩衝數量。便於將INSERT SQL命令發送至AnalyticDB for MySQL時,實現流水線加速以及IO和計算分離,從而提高用戶端效能。預設值:128。

-x,--insertWithColumnNames <arg>

執行INSERT INTO命令時是否帶上列名,即是否執行INSERT INTO tb(column1, column2)命令進行資料匯入。預設值:true,表示匯入時需要帶上列名。

-y,--failureSqlPrintLengthLimit <arg>

當執行INSERT 命令失敗時需要列印錯誤SQL,使用該參數設定錯誤SQL的列印截斷長度。預設值:1000。

-z,--connectionUrlParam <arg>

資料庫連接參數。預設值:?characterEncoding=utf-8

樣本:?characterEncoding=utf-8&autoReconnect=true

樣本如下:

  • 樣本1:使用預設參數配置匯入單個檔案,命令如下:

    java -Xmx8G -Xms8G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/lineitem.sample --tableName LINEITEM
  • 樣本2:修改相關參數實現最大化吞吐匯入檔案夾下所有檔案,命令如下:

    java -Xmx16G -Xms16G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/tpch100g --tableName LINEITEM --concurrency 64 --batchSize 2048