Oracle NoSQL Database Migrator 参考

了解 Oracle NoSQL Database Migrator 可用的源、接收器和转换配置模板参数。

本文包含以下主题:

参数

NoSQL 数据库迁移器需要一个配置文件,您可以在其中定义所有参数以执行迁移活动。几个参数在多个源和汇中是常见的。本主题提供这些通用参数的列表。有关单个源或汇特有的其他参数的列表,请参见相应的配置模板部分。

公用配置参数

下面是常用的配置参数。有关示例,请参见各个配置模板部分。

bucket(存储桶)

chunkSize(块大小)

credentials(身份证明)

credentialsProfile(凭证概要文件)

endpoint

格式

名称空间

prefix(前缀)

requestTimeoutM

security(安全性)

type(类型)

useDelegationToken(使用委派令牌)

useInstancePrincipal(使用实例主体)

useOKEWorkloadIdentity

有关示例用例,请参阅使用 OKE 验证从 OCI Object Storage 迁移到 Oracle NoSQL Database Cloud Service

注:您只能选择其中一个验证选项。因此,在配置模板中仅指定以下参数之一: credentialsuseInstancePrincipaluseDelegationTokenuseSessionTokenuseOKEWorkloadIdentity

useSessionToken(使用会话令牌)

要使用基于会话令牌的验证,必须使用 OCI 命令行界面 (Command Line Interface,CLI) 命令生成会话令牌。有关示例用例,请参阅使用会话令牌身份验证从 Oracle NoSQL Database 迁移到 OCI 对象存储

注:

源配置模板

了解每个有效源的源配置文件格式以及每个配置参数的用途。

有关配置文件模板,请参阅 Terminology used with NoSQL Data Migrator 中的 Configuration File

有关每个源的有效汇格式的详细信息,请参见 Sink Configuration Templates

主题

以下主题介绍了 Oracle NoSQL Database Migrator 引用的源配置模板,这些模板用于将数据从给定源复制到有效的接收器。

JSON 文件源

JSON 文件作为 NoSQL 数据库迁移器的源的配置文件格式如下所示。

您可以通过在源配置模板中指定文件路径或目录来迁移 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"}}

源配置模板

"source": {
  "type": "file",
  "format": "json",
  "dataPath": "<path/to/JSON/[file|dir]>",
  "schemaInfo": {
    "schemaPath": "<path/to/schema/file>"
  }
},

来源参数

公用配置参数

唯一配置参数

dataPath(数据路径)

schemaInfo(方案信息)

schemaInfo.schemaPath(schemaInfo.schemaPath)

OCI 对象存储存储桶中的 JSON 文件

OCI 对象存储桶中作为 NoSQL 数据库迁移器的源的 JSON 文件的配置文件格式如下所示。

您可以通过在源配置模板中指定存储桶的名称来迁移 OCI 对象存储存储桶中的 JSON 文件。

OCI 对象存储存储桶中的示例 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-02-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-04T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-04T02:38:57.520Z","numfield":28,"strfield":"foo3"},{"datefield":"2023-02-04T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}

注: OCI Object Storage 源类型的有效接收器类型为 nosqldbnosqldb_cloud

源配置模板

"source" : {
  "type" : "object_storage_oci",
  "format" : "json",
  "endpoint" : "<OCI Object Storage service endpoint URL or region ID>",
  "namespace" : "<OCI Object Storage namespace>",
  "bucket" : "<bucket name>",
  "prefix" : "<object prefix>",
  "schemaInfo" : {
     "schemaObject" : "<object name>"
  },
  "credentials" : "</path/to/oci/config/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>
}

来源参数

公用配置参数

唯一配置参数

schemaInfo(方案信息)

schemaInfo.schemaObject

MongoDB 格式的 JSON 文件

作为 NoSQL 数据库迁移器的源的 MongoDB 格式 JSON 文件的配置文件格式如下所示。

您可以通过在源配置模板中指定文件或目录来迁移 MongoDB 导出的 JSON 数据。

MongoDB 支持 JSON 文件格式的两种扩展类型:规范模式放松模式。您可以在规范或放松模式下提供使用 mongoexport 工具生成的 MongoDB 格式的 JSON 文件。NoSQL 数据库迁移器支持这两种模式进行迁移。

有关 MongoDB Extended JSON (v2) 文件的更多信息,请参见 mongoexport_formats

有关生成 MongoDB 格式的 JSON 文件的更多信息,请参见 mongoexport 了解更多信息。

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"}]}

源配置模板

"source": {
  "type": "file",
  "format": "mongodb_json",
  "dataPath": "</path/to/json/[file|dir]>",
  "schemaInfo": {
    "schemaPath": "</path/to/schema/file>"
  }
}

来源参数

公用配置参数

唯一配置参数

dataPath(数据路径)

schemaInfo(方案信息)

schemaInfo.schemaPath(schemaInfo.schemaPath)

OCI Object Storage 存储桶中 MongoDB 格式的 JSON 文件

OCI Object Storage 存储桶中 MongoDB 格式的 JSON 文件作为 NoSQL 数据库迁移器的源的配置文件格式如下所示。

通过在源配置模板中指定存储桶的名称,可以迁移 OCI 对象存储存储桶中 MongoDB 导出的 JSON 数据。

使用 mongoexport 实用程序从 MongoDB 提取数据,并将其上载到 OCI Object Storage 存储桶。有关更多信息,请参见 mongoexport 。MongoDB 支持 JSON 文件格式的两种扩展类型:规范模式放松模式。OCI 对象存储存储桶支持这两种格式。

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"}]}

注: OCI Object Storage 源类型的有效接收器类型为 nosqldbnosqldb_cloud

源配置模板

"source" : {
  "type" : "object_storage_oci",
  "format" : "mongodb_json",
  "endpoint" : "<OCI Object Storage service endpoint URL or region ID>",
  "namespace" : "<OCI Object Storage namespace>",
  "bucket" : "<bucket name>",
  "prefix" : "<object prefix>",
  "schemaInfo" : {
     "schemaObject" : "<object name>"
  },
  "credentials" : "</path/to/oci/config/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>
}

来源参数

公用配置参数

  1. "credentials" : "/home/user/.oci/config"

  2. "credentials" : "/home/user/security/config"

唯一配置参数

schemaInfo(方案信息)

schemaInfo.schemaObject

存储在 AWS S3 中的 DynamoDB 格式的 JSON 文件

下面显示了作为 NoSQL 数据库迁移器的源的 AWS S3 中 DynamoDB 格式的 JSON 文件的配置文件格式。

您可以通过在源配置模板中指定路径,从 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"},"ttl": {"N": "1734616800"}}}
{"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"},"ttl": {"N": "1734616800"}}}

必须按将 DynamoDB 表数据导出到 Amazon S3 中指定的那样将 DynamoDB 表导出到 AWS S3 存储。

AWS S3 中存储的 DynamoDB 格式 JSON 的有效接收器类型为 nosqldbnosqldb_cloud

源配置模板

"source" : {
  "type" : "aws_s3",
  "format" : "dynamodb_json",
  "ttlAttributeName" : "<DynamoDB exported TTL attribute name>",
  "s3URL" : "<S3 object url>",
  "credentials" : "</path/to/aws/credentials/file>",
  "credentialsProfile" : "<profile name in aws credentials file>"
}

来源参数

公用配置参数

唯一配置参数

s3URL

credentials(身份证明)

credentialsProfile(凭证概要文件)

ttlAttributeName

DynamoDB 格式的 JSON 文件

下面显示了将 DynamoDB 格式的 JSON 文件作为 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"},"ttl": {"N": "1734616800"}}}
{"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"},"ttl": {"N": "1734616800"}}}

您必须将导出的 DynamoDB 表数据从 AWS S3 存储复制到本地挂载的文件系统。

DynamoDB JSON 文件的有效接收器类型为 nosqldbnosqldb_cloud

源配置模板

"source" : {
  "type" : "file",
  "format" : "dynamodb_json",
  "ttlAttributeName" : <DynamoDB exported TTL attribute name>,
  "dataPath" : "<path/to/[file|dir]/containing/exported/DDB/tabledata>"
}

来源参数

公用配置参数

唯一配置参数

dataPath(数据路径)

ttlAttributeName

Oracle NoSQL 数据库

Oracle NoSQL Database 作为 NoSQL Database Migrator 源的配置文件格式如下所示。

通过在源配置模板中指定表名,可以从 Oracle NoSQL Database 迁移表。

Oracle NoSQL Database 表样例如下所示:

{"id":20,"firstName":"Jane","lastName":"Smith","otherNames":[{"first":"Jane","last":"teacher"}],"age":25,"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],"expenses":null}
{"id":10,"firstName":"John","lastName":"Smith","otherNames":[{"first":"Johny","last":"chef"}],"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],"expenses":null}
{"id":30,"firstName":"Adam","lastName":"Smith","otherNames":[{"first":"Adam","last":"handyman"}],"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],"expenses":null}

源配置模板

"source" : {
  "type": "nosqldb",
  "storeName" : "<store name>",
  "helperHosts" : ["hostname1:port1","hostname2:port2,..."],
  "table" : "<fully qualified table name>",
  "queryFilter" : "<query predicate>",
  "includeTTL": <true|false>,
  "security" : "</path/to/store/security/file>",
  "requestTimeoutMs" : 5000
}

来源参数

公用配置参数

唯一配置参数

storeName(存储名称)

helperHosts(主机)

table(表)

includeTTL

queryFilter(查询过滤器)

受支持的表达式:

Migrator 实用程序支持查询谓词中的以下表达式。有关详细的语法和示例,请参阅 SQL Reference Guide

Field step expressions
Map-filter step expressions
Array-filter step expressions
Array-slice step expressions
Arithmetic operators
Value comparison operators
Sequence comparison operators
Logical operators AND, OR and NOT
IS NULL and IS NOT NULL operators
IN operator
Regular expression
EXISTS operator
IS OF TYPE operator
CONCAT operator
CAST expression
Row functions

下表提供了不同表达式的有效查询谓词示例以及生成的导出数据。

注:

表 - 示例查询谓词

查询/谓词 导出的数据
"id=10" 来自给定表的 id=10 的行。
“name= ’ John ’” 给定表中名称为“John”的行。
“年龄 >30 岁,性别 = 男性” 给定表中 age 大于 30 且 gender = 'male' 的行。
“$row.address.state = ‘ CA ’” 给定表中 address JSON 列中包含 state 字段的行 = 'CA'。在此处,您可以使用谓词中的字段步骤表达式从 JSON 字段访问所需的字段值。
“$row.expenses.keys($value > 1000) = ‘ food ’” 给定表中的行,其中 expenses 类别 = ‘ food ’且 expenses 金额大于 1000。在此处,您可以使用 map-filter 步骤表达式来选择映射/记录字段的字段名称(关键字)或字段值。
“$row.expenses.keys($value > $.clothes) = ‘ food ’” 给定表中的行,其中 expenses 类别 = ‘ food ’和 expenses 金额大于 clothes 的支出。
”[$row.address.phones[$element.area = 650].kind] = ‘工作’” 给定表中的行,其中数组中电话的区号 = 650,键入 =“work”。在此处,使用 array-filter step expression ,因为 address 字段是 JSON 数组。
“[connections[$element > 100 and $pos < 10]] > 100” 给定表中的行,最多 10 个连接,连接数 > 100。在此处,使用 array-filter step expression ,因为 connections 字段是一个数组。
“$row.income IS NULL” 给定表中的行,这些行没有已知收入。有关更多详细信息,请参见 IS NULL and IS NOT NULL Operators
“a in (1,5,4)” 给定表中的行,其中 a 为 1、5 或 4。有关更多详细信息,请参见 IN Operator
((a,b) in((1,‘ a ’),(5,‘ g ’),(4,‘ t'))” 给定表中的行,其中(a 为 1,b 为‘ a ’)OR(a 为 5,b 为‘ g ’)OR(a 为 4,b 为‘ t ’)。
“regex_like(name,‘ j.* ’)” 名称以 j 开头的给定表中的行。有关更多详细信息,请参阅正则表达式
“EXISTS $row.person.address.zipcode” 给定表中的行,其中 person json 列的地址为 zipcode。有关更多详细信息,请参阅存在运算符
“$row.address is of type (string)” 给定表中的行,其中 address 列属于字符串类型。有关详细信息,请参见 Is-Of-Type Operator
“lastLogin > CAST(‘ 2022-10-01 ’ AS TIMESTAMP)” 最后一次登录在 2022 年 10 月 1 日之后的给定表中的行。有关更多详细信息,请参见 Cast Expressions
“$row.connections[ ]=any 1” connections 数组列具有元素 1 的给定表中的行。有关更多详细信息,请参见 Sequence Comparison Operators
“modification_time($row) >= 2022-10-01 ’” 给定表中的行,在 2022 年 10 月 1 日当天或之后进行修改。有关更多详细信息,请参阅行上的函数
“expiration_time_millis($row) > 0” 给定表中的未过期行。有关更多详细信息,请参阅行上的函数

Oracle NoSQL Database Cloud Service

Oracle NoSQL Database Cloud Service 作为 NoSQL Database Migrator 源的配置文件格式如下所示。

您可以通过指定表位于源配置模板中的区间的名称或 OCID,从 Oracle NoSQL Database Cloud Service 迁移表。

Oracle NoSQL Database Cloud Service 示例表如下所示:

{"id":20,"firstName":"Jane","lastName":"Smith","otherNames":[{"first":"Jane","last":"teacher"}],"age":25,"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],"expenses":null}
{"id":10,"firstName":"John","lastName":"Smith","otherNames":[{"first":"Johny","last":"chef"}],"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],"expenses":null}
{"id":30,"firstName":"Adam","lastName":"Smith","otherNames":[{"first":"Adam","last":"handyman"}],"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],"expenses":null}

源配置模板

"source" : {
  "type" : "nosqldb_cloud",
  "endpoint" : "<Oracle NoSQL Cloud Service endpoint URL or region ID>",
  "table" : "<table name>",
  "queryFilter" : "<query predicate>",
  "compartment" : "<OCI compartment name or id>",
  "credentials" : "<path/to/oci/credential/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>,
  "readUnitsPercent" : <table readunits percent>,
  "includeTTL": <true|false>,
  "requestTimeoutMs" : <timeout in milli seconds>
}

来源参数

公用配置参数

唯一配置参数

table(表)

区间

注:如果 useInstancePrincipal 参数设置为 true,则区间必须指定区间 OCID 而不是名称。

readUnitsPercent

includeTTL

queryFilter(查询过滤器)

受支持的表达式:

Migrator 实用程序支持查询谓词中的以下表达式。有关详细的语法和示例,请参阅 SQL Reference Guide

Field step expressions
Map-filter step expressions
Array-filter step expressions
Array-slice step expressions
Arithmetic operators
Value comparison operators
Sequence comparison operators
Logical operators AND, OR and NOT
IS NULL and IS NOT NULL operators
IN operator
Regular expression
EXISTS operator
IS OF TYPE operator
CONCAT operator
CAST expression
Row functions

下表提供了不同表达式的有效查询谓词示例以及生成的导出数据。

注:

表 - 示例查询谓词

查询/谓词 导出的数据
"id=10" 来自给定表的标识 = 10 的行。
“name= ’ John ’” 给定表中名称为“John”的行。
“年龄 >30 岁,性别 = 男性” 给定表中 age 大于 30 且 gender = 'male' 的行。
“$row.address.state = ‘ CA ’” 给定表中 address JSON 列中包含 state 字段的行 = 'CA'。在此处,您可以使用谓词中的字段步骤表达式从 JSON 字段访问所需的字段值。
“$row.expenses.keys($value > 1000) = ‘ food ’” 给定表中的行,其中 expenses 类别 = ‘ food ’且 expenses 金额大于 1000。在此处,您可以使用 map-filter 步骤表达式来选择映射/记录字段的字段名称(关键字)或字段值。
“$row.expenses.keys($value > $.clothes) = ‘ food ’” 给定表中的行,其中 expenses 类别 = ‘ food ’和 expenses 金额大于 clothes 的支出。
”[$row.address.phones[$element.area = 650].kind] = ‘工作’” 给定表中的行,其中数组中电话的区号 = 650,键入 =“work”。在此处,使用 array-filter step expression ,因为 address 字段是 JSON 数组。
“[connections[$element > 100 and $pos < 10]] > 100” 给定表中的行,最多 10 个连接,连接数 > 100。在此处,使用 array-filter step expression ,因为 connections 字段是一个数组。
“$row.income IS NULL” 给定表中的行,这些行没有已知收入。有关更多详细信息,请参见 IS NULL and IS NOT NULL Operators
“a in (1,5,4)” 给定表中的行,其中 a 为 1、5 或 4。有关更多详细信息,请参见 IN Operator
((a,b) in((1,‘ a ’),(5,‘ g ’),(4,‘ t'))” 给定表中的行,其中(a 为 1,b 为‘ a ’)OR(a 为 5,b 为‘ g ’)OR(a 为 4,b 为‘ t ’)。
“regex_like(name,‘ j.* ’)” 名称以 j 开头的给定表中的行。有关更多详细信息,请参阅正则表达式
“EXISTS $row.person.address.zipcode” 给定表中的行,其中 person json 列的地址为 zipcode。有关更多详细信息,请参见 Exists Operator
“$row.address is of type (string)” 给定表中的行,其中 address 列属于字符串类型。有关详细信息,请参见 Is-Of-Type Operator
“lastLogin > CAST(‘ 2022-10-01 ’ AS TIMESTAMP)” 最后一次登录在 2022 年 10 月 1 日之后的给定表中的行。有关更多详细信息,请参见 Cast Expressions
“$row.connections[ ]=any 1” connections 数组列具有元素 1 的给定表中的行。有关更多详细信息,请参见 Sequence Comparison Operators
“modification_time($row) >= 2022-10-01 ’” 给定表中的行,在 2022 年 10 月 1 日当天或之后进行修改。有关更多详细信息,请参阅行上的函数
“expiration_time_millis($row) > 0” 给定表中的未过期行。有关更多详细信息,请参阅行上的函数

CSV 文件源

下面显示了作为 NoSQL 数据库迁移器的源的 CSV 文件的配置文件格式。CSV 文件必须符合 RFC4180 格式。

您可以通过在源配置模板中指定文件名或目录来迁移 CSV 文件或包含 CSV 数据的目录。

CSV 文件样例如下所示:

1,"Computer Science","San Francisco","2500"
2,"Bio-Technology","Los Angeles","1200"
3,"Journalism","Las Vegas","1500"
4,"Telecommunication","San Francisco","2500"

源配置模板

"source" : {
  "type" : "file",
  "format" : "csv",
  "dataPath": "</path/to/a/csv/[file|dir]>",
  "hasHeader" : <true | false>,
  "columns" : ["column1", "column2", ....],
  "csvOptions": {
    "encoding": "<character set encoding>",
    "trim": "<true | false>"
 }
}

来源参数

公用配置参数

唯一配置参数

dataPath(数据路径)

注: CSV 文件只能包含标量值。不支持导入包含复杂类型(例如 MAP、RECORD、ARRAY 和 JSON)的 CSV 文件。NoSQL Database Migrator 工具不检查输入 CSV 文件中的数据是否正确。NoSQL 数据库迁移器工具支持导入符合 RFC4180 格式的 CSV 数据。包含不符合 RFC4180 标准的数据的 CSV 文件可能无法正确复制或可能导致错误。如果输入数据损坏,NoSQL Database Migrator 工具将不解析 CSV 记录。如果在迁移过程中遇到任何错误,NoSQL 数据库迁移程序工具会记录有关失败的输入记录的信息,以便进行调试和提供信息。有关更多详细信息,请参阅使用 Oracle NoSQL Data Migrator 中的 Logging Migrator Progress

hasHeader

csvOptions(csvOptions)

csvOptions.encoding(csvOptions.encoding)

csvOptions.trim

OCI 对象存储存储桶中的 CSV 文件

下面显示了作为 NoSQL 数据库迁移器源的 OCI 对象存储存储桶中 CSV 文件的配置文件格式。CSV 文件必须符合 RFC4180 格式。

您可以通过在源配置模板中指定存储桶的名称来迁移 OCI 对象存储存储桶中的 CSV 文件。

OCI Object Storage 存储桶中的示例 CSV 文件如下所示:

1,"Computer Science","San Francisco","2500"
2,"Bio-Technology","Los Angeles","1200"
3,"Journalism","Las Vegas","1500"
4,"Telecommunication","San Francisco","2500"

注: OCI Object Storage 源类型的有效接收器类型为 nosqldbnosqldb_cloud

源配置模板

"source" : {
  "type" : "object_storage_oci",
  "format" : "csv",
  "endpoint" : "<OCI Object Storage service endpoint URL or region ID>",
  "namespace" : "<OCI Object Storage namespace>",
  "bucket" : "<bucket name>",
  "prefix" : "<object prefix>",
  "credentials" : "</path/to/oci/config/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>,
   "hasHeader" : <true | false>,
   "columns" : ["column1", "column2", ....],
   "csvOptions" : {
     "encoding" : "<character set encoding>",
     "trim" : <true | false>
   }
 }

来源参数

公用配置参数

唯一配置参数

hasHeader

csvOptions(csvOptions)

csvOptions.encoding(csvOptions.encoding)

csvOptions.trim

Sink 配置模板

了解每个有效接收器的接收器配置文件格式以及每个配置参数的用途。

有关配置文件模板,请参阅 Terminology used with NoSQL Data Migrator 中的 Configuration File

有关每个接收器的有效源格式的详细信息,请参见 Source Configuration Templates

主题

以下主题介绍了 Oracle NoSQL Database Migrator 引用的汇配置模板,用于将数据从有效源复制到给定汇。

JSON 文件接收器

JSON 文件作为 NoSQL 数据库迁移器的接收器的配置文件格式如下所示。

接收器配置模板

"sink" : {
  "type" : "file",
  "format" : "json",
  "dataPath": "</path/to/a/directory>",
  "schemaPath" : "<path/to/a/file>",
  "pretty" : <true|false>,
  "useMultiFiles" : <true|false>,
  "chunkSize" : <size in MB>
}

接收器参数

公用配置参数

唯一配置参数

dataPath(数据路径)

schemaPath(方案路径)

pretty

useMultiFiles(使用多文件)

Parquet 文件

Parquet 文件作为 NoSQL 数据库迁移器的接收器的配置文件格式如下所示。

接收器配置模板

"sink" : {
  "type" : "file",
  "format" : "parquet",
  "dataPath": "</path/to/a/dir>",
  "chunkSize" : <size in MB>,
  "compression": "<SNAPPY|GZIP|NONE>",
  "parquetOptions": {
    "useLogicalJson": <true|false>,
    "useLogicalEnum": <true|false>,
    "useLogicalUUID": <true|false>,
    "truncateDoubleSpecials": <true|false>
  }
}

接收器参数

公用配置参数

唯一配置参数

dataPath(数据路径)

压缩

parquetOptions(参数选项)

parquetOptions.useLogicalJson

parquetOptions.useLogicalEnum

parquetOptions.useLogicalUUID

parquetOptions.truncateDoubleSpecials

OCI 对象存储存储桶中的 JSON 文件

OCI Object Storage 存储桶中 JSON 文件作为 NoSQL 数据库迁移器的接收器的配置文件格式如下所示。

注: OCI Object Storage 作为接收器的有效源类型为 nosqldbnosqldb_cloud

接收器配置模板

"sink" : {
  "type" : "object_storage_oci",
  "format" : "json",
  "endpoint" : "<OCI Object Storage service endpoint URL or region ID>",
  "namespace" : "<OCI Object Storage namespace>",
  "bucket" : "<bucket name>",
  "prefix" : "<object prefix>",
  "chunkSize" : <size in MB>,
  "pretty" : <true|false>,
  "credentials" : "</path/to/oci/config/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>
}

接收器参数

公用配置参数

唯一配置参数

pretty

OCI 对象存储存储桶中的 Parquet 文件

OCI Object Storage 存储桶中 Parquet 文件作为 NoSQL 数据库迁移器的接收器的配置文件格式如下所示。

注: OCI Object Storage 源类型的有效源类型为 nosqldbnosqldb_cloud

接收器配置模板

"sink" : {
  "type" : "object_storage_oci",
  "format" : "parquet",
  "endpoint" : "<OCI Object Storage service endpoint URL or region ID>",
  "namespace" : "<OCI Object Storage namespace>",
  "bucket" : "<bucket name>",
  "prefix" : "<object prefix>",
  "chunkSize" : <size in MB>,
  "compression": "<SNAPPY|GZIP|NONE>",
  "parquetOptions": {
    "useLogicalJson": <true|false>,
    "useLogicalEnum": <true|false>,
    "useLogicalUUID": <true|false>,
    "truncateDoubleSpecials": <true|false>
  },
  "credentials" : "</path/to/oci/config/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>
}

接收器参数

公用配置参数

唯一配置参数

压缩

parquetOptions(参数选项)

parquetOptions.useLogicalJson

parquetOptions.useLogicalEnum

parquetOptions.useLogicalUUID

parquetOptions.truncateDoubleSpecials

Oracle NoSQL 数据库

Oracle NoSQL Database 作为 NoSQL Database Migrator 的汇的配置文件格式如下所示。

接收器配置模板

"sink" : {
  "type": "nosqldb",
  "storeName" : "<store name>",
  "helperHosts" : ["hostname1:port1","hostname2:port2,..."],
  "security" : "</path/to/store/credentials/file>",
  "table" : "<fully qualified table name>",
  "includeTTL": <true|false>,
  "ttlRelativeDate": "<date-to-use in UTC>",
  "schemaInfo" : {
    "schemaPath" : "</path/to/a/schema/file>",
    "defaultSchema" : <true|false>,
    "useSourceSchema" : <true|false>,
    "DDBPartitionKey" : <"name:type">,
    "DDBSortKey" : "<name:type>"
  },
  "overwrite" : <true|false>,
  "requestTimeoutMs" : <timeout in milli seconds>
}

接收器参数

公用配置参数

唯一配置参数

storeName(存储名称)

helperHosts(主机)

table(表)

includeTTL

ttlRelativeDate(ttlRelativeDate)

schemainfo(schemainfo)

schemaInfo.schemaPath(schemaInfo.schemaPath)

schemaInfo.defaultSchema(schemaInfo.defaultSchema)

schemaInfo.useSourceSchema

schemaInfo.DDBPartitionKey

schemaInfo.DDBSortKey

overwrite

Oracle NoSQL Database Cloud Service

Oracle NoSQL Database Cloud Service 作为 NoSQL 数据库迁移器的接收器的配置文件格式如下所示。

接收器配置模板

"sink" : {
  "type" : "nosqldb_cloud",
  "endpoint" : "<Oracle NoSQL Cloud Service Endpoint>",
  "table" : "<table name>",
  "compartment" : "<OCI compartment name or id>",
  "includeTTL": <true|false>,
  "ttlRelativeDate" : "<date-to-use in UTC>",
  "schemaInfo" : {
    "schemaPath" : "</path/to/a/schema/file>",
    "defaultSchema" : <true|false>,
    "useSourceSchema" : <true|false>,
    "DDBPartitionKey" : <"name:type">,
    "DDBSortKey" : "<name:type>",
    "onDemandThroughput" : <true|false>,
    "readUnits" : <table read units>,
    "writeUnits" : <table write units>,
    "storageSize" : <storage size in GB>
   },
  "credentials" : "</path/to/oci/credential/file>",
  "credentialsProfile" : "<profile name in oci config file>",
  "useInstancePrincipal" : <true|false>,
  "useDelegationToken" : <true|false>,
  "useSessionToken" : <true|false>,
  "useOKEWorkloadIdentity" : <true|false>,
  "writeUnitsPercent" : <table writeunits percent>,
  "requestTimeoutMs" : <timeout in milli seconds>,
  "overwrite" : <true|false>
}

接收器参数

公用配置参数

唯一配置参数


table(表)


区间


includeTTL


ttlRelativeDate(ttlRelativeDate)


schemaInfo(方案信息)


schemaInfo.schemaPath(schemaInfo.schemaPath)

注:defaultSchemaschemaPath 是互斥的。


schemaInfo.defaultSchema(schemaInfo.defaultSchema)


schemaInfo.useSourceSchema


schemaInfo.DDBPartitionKey


schemaInfo.DDBSortKey


schemaInfo.onDemandThroughput(schemaInfo.onDemand 吞吐量)

注:此参数不适用于子表,因为它们共享顶层父表的吞吐量。


schemaInfo.readUnits


schemaInfo.writeUnits


schemaInfo.storageSize(schemaInfo.storageSize)


writeUnitsPercent


overwrite

转换配置模板

本主题介绍了 Oracle NoSQL Database Migrator 支持的不同转换的配置参数。有关完整的配置文件模板,请参阅 Terminology used with NoSQL Data Migrator 中的 Configuration File

借助 Oracle NoSQL Database Migrator,您可以修改数据,即在迁移活动中添加数据转换。您可以在单个迁移中定义多个转换。在这种情况下,转换顺序至关重要,因为源数据按给定顺序进行每个转换。一个转换的输出将成为迁移程序管道中下一个转换的输入。

NoSQL Data Migrator 支持的不同转换包括:

表 - 变换

转换配置属性 您可以使用此转换来…
ignoreFields 在写入接收器之前,忽略源行中标识的列。
includeFields 在写入接收器之前,请包括源行中标识的列。
renameFields 在写入接收器之前,重命名源行中标识的列。
aggregateFields 将多个列从源聚合到汇集中的单个列。在此转换过程中,您还可以标识要在聚合中排除的列。这些字段将从聚合列中跳过。

您可以在下面找到每个支持的转换的配置模板。

无视字段

ignoreFields 转换的配置文件格式如下所示。

转换配置模板

"transforms" : {
  "ignoreFields" : ["<field1>","<field2>",...]
}

转换参数

无视字段

包括字段

includeFields 转换的配置文件格式如下所示。

转换配置模板

"transforms" : {
  "includeFields" : ["<field1>","<field2>",...]
}

转换参数

包括字段

rename 字段

renameFields 转换的配置文件格式如下所示。

转换配置模板

"transforms" : {
  "renameFields" : {
    "<old_name>" : "<new_name>",
    "<old_name>" : "<new_name>,"
    .....
  }
}

转换参数

rename 字段

聚合字段

aggregateFields 转换的配置文件格式如下所示。

转换配置模板

"transforms" : {
  "aggregateFields" : {
    "fieldName" : "name of the new aggregate field",
    "skipFields" : ["<field1>","<field2">,...]
  }
}

转换参数

聚合字段

将 DynamoDB 类型映射到 Oracle NoSQL 类型

下表显示了 DynamoDB 类型与 Oracle NoSQL 类型的映射。

表 - 将 DynamoDB 类型映射到 Oracle NoSQL 类型

# DynamoDB 类型 NoSQL JSON 列的 JSON 类型 Oracle NoSQL 类型
1 字符串 (S) JSON 字符串 STRING
2 编号类型 (N) JSON 编号 整数/长/浮点数/双精度/数字
3 布尔值 (BOOL) JSON 布尔值 BOOLEAN
4 二进制类型 (B) - 字节缓冲区 BASE-64 编码 JSON 字符串 BINARY
5 NULL JSON 为空 NULL
6 字符串集 (SS) 字符串的 JSON 数组 数组(字符串)
7 编号集 (NS) JSON 数字数组 数组(整数/长/浮点数/双精度/数字)
8 二进制集 (BS) Base-64 编码字符串的 JSON 数组 数组(二进制)
9 列表 (L) JSON 数组 数组 (JSON)
10 映射 (M) JSON 对象 JSON
11 分区密钥 NA PRIMARY KEY 和 SHARD KEY
12 排序键 NA PRIMARY KEY
13 包含短划线和点的属性名称 带下划线的 JSON 字段名称 带下划线的列名

将 DynamoDB 类型映射到 Oracle NoSQL 类型时,需要考虑的几个附加点:

Oracle NoSQL 到 Parquet 数据类型的映射

介绍 Oracle NoSQL 数据类型到 Parquet 数据类型的映射。

NoSQL 类型 Parquet 类型
BOOLEAN BOOLEAN
INTEGER INT32
LONG INT64
FLOAT 双倍
双倍 双倍
BINARY BINARY
固定二进制文件 BINARY
STRING 二进制(字符串)
ENUM 二进制(字符串)

或者

BINARY(ENUM),如果已配置逻辑 ENUM

UUID 二进制(字符串)

或者

FIXED_BINARY(16),如果已配置逻辑 UUID

TIMESTAMP(p) INT64(TIMESTAMP(p))
NUMBER 双倍
field_name ARRAY(T)
group field_name(LIST) { repeated group list { required T element } }
field_name MAP(T)
group field_name (MAP) { repeated group key_value (MAP_KEY_VALUE) { required binary key (STRING); required T value; } }
field_name RECORD(K1 T1 N1,K ⁇ 2 T2 N2,....)

其中:

K = 密钥名称

T = 类型

N = 可为空值或不为空值

group field_name { ni == true ? optional Ti ki : required Ti ki  }
JSON 二进制(字符串)

或者

BINARY(JSON),如果配置了逻辑 JSON

注:当 NoSQL Number 类型转换为 Parquet Double 类型时,如果无法在 Double 中表示值,可能会丢失精度。如果数字太大而无法表示为 Double,则将其转换为 Double.NEGATIVE_INFINITY 或 Double.POSITIVE_INFINITY。

将 DynamoDB 表映射到 Oracle NoSQL 表

在 DynamoDB 中,表是项的集合,每个项都是属性的集合。表中的每一项都有一个唯一标识符或主键。除了主键外,该表还是无模式的。每个项可以有自己的不同属性。

DynamoDB 支持两种不同类型的主键:

相比之下,Oracle NoSQL 表支持灵活的数据模型,包括方案和无模式设计。

有两种不同的 DynamoDB 表建模方法:

  1. 将 DynamoDB 表建模为 JSON 文档(建议):在此建模中,您将 Dynamo DB 表的所有属性映射到 NoSQL 表的 JSON 列,但分区键和排序键除外。将分区键和排序键建模为 NoSQL 表的主键列。您将使用 AggregateFields 转换将非主键数据聚合到 JSON 列中。

    注:迁移程序提供了一个用户友好的配置 defaultSchema,用于自动创建无模式 DDL 表,该表还会将属性聚合到 JSON 列中。

  2. 将 DynamoDB 表建模为 NoSQL 表中的固定列:在此建模中,对于 DynamoDB 表的每个属性,您将在 NoSQL 表中创建一个列,如将 DynamoDB 类型映射到 Oracle NoSQL 类型中指定的列。您将对分区键进行建模,并将键属性排序为主键。仅当您确定导入 DynamoDB 表方案是固定的并且每个项具有大多数属性的值时,才应使用此项。如果 DynamoDB 项没有共同的属性,则可能会导致大量具有空值的 NoSQL 列。

    注:由于 DynamoDB 表的性质是无模式,因此我们强烈建议在将数据从 DynamoDB 迁移到 Oracle NoSQL Database 时使用无模式表。这尤其适用于每个记录的内容在表中可能不一致的大型表。

Oracle NoSQL Database Migrator 故障排除

了解您在使用 时可能面临的一般挑战以及如何解决这些挑战。

迁移已失败。如何解决此问题?

数据迁移失败的原因可能有多种。下面列出了重要原因:

表 - 迁移失败原因

错误消息 含义 分辨率
Failed to connect to Oracle NoSQL Database 迁移程序无法与 NoSQL 数据库建立连接。
  • 检查配置 JSON 文件中 storeNamehelperHosts 属性的值是否有效以及主机是否可访问。
  • 对于安全存储,使用正确的用户名和密码值验证安全文件是否有效。
Failed to connect to Oracle NoSQL Database Cloud Service 迁移程序无法与 Oracle NoSQL Database Cloud Service 建立连接。
  • 验证在配置 JSON 文件中指定的端点 URL 或区域名称是否正确。
  • 检查 OCI 身份证明文件是否在配置 JSON 文件中指定的路径中可用。
  • 确保 OCI 身份证明中提供的 OCI 身份证明有效。
Table not found NoSQL 数据库迁移程序无法找到为迁移标识的表。

对于来源:

  • 验证表是否存在于源数据库中。
  • 如果表是在非默认名称空间中创建的,请确保该表在配置 JSON 文件中使用其名称空间进行限定。
  • 验证您是否具有访问表所需的读/写授权。
  • 如果源是 Oracle NoSQL Database Cloud Service ,请验证是否在配置 JSON 文件中指定了有效的区间名称,并确保您具有访问该表的所需授权。

对于 Sink:

  • 验证该表是否存在于接收器中。如果表不存在,则必须手动创建表,或者使用 schemaInfo 配置通过迁移创建表。
DDL Execution failed 输入方案定义文件中提供的 DDL 命令无效。
  • 检查 schemaPath 文件中 DDL 命令的语法。
  • 确保 schemaPath 文件中的每行仅有一个 DDL 语句。
failed to write record to the sink table with java.lang.IllegalArgumentException 输入记录与接收器的表方案不匹配。
  • 检查目标汇表中指定的数据类型和列名是否与汇表方案匹配。
  • 如果应用了任何转换,请检查转换的记录是否与接收表模式匹配。
Request timeout 源或汇的操作未在预期时间内完成。
  • 验证网络连接。
  • 检查 NoSQL Database 是否已启动且正在运行。
  • 尝试增加配置 JSON 文件中的 requestTimeout 值。

重新启动失败的迁移之前,我应该考虑什么?

当数据迁移任务失败时,接收器将处于包含导入数据的中间状态,直到出现故障。您可以从日志中确定错误和失败详细信息,并在诊断和更正错误后重新启动迁移。重新启动的迁移将从头开始处理所有数据。无法在出现故障时检查点并重新启动迁移。因此,NoSQL 数据库迁移程序会覆盖已迁移到汇的任何记录。

最佳实践

数据迁移所花费的时间取决于多个因素,例如要迁移的数据量、网络速度、数据库上的当前负载。对于云服务,迁移速度还取决于预配的读取吞吐量和写入吞吐量。因此,为了提高迁移速度,您可以:

Migrator 实用程序本质上旨在通过并行处理多个流来实现更高的迁移速度。以下几点建议如何将此功能用于各种迁移方案:

我有一个长期的迁移,涉及大量数据集。如何跟踪迁移进度?

您可以启用其他日志记录来跟踪长时间运行的迁移进度。要控制 Oracle NoSQL Database Migrator 的日志记录行为,必须在 logging.properties 文件中设置所需的日志记录级别。此文件随 NoSQL Database Migrator 程序包一起提供,位于解压缩 Oracle NoSQL Database Migrator 的目录中。按详细程度增加的顺序排列的不同日志记录级别为 OFF, SEVERE, WARNING, INFO, FINE,ALL

将日志级别设置为 OFF 将关闭所有日志信息,而将日志级别设置为 ALL 将提供完整的日志信息。

默认日志级别为 WARNING。默认情况下,所有日志记录输出都配置为转到控制台。

您可以在 logging.properties 文件中查看注释以了解每个日志级别。