

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# のターゲットとしての Amazon Neptune の使用 AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

Amazon Neptune は、高速で信頼性に優れたフルマネージド型のグラフデータベースサービスであり、高度に接続されたデータセットを使用するアプリケーションの構築と実行を容易にします。Neptune の中核は、専用のハイパフォーマンスなグラフデータベース エンジンです。このエンジンは、数十億の関係を保存し、ミリ秒単位のレイテンシーでグラフをクエリできるよう最適化されています。Neptune は、人気の高いグラフクエリ言語 Apache TinkerPop Gremlin と W3C の SPARQL をサポートしています。Amazon Neptune の詳細については、*Amazon Neptune ユーザーガイド* の「[Amazon Neptune のクォータ](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html)」をご参照ください。

Neptune などのグラフデータベースがなければ、リレーショナルデータベースで高接続データをモデル化するとよいでしょう。データに動的接続がある可能性があるため、このようなデータソースを使用するアプリケーションは SQL で接続されたデータクエリをモデル化する必要があります。この方法では、グラフクエリを SQL に変換するために余分なレイヤーを記述する必要があります。また、リレーショナルデータベースにはスキーマの剛性があります。接続を変更するスキーマのすべての変更には、新しいスキーマをサポートするために、ダウンタイムおよびクエリ変換の追加メンテナンスが必要になります。アプリケーションの設計時に考慮すべき別の大きな制約は、クエリのパフォーマンスです。

グラフデータベースは、このような状況を大幅に簡素化することができます。スキーマから解放され、豊富なグラフクエリレイヤー (Gremlin または SPARQL) とグラフクエリ用に最適化されたインデックスにより、柔軟性とパフォーマンスが向上します。Amazon Neptune グラフデータベースには、保存時の暗号化、安全な認可レイヤー、デフォルトバックアップ、マルチ AZ サポート、リードレプリカ サポートなどのエンタープライズ機能もあります。

を使用すると AWS DMS、高度に接続されたグラフをモデル化するリレーショナルデータを、サポートされている SQL データベースの DMS ソースエンドポイントから Neptune ターゲットエンドポイントに移行できます。

詳細については、以下をご参照ください。

**Topics**
+ [ターゲットとしての Amazon Neptune への移行の概要](#CHAP_Target.Neptune.MigrationOverview)
+ [ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)
+ [ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)
+ [ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)
+ [ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型](#CHAP_Target.Neptune.DataTypes)
+ [ターゲットとしての Amazon Neptune の使用における制限](#CHAP_Target.Neptune.Limitations)

## ターゲットとしての Amazon Neptune への移行の概要
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Neptune ターゲットへの移行を開始する前に、 AWS アカウントに次のリソースを作成します。
+ ターゲット エンドポイントの Neptune クラスター。
+ ソースエンドポイント AWS DMS の でサポートされている SQL リレーショナルデータベース。
+ ターゲット エンドポイントの Amazon S3 バケット。この S3 バケットを Neptune クラスターと同じ AWS リージョンに作成します。 AWS DMS は、この S3 バケットを Neptune データベースに一括ロードするターゲットデータの中間ファイルストレージとして使用します。Amazon S3 バケットの作成の詳細については、*Amazon Simple Storage Service ユーザーガイド*の[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)をご参照ください。
+ Neptune クラスターと同じ VPC 内の S3 の Virtual Private Cloud (VPC) エンドポイント。
+ IAM ポリシーを含む AWS Identity and Access Management (IAM) ロール。このポリシーでは、ターゲットエンドポイントの S3 バケットに対する、`GetObject`、`PutObject`、`DeleteObject` および `ListObject` アクセス許可を指定する必要があります。このロールは、ターゲット S3 バケット AWS DMS と Neptune データベースの両方への IAM アクセスを持つ と Neptune の両方によって引き受けられます。詳細については、「[ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)」を参照してください。

これらのリソースを取得したら、Neptune ターゲットへの移行の設定とスタートは、コンソールまたは DMS API を使用した全ロードの移行と同様です。ただし、Neptune ターゲットへの移行には固有のステップが必要です。

**AWS DMS リレーショナルデータベースを Neptune に移行するには**

1. [レプリケーション インスタンスの作成](CHAP_ReplicationInstance.Creating.md) の説明に従って、レプリケーションインスタンスを作成します。

1. ソースエンドポイントの でサポートされている SQL リレーショナルデータベースを作成してテスト AWS DMS します。

1. Neptune データベースのターゲット エンドポイントを作成してテストします。

   ターゲット エンドポイントを Neptune データベースに接続するには、Neptune クラスター エンドポイントまたは Neptune ライター インスタンス エンドポイントのサーバー名を指定します。また、 の S3 バケットフォルダを指定 AWS DMS して、Neptune データベースへの一括ロード用に中間ファイルを保存します。

   移行中、 は、指定した最大ファイルサイズまで、移行されたすべてのターゲットデータをこの S3 バケットフォルダに AWS DMS 保存します。このファイルストレージがこの最大サイズに達すると、 AWS DMS は保存された S3 データをターゲットデータベースにロードします。フォルダをクリアして、後でターゲットデータベースにロードするために、追加ターゲットデータの保存を有効にします。これらの設定の指定の詳細については、「[ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)」をご参照ください。

1. 手順 1 ～ 3 で作成したリソースを使用して全ロードレプリケーション タスクを作成し、次の手順を実行します：

   1. 通常のタスクテーブルマッピングを使用して、適切な選択ルールと変換ルールを使用して、リレーショナルデータベースから移行する特定のソーススキーマ、テーブルおよびビューを指定します。詳細については、「[テーブルマッピングを使用して、タスクの設定を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.md)」をご参照ください。

   1. 次のいずれかを選択して、ターゲットマッピングを指定し、ソーステーブルおよびビューから Neptune ターゲット　データベースグラフへのマッピングルールを指定します。
      + Gremlin JSON — Gremlin JSON を使用して Neptune データベースをロードする方法については、*Amazon Neptune ユーザーガイド*の「[Gremlin ロードデータ形式](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html)」をご参照ください。
      + SPARQL RDB からリソース記述フレームワーク マッピング言語 (R2RML) への SPARQL R2RML の使用方法については、W3C 仕様の「[R2RML: RDB から RDF へのマッピング言語](https://www.w3.org/TR/r2rml/)」をご参照ください。

   1. 次のいずれかを行います。
      +  AWS DMS コンソールを使用して、**「データベース移行タスクの作成**」ページのグラフマッピング**ルールを使用してグラフマッピング**オプションを指定します。
      +  AWS DMS API を使用して、`CreateReplicationTask`API コールの `TaskData` リクエストパラメータを使用してこれらのオプションを指定します。

      Gremlin JSON および SPARQL R2RML を使用してグラフマッピングルールを指定する方法の詳細と例については、「[ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)」をご参照ください。

1. 移行タスクのレプリケーションを開始します。

## ターゲットとしての Amazon Neptune エンドポイント設定の指定
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

ターゲットエンドポイントを作成または変更するには、コンソール、`CreateEndpoint` または `ModifyEndpoint` API オペレーションを使用します。

 AWS DMS コンソールの Neptune ターゲットの場合、エンドポイント**の作成またはエンドポイント****コンソールの変更ページでエンドポイント****固有の設定**を指定します。`CreateEndpoint` と `ModifyEndpoint` に、`NeptuneSettings` オプションのリクエストパラメータを指定します。以下の例は CLI を使用してこれを行う方法を示しています。

```
dms create-endpoint --endpoint-identifier my-neptune-target-endpoint
--endpoint-type target --engine-name neptune 
--server-name my-neptune-db.cluster-cspckvklbvgf.us-east-1.neptune.amazonaws.com 
--port 8192
--neptune-settings 
     '{"ServiceAccessRoleArn":"arn:aws:iam::123456789012:role/myNeptuneRole",
       "S3BucketName":"amzn-s3-demo-bucket",
       "S3BucketFolder":"amzn-s3-demo-bucket-folder",
       "ErrorRetryDuration":57,
       "MaxFileSize":100, 
       "MaxRetryCount": 10, 
       "IAMAuthEnabled":false}‘
```

ここでは、CLI `--server-name` オプションで、Neptune クラスター ライター エンドポイントのサーバ名を指定します。または、Neptune ライターインスタンス エンドポイントのサーバー名を指定することもできます。

`--neptune-settings` オプションリクエストパラメータは次のとおりです。
+ `ServiceAccessRoleArn` – (必須) Neptune ターゲットエンドポイント用に作成したサービスロールの Amazon リソースネーム (ARN)。詳細については、「[ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)」をご参照ください。
+ `S3BucketName` – (必須) DMS が Neptune ターゲットデータベースへ一括ロードする前に、移行されたグラフデータを .csv ファイルに一時的に保存する S3 バケットの名前。DMS は、これらの .csv ファイルに格納する前に、SQL ソースデータをグラフデータにマッピングします。
+ `S3BucketFolder` – (必須) DMS が `S3BucketName` で指定された S3 バケットに移行されたグラフデータを保存するフォルダのパス
+ `ErrorRetryDuration` – (オプション) エラーを発生させる前に、DMS が Neptune ターゲットデータベースに移行されたグラフデータの一括ロードを再試行するまで待機する時間 (ミリ秒)。デフォルトは 250 です。
+ `MaxFileSize` – (オプション) DMS が Neptune ターゲットデータベースにデータを一括ロードする前に、.csv ファイルに保存される移行済みグラフデータの最大サイズ (KB 単位)。デフォルトは 1,048,576 KB (1 GB) です。成功すると、DMS はバケットをクリアし、移行されたグラフデータの次のバッチを保存する準備が整います。
+ `MaxRetryCount` – (オプション) エラーを発生させる前に、DMS が移行されたグラフデータの Neptune ターゲットデータベースへの一括ロード リトライ回数。デフォルトは 5 です。
+ `IAMAuthEnabled` – (オプション) このエンドポイントで IAM 認可を有効にする場合は、このパラメータを `true` に設定し、`ServiceAccessRoleArn` によって指定されたサービスロールに適切な IAM ポリシードキュメントをアタッチします。デフォルトは `false` です。

## ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成
<a name="CHAP_Target.Neptune.ServiceRole"></a>

ターゲットとして Neptune にアクセスするには、IAM を使用してサービスロールを作成します。Neptune エンドポイントの設定に応じて、以下で説明する IAM ポリシーと信頼ドキュメントの一部またはすべてをこのロールにアタッチします。Neptune エンドポイントを作成するときに、このサービスロールの ARN を指定します。これにより、 AWS DMS と Amazon Neptune は Neptune とそれに関連付けられた Amazon S3 バケットの両方にアクセスするためのアクセス許可を引き受けることができます。

Neptune エンドポイント設定で、`NeptuneSettings` の `IAMAuthEnabled` パラメータを `true` に設定した場合は、サービスロールに次のようなような IAM ポリシーをアタッチします。`IAMAuthEnabled` を `false` に設定すると、このポリシーを無視できます。

```
// Policy to access Neptune

    {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "neptune-db:*",
                "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-CLG7H7FHK54AZGHEH6MNS55JKM/*"
            }
        ]
    }
```

前述の IAM ポリシーは、`Resource` で指定された Neptune ターゲットクラスターへのフルアクセスを許可します。

サービスロールに次のような IAM ポリシーをアタッチします。このポリシーにより、DMS は、移行したグラフデータを Neptune ターゲットデータベースに一括ロードするために作成した S3 バケットに一時的に保存できます。

```
//Policy to access S3 bucket

{
	"Version": "2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "ListObjectsInBucket0",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket"
			]
		},
		{
			"Sid": "AllObjectActions",
			"Effect": "Allow",
			"Action": ["s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],

			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		},
		{
			"Sid": "ListObjectsInBucket1",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket",
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		}
	]
}
```

前述の IAM ポリシーでは、Neptune ターゲット用に作成された S3 バケット (`arn:aws:s3:::amzn-s3-demo-bucket`) の内容をアカウントからクエリできます。また、アカウントはすべてのバケットファイルとフォルダ (`arn:aws:s3:::amzn-s3-demo-bucket/`) の内容を完全に操作できます。

信頼関係を編集し、次の IAM ロールをサービスロールにアタッチして、 AWS DMS と Amazon Neptune データベースサービスの両方がロールを引き受けることを許可します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "neptune",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Neptune ターゲット エンドポイントにこのサービスロールを指定する方法については、「[ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)」をご参照ください。

## ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定
<a name="CHAP_Target.Neptune.GraphMapping"></a>

作成するグラフ マッピングルールは、SQL リレーショナル データベースソースから抽出されたデータを Neptune データベース クラスター ターゲットにロードする方法を指定します。これらのマッピングルールの形式は、ルールが Apache TinkerPop Gremlin を使用してプロパティグラフデータをロードするか、R2RML を使用してリソース記述フレームワーク (RDF) データをロードするかによって異なります。以下で、これらの形式に関する情報と詳細を確認できます。

これらのマッピングルールは、コンソールまたは DMS API を使用して移行タスクを作成するときに指定できます。

コンソールを使用して、**[Create database migration task]** (データベース移行タスクの作成) ページで**[Graph mapping rules]** (グラフマッピングのルール) を使用してこれらのマッピングルールを指定します。[**グラフマッピングルール**] では、付属のエディタを使用して直接マッピングルールを入力および編集できます。または、適切なグラフマッピング形式のマッピングルールを含むファイルを参照することもできます。

API を使用して、`TaskData` API コールの `CreateReplicationTask` リクエストパラメータを使用してこれらのオプションを指定します。`TaskData` に、適切なグラフマッピング形式のマッピングルールを含むファイルのパスを設定します。

### Gremlin を用いたプロパティグラフデータ生成のためのグラフマッピングルール
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Gremlin を使用してプロパティグラフデータを生成し、ソースデータから生成される各グラフエンティティのマッピングルールを使用する JSON オブジェクトを指定します。この JSON の形式は、Amazon Neptune の一括ロード用に定義されています。次のテンプレートは、このオブジェクトの各ルールがどのようになるかを示しています。

```
{
    "rules": [
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{col1}",
                    "vertex_label": "(the vertex to create)",
                    "vertex_definition_id": "(an identifier for this vertex)",
                    "vertex_properties": [
                        {
                            "property_name": "(name of the property)",
                            "property_value_template": "{col2} or text",
                            "property_value_type": "(data type of the property)"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{col1}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{col3}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "edge_id_template": {
                        "label": "(the edge label to add)",
                        "template": "{col1}_{col3}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "(the property to add)",
                            "property_value_template": "{col4} or text",
                            "property_value_type": "(data type like String, int, double)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

頂点ラベルが存在することは、頂点がここに作成されていることを意味します。頂点ラベルがない場合は、頂点が別のソースによって作成され、この定義では頂点プロパティだけが追加されることを意味します。必要な数の頂点定義とエッジ定義を指定して、リレーショナルデータベースソース全体のマッピングを指定します。

次に、`employee` テーブルのルール例を示します。

```
{
    "rules": [
        {
            "rule_id": "1",
            "rule_name": "vertex_mapping_rule_from_nodes",
            "table_name": "nodes",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{emp_id}",
                    "vertex_label": "employee",
                    "vertex_definition_id": "1",
                    "vertex_properties": [
                        {
                            "property_name": "name",
                            "property_value_template": "{emp_name}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "2",
            "rule_name": "edge_mapping_rule_from_emp",
            "table_name": "nodes",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{emp_id}",
                        "vertex_definition_id": "1"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{mgr_id}",
                        "vertex_definition_id": "1"
                    },
                    "edge_id_template": {
                        "label": "reportsTo",
                        "template": "{emp_id}_{mgr_id}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "team",
                            "property_value_template": "{team}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        }
    ]
}
```

ここでは、頂点とエッジの定義は、従業員 ID (`EmpID`) を持つ `employee` ノードとマネージャ ID (`managerId`) を持つ `employee` ノードからのレポート関係をマッピングします。

Gremlin JSON を使用したグラフ マッピングルールの作成の詳細については、*Amazon Neptune ユーザーガイド*の「[Gremlin ロードデータ形式](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html)」をご参照ください。

### RDF/SPARQL データ生成のためのグラフマッピングルール
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

SPARQL を使用してクエリする RDF データをロードする場合は、R2RML にグラフマッピングルールを記述します。R2RML は、リレーショナルデータを RDF にマッピングするための標準の W3C 言語です。R2RML ファイルで、*トリプルマップ* (以下の `<#TriplesMap1>` など) は、論理テーブルの各行を 0 個以上の RDF トリプルに変換するルールを指定します。*サブジェクトマップ* (以下の `rr:subjectMap` のいずれか) は、トリプルマップによって生成された RDF トリプルのサブジェクトを生成するためのルールを指定します。*述語オブジェクトマップ* (以下の `rr:predicateObjectMap` のいずれか) は、論理テーブルの論理テーブル行ごとに 1 つ以上の述語オブジェクトのペアを作成する関数です。

`nodes` テーブルの簡単な例を次に示します。

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "nodes" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{id}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:name;
        rr:objectMap [ rr:column "label" ];
    ]
```

前の例では、マッピングは、従業員のテーブルからマッピングされたグラフノードを定義します。

`Student` テーブルの別の簡単な例を次に示します。

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

<#TriplesMap2>
    rr:logicalTable [ rr:tableName "Student" ];
    rr:subjectMap   [ rr:template "http://example.com/{ID}{Name}";
                      rr:class foaf:Person ];
    rr:predicateObjectMap [
        rr:predicate ex:id ;
        rr:objectMap  [ rr:column "ID";
                        rr:datatype xsd:integer ]
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:name ;
        rr:objectMap  [ rr:column "Name" ]
    ].
```

前の例では、マッピングは、`Student` テーブル内の人物間の友だち関係をマッピングするグラフノードを定義します。

SPARQL R2RML を使用したグラフマッピングルールの作成の詳細については、W3C 仕様の「[R2RML: RDB から RDF へのマッピング言語](https://www.w3.org/TR/r2rml/)」をご参照ください。

## ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS は、SQL ソースエンドポイントから Neptune ターゲットへのデータ型マッピングを 2 つの方法のいずれかで実行します。どちらの方法を使用するかは、Neptune データベースのロードに使用しているグラフマッピング形式によって異なります。
+ 移行データの JSON 形式を使用する、Apache TinkerPop Gremlin。
+ 移行データの R2RML 形式を使用する W3C の SPARQL。

これら 2 つのグラフマッピング形式の詳細については、「[ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)」をご参照ください。

次に、各形式のデータ型マッピングの説明を示します。

### SQL ソースから Gremlin ターゲットへのデータ型マッピング
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

次の表に、SQL ソースから Gremlin 形式のターゲットへのデータ型マッピングを示します。

AWS DMS は、リストにない SQL ソースデータ型を Gremlin にマッピングします`String`。



[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Neptune.html)

Neptune を読み込むための Gremlin データ型の詳細については、*Neptune ユーザーガイド*の「[Gremlin データ型](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes)」をご参照ください。

### SQL ソースから R2RML (RDF) ターゲットへのデータ型マッピング
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

次の表に、SQL ソースから R2RML 形式のターゲットへのデータ型マッピングを示します。

RDF literal. AWS DMS maps any unlisted SQL source data type to an RDF literal を除き、リストされているすべての RDF データ型では大文字と小文字が区別されます。

*RDF リテラル*は、さまざまなリテラル辞書形式およびデータ型の 1 つです。詳細については、W3C 仕様*リソース記述フレームワーク (RDF): 概念と抽象構文*の「[RDF リテラル](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal)」をご参照ください。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Neptune.html)

Neptune をロードするための RDF データ型と SQL ソースデータ型へのマッピングの詳細については、W3C 仕様*R2RML: RDB から RDF マッピング言語*の「[データ型の変換](https://www.w3.org/TR/r2rml/#datatype-conversions)」をご参照ください。

## ターゲットとしての Amazon Neptune の使用における制限
<a name="CHAP_Target.Neptune.Limitations"></a>

ターゲットとして Neptuneを使用する場合、以下の制限が適用されます。
+ AWS DMS は現在、Neptune ターゲットへの移行にのみ全ロードタスクをサポートしています。Neptune ターゲットへの変更データ　キャプチャ (CDC) の移行はサポートされていません。
+ 移行タスクをスタートする前に、次の例のように、ターゲット Neptune データベースで、すべてのデータが手動でクリアされていることを確認してください。

  グラフ内のすべてのデータ (頂点とエッジ) をドロップするには、次の Gremlin コマンドを実行します。

  ```
  gremlin> g.V().drop().iterate()
  ```

  `'customer'` ラベルのある頂点をドロップするには、次の Gremlin コマンドを実行します。

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**注記**  
大きなデータセットをドロップするには時間がかかる場合があります。`limit(1000)` などの制限を使用して、`drop()` を反復処理することができます。

  `'rated'` ラベルのあるエッジをドロップするには、以下の Gremlin コマンドを実行します。

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**注記**  
大きなデータセットをドロップするには時間がかかる場合があります。`limit(1000)` などの制限を使用して、`drop()` を反復処理することができます。
+ DMS API オペレーション `DescribeTableStatistics` は、Neptune グラフデータ構造の性質上、特定のテーブルについて不正確な結果を返すことがあります。

  移行中、 は各ソーステーブル AWS DMS をスキャンし、グラフマッピングを使用してソースデータを Neptune グラフに変換します。変換されたデータは、まずターゲットエンドポイントに指定された S3 バケットフォルダに保存されます。ソースがスキャンされ、この中間の S3 データが正常に生成された場合、`DescribeTableStatistics` はデータが Neptune ターゲットデータベースに正常にロードされたと見なします。しかし、これは常に正しいとは限りません。特定のテーブルのデータが正しくロードされたことを確認するには、そのテーブルの移行の両端の `count()` の戻り値を比較します。

  次の例では、 はソースデータベースから`customer`テーブルを AWS DMS ロードし、ターゲット Neptune データベースグラフ`'customer'`に ラベルが割り当てられます。このラベルがターゲットデータベースに書き込まれることを確認できます。これを行うには、ソースデータベースから使用可能な `customer` 行の数と、タスクの完了後に Neptune ターゲットデータベースにロードされた `'customer'` ラベル付きの行の数を比較します。

  SQL を使用してソースデータベースから使用可能な customer 行の数を取得するには、次のコマンドを実行します。

  ```
  select count(*) from customer;
  ```

  Gremlin を使用してターゲットデータベースグラフにロードされた `'customer'` ラベル付きの行の数を取得するには、次のコマンドを実行します。

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ 現在、1 つのテーブルの読み込みに失敗すると、タスク全体が失敗します。リレーショナル データベースターゲットとは異なり、Neptune のデータは高度に接続されているため、多くの場合、タスクを再開することは不可能です。このタイプのデータロードの失敗のためにタスクが正常に再開できない場合は、ロードに失敗したテーブルをロードする新しいタスクを作成します。この新しいタスクを実行する前に、部分的にロードされたテーブルを Neptune ターゲットから手動でクリアします。
**注記**  
障害が回復可能な場合 (ネットワーク転送エラーなど)、Neptune ターゲットへの移行に失敗したタスクを再開できます。
+ AWS DMS は R2RML のほとんどの標準をサポートしています。ただし、逆式、結合、ビューなど、特定の R2RML 標準 AWS DMS はサポートされていません。R2RML ビューの回避策は、ソースデータベースに対応するカスタム SQL ビューを作成することです。移行タスクで、テーブルマッピングを使用してビューを入力として選択します。次に、ビューをテーブルにマップすると、R2RML によって消費され、グラフデータが生成されます。
+ サポートされていない SQL データ型を使用してソースデータを移行すると、結果のターゲットデータの精度が低下する可能性があります。詳細については、「[ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型](#CHAP_Target.Neptune.DataTypes)」を参照してください。
+ AWS DMS は、Neptune ターゲットへの LOB データの移行をサポートしていません。