排解遷移問題
本文說明如何排解將資料倉儲 (例如 Teradata、Amazon Redshift、Oracle 或 Apache Hive) 遷移至 BigQuery 時的常見問題,包括遷移評估、互動式和批次 SQL 翻譯,以及使用 dwh-migration-dumper 指令列擷取工具產生中繼資料時的問題。
如要檢查遷移查詢和工作的執行作業詳細資料、錯誤代碼和時段用量,您也可以查詢 INFORMATION_SCHEMA.JOBS 檢視區塊。
遷移評估
以下各節將說明將資料倉儲遷移至 BigQuery 時的常見問題和疑難排解技巧。
dwh-migration-dumper 個工具錯誤
如要排解中繼資料或查詢記錄擷取期間,dwh-migration-dumper工具終端機
輸出內容中發生的錯誤和警告,請參閱產生中繼資料疑難排解。
Hive 遷移錯誤
以下各節說明您在規劃將資料倉儲從 Hive 遷移至 BigQuery 時,可能遇到的常見問題。
hadoop-migration-assessment 查詢記錄擷取記錄掛鉤會在 hive-server2 記錄中寫入偵錯記錄檔訊息。如果遇到任何問題,請查看記錄掛鉤的偵錯記錄,其中包含 MigrationAssessmentLoggingHook 字串。
處理 ClassNotFoundException 錯誤
這個錯誤可能是因為記錄掛鉤 JAR 檔案放置位置錯誤所致。請確認您已將 JAR 檔案新增至 Hive 叢集上的 auxlib 資料夾。或者,您可以在 hive.aux.jars.path 屬性中指定 JAR 檔案的完整路徑,例如 file://AUXLIB_PATH/HiveMigrationAssessmentQueryLogsHooks_deploy.jar。
設定的資料夾中不會顯示子資料夾
這個問題可能是設定錯誤,或記錄勾點初始化期間發生問題所致。
在 hive-server2 偵錯記錄中搜尋下列記錄掛鉤訊息:
Unable to initialize logger, logging disabled
Log dir configuration key 'dwhassessment.hook.base-directory' is not set, logging disabled.
Error while trying to set permission
查看問題詳細資料,確認是否需要修正任何內容來解決問題。
資料夾中未顯示檔案
這個問題可能是因為事件處理期間或寫入檔案時發生問題所致。
在 hive-server2 偵錯記錄中搜尋下列記錄掛鉤訊息:
Failed to close writer for file
Got exception while processing event
Error writing record for query
查看問題詳細資料,確認是否需要修正任何內容來解決問題。
遺漏部分查詢事件
這個問題可能是記錄掛鉤執行緒佇列溢位所致。
在 hive-server2 偵錯記錄中搜尋下列記錄掛鉤訊息:
Writer queue is full. Ignoring event
如果看到這則訊息,請考慮增加 dwhassessment.hook.queue.capacity 參數。
互動式 SQL 翻譯器
以下各節說明使用互動式 SQL 翻譯器時,常見的錯誤。
RelationNotFound 或 AttributeNotFound 翻譯問題
使用互動式 SQL 翻譯器翻譯查詢後,您可能會遇到翻譯失敗,並收到 RelationNotFound 或 AttributeNotFound 錯誤。
如要查看失敗的翻譯,請前往 Google Cloud 控制台的 BigQuery「Translation details」(翻譯詳細資料) 頁面,然後開啟「Log Messages」(記錄訊息) 分頁。
為確保翻譯結果最準確,您可以在查詢本身之前,輸入查詢中使用的任何資料表資料定義語言 (DDL) 陳述式。舉例來說,如要翻譯 Amazon Redshift 查詢,請在互動式 SQL 翻譯器中輸入下列 SQL 陳述式:
select table1.field1, table2.field1 from table1, table2 where table1.id = table2.id;
create table schema1.table1 (id int, field1 int, field2 varchar(16));
create table schema1.table2 (id int, field1 varchar(30), field2 date);
select table1.field1, table2.field1
from table1, table2
where table1.id = table2.id;
使用 Gemini 修正翻譯問題
如要修正 RelationNotFound 或 AttributeNotFound 錯誤導致的翻譯工作失敗問題,也可以使用 Gemini 解決這些問題:
- 在 Google Cloud 控制台的 BigQuery 中,前往「Translation details」(翻譯詳細資料) 頁面,然後開啟「Log Messages」(記錄訊息) 分頁。
- 在「類別」欄中,按一下含有
RelationNotFound或AttributeNotFound訊息的查詢。 - 按一下「建議修正方式」。
- 按一下「套用」。
- 如要重新翻譯查詢,請按一下「翻譯」。
批次 SQL 翻譯器
以下各節說明使用批次 SQL 轉譯器時常見的錯誤。
RelationNotFound 或 AttributeNotFound 翻譯問題
使用批次 SQL 翻譯器翻譯查詢後,您可能會遇到翻譯失敗的情況,並收到 RelationNotFound 或 AttributeNotFound 錯誤。
如要找出失敗的翻譯,請前往 Google Cloud 控制台的 BigQuery「翻譯詳細資料」頁面,然後開啟「記錄訊息」分頁。
翻譯服務最適合搭配中繼資料 DDL 使用。如果找不到 SQL 物件定義,翻譯引擎就會引發 RelationNotFound 或 AttributeNotFound 問題。建議使用中繼資料擷取工具產生中繼資料套件,確保所有物件定義都存在。建議您先新增中繼資料,解決大部分的翻譯錯誤,因為這個步驟通常會修正許多其他錯誤,這些錯誤是因缺少中繼資料而間接造成。
詳情請參閱「產生翻譯和評估用的中繼資料」。
使用 Gemini 修正翻譯問題
如要修正 RelationNotFound 或 AttributeNotFound 錯誤導致的翻譯工作失敗問題,也可以使用 Gemini 解決這些問題:
- 前往「翻譯詳細資料」頁面,然後開啟「記錄訊息」分頁。
- 在「類別」欄中,按一下含有
RelationNotFound或AttributeNotFound訊息的查詢。 如要前往程式碼分頁中含有錯誤的檔案和行,請按一下
錯誤訊息。
在「動作」欄中,按一下「建議修正」。
選取下列其中一個選項:「套用」或「套用並重新執行」:
- 如要將產生的結構定義檔案從輸出目錄複製到輸入目錄,請按一下「套用」。
- 如要將產生的結構定義檔案從輸出目錄複製到輸入目錄,並開啟重新執行視窗,請按一下「套用並重新執行」。
生成翻譯和評估的中繼資料
以下各節說明 dwh-migration-dumper 工具的常見問題和疑難排解技巧。
「記憶體不足」錯誤
dwh-migration-dumper 工具終端機輸出中的 java.lang.OutOfMemoryError 錯誤,通常與處理擷取資料時記憶體不足有關。如要解決這個問題,請增加可用記憶體或減少處理執行緒數量。
您可以匯出 JAVA_OPTS 環境變數,藉此增加記憶體上限:
Linux
export JAVA_OPTS="-Xmx4G"
Windows
set JAVA_OPTS="-Xmx4G"
您可以加入 --thread-pool-size 旗標值,減少處理執行緒數量 (預設為 32)。這個選項僅支援 hiveql 和 redshift* 連接器:
dwh-migration-dumper --thread-pool-size=1
處理 WARN...Task failed 錯誤
有時您可能會在 dwh-migration-dumper 工具終端機輸出內容中看到 WARN [main] o.c.a.d.MetadataDumper [MetadataDumper.java:107] Task failed: … 錯誤。擷取工具會向來源系統提交多個查詢,並將每個查詢的輸出內容寫入各自的檔案。如果看到這個問題,表示其中一項查詢失敗。不過,一項查詢失敗不會妨礙其他查詢的執行。如果看到多個 WARN 錯誤,請查看問題詳細資料,確認是否需要修正任何項目,才能正常執行查詢。舉例來說,如果您在執行擷取工具時指定資料庫使用者,但該使用者沒有讀取所有中繼資料的權限,請使用具備正確權限的使用者重試。
ZIP 檔案已毀損
如要驗證 dwh-migration-dumper 工具的 ZIP 檔案,請下載
SHA256SUMS.txt 檔案
並執行下列指令:
Bash
sha256sum --check SHA256SUMS.txt
OK 結果表示總和檢查碼驗證成功。其他任何訊息都表示驗證錯誤:
FAILED: computed checksum did NOT match:ZIP 檔案已毀損,必須重新下載。FAILED: listed file could not be read:系統找不到 ZIP 檔案版本。從相同發布版本下載總和檢查碼和 ZIP 檔案,並放在相同目錄中。
Windows PowerShell
(Get-FileHash RELEASE_ZIP_FILENAME).Hash -eq ((Get-Content SHA256SUMS.txt) -Split " ")[0]
將 RELEASE_ZIP_FILENAME 替換成 dwh-migration-dumper 指令列擷取工具版本的下載 ZIP 檔案名稱,例如 dwh-migration-tools-v1.0.52.zip。
True 結果會確認總和檢查碼驗證是否成功。
False 結果表示驗證錯誤。從相同發布版本下載總和檢查碼和 ZIP 檔案,並放在相同目錄中。
Teradata 查詢記錄擷取作業緩慢
如要提升由 -Dteradata-logs.query-logs-table 和 -Dteradata-logs.sql-logs-table 旗標指定的聯結資料表效能,可以在 JOIN 條件中加入 DATE 類型的額外資料欄。這個資料欄必須在兩個資料表中定義,且必須是 Partitioned
Primary Index 的一部分。如要加入這個資料欄,請使用 -Dteradata-logs.log-date-column 旗標。
以下範例說明如何使用 -Dteradata-logs.log-date-column 標記:
Bash
dwh-migration-dumper \ -Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV \ -Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl \ -Dteradata-logs.log-date-column=ArchiveLogDate
Windows PowerShell
dwh-migration-dumper ` "-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV" ` "-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl" ` "-Dteradata-logs.log-date-column=ArchiveLogDate"
超過 Teradata 資料列大小限制
Teradata 15 版的資料列大小上限為 64 KB。如果超過上限,擷取工具會失敗,並顯示下列訊息:
[Error 9804] [SQLState HY000] Response Row size or Constant Row size overflow
如要解決這項錯誤,請將資料列上限擴充至 1 MB,或將資料列分割成多列:
- 安裝並啟用 1 MB Perm 和 Response Rows 功能,以及目前的 TTU 軟體。詳情請參閱「Teradata Database Message 9804」。
- 使用
-Dteradata.metadata.max-text-length和-Dteradata-logs.max-sql-length標記,將長查詢文字分成多列。
下列指令說明如何使用 -Dteradata.metadata.max-text-length 標記,將長查詢文字分割成多列,每列最多 10,000 個半形字元:
Bash
dwh-migration-dumper \ --connector teradata \ -Dteradata.metadata.max-text-length=10000
Windows PowerShell
dwh-migration-dumper ` --connector teradata ` "-Dteradata.metadata.max-text-length=10000"
下列指令顯示如何使用 -Dteradata-logs.max-sql-length 標記,將長查詢文字分割成多列,每列最多 10,000 個半形字元:
Bash
dwh-migration-dumper \ --connector teradata-logs \ -Dteradata-logs.max-sql-length=10000
Windows PowerShell
dwh-migration-dumper ` --connector teradata-logs ` "-Dteradata-logs.max-sql-length=10000"
Oracle 連線問題
在密碼或主機名稱無效等常見情況下,dwh-migration-dumper 工具會列印有意義的錯誤訊息,說明根本問題。不過,在某些情況下,Oracle 伺服器傳回的錯誤訊息可能很籠統,難以調查。
其中一個問題是 IO Error: Got minus one from a read call。這項錯誤表示已建立與 Oracle 伺服器的連線,但伺服器拒絕接受用戶端並關閉連線。這類問題通常發生於伺服器只接受 TCPS 連線時。根據預設,dwh-migration-dumper 工具會使用 TCP 通訊協定。如要解決這個問題,您必須覆寫 Oracle JDBC 連線網址。
您可以提供 url 旗標,以解決這個問題,格式如下:
jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE。
不必提供 oracle-service、host 和 port 旗標。Oracle 伺服器通常使用的 TCPS 通訊埠編號為 2484。
以下範例說明如何在指令中指定連線網址:
dwh-migration-dumper \
--connector oracle-stats \
--url "jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE" \
--assessment \
--driver "JDBC_DRIVER_PATH" \
--user "USER" \
--password
除了將連線通訊協定變更為 TCPS,您可能還需要提供驗證 Oracle 伺服器憑證所需的 trustStore SSL 設定。如果缺少 SSL 設定,系統會顯示 Unable to find valid certification path 錯誤訊息。如要解決這個問題,請設定 JAVA_OPTS 環境變數:
set JAVA_OPTS=-Djavax.net.ssl.trustStore="JKS_FILE_LOCATION" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword="PASSWORD"
視 Oracle 伺服器設定而定,您可能也需要提供 keyStore 設定。如要進一步瞭解設定選項,請參閱「SSL With Oracle JDBC Driver」。
後續步驟
- 進一步瞭解遷移作業總覽。
- 瞭解如何執行遷移評估。
- 瞭解如何使用互動式 SQL 翻譯器翻譯查詢。
- 瞭解如何使用批次 SQL 翻譯器遷移程式碼。
- 瞭解如何產生翻譯和評估的中繼資料。