產生翻譯和評估的中繼資料

本文說明如何使用 dwh-migration-dumper 指令列擷取工具,建立中繼資料和查詢記錄檔案。中繼資料檔案會說明來源系統中的 SQL 物件。

BigQuery 遷移服務會使用這項資訊,改善從來源系統方言翻譯至 GoogleSQL 的 SQL 指令碼。

BigQuery 遷移評估會使用中繼資料檔案和查詢記錄檔案,分析現有資料倉儲,並評估將資料倉儲遷移至 BigQuery 所需的努力程度。

總覽

您可以使用 dwh-migration-dumper 工具,從要遷移至 BigQuery 的資料庫平台中擷取中繼資料資訊。雖然翻譯作業不一定要使用擷取工具,但 BigQuery 遷移評估作業則必須使用,因此我們強烈建議您在所有遷移作業中使用這項工具。

詳情請參閱「建立中繼資料檔案」。

您可以使用 dwh-migration-dumper 工具,從下列資料庫平台擷取中繼資料:

  • Teradata
  • Amazon Redshift
  • Apache Hive
  • Apache Spark
  • Azure Synapse
  • Greenplum
  • Microsoft SQL Server
  • IBM Netezza
  • Oracle
  • PostgreSQL
  • Snowflake
  • Trino 或 PrestoSQL
  • Vertica

對於大多數這類資料庫,您也可以擷取查詢記錄。

dwh-migration-dumper 工具會查詢系統資料表,收集與使用者和系統資料庫相關的資料定義語言 (DDL) 陳述式。不會查詢使用者資料庫的內容。這項工具會將系統資料表中的中繼資料資訊儲存為 CSV 檔案,然後將這些檔案壓縮為單一套件。接著,您可以上傳原始檔案進行翻譯或評估時,將這個 ZIP 檔案上傳至 Cloud Storage。

使用查詢記錄選項時,dwh-migration-dumper 工具會查詢系統資料表,找出與使用者和系統資料庫相關的 DDL 陳述式和查詢記錄。這些資料會以 CSV 或 yaml 格式儲存在子目錄中,然後封裝成 zip 套件。系統不會查詢使用者資料庫的內容。目前,BigQuery 遷移評估作業需要個別的 CSV、YAML 和文字檔案來進行查詢記錄,因此請將查詢記錄 ZIP 檔案中的所有檔案解壓縮,並上傳進行評估。

dwh-migration-dumper 工具可在 Windows、macOS 和 Linux 上執行。

dwh-migration-dumper 工具是依據 Apache 2 授權提供。

如果您選擇不使用 dwh-migration-dumper 工具進行轉譯,可以手動提供中繼資料檔案,方法是收集來源系統中 SQL 物件的資料定義語言 (DDL) 陳述式,並儲存在個別的文字檔案中。

使用 BigQuery 遷移評估工具評估遷移作業時,必須提供該工具擷取的中繼資料和查詢記錄。

法規遵循規定

我們提供編譯的 dwh-migration-dumper 工具二進位檔,方便使用者使用。如果您需要稽核工具,確保其符合法規遵循要求,可以查看 dwh-migration-dumper 工具 GitHub 存放區中的原始碼,並編譯自己的二進位檔。

事前準備

安裝 Java

您打算執行 dwh-migration-dumper 工具的伺服器必須安裝 Java 8 以上版本。如果沒有,請從 Java 下載頁面下載並安裝 Java。

所需權限

您指定用於將 dwh-migration-dumper 工具連結至來源系統的使用者帳戶,必須具備讀取該系統中中繼資料的權限。請確認這個帳戶具有適當的角色成員資格,可查詢平台可用的中繼資料資源。舉例來說,INFORMATION_SCHEMA 是多個平台常見的中繼資料資源。

安裝 dwh-migration-dumper 工具

如要安裝 dwh-migration-dumper 工具,請按照下列步驟操作:

  1. 在要執行 dwh-migration-dumper 工具的電腦上,從 dwh-migration-dumper 工具 GitHub 存放區下載 zip 檔案。
  2. 如要驗證 dwh-migration-dumper 工具的 ZIP 檔案,請下載 SHA256SUMS.txt 檔案,然後執行下列指令:

    Bash

    sha256sum --check SHA256SUMS.txt

    如果驗證失敗,請參閱疑難排解

    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 檔案是從相同的發布版本下載,並放在相同的目錄中。

  3. 將 ZIP 檔案解壓縮,解壓縮工具二進位檔位於解壓縮 ZIP 檔案所建立資料夾的 /bin 子目錄中。

  4. 更新 PATH 環境變數,加入擷取工具的安裝路徑。

執行 dwh-migration-dumper 工具

dwh-migration-dumper 工具使用下列格式:

dwh-migration-dumper [FLAGS]

執行 dwh-migration-dumper 工具會在工作目錄中建立名為 dwh-migration-<source platform>-metadata.zip 的輸出檔案,例如 dwh-migration-teradata-metadata.zip

請參閱以下操作說明,瞭解如何針對來源平台執行 dwh-migration-dumper 工具。

Teradata

如要讓 dwh-migration-dumper 工具連線至 Teradata,請從 Teradata 的下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 Teradata 中繼資料和查詢記錄時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--assessment

在產生資料庫記錄或擷取中繼資料時,會啟用評估模式。dwh-migration-dumper 工具用於擷取中繼資料時,會為 BigQuery 遷移評估產生必要的中繼資料統計資料。用於查詢記錄時,會擷取額外資料欄,用於 BigQuery 遷移評估。

用於執行評估時必須提供,但用於翻譯時則不必提供。
--connector 要使用的連接器名稱,在本例中,如果是使用中繼資料,請使用 teradata;如果是使用查詢記錄,請使用 teradata-logs
--database

要擷取的資料庫清單,以半形逗號分隔。資料庫名稱可能會區分大小寫,具體取決於 Teradata 伺服器設定。

如果此旗標與 teradata 連接器搭配使用,dwh-migration-dumper 工具會根據提供的資料庫清單篩選中繼資料表和檢視畫面。例外狀況是 DatabasesVRoleMembersV 檢視畫面 - dwh-migration-dumper 工具會從這些檢視畫面中擷取資料庫和使用者,但不會依資料庫名稱篩選。

這個標記無法與 teradata-logs 連接器搭配使用。系統一律會針對所有資料庫擷取查詢記錄。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。 如未指定,則擷取工具會使用安全提示要求該資訊。
--port 1025 資料庫伺服器的通訊埠。
--user

資料庫連線要使用的使用者名稱。

--query-log-alternates

僅適用於 teradata-logs 連接器。

如要從其他位置擷取查詢記錄,建議您改用 -Dteradata-logs.query-logs-table-Dteradata-logs.sql-logs-table 標記。

根據預設,系統會從 dbc.DBQLogTbldbc.DBQLSQLTbl 資料表中擷取查詢記錄。如果您使用 --assessment 旗標,系統會從檢視區塊 dbc.QryLogV 和資料表 dbc.DBQLSQLTbl 擷取查詢記錄。如果您需要從其他位置擷取查詢記錄,可以使用 --query-log-alternates 標記,指定表格或檢視畫面的完整名稱。第一個參數會參照 dbc.DBQLogTbl 資料表的替代方案,而第二個參數會參照 dbc.DBQLSQLTbl 資料表的替代方案。這兩個參數皆為必填。
如果兩個資料表都有索引欄,且該欄的類型為 DATE,您可以使用 -Dteradata-logs.log-date-column 標記來改善擷取效能。

示例: --query-log-alternates historicdb.ArchivedQryLogV,historicdb.ArchivedDBQLSqlTbl

-Dteradata.tmode

連線的交易模式。支援的值如下:

  • ANSI:ANSI 模式。這是預設模式 (如果未指定旗標)
  • TERA:Teradata 交易模式 (BTET)
  • DEFAULT:使用資料庫伺服器上設定的預設交易模式
  • NONE:未為連線設定模式

範例 (Bash):
-Dteradata.tmode=TERA

範例 (Windows PowerShell):
"-Dteradata.tmode=TERA"

-Dteradata-logs.log-date-column

僅適用於 teradata-logs 連接器。

如要改善由 -Dteradata-logs.query-logs-table-Dteradata-logs.sql-logs-table 標記指定的彙整資料表效能,您可以在 JOIN 條件中加入額外的 DATE 型別資料欄。這個資料欄必須在兩個資料表中定義,且必須是分割主索引的一部分。

範例 (Bash):
-Dteradata-logs.log-date-column=ArchiveLogDate

範例 (Windows PowerShell):
"-Dteradata-logs.log-date-column=ArchiveLogDate"

-Dteradata-logs.query-logs-table

僅適用於 teradata-logs 連接器。

根據預設,系統會從 dbc.DBQLogTbl 資料表中擷取查詢記錄。如果您使用 --assessment 旗標,系統會從檢視區塊 dbc.QryLogV 中擷取查詢記錄。如果您需要從其他位置擷取查詢記錄,可以使用這個標記,指定表格或檢視畫面的完整名稱。
請參閱 -Dteradata-logs.log-date-column 標記,以改善擷取效能。

範例 (Bash):
-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV

範例 (Windows PowerShell):
"-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV"

-Dteradata-logs.sql-logs-table

僅適用於 teradata-logs 連接器。

根據預設,系統會從 dbc.DBQLSqlTbl 資料表中擷取含有 SQL 文字的查詢記錄。如果您需要從其他位置擷取資料,可以使用這個標記指定表格或檢視畫面的完整名稱。
請參閱 -Dteradata-logs.log-date-column 標記,以改善擷取效能。

範例 (Bash):
-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl

範例 (Windows PowerShell):
"-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl"

-Dteradata-logs.utility-logs-table

僅適用於 teradata-logs 連接器。

根據預設,系統會從資料表 dbc.DBQLUtilityTbl 擷取公用程式記錄。如果您需要從其他位置擷取公用程式記錄,可以使用 -Dteradata-logs.utility-logs-table 標記指定表格的完整名稱。

範例 (Bash):
-Dteradata-logs.utility-logs-table=historicdb.ArchivedUtilityLogs

範例 (Windows PowerShell):
"-Dteradata-logs.utility-logs-table=historicdb.ArchivedUtilityLogs"

-Dteradata-logs.res-usage-scpu-table

僅適用於 teradata-logs 連接器。

根據預設,系統會從 dbc.ResUsageScpu 資料表中擷取 SCPU 資源用量記錄。如果您需要從其他位置擷取這些資料,可以使用 -Dteradata-logs.res-usage-scpu-table 標記指定資料表的完整名稱。

範例 (Bash):
-Dteradata-logs.res-usage-scpu-table=historicdb.ArchivedResUsageScpu

範例 (Windows PowerShell):
"-Dteradata-logs.res-usage-scpu-table=historicdb.ArchivedResUsageScpu"

-Dteradata-logs.res-usage-spma-table

僅適用於 teradata-logs 連接器。

根據預設,系統會從 dbc.ResUsageSpma 資料表中擷取 SPMA 資源用量記錄。如果您需要從其他位置擷取這些記錄,可以使用 -Dteradata-logs.res-usage-spma-table 標記指定資料表的完整名稱。

範例 (Bash):
-Dteradata-logs.res-usage-spma-table=historicdb.ArchivedResUsageSpma

範例 (Windows PowerShell):
"-Dteradata-logs.res-usage-spma-table=historicdb.ArchivedResUsageSpma"

--query-log-start

要擷取查詢記錄的開始時間 (包含在內)。這個值會截斷至小時。這個旗標僅適用於 teradata-logs 連接器。

示例:--query-log-start "2023-01-01 14:00:00"

--query-log-end

要擷取查詢記錄的結束時間 (不包含在內)。這個值會截斷至小時。這個旗標僅適用於 teradata-logs 連接器。

示例:--query-log-end "2023-01-15 22:00:00"

-Dteradata.metadata.tablesizev.max-rows

僅適用於 teradata 連接器。

限制從檢視畫面 TableSizeV 擷取的列數。資料列會依據 DatabaseNameAccountNameTableName 欄分組,然後依永久空間大小 (運算式 SUM(CurrentPerm)) 依遞減順序排序。接著,系統會擷取指定數量的資料列。

範例 (Bash):
-Dteradata.metadata.tablesizev.max-rows=100000

範例 (Windows PowerShell):
"-Dteradata.metadata.tablesizev.max-rows=100000"

-Dteradata.metadata.diskspacev.max-rows

僅適用於 teradata 連接器。

限制從檢視畫面 DiskSpaceV 擷取的列數。系統會依永久空間大小 (資料欄 CurrentPerm) 以遞減順序排序資料列,然後擷取指定的資料列數。

範例 (Bash):
-Dteradata.metadata.diskspacev.max-rows=100000

範例 (Windows PowerShell):
"-Dteradata.metadata.diskspacev.max-rows=100000"

-Dteradata.metadata.databasesv.users.max-rows

僅適用於 teradata 連接器。

限制從檢視畫面 DatabasesV 擷取的代表使用者 (DBKind='U') 資料列數量。系統會依據 PermSpace 欄以遞減順序排序資料列,然後擷取指定數量的資料列。

範例 (Bash):
-Dteradata.metadata.databasesv.users.max-rows=100000

範例 (Windows PowerShell):
"-Dteradata.metadata.databasesv.users.max-rows=100000"

-Dteradata.metadata.databasesv.dbs.max-rows

僅適用於 teradata 連接器。

限制從檢視畫面 DatabasesV 擷取的資料庫 (DBKind='D') 列數。系統會依據 PermSpace 欄以遞減順序排序資料列,然後擷取指定數量的資料列。

範例 (Bash):
-Dteradata.metadata.databasesv.dbs.max-rows=100000

範例 (Windows PowerShell):
"-Dteradata.metadata.databasesv.dbs.max-rows=100000"

-Dteradata.metadata.max-text-length

僅適用於 teradata 連接器。

TableTextV 檢視畫面擷取資料時,文字欄的長度上限。超過定義限制的文字會分成多行。允許的範圍:介於 5000 和 32000 之間 (含)。

範例 (Bash):
-Dteradata.metadata.max-text-length=10000

範例 (Windows PowerShell):
"-Dteradata.metadata.max-text-length=10000"

-Dteradata-logs.max-sql-length

僅適用於 teradata-logs 連接器。

DBQLSqlTbl.SqlTextInfo 欄的長度上限。超過定義上限的查詢文字會分割為多個資料列。允許的範圍:介於 5000 到 31000 (含)。

範例 (Bash):
-Dteradata-logs.max-sql-length=10000

範例 (Windows PowerShell):
"-Dteradata-logs.max-sql-length=10000"

範例

以下範例說明如何擷取本機主機上兩個 Teradata 資料庫的中繼資料:

dwh-migration-dumper \
  --connector teradata \
  --user user \
  --password password \
  --database database1,database2 \
  --driver path/terajdbc4.jar

以下範例說明如何在本機主機上擷取 Assessment 的查詢記錄,以便進行驗證:

dwh-migration-dumper \
  --connector teradata-logs \
  --assessment \
  --user user \
  --password password \
  --driver path/terajdbc4.jar

dwh-migration-dumper 工具擷取的資料表和檢視畫面

使用 teradata 連接器時,系統會擷取下列資料表和檢視畫面:

  • DBC.ColumnsV
  • DBC.DatabasesV
  • DBC.DBCInfo
  • DBC.FunctionsV
  • DBC.IndicesV
  • DBC.PartitioningConstraintsV
  • DBC.TablesV
  • DBC.TableTextV

當您使用 teradata 連接器搭配 --assessment 標記時,系統會擷取下列額外資料表和檢視畫面:

  • DBC.All_RI_ChildrenV
  • DBC.All_RI_ParentsV
  • DBC.AllTempTablesVX
  • DBC.DiskSpaceV
  • DBC.RoleMembersV
  • DBC.StatsV
  • DBC.TableSizeV

使用 teradata-logs 連接器時,系統會擷取下列資料表和檢視畫面:

  • DBC.DBQLogTbl (如果使用 --assessment 旗標,會變更為 DBC.QryLogV)
  • DBC.DBQLSqlTbl

當您使用 teradata-logs 連接器搭配 --assessment 標記時,系統會擷取下列額外資料表和檢視畫面:

  • DBC.DBQLUtilityTbl
  • DBC.ResUsageScpu
  • DBC.ResUsageSpma

Redshift

您可以使用下列任何 Amazon Redshift 驗證和授權機制搭配擷取工具:

  • 使用者名稱和密碼。
  • AWS 身分與存取權管理 (IAM) 存取金鑰 ID 和私密金鑰。
  • AWS 身分與存取權管理設定檔名稱。

如要使用使用者名稱和密碼進行驗證,請使用 Amazon Redshift 的預設 PostgreSQL JDBC 驅動程式。如要使用 AWS IAM 進行驗證,請使用 Amazon Redshift JDBC 驅動程式,您可以從下載頁面下載。

下表說明使用 dwh-migration-dumper 工具擷取 Amazon Redshift 中繼資料和查詢記錄時,常用的旗標。如要瞭解所有支援的旗標,請參閱「全域旗標」。

名稱 預設值 說明 必要
--assessment

在產生資料庫記錄或擷取中繼資料時,開啟評估模式。 當用於擷取中繼資料時,這項工具會產生 BigQuery 遷移評估所需的中繼資料統計資料。用於擷取查詢記錄時,會產生 BigQuery 遷移評估的查詢指標統計資料。

在評估模式下執行時必須提供,但在翻譯時則不必提供。
--connector 要使用的連接器名稱,在本例中,如果是用於中繼資料,則為 redshift;如果是用於查詢記錄,則為 redshift-raw-logs
--database 如果未指定,Amazon Redshift 會使用 --user 值做為預設資料庫名稱。

要連線的資料庫名稱。

--driver 如未指定,Amazon Redshift 會使用預設的 PostgreSQL JDBC 驅動程式。 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--iam-accesskeyid

用於驗證的 AWS IAM 存取金鑰 ID。存取金鑰是由字元組成的字串,類似 AKIAIOSFODNN7EXAMPLE

請與 --iam-secretaccesskey 旗標搭配使用。指定 --iam-profile--password 旗標時,請勿使用此旗標。

並非強制規定,但您必須透過下列任一方法提供驗證資訊:

  • 請將這個旗標與 --iam-secretaccesskey 旗標搭配使用。
  • 使用 --iam-profile 標記。
  • 使用 --password 旗標搭配 --user 旗標。
--iam-profile

用於驗證的 AWS 身分與存取權管理設定檔。您可以檢查 $HOME/.aws/credentials 檔案,或執行 aws configure list-profiles,擷取要使用的設定檔值。

請勿將此標記與 --iam-accesskeyid--iam-secretaccesskey--password 標記搭配使用。

並非強制規定,但您必須透過下列任一方法提供驗證資訊:

  • 使用這個旗標。
  • 使用 --iam-accesskeyid 旗標搭配 --iam-secretaccesskey 旗標。
  • 使用 --password 旗標搭配 --user 旗標。
--iam-secretaccesskey

用於驗證的 AWS IAM 私密存取金鑰。存取密鑰是由字元組成的字串,例如 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

請與 --iam-accesskeyid 旗標搭配使用。請勿將此旗標與 --iam-profile--password 旗標搭配使用。

並非強制規定,但您必須透過下列任一方法提供驗證資訊:

  • 請將這個旗標與 --iam-accesskeyid 旗標搭配使用。
  • 使用 --iam-profile 標記。
  • 使用 --password 旗標搭配 --user 旗標。
--password 資料庫連線要使用的密碼。

請勿將此標記與 --iam-accesskeyid--iam-secretaccesskey--iam-profile 標記搭配使用。

並非強制規定,但您必須透過下列任一方法提供驗證資訊:

  • 請將這個旗標與 --user 旗標搭配使用。
  • 使用 --iam-accesskeyid 旗標搭配 --iam-secretaccesskey 旗標。
  • 使用 --password 標記。
--port 5439 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。
--query-log-start

要擷取查詢記錄的開始時間 (包含在內)。這個值會截斷至小時。這個標記僅適用於 redshift-raw-logs 連接器。

示例:--query-log-start "2023-01-01 14:00:00"

--query-log-end

要擷取查詢記錄的結束時間 (不包含在內)。這個值會截斷至小時。這個標記僅適用於 redshift-raw-logs 連接器。

示例:--query-log-end "2023-01-15 22:00:00"

範例

以下範例說明如何使用 AWS IAM 金鑰進行驗證,從指定主機上的 Amazon Redshift 資料庫中擷取中繼資料:

dwh-migration-dumper \
  --connector redshift \
  --database database \
  --driver path/redshift-jdbc42-version.jar \
  --host host.region.redshift.amazonaws.com \
  --iam-accesskeyid access_key_ID \
  --iam-secretaccesskey secret_access-key \
  --user user

以下範例說明如何使用使用者名稱和密碼進行驗證,從預設主機上的 Amazon Redshift 資料庫中擷取中繼資料:

dwh-migration-dumper \
  --connector redshift \
  --database database \
  --password password \
  --user user

以下範例說明如何使用 AWS IAM 設定檔進行驗證,從指定主機上的 Amazon Redshift 資料庫中擷取中繼資料:

dwh-migration-dumper \
  --connector redshift \
  --database database \
  --driver path/redshift-jdbc42-version.jar \
  --host host.region.redshift.amazonaws.com \
  --iam-profile profile \
  --user user \
  --assessment

以下範例說明如何使用 AWS IAM 設定檔進行驗證,從指定主機的 Amazon Redshift 資料庫中擷取評估查詢記錄:

dwh-migration-dumper \
  --connector redshift-raw-logs \
  --database database \
  --driver path/redshift-jdbc42-version.jar \
  --host 123.456.789.012 \
  --iam-profile profile \
  --user user \
  --assessment

dwh-migration-dumper 工具擷取的資料表和檢視畫面

使用 redshift 連接器時,系統會擷取下列資料表和檢視畫面:

  • SVV_COLUMNS
  • SVV_EXTERNAL_COLUMNS
  • SVV_EXTERNAL_DATABASES
  • SVV_EXTERNAL_PARTITIONS
  • SVV_EXTERNAL_SCHEMAS
  • SVV_EXTERNAL_TABLES
  • SVV_TABLES
  • SVV_TABLE_INFO
  • INFORMATION_SCHEMA.COLUMNS
  • PG_CAST
  • PG_DATABASE
  • PG_LANGUAGE
  • PG_LIBRARY
  • PG_NAMESPACE
  • PG_OPERATOR
  • PG_PROC
  • PG_TABLE_DEF
  • PG_TABLES
  • PG_TYPE
  • PG_VIEWS

當您使用 redshift 連接器搭配 --assessment 標記時,系統會擷取下列額外資料表和檢視畫面:

  • SVV_DISKUSAGE
  • STV_MV_INFO
  • STV_WLM_SERVICE_CLASS_CONFIG
  • STV_WLM_SERVICE_CLASS_STATE

使用 redshift-raw-logs 連接器時,系統會擷取下列資料表和檢視畫面:

  • STL_DDLTEXT
  • STL_QUERY
  • STL_QUERYTEXT
  • PG_USER

當您使用 redshift-raw-logs 連接器搭配 --assessment 標記時,系統會擷取下列額外資料表和檢視畫面:

  • STL_QUERY_METRICS
  • SVL_QUERY_QUEUE_INFO
  • STL_WLM_QUERY

如要瞭解 Redshift 中的系統檢視畫面和資料表,請參閱「Redshift 系統檢視畫面」和「Redshift 系統目錄資料表」。

Apache Hive/Spark 或 Trino/PrestoSQL

dwh-migration-dumper 工具僅支援透過 Kerberos 驗證 Apache Hive metastore。因此,請不要使用 --user--password 標記,改用 --hive-kerberos-url 標記提供 Kerberos 驗證詳細資料。

下表說明使用擷取工具擷取 Apache Hive、Spark、Presto 或 Trino 中繼資料時,常用的旗標。如需所有支援旗標的相關資訊,請參閱「全域旗標」。

名稱 預設值 說明 必要
--assessment

在擷取中繼資料時啟用評估模式。dwh-migration-dumper 工具用於擷取中繼資料時,會為 BigQuery 遷移評估作業產生必要的中繼資料統計資料。

評估作業必填。翻譯時不必使用。
--connector 要使用的連接器名稱,在本例中為 hiveql
--hive-metastore-dump-partition-metadata

dwh-migration-dumper 工具擷取分區中繼資料。由於 Thrift 用戶端效能會受到影響,因此您可能會將此標記設為 false,以便為具有大量分區的實際用途元資料儲存庫使用。這麼做可改善擷取工具效能,但會導致 BigQuery 端的區隔最佳化功能有所損失。

請勿將此旗標與 --assessment 旗標搭配使用,否則不會有任何效果。

--hive-metastore-version 2.3.6

執行 dwh-migration-dumper 工具時,系統會根據這個標記的值,選取用於與 Apache Hive 伺服器通訊的適當 Thrift 規格。如果擷取工具沒有適當的 Thrift 規格,就會使用 2.3.6 用戶端,並向 stdout 發出警告。如果發生這種情況,請與支援團隊聯絡,並提供您要求的 Apache Hive 版本號碼。

--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--port 9083 資料庫伺服器的通訊埠。
--hive-kerberos-url 用於驗證的 Kerberos 主體和主機。 已啟用 Kerberos 驗證的叢集必須使用此值。
-Dhiveql.rpc.protection

RPC 保護設定等級。這會決定叢集和 dwh-migration-dumper 工具之間的簡易驗證和安全性層 (SASL) 連線的保護品質 (QOP)。

必須等於叢集中 /etc/hadoop/conf/core-site.xml 檔案內 hadoop.rpc.protection 參數的值,且必須是下列其中一個值:

  • authentication
  • integrity
  • privacy

範例 (Bash):
-Dhiveql.rpc.protection=privacy

範例 (Windows PowerShell):
"-Dhiveql.rpc.protection=privacy"

已啟用 Kerberos 驗證的叢集必須使用此值。

範例

以下範例說明如何在指定主機上擷取 Hive 2.3.7 資料庫的中繼資料,且不需驗證,並使用其他連線埠:

dwh-migration-dumper \
  --connector hiveql \
  --hive-metastore-version 2.3.7 \
  --host host \
  --port port

如要使用 Kerberos 驗證,請以具有 Hive metastore 讀取權限的使用者身分登入,並產生 Kerberos 票證。接著,請使用下列指令產生中繼資料 ZIP 檔案:

JAVA_OPTS="-Djavax.security.auth.useSubjectCredsOnly=false" \
  dwh-migration-dumper \
  --connector hiveql \
  --host host \
  --port port \
  --hive-kerberos-url principal/kerberos_host

Azure Synapse 或 Microsoft SQL Server

如要讓 dwh-migration-dumper 工具連線至 Azure Synapse 或 Microsoft SQL Server,請從 Microsoft 的下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 Azure Synapse 或 Microsoft SQL Server 中繼資料時,常用的旗標。如需所有支援旗標的相關資訊,請參閱「全域旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 sqlserver
--database

要連線的資料庫名稱。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。
--port 1433 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。

範例

以下範例說明如何從特定主機上的 Azure Synapse 資料庫中擷取中繼資料:

dwh-migration-dumper \
  --connector sqlserver \
  --database database \
  --driver path/mssql-jdbc.jar \
  --host server_name.sql.azuresynapse.net \
  --password password \
  --user user

Greenplum

如要讓 dwh-migration-dumper 工具連線至 Greenplum,請從 VMware Greenplum 的下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 Greenplum 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 greenplum
--database

要連線的資料庫名稱。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。 如未指定,則擷取工具會使用安全提示要求該資訊。
--port 5432 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。

範例

以下範例說明如何在指定主機上擷取 Greenplum 資料庫的中繼資料:

dwh-migration-dumper \
  --connector greenplum \
  --database database \
  --driver path/greenplum.jar \
  --host host \
  --password password \
  --user user \

Netezza

如要讓 dwh-migration-dumper 工具連線至 IBM Netezza,您必須取得 JDBC 驅動程式。您通常可以從 IBM Netezza 應用程式主機上的 /nz/kit/sbin 目錄取得驅動程式。如果找不到該檔案,請向系統管理員尋求協助,或參閱 IBM Netezza 說明文件中的「安裝及設定 JDBC」。

下表說明使用擷取工具擷取 IBM Netezza 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 netezza
--database

要擷取的資料庫清單,以半形逗號分隔。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。
--port 5480 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。

範例

以下範例說明如何擷取特定主機上兩個 IBM Netezza 資料庫的中繼資料:

dwh-migration-dumper \
  --connector netezza \
  --database database1,database2 \
  --driver path/nzjdbc.jar \
  --host host \
  --password password \
  --user user

PostgreSQL

如要讓 dwh-migration-dumper 工具連線至 PostgreSQL,請從 PostgreSQL 的下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 PostgreSQL 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 postgresql
--database

要連線的資料庫名稱。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。 如未指定,則擷取工具會使用安全提示要求該資訊。
--port 5432 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。

範例

以下範例說明如何在指定主機上擷取 PostgreSQL 資料庫的中繼資料:

dwh-migration-dumper \
  --connector postgresql \
  --database database \
  --driver path/postgresql-version.jar \
  --host host \
  --password password \
  --user user

Oracle

如要讓 dwh-migration-dumper 工具連線至 Oracle,請從 Oracle 的下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 Oracle 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 oracle
--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--oracle-service

用於連線的 Oracle 服務名稱。

並非明確指定,但您必須指定此標記或 --oracle-sid 標記。
--oracle-sid

連線要使用的 Oracle 系統 ID (SID)。

並非明確指定,但您必須指定此標記或 --oracle-service 標記。
--password 資料庫連線要使用的密碼。 如未指定,則擷取工具會使用安全提示要求該資訊。
--port 1521 資料庫伺服器的通訊埠。
--user

資料庫連線要使用的使用者名稱。

您指定的使用者必須具備 SELECT_CATALOG_ROLE 角色,才能擷取中繼資料。如要查看使用者是否具有必要角色,請針對 Oracle 資料庫執行查詢 select granted_role from user_role_privs;

範例

以下範例說明如何使用 Oracle 服務連線,擷取特定主機上 Oracle 資料庫的中繼資料:

dwh-migration-dumper \
  --connector oracle \
  --driver path/ojdbc8.jar \
  --host host \
  --oracle-service service_name \
  --password password \
  --user user

Snowflake

下表說明使用 dwh-migration-dumper 工具擷取 Snowflake 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 snowflake
--database

要連線的資料庫名稱。

您一次只能從 Snowflake 擷取一個資料庫。

--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--private-key-file

用於驗證的 RSA 私密金鑰路徑。建議您使用具有金鑰組驗證機制的 SERVICE 使用者。這可提供安全的方法存取 Snowflake 資料平台,而無需產生多重驗證權杖。

否,如果未提供,則擷取工具會使用密碼驗證。
--private-key-password

建立 RSA 私密金鑰時使用的密碼。

否,只有在私密金鑰已加密時才需要。
--password 資料庫連線要使用的密碼。 如未指定,則擷取工具會使用安全提示要求該資訊。不過,我們建議改用以金鑰組為基礎的驗證機制。
--role 用於授權的 Snowflake 角色。您只需要在大型安裝作業中指定此值,因為在這種情況下,您需要從 SNOWFLAKE.ACCOUNT_USAGE 結構定義而非 INFORMATION_SCHEMA 取得中繼資料。詳情請參閱「使用大型 Snowflake 執行個體」。
--user

資料庫連線要使用的使用者名稱。

--warehouse

用於處理中繼資料查詢的 Snowflake 倉儲。

範例

以下範例說明如何在本機主機上,擷取一般大小的 Snowflake 資料庫的中繼資料:

dwh-migration-dumper \
  --connector snowflake \
  --database database \
  --user user \
  --private-key-file private-key-file \
  --private-key-password private-key-password \
  --warehouse warehouse

以下範例說明如何擷取特定主機上大型 Snowflake 資料庫的中繼資料:

dwh-migration-dumper \
  --connector snowflake \
  --database database \
  --host "account.snowflakecomputing.com" \
  --role role \
  --user user \
  --private-key-file private-key-file \
  --private-key-password private-key-password \
  --warehouse warehouse

或者,您也可以使用以下範例,透過密碼驗證方式擷取中繼資料:

dwh-migration-dumper \
  --connector snowflake \
  --database database \
  --host "account.snowflakecomputing.com" \
  --password password \
  --user user \
  --warehouse warehouse

使用大型 Snowflake 執行個體

dwh-migration-dumper 工具會讀取 Snowflake INFORMATION_SCHEMA 中的中繼資料。不過,您從 INFORMATION_SCHEMA 擷取的資料量有上限。如果執行擷取工具後收到 SnowflakeSQLException: Information schema query returned too much data 錯誤,請務必採取下列步驟,改為從 SNOWFLAKE.ACCOUNT_USAGE 結構定義讀取中繼資料:

  1. 在 Snowflake 網頁介面中開啟「Shares」選項。
  2. 透過 SNOWFLAKE.ACCOUNT_USAGE 共用項目建立資料庫:

    -- CREATE DATABASE database FROM SHARE SNOWFLAKE.ACCOUNT_USAGE;
    
  3. 建立角色:

    CREATE ROLE role;
    
  4. 將新資料庫的 IMPORTED 權限授予角色:

    GRANT IMPORTED PRIVILEGES ON DATABASE database TO ROLE role;
    
  5. 將角色授予您要用來執行 dwh-migration-dumper 工具的使用者:

    GRANT ROLE role TO USER user;
    

Vertica

如要讓 dwh-migration-dumper 工具連線至 Vertica,請前往下載頁面下載 JDBC 驅動程式。

下表說明使用擷取工具擷取 Vertica 中繼資料時,常用的旗標。如要瞭解所有支援的旗標,請參閱「通用旗標」。

名稱 預設值 說明 必要
--connector 要使用的連接器名稱,在本例中為 vertica
--database

要連線的資料庫名稱。

--driver 要用於此連線的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--host localhost 資料庫伺服器的主機名稱或 IP 位址。
--password 資料庫連線要使用的密碼。
--port 5433 資料庫伺服器的通訊埠。
--user 資料庫連線要使用的使用者名稱。

範例

以下範例說明如何從本機主機上的 Vertica 資料庫中擷取中繼資料:

dwh-migration-dumper \
  --driver path/vertica-jdbc.jar \
  --connector vertica \
  --database database
  --user user
  --password password

通用標記

下表說明可與任何支援的來源平台搭配使用的旗標。

名稱 說明
--connector 來源系統的連接器名稱。
--database 使用情形因來源系統而異。
--driver 連線至來源系統時要使用的驅動程式 JAR 檔案的絕對或相對路徑。您可以指定多個驅動程式 JAR 檔案,並以半形逗號分隔。
--dry-run-n 顯示擷取工具會執行的動作,但不會執行這些動作。
--help 顯示指令列說明。
--host 要連線的資料庫伺服器主機名稱或 IP 位址。
--jdbcDriverClass 可選擇覆寫供應商指定的 JDBC 驅動程式類別名稱。如果您有自訂 JDBC 用戶端,請使用這個選項。
--output 輸出 ZIP 檔案的路徑。例如:dir1/dir2/teradata-metadata.zip。如果您未指定路徑,系統會在工作目錄中建立輸出檔案。如果您指定目錄路徑,系統會在指定的目錄中建立預設的 ZIP 檔案名稱。如果目錄不存在,系統會建立該目錄。

如要使用 Cloud Storage,請使用下列格式:
gs://<BUCKET>/<PATH>

如要使用 Google Cloud 憑證進行驗證,請參閱「使用用戶端程式庫進行驗證」。

--password 資料庫連線要使用的密碼。
--port 資料庫伺服器的通訊埠。
--save-response-file 將指令列標記儲存在 JSON 檔案中,方便重複使用。檔案名稱為 dumper-response-file.json,並在工作目錄中建立。如要使用回應檔案,請在執行擷取工具時提供其路徑前置字元 @,例如 dwh-migration-dumper @path/to/dumper-response-file.json
--schema

要擷取的結構定義清單,以半形逗號分隔。

Oracle 不會區分結構定義和建立結構定義的資料庫使用者,因此您可以使用結構定義名稱或使用者名稱搭配 --schema 旗標。例如:--schema schema1,user2,schema3

--thread-pool-size

設定執行緒集區大小,這會影響連線集區大小。執行 dwh-migration-dumper 工具的伺服器上核心數量,即為執行緒集區的預設大小。

如果擷取工具速度緩慢或需要更多資源,您可以增加使用的執行緒數量。如果伺服器上的其他程序需要更多頻寬,您可以減少使用的執行緒數量。

--url

用於資料庫連線的網址,而非由 JDBC 驅動程式產生的 URI。

在大多數情況下,系統產生的 URI 就足以應付。只有在您需要使用特定來源平台的 JDBC 連線設定,且未由此表所列的其中一個標記設定時,才應覆寫產生的 URI。

--user 資料庫連線要使用的使用者名稱。
--version 顯示產品版本。

疑難排解

本節說明 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)。這個選項僅適用於 hiveqlredshift* 連接器。

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 旗標。

範例:

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。如果超過上限,轉儲程式就會失敗,並顯示以下訊息:none [Error 9804] [SQLState HY000] Response Row size or Constant Row size overflow

如要解決這項錯誤,請將資料列限制延長至 1 MB,或將資料列拆成多個資料列:

  • 安裝並啟用 1MB Perm 和 Response Rows 功能,以及目前的 TTU 軟體。詳情請參閱 Teradata 資料庫訊息 9804
  • 使用 -Dteradata.metadata.max-text-length-Dteradata-logs.max-sql-length 旗標,將長查詢文字分割為多個資料列。

以下指令說明如何使用 -Dteradata.metadata.max-text-length 標記,將長查詢文字分割為多個最多 10000 個半形字元的行:

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 標記,將長查詢文字分割為多個最多 10000 個半形字元的行:

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 旗標,而非提供 oracle-servicehostport 旗標,藉此解決這個問題:jdbc:oracle:thin:@tcps://{HOST_NAME}:{PORT}/{ORACLE_SERVICE}。通常,Oracle 伺服器使用的 TCPS 連接埠號碼為 2484

轉儲器指令範例:

  dwh-migration-dumper \
    --connector oracle-stats \
    --url "jdbc:oracle:thin:@tcps://host:port/oracle_service" \
    --assessment \
    --driver "jdbc_driver_path" \
    --user "user" \
    --password

除了將連線通訊協定變更為 TCPS 之外,您可能還需要提供信任存放區 SSL 設定,才能驗證 Oracle 伺服器憑證。如果缺少 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 與 Oracle JDBC 驅動程式」。

後續步驟

執行 dwh-migration-dumper 工具後,請將輸出內容上傳至 Cloud Storage,並附上待翻譯的原始檔案。