使用 Oracle NoSQL Database 移轉器

瞭解 Oracle NoSQL Database Migrator 以及如何將它用於資料移轉。

Oracle NoSQL Database Migrator 是一種可讓您將 Oracle NoSQL 表格從一個資料來源移轉至另一個資料來源的工具。此工具可以在 Oracle NoSQL Database Cloud ServiceOracle NoSQL Database 內部部署和 AWS S3 中的表格上作業。Migrator 工具支援數種不同的資料格式和實體媒體類型。支援的資料格式包括 JSON、Parquet、MongoDB 格式的 JSON、DynamoDB 格式的 JSON 以及 CSV 檔案。支援的實體媒體類型包括檔案、OCI Object Storage、Oracle NoSQL Database 內部部署、Oracle NoSQL Database Cloud Service 和 AWS S3。

本文包含下列主題:

概觀

Oracle NoSQL Database Migrator 可讓您將 Oracle NoSQL 表格從一個資料來源移至另一個資料來源,例如內部部署或雲端的 Oracle NoSQL Database,甚至是簡單的 JSON 檔案。

在許多情況下,您可能需要將 NoSQL 表格移轉至 Oracle NoSQL Database 。例如,一群增強 NoSQL Database 應用程式的開發人員,可能想要使用 cloudsim 在本機 Oracle NoSQL Database Cloud Service (NDCS) 執行處理中測試其更新的程式碼。若要驗證所有可能的測試案例,它們必須設定與實際資料類似的測試資料。若要這麼做,它們必須將 NoSQL 表格從生產環境複製到其本機 NDCS 執行處理 (即 cloudsim 環境)。另一種情況是,NoSQL 開發人員可能需要將應用程式資料從內部部署搬移至雲端,反之亦然,以進行開發或測試。

在上述各種情況下,您可以使用 Oracle NoSQL Database Migrator 將您的 NoSQL 表格從一個資料來源移至另一個資料來源,例如內部部署或雲端的 Oracle NoSQL Database ,甚至是簡單的 JSON 檔案。您也可以從 MongoDB 格式的 JSON 輸入檔案、DynamoDB 格式的 JSON 輸入檔案 (儲存在 AWS S3 來源中或從檔案中) 複製 NoSQL 表格,或將 CSV 檔案複製到內部部署或雲端的 NoSQL 資料庫

如下圖所述,NoSQL Database Migrator 公用程式可作為資料來源和目標之間的連接器或管道 (稱為槽)。本質上,此公用程式會從選取的來源匯出資料,並將該資料匯入槽位。此工具是以表格為導向,亦即,您只能在表格層次移動資料。單一移轉任務會在單一表格上運作,並支援以各種資料格式將表格資料從來源移轉至接收器。

Oracle NoSQL Database Migrator 的設計可支援未來的其他來源和接收器。如需自目前版本起 Oracle NoSQL Database Migrator 支援的來源與接收器清單,請參閱支援的來源與接收器

與 Oracle NoSQL Database Migrator 搭配使用的術語

進一步瞭解上圖中使用的不同術語。

  • 來源:匯出 NoSQL 表格以進行移轉的實體。有些來源範例包括 Oracle NoSQL Database 內部部署或雲端、JSON 檔案、MongoDB 格式的 JSON 檔案、DynamoDB 格式的 JSON 檔案和 CSV 檔案。
  • 接收器:NoSQL 資料庫移轉器匯入 NoSQL 表格的實體。部分發送槽範例為內部部署或雲端的 Oracle NoSQL Database 和 JSON 檔案。

NoSQL 資料庫移轉程式工具支援不同類型的來源和接收器 (即實體媒體或資料儲存區域) 和資料格式 (亦即資料在來源或接收器中的呈現方式)。支援的資料格式包括 JSON、Parquet、MongoDB 格式的 JSON、DynamoDB 格式的 JSON 以及 CSV 檔案。支援的來源和接收器類型包括檔案、OCI 物件儲存、內部部署的 Oracle NoSQL DatabaseOracle NoSQL Database Cloud Service

  • 移轉管道:來源的資料將由 NoSQL 資料庫移轉器傳輸至接收器。這可以視覺化方式呈現為移轉管道。
  • 轉換:您可以新增規則來修改移轉管道中的 NoSQL 表格資料。這些規則稱為「轉換」。Oracle NoSQL Database Migrator 只允許最上層欄位或資料欄的資料轉換。它無法讓您轉換巢狀欄位中的資料。允許的轉換範例有:
    • 刪除或忽略一或多個資料欄,
    • 重新命名一或多個資料欄,或者
    • 將數個資料欄聚總成單一欄位,通常是 JSON 欄位。
  • 組態檔:組態檔可讓您以 JSON 格式定義移轉活動所需的所有參數。之後,您可以將此組態檔以單一參數形式從 CLI 傳送至 runMigrator 命令。一般的組態檔格式如下所示。
    {
     "source": {
       "type" : <source type>,
       //source-configuration for type. See Source Configuration Templates  .
     },
     "sink": {
       "type" : <sink type>,
       //sink-configuration for type. See Sink Configuration Templates  .
     },
     "transforms" : {
       //transforms configuration. See Transformation Configuration Templates  .
     },
     "migratorVersion" : "<migrator version>",
     "abortOnError" : <true|false>
    }
    群組 參數 必要 (Y/N) 目的 支援的值
    source type Y 代表移轉資料的來源。來源提供移轉的資料和描述資料 (如果有的話)。 若要瞭解每個來源的 type 值,請參閱支援的來源與接收器
    source 類型來源組態 Y 定義來源的組態。這些組態參數是以上所選來源類型的特定參數。 如需每個來源類型的組態參數完整清單,請參閱來源組態樣板
    sink type Y 代表要移轉資料的接收器。接收器是移轉的目標或目的地。 若要瞭解每個來源的 type 值,請參閱支援的來源與接收器
    sink 類型接收組態 Y 定義接收器的配置。這些組態參數專屬於以上選取的接收器類型。 如需每個接收器類型的組態參數完整清單,請參閱接收器組態樣板
    transforms 轉換組態 N 定義要套用至移轉管道中資料的轉換。 如需 NoSQL Data Migrator 支援的轉換完整清單,請參閱轉換組態範本
    - migratorVersion N NoSQL 資料移轉器的版本 -
    - abortOnError N

    指定是否在發生任何錯誤時停止移轉活動。

    預設值為 true ,表示只要發生移轉錯誤,移轉就會停止。

    如果您將此值設為 false ,即使記錄失敗或其他移轉錯誤,仍會繼續移轉。失敗的記錄和移轉錯誤將記錄為 CLI 終端機上的警告。

    true、false

    附註:

    由於 JSON 檔案區分大小寫,因此除非另有指定,否則組態檔中定義的所有參數都會區分大小寫。

支援的來源與接收器

本主題提供 Oracle NoSQL Database Migrator 支援的來源與接收器清單。

您可以使用此表格中的任何有效來源與接收器組合來進行移轉作業。不過,您必須確定至少一端,也就是來源或接收器必須是 Oracle NoSQL 產品。您無法使用 NoSQL 資料庫移轉器將 NoSQL 表格資料從一個檔案移至另一個檔案。

類型
(值)

格式
(值)

有效來源 有效接收器

Oracle NoSQL Database
(nosqldb)

Y Y

Oracle NoSQL Database Cloud Service
(nosqldb_cloud)

Y Y

檔案系統
(file)

JSON
檔案 (json)

Y Y

MongoDB JSON
(mongodb_json)

Y N

DynamoDB JSON
(dynamodb_json)

Y N

宴會 (parquet)

N Y

CSV
(csv)

Y N

OCI 物件儲存
(object_storage_oci)

JSON
檔案 (json)

Y Y

MongoDB JSON
(mongodb_json)

Y N

宴會 (parquet)

N Y

CSV
(csv)

Y N
AWS S3

DynamoDB JSON
(dynamodb_json)

Y N

附註:

許多組態參數在來源與接收器組態之間都是通用的。為了方便參考,文件段落中的每個來源和接收器都會重複這類參數的描述,說明各種來源和接收器的組態檔格式。在所有情況下,名稱相同的參數語法和語意都是相同的。

來源與接收器安全性

部分來源與接收器類型具有選擇性或必要的安全性資訊,以供驗證之用。

Oracle Cloud Infrastructure (OCI) 中使用服務的所有來源和接收器都可以使用某些參數來提供選擇性的安全資訊。您可以使用 OCI 組態檔或執行處理主體來提供這項資訊。

如果安裝是安全的,並且使用以 Oracle Wallet 為基礎的認證,Oracle NoSQL Database 來源和接收器就需要必要的安全資訊。您可以透過新增 jar 檔案至 <MIGRATOR_HOME>/lib 目錄來提供此資訊。

公事包式認證

如果 Oracle NoSQL Database 安裝使用以 Oracle Wallet 為基礎的認證,您需要一個屬於 EE 安裝的其他 jar 檔案。如需詳細資訊,請參閱 Oracle Wallet

如果沒有這個 Jar 檔案,您將會收到下列錯誤訊息:

在 lib 目錄中找不到 kvstore-ee.jar。將 kvstore-ee.jar 複製到 lib 目錄。

若要避免上面顯示的異常狀況,您必須將 EE 伺服器套裝程式的 kvstore-ee.jar 檔案複製到 <MIGRATOR_HOME>/lib 目錄。<MIGRATOR_HOME> 是透過擷取 Oracle NoSQL Database Migrator 套裝程式建立的 nosql-migrator-M.N.O/ 目錄,而 M.N.O 代表軟體 release.major.minor 號碼。例如,nosql-migrator-1.1.0/lib

附註:

Oracle NoSQL Database 的 Enterprise Edition (EE) 中只支援公事包式認證。

使用執行處理主體認證

執行處理主參與者是一項 IAM 服務功能,可讓執行處理成為可在服務資源上執行動作的授權動作者 (或主參與者)。每個運算執行處理都有自己的識別,並使用新增至該執行處理的憑證進行認證。

Oracle NoSQL Database Migrator 提供了使用執行處理主要認證連線至 NoSQL 雲端和 OCI Object Storage 來源和 sinks 的選項。只有在 OCI 運算執行處理中使用 NoSQL Database Migrator 工具時,才支援此工具,例如在 OCI 代管的 VM 中執行的 NoSQL Database Migrator 工具。若要啟用此功能,請使用 NoSQL 雲端來源和 sink 組態檔的 useInstancePrincipal 屬性。如需不同類型來源和接收器之組態參數的詳細資訊,請參閱來源組態樣板接收器組態樣板

如需有關執行處理主體的詳細資訊,請參閱從執行處理呼叫服務

Oracle NoSQL Database Migrator 的工作流程

瞭解使用 Oracle NoSQL Database Migrator 公用程式移轉 NoSQL 資料的各種步驟。

使用 NoSQL Database Migrator 所涉及的高階任務流程描述如下圖。

下載 NoSQL 資料移轉程式公用程式

您可以從 Oracle NoSQL 下載頁面下載 Oracle NoSQL Database 移轉程式公用程式。在機器上下載並解壓縮之後,您就可以從命令行介面存取 runMigrator 命令。

附註:

Oracle NoSQL Database Migrator 公用程式需要 Java 11 或更新版本才能執行。

識別來源與接收器

使用移轉器之前,您必須識別資料來源與接收器。例如,如果您要將 NoSQL 表格從內部部署的 Oracle NoSQL Database 移轉至 JSON 格式檔案,您的來源將會是 Oracle NoSQL Database ,而接收器將會是 JSON 檔案。請參考支援的來源和接收器,確定 Oracle NoSQL Database 移轉器支援識別的來源和接收器。這也是決定目標或接收器中 NoSQL 表格之綱要並加以建立之適當階段。
  • 識別接收器表格綱要:如果接收器是內部部署或雲端的 Oracle NoSQL Database ,您必須識別接收器表格的綱要,並確定來源資料與目標綱要相符。如有需要,請使用轉換將來源資料對應至接收器表格。
    • 預設綱要:NoSQL 資料庫移轉程式提供使用預設綱要建立表格的選項,不需要預先定義表格的綱要。這主要有助於將 JSON 來源檔案載入 Oracle NoSQL Database
      如果來源是 MongoDB 格式的 JSON 檔案,則表格的預設綱要如下:
      CREATE TABLE IF NOT EXISTS <tablename>(ID STRING, DOCUMENT JSON,PRIMARY KEY(SHARD(ID))

      其中:

      - tablename = 為組態中的表格屬性提供的值。

      - ID = mongoDB 匯出之 JSON 來源檔案中每個文件的 _id 值。

      - DOCUMENT = 對於 mongoDB 匯出檔案中的每個文件,將排除 _id 欄位的內容聚總到 DOCUMENT 資料欄中。

      如果來源是 DynamoDB 格式的 JSON 檔案,則表格的預設綱要如下:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type],DOCUMENT JSON,
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      其中:

      - TABLE_NAME = 為組態中的 sink 表格提供的值

      - DDBPartitionKey_name = 提供給組態中分割區索引鍵的值

      - DDBPartitionKey_type = 為組態中分割區索引鍵的資料類型提供的值

      - DDBSortKey_name = 提供給組態中排序索引鍵的值 (如果有的話)

      - DDBSortKey_type = 提供給組態中排序索引鍵的資料類型值 (如果有的話)

      - 文件 = 聚總至 NoSQL JSON 資料欄之 Dynamo DB 表格項目的分割區和排序索引鍵以外的所有屬性

      如果來源格式是 CSV 檔案,則目標表格不支援預設綱要。您可以使用包含與來源 CSV 檔案相同數目之資料欄和資料類型的表格定義來建立綱要檔案。如需有關建立綱要檔案的詳細資訊,請參閱提供表格綱要

      對於所有其他來源,預設綱要如下所示:
      CREATE TABLE IF NOT EXISTS <tablename> (ID LONG GENERATED ALWAYS AS IDENTITY, DOCUMENT JSON, PRIMARY KEY(ID))

      其中:

      - tablename = 為組態中的表格屬性提供的值。

      - ID = 自動產生的 LONG 值。

      - 文件 = 來源提供的 JSON 記錄會聚總至 DOCUMENT 資料欄。

      附註:

      如果未在 MongoDB 格式的 JSON 檔案中提供 _id 值作為字串,則 NoSQL Database Migrator 會先將它轉換成字串,再將其插入預設綱要中。
  • 提供表格綱要:NoSQL 資料庫移轉程式可讓來源使用 schemaInfo 屬性來提供表格資料的綱要定義。schemaInfo 屬性適用於尚未定義隱含綱要的所有資料來源。接收器資料儲存可以選擇下列任一選項。
    • 使用 NoSQL 資料庫移轉器定義的預設綱要。
    • 使用來源提供的綱要。
    • 定義來源提供的綱要來覆寫來源提供的綱要。例如,如果您要將資料從來源綱要轉換成另一個綱要,則必須覆寫來源提供的綱要,並使用 NoSQL Database Migrator 工具的轉換功能。


    表格綱要檔案,例如 mytable_schema.ddl 可以包含表格 DDL 敘述句。NoSQL 資料庫移轉程式工具會在開始移轉之前執行此表格綱要檔案。移轉程式工具在綱要檔案中每一行都不支援一個以上的 DDL 敘述句。例如,
    CREATE TABLE IF NOT EXISTS(id INTEGER, name STRING, age INTEGER, PRIMARY KEY(SHARD(ID)))

    附註:

    如果槽位有表格且 schemaPath 中的 DDL 與表格不同,移轉將會失敗。
  • 建立接收器表格:識別接收器表格綱要之後,請透過「管理 CLI」或使用接收器組態檔的 schemaInfo 屬性來建立接收器表格。請參閱接收器組態樣板

    附註:

    如果來源是 CSV 檔案,請使用目標表格綱要的 DDL 命令來建立檔案。在 sink 組態檔的 schemaInfo.schemaPath 參數中提供檔案路徑。

移轉表格資料列的 TTL 描述資料

您可以在執行 NoSQL 表格移轉時,選擇包含表格資料列的 TTL 描述資料以及實際的資料。NoSQL 資料庫移轉程式提供組態參數,以支援匯出及匯入表格資料列 TTL 中繼資料。此外,此工具還提供在匯入作業期間選取表格資料列相對到期時間的選項。您可以選擇使用 includeTTL 參數來匯出或匯入 TTL 描述資料。

附註:

只有 Oracle NoSQL DatabaseOracle NoSQL Database Cloud Service 才支援移轉表格資料列的 TTL 描述資料。

正在匯出 TTL 描述資料

匯出表格時,系統會針對到期時間有效的表格資料列匯出 TTL 資料。如果資料列未過期,則不會在匯出的資料中明確包含該資料列,因為其過期值一律為 0。TTL 資訊包含在每個匯出資料列的 _metadata JSON 物件中。NoSQL 資料庫移轉程式會將每個資料列的到期時間匯出為自 UNIX 紀元 (1970 年 1 月 1 日) 以後的毫秒數。例如,
//Row 1
{
    "id" : 1,
    "name" : "xyz",
    "age" : 45,
    "_metadata" : {
        "expiration" : 1629709200000   //Row Expiration time in milliseconds
    }
}

//Row 2
{
    "id" : 2,
    "name" : "abc",
    "age" : 52,
    "_metadata" : {
        "expiration" : 1629709400000   //Row Expiration time in milliseconds
    }
}

//Row 3 No Metadata for below row as it will not expire
{
    "id" : 3,
    "name" : "def",
    "age" : 15
}

匯入 TTL 描述資料

您可以選擇使用組態參數 includeTTL 匯入 TTL 描述資料。匯入作業會在移轉包含 TTL 中繼資料的表格資料列時,處理下列使用案例。只有指定 includeTTL 組態參數時,才適用這些使用案例。

在使用案例 2 和 3 中,預設匯入作業的「參照匯入時間」是從執行 NoSQL Database Migrator 工具之機器的 System.currentTimeMillis() 取得的目前時間 (毫秒)。不過,如果您要延長到期時間並匯入資料列 (否則會立即到期),也可以使用 ttlRelativeDate 組態參數設定自訂「參照時間」。
  • 使用案例 1 :匯入表格資料列中沒有 TTL 描述資料資訊。

    匯入從外部來源產生的 JSON 來源檔案或使用較早版本的移轉程式匯出時,匯入資料列沒有 TTL 資訊。但由於 includeTTL 組態參數等於 true,因此移轉程式會為表格資料列設定 TTL=0,這表示匯入表格資料列永遠不會過期。

  • 使用大小寫 2 :匯入表格資料列時,來源表格資料列的 TTL 值相對於「參照時間」已過期。

    將表格資料列匯出至檔案並嘗試在表格資料列過期之後匯入檔案時,系統會忽略該表格資料列,因此不會將該表格資料列寫入存放區。

  • 使用大小寫 3 :相對於匯入表格資料列時的「參照時間」,來源表格資料列的 TTL 值不會過期。

    將表格資料列匯出至檔案並嘗試在表格資料列過期之前匯入檔案時,系統會以 TTL 值匯入表格資料列。但是表格資料列的新 TTL 值可能不等於匯出的 TTL 值,因為 TimeToLive 類別中的整數小時與天時段限制條件。例如,

    匯出的表格資料列
    {
      "id" : 8,
      "name" : "xyz",
      "_metadata" : {
        "expiration" : 1629709200000 //Monday, August 23, 2021 9:00:00 AM in UTC
      }
    }

    匯入時的參照時間為 1629707962582,也就是 2021 年 8 月 23 日星期一,上午 8:39:22.582。

    匯入的表格資料列
    {
      "id" : 8,
      "name" : "xyz",
      "_metadata" : {
        "ttl" :  1629712800000 //Monday, August 23, 2021 10:00:00 AM UTC
      }
    }

使用 IDENTITY 資料欄將資料匯入槽

您可以將有效來源的資料匯入具有 IDENTITY 資料欄的槽位表格 (內部部署 / 雲端服務)。您可以將 IDENTITY 資料欄建立為 GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY。如需使用 IDENTITY 資料欄建立表格的詳細資訊,請參閱 SQL Reference Guide 中的 Creating Tables With an IDENTITY Column

匯入資料之前,請確定槽位的 Oracle NoSQL Database 表格是空的 (如果存在的話)。如果 sink 表格中有預先存在的資料,移轉可能會導致問題,例如覆寫 sink 表格中的現有資料,或在匯入期間略過來源資料。

將 IDENTITY 資料欄的表格標示為 GENERATED ALWAYS AS IDENTITY

請考慮將 IDENTITY 資料欄建立為 GENERATED ALWAYS AS IDENTITY 的接收器表格。資料匯入取決於來源是否提供值給組態檔中的 IDENTITY 資料欄和 ignoreFields 轉換參數。

例如,您想要將資料從 JSON 檔案來源匯入 Oracle NoSQL Database 表格作為接收器。接收器表格的綱要為:

CREATE TABLE IF NOT EXISTS migrateID(ID INTEGER GENERATED ALWAYS AS IDENTITY, name STRING, course STRING, PRIMARY KEY
      (ID))
Migrator 公用程式會處理資料移轉,如以下情況所述:
來源條件 使用者動作 移轉結果

CASE 1:來源資料未提供接收器表格之 IDENTITY 欄位的值。

範例:JSON 來源檔案 sample_noID.json

{"name":"John", "course":"Computer Science"}
{"name":"Jane", "course":"BioTechnology"}
{"name":"Tony", "course":"Electronics"}

建立 / 產生組態檔。

資料移轉成功。IDENTITY 資料欄值會自動產生。Oracle NoSQL Database 接收器表格 migrateID 中的移轉資料:

{"ID":1001,"name":"Jane","course":"BioTechnology"}
{"ID":1003,"name":"John","course":"Computer Science"}
{"ID":1002,"name":"Tony","course":"Electronics"}

CASE 2:來源資料提供接收器表格之 IDENTITY 欄位的值。

範例:JSON 來源檔案 sampleID.json

{"ID":1, "name":"John", "course":"Computer Science"}
{"ID":2, "name":"Jane", "course":"BioTechnology"}
{"ID":3, "name":"Tony", "course":"Electronics"}

建立 / 產生組態檔。您可以在接收器組態樣板中提供 ID 資料欄的 ignoreFields 轉換。

"transforms" : { "ignoreFields" : ["ID"] }

資料移轉成功。系統會略過提供的 ID 值,並自動產生 IDENTITY 資料欄值。

Oracle NoSQL Database 接收器表格 migrateID 中的移轉資料:
{"ID":2003,"name":"John","course":"Computer Science"}
{"ID":2002,"name":"Tony","course":"Electronics"}
{"ID":2001,"name":"Jane","course":"BioTechnology"}

您可以在沒有 IDENTITY 資料欄的 ignoreFields 轉換的情況下建立 / 產生組態檔。

資料移轉失敗,錯誤訊息如下:

"Cannot set value for a generated always identity column".

如需轉換組態參數的詳細資訊,請參閱轉換組態樣板主題。

將 IDENTITY 資料欄的表格標示為 GENERATED BY DEFAULT AS IDENTITY

請考量 IDENTITY 資料欄建立為 GENERATED BY DEFAULT AS IDENTITY 的接收器表格。資料匯入取決於來源是否提供值給 IDENTITY 資料欄和 ignoreFields 轉換參數。

例如,您想要將資料從 JSON 檔案來源匯入 Oracle NoSQL Database 表格作為接收器。接收器表格的綱要為:

CREATE TABLE IF NOT EXISTS migrateID(ID INTEGER GENERATED BY DEFAULT AS IDENTITY, name STRING, course STRING, PRIMARY KEY
      (ID))
Migrator 公用程式會處理資料移轉,如以下情況所述:
來源條件 使用者動作 移轉結果

CASE 1:來源資料未提供接收器表格之 IDENTITY 欄位的值。

範例:JSON 來源檔案 sample_noID.json

{"name":"John", "course":"Computer Science"}
{"name":"Jane", "course":"BioTechnology"}
{"name":"Tony", "course":"Electronics"}

建立 / 產生組態檔。

資料移轉成功。IDENTITY 資料欄值會自動產生。Oracle NoSQL Database 接收器表格 migrateID 中的移轉資料:
{"ID":1,"name":"John","course":"Computer Science"}
{"ID":2,"name":"Jane","course":"BioTechnology"}
{"ID":3,"name":"Tony","course":"Electronics"}

CASE 2:來源資料提供接收器表格之 IDENTITY 欄位的值,而且是「主索引鍵」欄位。

範例:JSON 來源檔案 sampleID.json

{"ID":1, "name":"John", "course":"Computer Science"}
{"ID":2, "name":"Jane", "course":"BioTechnology"}
{"ID":3, "name":"Tony", "course":"Electronics"}

建立 / 產生組態檔。您在接收器組態樣板 (建議) 中提供 ID 資料欄的 ignoreFields 轉換。

"transforms" : { "ignoreFields" : ["ID"] }

資料移轉成功。系統會略過提供的 ID 值,並自動產生 IDENTITY 資料欄值。

Oracle NoSQL Database 接收器表格 migrateID 中的移轉資料:
{"ID":1002,"name":"John","course":"Computer Science"}
{"ID":1001,"name":"Jane","course":"BioTechnology"}
{"ID":1003,"name":"Tony","course":"Electronics"}

您可以在沒有 IDENTITY 資料欄的 ignoreFields 轉換的情況下建立 / 產生組態檔。

資料移轉成功。來源提供的 ID 值會複製到 sink 表格的 ID 資料欄中。

當您嘗試在不提供 ID 值的情況下,將其他列插入表格時,序列產生器會嘗試自動產生 ID 值。順序產生器的開始值為 1。因此,產生的 ID 值可能會複製槽位表中現有的其中一個 ID 值。由於這是違反主索引鍵限制條件,因此會傳回錯誤且不會插入資料列。

如需詳細資訊,請參閱順序產生器

為了避免主索引鍵限制條件違規,順序產生器必須以不會與接收器表格中現有 ID 值衝突的值開始序列。若要使用 START WITH 屬性來進行此修改,請參閱下面的範例:

範例Oracle NoSQL Database sink 表格 migrateID 中的移轉資料:
{"ID":1,"name":"John","course":"Computer Science"}
{"ID":2,"name":"Jane","course":"BioTechnology"}
{"ID":3,"name":"Tony","course":"Electronics"}
若要尋找適當的序列產生器值以插入 ID 資料欄,請使用下列查詢擷取 ID 欄位的最大值:
SELECT max(ID) FROM migrateID
輸出:
{"Column_1":3}
接收器表格中 ID 資料欄的最大值為 3。您希望序列產生器開始產生超過 3 的 ID 值,以避免重複。您可以使用下列陳述式,將序列產生器的 START WITH 屬性更新為 4:
ALTER Table migrateID (MODIFY ID GENERATED BY DEFAULT AS IDENTITY (START WITH 4))

這會在 4 開始序列。

現在,當您在不提供 ID 值的情況下將列插入槽表時,順序產生器會從 4 開始自動產生 ID 值,以計算 ID 的重複。

如需轉換組態參數的詳細資訊,請參閱轉換組態樣板主題。

執行 runMigrator 指令

擷取的 NoSQL 資料庫移轉程式檔案中提供 runMigrator 執行檔。您必須在系統上安裝 Java 11 或更新版本與 bash,才能順利執行 runMigrator 命令。

您可以使用兩種方式執行 runMigrator 命令:
  1. 使用 runMigrator 命令的程式實際執行選項建立組態檔,如下所示。
    [~]$ ./runMigrator
    configuration file is not provided. Do you want to generate configuration? (y/n)                                                                              
     
    [n]: y
    ...
    ...
    • 當您呼叫 runMigrator 公用程式時,它會提供一系列的程式實際執行選項,並根據每個選項的選項建立組態檔。
    • 公用程式建立組態檔之後,您可以選擇在相同的執行中繼續移轉活動,或儲存組態檔以供日後移轉。
    • 無論您決定繼續或延緩所產生組態檔的移轉活動,該檔案將可供編輯或自訂,以符合您的未來需求。您可以稍後使用自訂配置檔案進行遷移。
  2. 使用 -c--config 選項,以 JSON 格式傳送手動建立的組態檔作為程式實際執行參數。您必須先手動建立配置檔案,才能使用 -c--config 選項執行 runMigrator 指令。如需來源與接收器組態參數的任何說明,請參閱 Oracle NoSQL Database Migrator Reference
    [~]$ ./runMigrator -c </path/to/the/configuration/json/file>

日誌記錄移轉器進度

NoSQL 資料庫移轉程式工具提供選項,可將追蹤、除錯及進度訊息列印至標準輸出或檔案。此選項對於追蹤移轉作業的進度很有用,特別適用於非常大的表格或資料集。

  • 日誌層級

    若要透過 NoSQL 資料庫移轉器工具控制記錄行為,請將 --log-level 或 -l 程式實際執行參數傳送至 runMigrator 命令。您可以傳遞適當的日誌層次值,指定要寫入的日誌資訊量。

    $./runMigrator --log-level <loglevel>
    範例:
    $./runMigrator --log-level debug

    表格 - NoSQL 資料庫移轉器支援的日誌層次

    日誌層級 描述
    警告 列印錯誤與警告。
    資訊 ( 預設值 ) 列印資料移轉的進度狀態,例如驗證來源、驗證接收器、建立表格,以及已移轉的資料記錄數。
    除錯 列印其他除錯資訊。
    全部 列印一切。此層次會開啟所有層次的記錄日誌。
  • 日誌檔:
    您可以使用 --log-file-f 參數來指定日誌檔的名稱。如果將 --log-file 作為程式實際執行參數傳遞至 runMigrator 命令,NoSQL 資料庫移轉器會將所有日誌訊息寫入檔案,否則會將標準輸出寫入檔案。
    $./runMigrator --log-file <log file name>
    範例:
    $./runMigrator --log-file nosql_migrator.log

針對 Oracle NoSQL Database Migrator 使用案例示範

瞭解如何使用 Oracle NoSQL Database Migrator 執行特定使用案例的資料移轉。您可以在每個使用案例中找到詳細的系統化說明,其中包含執行移轉的程式碼範例。

本文包含下列主題:

Oracle NoSQL Database Cloud Service 移轉至 JSON 檔案

此範例顯示如何使用 Oracle NoSQL Database Migrator 將 NoSQL 表格的資料和綱要定義從 Oracle NoSQL Database Cloud Service (NDCS) 複製到 JSON 檔案。

使用案例

組織決定使用 Oracle NoSQL Database Cloud Service (NDCS) 資料訓練模型,以預測未來行為並提供個人化建議。他們可以將 NDCS 表格的資料定期複製到 JSON 檔案,並將其套用至分析引擎以分析和訓練模型。這有助於他們將分析查詢與低延遲關鍵路徑分開。

範例

針對示範,讓我們看看如何將名為 myTable 的 NoSQL 表格的資料和綱要定義從 NDCS 移轉至 JSON 檔案。
先決條件
  • 識別移轉的來源和接收器。
    • 來源:Oracle NoSQL Database Cloud Service
    • 接收器:JSON 檔案
  • 識別您的 OCI 雲端證明資料,並將其擷取到 OCI 組態檔中。將組態檔儲存在 /home/.oci/config 中。請參閱取得證明資料
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 識別您 Oracle NoSQL Database Cloud Service 的區域端點和區間名稱。
    • 端點:us-phoenix-1
    • 區間:developers
程序
myTable 的資料和綱要定義從 Oracle NoSQL Database Cloud Service 移轉至 JSON 檔案:
  1. 開啟命令提示字元,然後瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  2. 若要使用 NoSQL 資料庫移轉程式產生組態檔,請執行不含任何程式實際執行參數的 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator
  3. 因為您未提供組態檔作為程式實際執行參數,所以公用程式會提示您立即產生組態。輸入 y
    Configuration file is not provided. Do you want to generate
    configuration? (y/n) [n]: y
    
    Generating a configuration file interactively.
    
    
  4. 根據公用程式的提示,選擇「來源」組態的選項。
    Enter a location for your config [./migrator-config.json]: /home/<user>/nosqlMigrator/NDCS2JSON
    Select the source: 
    1) nosqldb
    2) nosqldb_cloud
    3) file
    4) object_storage_oci
    5) aws_s3
    #? 2
    
    Configuration for source type=nosqldb_cloud
    Enter endpoint URL or region ID of the Oracle NoSQL Database Cloud: us-phoenix-1
    Select the authentication type: 
    1) credentials_file
    2) instance_principal
    3) delegation_token
    #? 1
    Enter path to the file containing OCI credentials [/home/<user>/.oci/config]:
    Enter the profile name in OCI credentials file [DEFAULT]: 
    Enter the compartment name or id of the table []: developers
    Enter table name: myTable
    Include TTL data? If you select 'yes' TTL of rows will also 
    be included in the exported data.(y/n) [n]: 
    Enter percentage of table read units to be used for migration operation. (1-100) [90]:
    Enter store operation timeout in milliseconds. (1-30000) [5000]:
  5. 根據公用程式的提示,選擇「接收器」組態的選項。
    Select the sink:
    1) nosqldb
    2) nosqldb_cloud
    3) file
    #? 3
    Configuration for sink type=file
    Enter path to a file to store JSON data: /home/apothula/nosqlMigrator/myTableJSON
    Would you like to store JSON in pretty format? (y/n) [n]: y
    Would you like to migrate the table schema also? (y/n) [y]: y
    Enter path to a file to store table schema: /home/apothula/nosqlMigrator/myTableSchema
  6. 根據公用程式的提示,選擇來源資料轉換的選項。預設值為 n
    Would you like to add transformations to source data? (y/n) [n]:
  7. 輸入您的選擇以決定當任何記錄都無法移轉時,是否要繼續移轉。
    Would you like to continue migration in case of any record/row is failed to migrate?: (y/n) [n]:
    
  8. 公用程式會在畫面上顯示產生的組態。
    generated configuration is:
    {
      "source": {
        "type": "nosqldb_cloud",
        "endpoint": "us-phoenix-1",
        "table": "myTable",
        "compartment": "developers",
        "credentials": "/home/apothula/.oci/config",
        "credentialsProfile": "DEFAULT",
        "readUnitsPercent": 90,
        "requestTimeoutMs": 5000
      },
      "sink": {
        "type": "file",
        "format": "json",
        "schemaPath": "/home/apothula/nosqlMigrator/myTableSchema",
        "pretty": true,
        "dataPath": "/home/apothula/nosqlMigrator/myTableJSON"
      },
      "abortOnError": true,
      "migratorVersion": "1.0.0"
    }
  9. 最後,公用程式會提示您選擇是否要繼續使用產生的組態檔進行移轉。預設選項是 y

    附註:

    如果選取 n,您可以使用產生的組態檔,使用 ./runMigrator -c./runMigrator --config 選項來執行移轉。
    would you like to run the migration with above configuration?
    If you select no, you can use the generated configuration file to run the migration using
    ./runMigrator --config /home/apothula/nosqlMigrator/NDCS2JSON
    (y/n) [y]:
  10. NoSQL 資料庫移轉器會將您的資料和綱要從 NDCS 移轉至 JSON 檔案。
    Records provided by source=10,Records written to sink=10,Records failed=0.
    Elapsed time: 0min 1sec 277ms
    Migration completed.
驗證

若要驗證移轉,您可以開啟 JSON Sink 檔案並檢視綱要和資料。

-- Exported myTable Data
 
[~/nosqlMigrator]$cat myTableJSON
{
  "id" : 10,
  "document" : {
    "course" : "Computer Science",
    "name" : "Neena",
    "studentid" : 105
  }
}
{
  "id" : 3,
  "document" : {
  "course" : "Computer Science",
    "name" : "John",
    "studentid" : 107
  }
}
{
  "id" : 4,
  "document" : {
    "course" : "Computer Science",
    "name" : "Ruby",
    "studentid" : 100
  }
}
{
  "id" : 6,
  "document" : {
    "course" : "Bio-Technology",
    "name" : "Rekha",
    "studentid" : 104
  }
}
{
  "id" : 7,
  "document" : {
    "course" : "Computer Science",
    "name" : "Ruby",
    "studentid" : 100
  }
}
{
  "id" : 5,
  "document" : {
    "course" : "Journalism",
    "name" : "Rani",
    "studentid" : 106
  }
}
{
  "id" : 8,
  "document" : {
    "course" : "Computer Science",
    "name" : "Tom",
    "studentid" : 103
  }
}
{
  "id" : 9,
  "document" : {
    "course" : "Computer Science",
    "name" : "Peter",
    "studentid" : 109
  }
}
{
  "id" : 1,
  "document" : {
    "course" : "Journalism",
    "name" : "Tracy",
    "studentid" : 110
  }
}
{
  "id" : 2,
  "document" : {
    "course" : "Bio-Technology",
    "name" : "Raja",
    "studentid" : 108
  }
}
-- Exported myTable Schema
 
[~/nosqlMigrator]$cat myTableSchema
CREATE TABLE IF NOT EXISTS myTable (id INTEGER, document JSON, PRIMARY KEY(SHARD(id)))

Oracle NoSQL Database 內部部署移轉至 Oracle NoSQL Database Cloud Service

此範例顯示如何使用 Oracle NoSQL Database Migrator 將 NoSQL 表格的資料和綱要定義從 Oracle NoSQL Database 複製到 Oracle NoSQL Database Cloud Service (NDCS)。

使用案例

身為開發人員,您正在探索可避免為現有 NoSQL 資料庫 KVStore 工作負載管理資源、叢集及資源回收的額外負荷。您決定將現有的內部部署 KVStore 工作負載移轉至 Oracle NoSQL Database Cloud Service ,因為 NDCS 會自動管理它們。

範例

對於示範,讓我們看看如何將名為 myTable 的 NoSQL 表格的資料和綱要定義從 NoSQL 資料庫 KVStore 移轉至 NDCS。我們也將使用此使用案例,透過傳送預先建立的組態檔來顯示如何執行 runMigrator 公用程式。
先決條件
  • 識別移轉的來源和接收器。
    • 來源:Oracle NoSQL Database
    • 接收器:Oracle NoSQL Database Cloud Service
  • 識別您的 OCI 雲端證明資料,並將其擷取到 OCI 組態檔中。將組態檔儲存在 /home/.oci/config 中。請參閱使用 Oracle NoSQL Database Cloud Service 中的取得證明資料
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 識別您 Oracle NoSQL Database Cloud Service 的區域端點和區間名稱。
    • 端點:us-phoenix-1
    • 區間:developers
  • 識別下列內部部署 KVStore 詳細資訊:
    • storeName: kvstore
    • helperHosts: <hostname>:5000
    • 表格:myTable
程序
myTable 的資料和綱要定義從 NoSQL 資料庫 KVStore 移轉至 NDCS:
  1. 使用識別的 Source 和 Sink 詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收組態範本
    {
      "source" : {
        "type" : "nosqldb",
        "storeName" : "kvstore",
        "helperHosts" : ["<hostname>:5000"],
        "table" : "myTable",
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "myTable",
        "compartment" : "developers",
        "schemaInfo" : {
          "schemaPath" : "<complete/path/to/the/JSON/file/with/DDL/commands/for/the/schema/definition>",
          "readUnits" : 100,
          "writeUnits" : 100,
          "storageSize" : 1
        },
        "credentials" : "<complete/path/to/oci/config/file>",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.0.0"
    }
  2. 開啟命令提示字元,然後瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config-c 選項傳遞配置檔案,以執行 runMigrator 指令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator --config <complete/path/to/the/JSON/config/file>
    
  4. 公用程式會繼續進行資料移轉,如下所示。
    Records provided by source=10, Records written to sink=10, Records failed=0.
    Elapsed time: 0min 10sec 426ms
    Migration completed.
驗證

若要驗證移轉,您可以登入 NDCS 主控台,並確認 myTable 是使用來源資料建立的。

從 JSON 檔案來源移轉至 Oracle NoSQL Database Cloud Service

此範例顯示使用 Oracle NoSQL Database Migrator 將資料從 JSON 檔案來源複製到 Oracle NoSQL Database Cloud Service

在評估多個選項後,組織完成了 Oracle NoSQL Database Cloud Service 作為其 NoSQL 資料庫平台。來源內容為 JSON 檔案格式,因此他們正在尋找將它們移轉至 Oracle NoSQL Database Cloud Service 的方法。

在此範例中,您將學習從名為 SampleData.json 的 JSON 檔案移轉資料。您可以傳送預先建立的組態檔來執行 runMigrator 公用程式。如果未提供配置檔案作為執行時期參數,runMigrator 公用程式會提示您透過互動式程序產生配置。

先決條件
  • 識別移轉的來源和接收器。
    • 來源:JSON 來源檔案。
      SampleData.json 是來源檔案。它包含多份 JSON 文件,每行一個文件 (以新行字元分隔)。
      {"id":6,"val_json":{"array":["q","r","s"],"date":"2023-02-04T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-03-04T02:38:57.520Z","numfield":30,"strfield":"foo54"},{"datefield":"2023-02-04T02:38:57.520Z","numfield":56,"strfield":"bar23"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":3,"val_json":{"array":["g","h","i"],"date":"2023-02-02T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-02T02:38:57.520Z","numfield":28,"strfield":"foo3"},{"datefield":"2023-02-02T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":7,"val_json":{"array":["a","b","c"],"date":"2023-02-20T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-01-20T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-01-22T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":4,"val_json":{"array":["j","k","l"],"date":"2023-02-03T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-03T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-02-03T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
    • 接收器:Oracle NoSQL Database Cloud Service
  • 識別您的 OCI 雲端證明資料並將其擷取至組態檔。將配置檔案儲存在 /home/user/.oci/config 中。如需詳細資訊,請參閱使用 Oracle NoSQL Database Cloud Service 中的取得證明資料
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    region=us-ashburn-1
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 識別您 Oracle NoSQL Database Cloud Service 的區域端點和區間名稱。
    • 端點:us-ashburn-1
    • 區間:Training-NoSQL
  • 識別 JSON 來源檔案的下列詳細資訊:
    • schemaPath: <absolute path to the schema definition file containing DDL statements for the NoSQL table at the sink>.

      在此範例中,DDL 檔案為 schema_json.ddl
      create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY
          KEY(id));

      如果未提供 schemaPathOracle NoSQL Database Migrator 會提供使用預設綱要建立表格的選項。如需詳細資訊,請參閱 Workflow for Oracle NoSQL Database Migrator 中的 Identify the Source and Sink 主題。

    • 資料路徑:<absolute path to a file or directory containing the JSON data for migration>
程序
若要將 JSON 來源檔案從 SampleData.json 移轉至 Oracle NoSQL Database Cloud Service ,請執行下列動作:
  1. 使用識別的來源和接收器詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收組態範本
    {
      "source" : {
        "type" : "file",
        "format" : "json",
        "schemaInfo" : {
          "schemaPath" : "[~/nosql-migrator-1.5.0]/schema_json.ddl"
        },
        "dataPath" : "[~/nosql-migrator-1.5.0]/SampleData.json"
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "Migrate_JSON",
        "compartment" : "Training-NoSQL",
        "includeTTL" : false,
        "schemaInfo" : {
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1,
          "useSourceSchema" : true
        },
        "credentials" : "/home/user/.oci/config",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
  2. 開啟命令提示字元並瀏覽至您擷取 Oracle NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config-c 選項傳遞配置檔案,以執行 runMigrator 指令。
    [~/nosql-migrator-1.5.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. 公用程式會繼續進行資料移轉,如下所示。Migrate_JSON 表格會在 sink 建立,並搭配 schemaPath 中提供的綱要。
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [cloud sink] : start loading DDLs
    [cloud sink] : executing DDL: create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY KEY(id)),limits: [100, 60, 1]
    [cloud sink] : completed loading DDLs
    [cloud sink] : start loading records
    [json file source] : start parsing JSON records from file: SampleData.json
    [INFO] migration completed.
    Records provided by source=4, Records written to sink=4, Records failed=0, Records skipped=0.
    Elapsed time: 0min 5sec 778ms
    Migration completed.
驗證
若要驗證移轉,您可以登入 Oracle NoSQL Database Cloud Service 主控台,並確認 Migrate_JSON 表格是以來源資料建立。如需存取主控台的程序,請參閱 Oracle NoSQL Database Cloud Service 文件中的 Accessing the Service from the Infrastructure Console 文章。

圖 - Oracle NoSQL Database Cloud Service 主控台表格



圖 - Oracle NoSQL Database Cloud Service 主控台表格資料



從 MongoDB JSON 檔案移轉至 Oracle NoSQL Database Cloud Service

此範例顯示如何使用 Oracle NoSQL Database Migrator 將 Mongo-DB 格式化資料複製到 Oracle NoSQL Database Cloud Service (NDCS)。

使用案例

在評估多個選項後,組織完成了 Oracle NoSQL Database Cloud Service 作為其 NoSQL 資料庫平台。由於 NoSQL 表格和資料位於 MongoDB,因此他們正在尋找將這些表格和資料移轉至 Oracle NDCS 的方法。

您可以在來源組態樣板中指定檔案或目錄,以複製包含 MongoDB 匯出之 JSON 資料的檔案或目錄進行移轉。

範例 MongoDB 格式的 JSON 檔案如下:
{"_id":0,"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
{"_id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}
{"_id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}
{"_id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}
{"_id":4,"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}

MongoDB 支援兩種 JSON 檔案格式的擴充功能:正規模式放鬆模式。您可以在「正規」或「放鬆」模式中,提供使用 mongoexport 工具產生的 MongoDB 格式 JSON 檔案。NoSQL 資料庫移轉程式支援兩種模式進行移轉。

如需 MongoDB Extended JSON (v2) 檔案的詳細資訊,請參閱 mongoexport_formats

如需有關產生 MongoDB 格式 JSON 檔案的詳細資訊,請參閱 mongoexport

範例

對於示範,請讓我們看看如何將 MongoDB 格式的 JSON 檔案移轉至 NDCS。我們會在此範例中使用手動建立的組態檔。
先決條件
  • 識別移轉的來源和接收器。
    • 來源:MongoDB 格式的 JSON 檔案
    • 接收器:Oracle NoSQL Database Cloud Service
  • 使用 mongoexport 公用程式從 Mongo DB 擷取資料。如需詳細資訊,請參閱 mongoexport
  • 在 sink 中建立一個與 Mongo-DB 格式 JSON 檔案中資料相符的表格綱要 NoSQL 表格。或者,您可以將 defaultSchema 屬性設為 true,指示 NoSQL 資料庫移轉器使用預設綱要結構建立表格。

    附註:

    對於 MongoDB 格式化的 JSON 來源,表格的預設綱要將會是:
    CREATE TABLE IF NOT EXISTS <tablename>(ID STRING, DOCUMENT JSON,PRIMARY KEY(SHARD(ID))
    
    其中:
    • tablename = 表格組態的值。
    • ID = mongoDB 匯出之 JSON 來源檔案的 _id 值。
    • DOCUMENT = 將 mongoDB 匯出之 JSON 來源檔案的完整內容聚總至 DOCUMENT 資料欄,但不包括 _id 欄位。
  • 識別您的 OCI 雲端證明資料,並將其擷取到 OCI 組態檔中。將配置檔案儲存在 /home/.oci/config。請參閱使用 Oracle NoSQL Database Cloud Service 中的取得證明資料
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 識別您 Oracle NoSQL Database Cloud Service 的區域端點和區間名稱。
    • 端點:us-phoenix-1
    • 區間:developers
程序

若要將 MongoDB 格式的 JSON 資料移轉至 Oracle NoSQL Database Cloud Service

  1. 使用識別的 Source 和 Sink 詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收組態範本
    {
      "source" : {
        "type" : "file",
        "format" : "mongodb_json",
        "dataPath" : "<complete/path/to/the/MongoDB/Formatted/JSON/file>"
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "mongoImport",
        "compartment" : "developers",
        "schemaInfo" : {
          "defaultSchema" : true,
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1
        },
        "credentials" : "<complete/path/to/the/oci/config/file>",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.0.0"
    }
  2. 開啟命令提示字元,然後瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config-c 選項傳遞配置檔案,以執行 runMigrator 指令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator --config <complete/path/to/the/JSON/config/file>
    
  4. 公用程式會繼續進行資料移轉,如下所示。
    Records provided by source=29,353, Records written to sink=29,353, Records failed=0.
    Elapsed time: 9min 9sec 630ms
    Migration completed.
驗證

若要驗證移轉,您可以登入 NDCS 主控台,並確認 myTable 是使用來源資料建立的。

從 DynamoDB JSON 檔案移轉至 Oracle NoSQL Database

此範例顯示如何使用 Oracle NoSQL Database Migrator 將 DynamoDB JSON 檔案複製到 Oracle NoSQL Database。

使用案例:

在評估多個選項之後,組織會透過 DynamoDB 資料庫完成 Oracle NoSQL Database。組織想要將表格和資料從 DynamoDB 移轉至 Oracle NoSQL Database (內部部署)。

如需詳細資訊,請參閱將 DynamoDB 表格對應至 Oracle NoSQL 表格

您可以在來源組態樣板中指定路徑,以移轉包含 DynamoDB 匯出之 JSON 資料的檔案或目錄。

範例 DynamoDB 格式的 JSON 檔案如下:
{"Item":{"Id":{"N":"101"},"Phones":{"L":[{"L":[{"S":"555-222"},{"S":"123-567"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"570004"},"Street":{"S":"21 main"},"DoorNum":{"N":"201"},"City":{"S":"London"}}},"FirstName":{"S":"Fred"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"Smith"},"FavColors":{"SS":["Red","Green"]},"Age":{"N":"22"}}}
{"Item":{"Id":{"N":"102"},"Phones":{"L":[{"L":[{"S":"222-222"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"560014"},"Street":{"S":"32 main"},"DoorNum":{"N":"1024"},"City":{"S":"Wales"}}},"FirstName":{"S":"John"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"White"},"FavColors":{"SS":["Blue"]},"Age":{"N":"48"}}}

您可以將匯出的 DynamoDB 表格資料從 AWS S3 儲存體複製到本機掛載的檔案系統。

範例:

對於此示範,您將瞭解如何將 DynamoDB JSON 檔案移轉至 Oracle NoSQL Database (內部部署)。您將在此範例中使用手動建立的組態檔。

必備條件

  • 識別移轉的來源和接收器。
    • 來源:DynamoDB JSON 檔案
    • 接收器:Oracle NoSQL Database (內部部署)
  • 若要將 DynamoDB 表格資料匯入 Oracle NoSQL Database,您必須先將 DynamoDB 表格匯出至 S3。請參考將 DynamoDB 表格資料匯出至 Amazon S3 所提供的步驟,以匯出表格。匯出時,請選取 DynamoDB JSON 格式。匯出的資料包含多個 gzip 檔案中的 DynamoDB 表格資料,如下所示。
    / 01639372501551-bb4dd8c3 
    |-- 01639372501551-bb4dd8c3 ==> exported data prefix
    |----data
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data
    |----manifest-files.json
    |----manifest-files.md5
    |----manifest-summary.json
    |----manifest-summary.md5
    |----_started
  • 您必須從 AWS s3 下載檔案。下載後的檔案結構如下所示。
    download-dir/01639372501551-bb4dd8c3     
    |----data    
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data   
    |----manifest-files.json   
    |----manifest-files.md5   
    |----manifest-summary.json   
    |----manifest-summary.md5   
    |----_started

程序

將 DynamoDB JSON 資料移轉至 Oracle NoSQL Database:
  1. 使用識別的來源準備組態檔 (JSON 格式),然後接收 details.See 來源組態樣板接收器組態樣板
    您可以選擇下列其中一個選項。
    • 選項 1:使用預設綱要組態將 DynamoDB 表格匯入為 JSON 文件。
      此處的 defaultSchemaTRUE,因此移轉程式會在接收器建立預設綱要。您必須指定 DDBPartitionKey 和對應的 NoSQL 資料欄類型。否則會發生錯誤。
      {
       "source" : {
         "type" : "file",
         "format" : "dynamodb_json",
         "dataPath" : "<complete/path/to/the/DynamoDB/Formatted/JSON/file>"
       },
       "sink" : {
          "type" : "nosqldb",
          "table" : "<table_name>",
          "storeName" : "kvstore",
          "helperHosts" : ["<hostname>:5000"]
          "schemaInfo" : {
             "defaultSchema" : true,    
             "DDBPartitionKey" : "<PrimaryKey:Datatype>",
           },  
        },
        "abortOnError" : true,
        "migratorVersion" : "1.0.0"
      }
      對於 DynamoDB JSON 來源,表格的預設綱要如下所示:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type], DOCUMENT JSON, 
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      其中

      TABLE_NAME = 為組態中的槽位 'table' 提供的值

      DDBPartitionKey_name = 為組態中的 partiiton 金鑰提供的值

      DDBPartitionKey_type = 提供給組態中分割區索引鍵的資料類型值

      DDBSortKey_name = 提供給組態中排序索引鍵的值 (如果有的話)

      DDBSortKey_type = 提供給組態中排序索引鍵的資料類型值 (如果有的話)

      DOCUMENT = 聚總至 NoSQL JSON 資料欄之 Dynamo DB 表格項目的分割區和排序索引鍵以外的所有屬性

    • 選項 2:使用使用者提供的綱要檔案,將 DynamoDB 表格匯入為固定資料欄。
      此處的 defaultSchemaFALSE,您指定 schemaPath 作為包含 DDL 敘述句的檔案。如需詳細資訊,請參閱將 DynamoDB 類型對應至 Oracle NoSQL 類型

      附註:

      如果 Dynamo DB 表格的資料類型在 NoSQL 中不受支援,則移轉會失敗。
      以下顯示範例綱要檔案。
      CREATE TABLE IF NOT EXISTS sampledynDBImp (AccountId INTEGER,document JSON, 
      PRIMARY KEY(SHARD(AccountId)));
      綱要檔案是用來在 sink 建立表格作為移轉的一部分。只要提供主索引鍵資料,就會插入輸入 JSON 記錄,否則會發生錯誤。

      附註:

      如果輸入資料未包含特定資料欄 (主索引鍵除外) 的值,則會使用資料欄預設值。建立表格時,預設值應為資料欄定義的一部分。例如 id INTEGER not null default 0。如果資料欄沒有預設定義,則如果未提供資料欄的值,則會插入 SQL NULL。
      {
        "source" : {
          "type" : "file",
          "format" : "dynamodb_json",
          "dataPath" : "<complete/path/to/the/DynamoDB/Formatted/JSON/file>"
        },
        "sink" : {
          "type" : "nosqldb",
          "table" : "<table_name>",
          "schemaInfo" : {
            "defaultSchema" : false,
            "readUnits" : 100,
            "writeUnits" : 60,
            "schemaPath" : "<full path of the schema file with the DDL statement>",
            "storageSize" : 1
          },
          "storeName" : "kvstore",
          "helperHosts" : ["<hostname>:5000"]
        },
        "abortOnError" : true,
        "migratorVersion" : "1.0.0"
      }
  2. 開啟命令提示字元,然後瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config-c 選項傳遞配置檔案,以執行 runMigrator 指令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 公用程式會繼續進行資料移轉,如下所示。
    Records provided by source=7..,
    Records written to sink=7,
    Records failed=0,
    Records skipped=0.
    Elapsed time: 0 min 2sec 50ms
    Migration completed.

驗證

在 KVStore 中啟動 SQL 提示。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
確認已使用來源資料建立新表格:
desc <table_name>
SELECT * from <table_name>

從 AWS S3 中的 DynamoDB JSON 檔案移轉至 Oracle NoSQL Database Cloud Service

此範例顯示如何使用 Oracle NoSQL Database Migrator 將儲存在 AWS S3 存放區中的 DynamoDB JSON 檔案複製到 Oracle NoSQL Database Cloud Service (NDCS)。

使用案例:

在評估多個選項之後,組織會透過 DynamoDB 資料庫完成 Oracle NoSQL Database Cloud Service。組織想要將表格和資料從 DynamoDB 移轉至 Oracle NoSQL Database Cloud Service。

如需詳細資訊,請參閱將 DynamoDB 表格對應至 Oracle NoSQL 表格

您可以在來源組態樣板中指定路徑,以從 AWS S3 儲存移轉包含 DynamoDB 匯出 JSON 資料的檔案。

範例 DynamoDB 格式的 JSON 檔案如下:
{"Item":{"Id":{"N":"101"},"Phones":{"L":[{"L":[{"S":"555-222"},{"S":"123-567"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"570004"},"Street":{"S":"21 main"},"DoorNum":{"N":"201"},"City":{"S":"London"}}},"FirstName":{"S":"Fred"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"Smith"},"FavColors":{"SS":["Red","Green"]},"Age":{"N":"22"}}}
{"Item":{"Id":{"N":"102"},"Phones":{"L":[{"L":[{"S":"222-222"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"560014"},"Street":{"S":"32 main"},"DoorNum":{"N":"1024"},"City":{"S":"Wales"}}},"FirstName":{"S":"John"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"White"},"FavColors":{"SS":["Blue"]},"Age":{"N":"48"}}}

您可以將 DynamoDB 表格匯出至 Exporting DynamoDB 表格資料至 Amazon S3 中指定的 AWS S3 儲存體。

範例:

對於此示範,您將瞭解如何將 AWS S3 來源中的 DynamoDB JSON 檔案移轉至 NDCS。您將在此範例中使用手動建立的組態檔。

必備條件

  • 識別移轉的來源和接收器。
    • 來源:DynamoDB AWS S3 中的 JSON 檔案
    • Sink:Oracle NoSQL Database Cloud Service
  • 識別需要移轉至 NDCS 之 AWS DynamoDB 中的表格。使用您的證明資料登入您的 AWS 主控台。請前往 DynamoDB 。在表格下,選擇要移轉的表格。
  • 建立物件儲存桶並將表格匯出至 S3。從您的 AWS 主控台,前往 S3 。在儲存桶底下,建立新的物件儲存桶。返回 DynamoDB,然後按一下匯出至 S3 。提供來源表格和目的地 S3 儲存桶,然後按一下匯出
    請參考將 DynamoDB 表格資料匯出至 Amazon S3 所提供的步驟,以匯出表格。匯出時,請選取 DynamoDB JSON 格式。匯出的資料包含多個 gzip 檔案中的 DynamoDB 表格資料,如下所示。
    / 01639372501551-bb4dd8c3 
    |-- 01639372501551-bb4dd8c3 ==> exported data prefix
    |----data
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data
    |----manifest-files.json
    |----manifest-files.md5
    |----manifest-summary.json
    |----manifest-summary.md5
    |----_started
  • 您需要有證明資料 (包括存取金鑰 ID 和密碼存取金鑰) 和組態檔 (證明資料和選擇性組態),才能從移轉器存取 AWS S3。請參閱設定並檢視組態設定值,瞭解組態檔的詳細資訊。如需建立存取金鑰的詳細資訊,請參閱 Creating a key pairs
  • 識別您的 OCI 雲端證明資料,並將其擷取到 OCI 組態檔中。將組態檔儲存在本位目錄 (~/.oci/config) 下的 .oci 目錄中。請參閱取得證明資料以瞭解詳細資訊。
    [DEFAULT]              
    tenancy=ocid1.tenancy.oc1....         
    user=ocid1.user.oc1....         
    fingerprint= 43:d1:....         
    key_file=</fully/qualified/path/to/the/private/key/>              
    pass_phrase=<passphrase>
  • 識別您 Oracle NoSQL Database 的區域端點和區間名稱。例如,
    • 端點:us-phoenix-1
    • 區間:開發人員

程序

將 DynamoDB JSON 資料移轉至 Oracle NoSQL Database:
  1. 使用識別的來源和接收器詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收組態範本
    您可以選擇下列其中一個選項。
    • 選項 1:使用預設綱要組態將 DynamoDB 表格匯入為 JSON 文件。
      此處的 defaultSchemaTRUE,因此移轉程式會在接收器建立預設綱要。您必須指定 DDBPartitionKey 和對應的 NoSQL 資料欄類型。否則會發生錯誤。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : true,
            "readUnits" : 100,
            "writeUnits" : 60,
            "DDBPartitionKey" : "<PrimaryKey:Datatype>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
      對於 DynamoDB JSON 來源,表格的預設綱要如下所示:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type], DOCUMENT JSON, 
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      其中

      TABLE_NAME = 為組態中的槽位 'table' 提供的值

      DDBPartitionKey_name = 為組態中的 partiiton 金鑰提供的值

      DDBPartitionKey_type = 提供給組態中分割區索引鍵的資料類型值

      DDBSortKey_name = 提供給組態中排序索引鍵的值 (如果有的話)

      DDBSortKey_type = 提供給組態中排序索引鍵的資料類型值 (如果有的話)

      DOCUMENT = 聚總至 NoSQL JSON 資料欄之 Dynamo DB 表格項目的分割區和排序索引鍵以外的所有屬性

    • 選項 2:使用使用者提供的綱要檔案,將 DynamoDB 表格匯入為固定資料欄。
      此處的 defaultSchemaFALSE,您指定 schemaPath 作為包含 DDL 敘述句的檔案。如需詳細資訊,請參閱將 DynamoDB 類型對應至 Oracle NoSQL 類型

      附註:

      如果 Dynamo DB 表格的資料類型在 NoSQL 中不受支援,則移轉會失敗。
      以下顯示範例綱要檔案。
      CREATE TABLE IF NOT EXISTS sampledynDBImp (AccountId INTEGER,document JSON, 
      PRIMARY KEY(SHARD(AccountId)));
      綱要檔案是用來在 sink 建立表格作為移轉的一部分。只要提供主索引鍵資料,就會插入輸入 JSON 記錄,否則會發生錯誤。

      附註:

      如果輸入資料未包含特定資料欄 (主索引鍵除外) 的值,則會使用資料欄預設值。建立表格時,預設值應為資料欄定義的一部分。例如 id INTEGER not null default 0。如果資料欄沒有預設定義,則如果未提供資料欄的值,則會插入 SQL NULL。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : false,
            "readUnits" : 100,
            "writeUnits" : 60,
            "schemaPath" : "<full path of the schema file with the DDL statement>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
  2. 開啟命令提示字元,然後瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config-c 選項傳遞配置檔案,以執行 runMigrator 指令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 公用程式會繼續進行資料移轉,如下所示。
    Records provided by source=7..,
    Records written to sink=7,
    Records failed=0,
    Records skipped=0.
    Elapsed time: 0 min 2sec 50ms
    Migration completed.

驗證

您可以登入 NDCS 主控台,並確認新表格是以來源資料建立。

Oracle NoSQL Database Cloud Service 區域之間移轉

此範例顯示使用 Oracle NoSQL Database Migrator 來執行跨區域移轉。

使用案例

組織會使用 Oracle NoSQL Database Cloud Service 來儲存及管理其資料。決定將資料從現有區域複寫至較新的區域以供測試之用,然後再啟動生產環境的新區域。

在此使用案例中,您將學習使用 NoSQL Database MigratorAshburn 區域中 user_data 表格的資料複製到 Phoenix 區域。

您可以傳送預先建立的組態檔來執行 runMigrator 公用程式。如果您未提供組態檔作為程式實際執行參數,runMigrator 公用程式會提示您透過互動式程序產生組態。

先決條件
  • Oracle NoSQL 下載頁面下載 Oracle NoSQL Database Migrator ,並將內容擷取至您的機器。如需詳細資訊,請參閱 Oracle NoSQL Database Migrator 的工作流程
  • 識別移轉的來源和接收器。
    • 來源:阿什本區域中的 user_data 表格。
      user_data 表格包含下列資料:
      {"id":40,"firstName":"Joanna","lastName":"Smith","otherNames":[{"first":"Joanna","last":"Smart"}],"age":null,"income":75000,"address":{"city":"Houston","number":401,"phones":[{"area":null,"kind":"work","number":1618955},{"area":451,"kind":"home","number":4613341},{"area":481,"kind":"mobile","number":4613382}],"state":"TX","street":"Tex Ave","zip":95085},"connections":[70,30,40],"email":"joanna.smith123@reachmail.com","communityService":"**"}
      
      {"id":10,"firstName":"John","lastName":"Smith","otherNames":[{"first":"Johny","last":"Good"},{"first":"Johny2","last":"Brave"},{"first":"Johny3","last":"Kind"},{"first":"Johny4","last":"Humble"}],"age":22,"income":45000,"address":{"city":"Santa Cruz","number":101,"phones":[{"area":408,"kind":"work","number":4538955},{"area":831,"kind":"home","number":7533341},{"area":831,"kind":"mobile","number":7533382}],"state":"CA","street":"Pacific Ave","zip":95008},"connections":[30,55,43],"email":"john.smith@reachmail.com","communityService":"****"}
      
      {"id":20,"firstName":"Jane","lastName":"Smith","otherNames":[{"first":"Jane","last":"BeGood"}],"age":22,"income":55000,"address":{"city":"San Jose","number":201,"phones":[{"area":608,"kind":"work","number":6538955},{"area":931,"kind":"home","number":9533341},{"area":931,"kind":"mobile","number":9533382}],"state":"CA","street":"Atlantic Ave","zip":95005},"connections":[40,75,63],"email":"jane.smith201@reachmail.com","communityService":"*****"}
      
      {"id":30,"firstName":"Adam","lastName":"Smith","otherNames":[{"first":"Adam","last":"BeGood"}],"age":45,"income":75000,"address":{"city":"Houston","number":301,"phones":[{"area":618,"kind":"work","number":6618955},{"area":951,"kind":"home","number":9613341},{"area":981,"kind":"mobile","number":9613382}],"state":"TX","street":"Indian Ave","zip":95075},"connections":[60,45,73],"email":"adam.smith201reachmail.com","communityService":"***"}
      指定您來源的區域端點或服務端點和區間名稱。
      • 端點:us-ashburn-1
      • 區間:ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya
    • 接收器:鳳凰城區域中的 user_data 表格。
      識別您接收器的區域端點或服務端點和區間名稱。
      • 端點:us-phoenix-1
      • 區間:ocid1.compartment.oc1..aaaaaaaaleiwplazhwmicoogv3tf4lum4m4nzbcv5wfjmoxuz3doreagvdma

      指定接收器表格綱要。

      您可以使用與來源表格相同的表格名稱和綱要。如需其他綱要選項的資訊,請參閱 Workflow for Oracle NoSQL Database Migrator 中的 Identify the Source and Sink 主題

  • 識別您兩個區域的 OCI 雲端證明資料,並將它們擷取到組態檔中。將您機器上的組態檔儲存在 /home/<user>/.oci/config 的位置。如需詳細資訊,請參閱取得證明資料

附註:

  • 如果區域在不同的租用戶之下,您必須在 /home/<user>/.oci/config 檔案中為每個區域提供適當的 OCI 雲端證明資料。
  • 如果區域在相同的租用戶之下,您可以在 /home/<user>/.oci/config 檔案中擁有單一設定檔。

在此範例中,區域的租用戶不同。DEFAULT 設定檔包含 Ashburn 區域的 OCI 證明資料,而 DEFAULT2 則包含 Phoenix 區域的 OCI 證明資料。

在移轉器組態檔 endpoint 參數 (來源和接收器組態樣板) 中,您可以提供服務端點 URL 或區域的區域 ID。如需 Oracle NoSQL Database Cloud Service 支援的資料區域清單及其服務端點 URL,請參閱 Oracle NoSQL Database Cloud Service 文件中的資料區域和關聯服務 URL
[DEFAULT]
user=ocid1.user.oc1....
fingerprint=fd:96:....
tenancy=ocid1.tenancy.oc1....
region=us-ashburn-1
key_file=</fully/qualified/path/to/the/private/key/>
pass_phrase=abcd


[DEFAULT2]
user=ocid1.user.oc1....
fingerprint=1b:68:....
tenancy=ocid1.tenancy.oc1....
region=us-phoenix-1
key_file=</fully/qualified/path/to/the/private/key/>
pass_phrase=23456
程序
若要將 user_data 表格從 Ashburn 區域移轉至 Phoenix 區域,請執行下列動作:
  1. 使用識別的來源和接收器詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收器組態範本
    {
      "source" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "user_data",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya",
        "credentials" : "/home/<user>/.oci/config",
        "credentialsProfile" : "DEFAULT",
        "readUnitsPercent" : 100,
        "includeTTL" : false,
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "user_data",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaaleiwplazhwmicoogv3tf4lum4m4nzbcv5wfjmoxuz3doreagvdma",
        "includeTTL" : false,
        "schemaInfo" : {
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1,
          "useSourceSchema" : true
        },
        "credentials" : "/home/<user>/.oci/config",
        "credentialsProfile" : "DEFAULT2",
        "writeUnitsPercent" : 90,
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
  2. 在您的機器上,瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。您可以從命令行介面存取 runMigrator 命令。
  3. 使用 --config 或 -c 選項傳送配置檔案,以執行 runMigrator 指令。
    [~/nosql-migrator-1.5.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. 公用程式會繼續進行資料移轉,如下所示。user_data 表格建立於 sink,其綱要與來源表格相同,因為您在 sink 組態樣板中將 useSourceSchema 參數設為 true。
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [cloud sink] : start loading DDLs
    [cloud sink] : executing DDL: CREATE TABLE IF NOT EXISTS user_data (id INTEGER, firstName STRING, lastName STRING, otherNames ARRAY(RECORD(first STRING, last STRING)), age INTEGER, income INTEGER, address JSON, connections ARRAY(INTEGER), email STRING, communityService STRING, PRIMARY KEY(SHARD(id))),limits: [100, 60, 1]
    [cloud sink] : completed loading DDLs
    [cloud sink] : start loading records
    migration completed.
    Records provided by source=5, Records written to sink=5, Records failed=0, Records skipped=0.
    Elapsed time: 0min 5sec 603ms
    Migration completed.

    附註:

    • 如果 sink 中已經有與來源表格相同綱要的表格存在,就會覆寫具有相同主索引鍵的資料列,因為您在組態樣板中提供 overwrite 參數為 true。
    • 如果 Sink 中的表格已經有與來源表格不同的綱要,移轉將會失敗。
驗證

若要驗證移轉,您可以登入 Phoenix 區域中的 Oracle NoSQL Database Cloud Service 主控台。確認 Ashburn 區域中 user_data 表格的來源資料已複製到此區域中的 user_data 表格。如需存取主控台的程序,請參閱從基礎架構主控台存取服務文章。

Oracle NoSQL Database Cloud Service 移轉至 OCI 物件儲存

此範例顯示 Cloud Shell 的 Oracle NoSQL Database Migrator 用法。

使用案例

新創企業計畫使用 Oracle NoSQL Database Cloud Service 作為其資料儲存解決方案。該公司希望使用 Oracle NoSQL Database Migrator 將資料從 Oracle NoSQL Database Cloud Service 中的表格複製到 OCI Object Storage,以定期備份其資料。作為符合成本效益的措施,他們想要從所有 OCI 使用者都可存取的 Cloud Shell 執行 NoSQL Database Migrator 公用程式。

在此使用案例中,您將學習將 NoSQL Database Migrator 公用程式複製到訂閱區域中的 Cloud Shell,並執行資料移轉。您可以將來源資料從 Oracle NoSQL Database Cloud Service 表格移轉至 OCI 物件儲存中的 JSON 檔案。

您可以傳送預先建立的組態檔來執行 runMigrator 公用程式。如果您未提供組態檔作為程式實際執行參數,runMigrator 公用程式會提示您透過互動式程序產生組態。

先決條件
  • Oracle NoSQL Database MigratorOracle NoSQL 下載頁面下載至您的本機機器。
  • 從雲端主控台的開發人員工具功能表啟動 Cloud Shell。Web 瀏覽器會開啟您的主目錄。按一下 Cloud Shell 視窗右上角的雲端 Shell 功能表,然後從下拉式清單中選取上傳選項。在快顯視窗中,從本機機器拖放 Oracle NoSQL Database Migrator 套件,或按一下從您的電腦選取選項,從本機機器選取套件,然後按一下上傳按鈕。您也可以將 Oracle NoSQL Database Migrator 套裝程式直接從本機機器拖放至 Cloud Shell 的本位目錄。擷取套件的內容。
  • 識別備份的來源與接收器。
    • 來源:Oracle NoSQL Database Cloud Service 阿什本區域中的 NDCSupload 表格。

      如需示範,請考慮 NDCSupload 表格中的下列資料:
      {"id":1,"name":"Jane Smith","email":"iamjane@somemail.co.us","age":30,"income":30000.0}
      {"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
      {"id":3,"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
      {"id":4,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0} 
      

      識別來源的端點和區間 ID。對於端點,您可以提供區域 ID 或服務端點。如需 Oracle NoSQL Database Cloud Service 支援的資料區域清單,請參閱資料區域和關聯的服務 URL

      • 端點:us-ashburn-1
      • 區間 ID:ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya
    • 接收器:OCI 物件儲存桶中的 JSON 檔案。

      識別 OCI 物件儲存的區域端點、命名空間、儲存桶以及前置碼。如需詳細資訊,請參閱存取 Oracle Cloud Object Storage 。如需 OCI 物件儲存服務端點清單,請參閱物件儲存端點

      • 端點:us-ashburn-1
      • 桶: Migrate_oci
      • 前綴:Delegation
      • 命名空間:<> 如果您未提供命名空間,此公用程式會使用租用戶的預設命名空間。

      附註:

      如果物件儲存的儲存桶位於不同的區間,請確定您具備在儲存桶中寫入物件的權限。如需設定原則的詳細資訊,請參閱讓使用者將物件寫入物件儲存的儲存桶
程序
若要使用 Cloud Shell 將 NDCSupload 表格從 Oracle NoSQL Database Cloud Service 備份至 OCI 物件儲存的儲存桶中的 JSON 檔案,請執行下列動作:
  1. 使用識別的來源和接收器詳細資訊準備組態檔 (JSON 格式)。請參閱來源組態範本接收組態範本。確定您將來源和接收器組態樣板中的 useDelegationToken 參數設為 true
    此使用案例使用下列組態樣板:
    {
      "source" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "NDCSupload",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya",
        "useDelegationToken" : true,
        "readUnitsPercent" : 90,
        "includeTTL" : true,
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "object_storage_oci",
        "format" : "json",
        "endpoint" : "us-ashburn-1",
        "namespace" : "",
        "bucket" : "Migrate_oci",
        "prefix" : "Delegation",
        "chunkSize" : 32,
        "compression" : "",
        "useDelegationToken" : true
      },
      "abortOnError" : true,
      "migratorVersion" : "1.6.0"
    }
  2. 從您的 Cloud Shell,瀏覽至您擷取 NoSQL Database Migrator 公用程式的目錄。
  3. 使用 --config 或 -c 選項傳送配置檔案,以執行 runMigrator 指令
    [~/nosql-migrator-1.6.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. NoSQL Database Migrator 公用程式會繼續進行資料移轉。由於您將 useDelegationToken 參數設為 true ,因此 Cloud Shell 會在執行 NoSQL Database Migrator 公用程式時,自動使用委派記號進行認證。NoSQL Database Migrator 將您的資料從 NDCSupload 表格複製到 Object Storage 貯體 Migrate_oci 中的 JSON 檔案。查看日誌以順利備份資料。
    [INFO] creating source from given configuration:
    [INFO] source creation completed
    [INFO] creating sink from given configuration:
    [INFO] sink creation completed
    [INFO] creating migrator pipeline
    [INFO] migration started
    [INFO] [OCI OS sink] : writing table schema to Delegation/Schema/schema.ddl
    [INFO] [OCI OS sink] : start writing records with prefix Delegation
    [INFO] migration completed.
    Records provided by source=4,Records written to sink=4,Records failed=0.
    Elapsed time: 0min 0sec 486ms
    Migration completed.

    附註:

    資料會複製到檔案:Migrate_oci/NDCSupload/Delegation/Data/000000.json

    視 sink 組態樣板中的 chunkSize 參數而定,來源資料可以分割成相同目錄中的數個 JSON 檔案。

    綱要會複製到檔案:Migrate_oci/NDCStable1/Delegation/Schema/schema.ddl

驗證

若要驗證資料備份,請登入 Oracle NoSQL Database Cloud Service 主控台。瀏覽整個功能表 Storage > Object Storage & Archive Storage > Buckets。從 Migrate_oci 儲存桶中的 NDCSupload/Delegation 目錄存取檔案。如需存取主控台的程序,請參閱從基礎架構主控台存取服務文章。

從 CSV 檔案移轉至 Oracle NoSQL Database

此範例顯示使用 Oracle NoSQL Database Migrator 將資料從 CSV 檔案複製到 Oracle NoSQL Database

範例

在評估多個選項後,組織完成了 Oracle NoSQL Database 作為其 NoSQL 資料庫平台。由於來源內容為 CSV 檔案格式,因此他們正在尋找將它們移轉至 Oracle NoSQL Database 的方式。

在此範例中,您將學習從名為 course.csv 的 CSV 檔案移轉資料,其中包含大學提供之各種課程的相關資訊。您可以從 runMigrator 公用程式產生配置檔案。

您也可以使用識別的來源和接收器詳細資訊準備配置檔案。請參閱 Oracle NoSQL Database Migrator Reference

先決條件
  • 識別移轉的來源和接收器。
    • 來源:CSV 檔案

      在此範例中,來源檔案為 course.csv

      
      cat [~/nosql-migrator-1.5.0]/course.csv
      1,"Computer Science", "San Francisco", "2500"
      2,"Bio-Technology", "Los Angeles", "1200"
      3,"Journalism", "Las Vegas", "1500"
      4,"Telecommunication", "San Francisco", "2500"
      
    • 接收器:Oracle NoSQL Database
  • CSV 檔案必須符合 RFC4180 格式。
  • 為目標表格 course 的綱要建立包含 DDL 命令的檔案。表格定義必須符合與資料欄數目及其類型有關的 CSV 資料檔。

    在此範例中,DDL 檔案為 mytable_schema.ddl

    
    cat [~/nosql-migrator-1.5.0]/mytable_schema.ddl
    create table course (id INTEGER, name STRING, location STRING, fees INTEGER, PRIMARY KEY(id));
    
程序
若要將 CSV 檔案資料從 course.csv 移轉至 Oracle NoSQL Database Service,請執行下列步驟:
  1. 開啟命令提示字元並瀏覽至您擷取 Oracle NoSQL Database Migrator 公用程式的目錄。
  2. 若要使用 Oracle NoSQL Database Migrator 產生組態檔,請執行不含任何程式實際執行參數的 runMigrator 命令。
    [~/nosql-migrator-1.5.0]$./runMigrator
  3. 因為您未提供組態檔作為程式實際執行參數,所以公用程式會提示您立即產生組態。輸入 y
    您可以選擇配置檔案的位置,或按 Enter key 保留預設位置。
    
    Configuration file is not provided. Do you want to generate
    configuration? (y/n) [n]: y
    Generating a configuration file interactively.
    
    Enter a location for your config [./migrator-config.json]: 
    ./migrator-config.json already exist. Do you want to overwrite?(y/n) [n]: y
    
  4. 根據公用程式的提示,選擇「來源」組態的選項。
    
    Select the source: 
    1) nosqldb
    2) nosqldb_cloud
    3) file
    4) object_storage_oci
    5) aws_s3
    #? 3
    
    Configuration for source type=file
    Select the source file format: 
    1) json
    2) mongodb_json
    3) dynamodb_json
    4) csv
    #? 4
    
  5. 提供來源 CSV 檔案的路徑。此外,根據公用程式的提示,您可以選擇重新排列資料欄名稱、選取編碼方法,以及裁剪目標表格的裁適評估空間。
    
    Enter path to a file or directory containing csv data: [~/nosql-migrator-1.5.0]/course.csv
    Does the CSV file contain a headerLine? (y/n) [n]: n
    Do you want to reorder the column names of NoSQL table with respect to
    CSV file columns? (y/n) [n]: n
    Provide the CSV file encoding. The supported encodings are:
    UTF-8,UTF-16,US-ASCII,ISO-8859-1. [UTF-8]: 
    Do you want to trim the tailing spaces? (y/n) [n]: n
    
  6. 根據公用程式的提示,選擇「接收器」組態的選項。
    
    Select the sink:
    1) nosqldb
    2) nosqldb_cloud
    #? 1
    Configuration for sink type=nosqldb
    Enter store name of the Oracle NoSQL Database: mystore
    Enter comma separated list of host:port of Oracle NoSQL Database: <hostname>:5000
    
  7. 根據公用程式的提示,提供目標表格的名稱。
    
    Enter fully qualified table name: course
    
  8. 輸入設定 TTL 值的選擇。預設值為 n
    
    Include TTL data? If you select 'yes' TTL value provided by the
    source will be set on imported rows. (y/n) [n]: n
    
  9. 根據公用程式的提示,指定是否必須透過 Oracle NoSQL Database Migrator 工具來建立目標表格。如果表格已經建立,建議您提供 n。如果沒有建立表格,公用程式就會要求包含目標表格綱要之 DDL 命令的檔案路徑。
    
    Would you like to create table as part of migration process?
    Use this option if you want to create table through the migration tool.
    If you select yes, you will be asked to provide a file that contains
    table DDL or to use schema provided by the source or default schema.
    (y/n) [n]: y
    Enter path to a file containing table DDL: [~/nosql-migrator-1.5.0]/mytable_schema.ddl
    Is the store secured? (y/n) [y]: n
    would you like to overwrite records which are already present?
    If you select 'no' records with same primary key will be skipped [y/n] [y]: y
    Enter store operation timeout in milliseconds. [5000]:
    Would you like to add transformations to source data? (y/n) [n]: n
    
  10. 輸入您的選擇以決定當任何記錄都無法移轉時,是否要繼續移轉。
    
    Would you like to continue migration if any data fails to be migrated? 
    (y/n) [n]: n
    
  11. 公用程式會在畫面上顯示產生的組態。
    
    Generated configuration is:
    {
      "source" : {
        "type" : "file",
        "format" : "csv",
        "dataPath" : "[~/nosql-migrator-1.5.0]/course.csv",
        "hasHeader" : false,
        "csvOptions" : {
          "encoding" : "UTF-8",
          "trim" : false
        }
      },
      "sink" : {
        "type" : "nosqldb",
        "storeName" : "mystore",
        "helperHosts" : ["<hostname>:5000"],
        "table" : "migrated_table",
        "query" : "",
        "includeTTL" : false,
        "schemaInfo" : {
          "schemaPath" : "[~/nosql-migrator-1.5.0]/mytable_schema.ddl"
        },
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
    
  12. 最後,公用程式會提示您指定是否要使用產生的組態檔繼續進行移轉。預設選項是 y
    注意:如果您選取 n,就可以使用產生的組態檔來執行移轉。指定 ./runMigrator -c./runMigrator --config 選項。
    
    Would you like to run the migration with above configuration?
    If you select no, you can use the generated configuration file to
    run the migration using:
    ./runMigrator --config ./migrator-config.json
    (y/n) [y]: y
    
    
  13. NoSQL 資料庫移轉程式會將您的資料從 CSV 檔案複製到 Oracle NoSQL Database
    
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [nosqldb sink] : start loading DDLs
    [nosqldb sink] : executing DDL: create table course (id INTEGER, name STRING, location STRING, fees INTEGER, PRIMARY KEY(id))
    [nosqldb sink] : completed loading DDLs
    [nosqldb sink] : start loading records
    [csv file source] : start parsing CSV records from file: course.csv
    migration completed. Records provided by source=4, Records written to sink=4, Records failed=0,Records skipped=0.
    Elapsed time: 0min 0sec 559ms
    Migration completed.
    
驗證
在 KVStore 中啟動 SQL 提示。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
確認已使用來源資料建立新表格:

sql-> select * from course;
{"id":4,"name":"Telecommunication","location":"San Francisco","fees":2500}
{"id":1,"name":"Computer Science","location":"San Francisco","fees":2500}
{"id":2,"name":"Bio-Technology","location":"Los Angeles","fees":1200}
{"id":3,"name":"Journalism","location":"Las Vegas","fees":1500}
 
4 rows returned