

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例：將資料載入至 Neptune 資料庫執行個體
<a name="bulk-load-data"></a>

此範例說明如何將資料載入至 Amazon Neptune。除非另有說明，否則您必須在與 Neptune 資料庫執行個體相同的 Amazon Virtual Private Cloud (VPC) 中遵循這些來自 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中的步驟。

## 資料載入範例的先決條件
<a name="bulk-load-tutorial-prereqs"></a>

開始之前，您必須準備好以下項目：
+ Neptune 資料庫執行個體。

  如需啟動 Neptune 資料庫執行個體的相關資訊，請參閱 [建立 Amazon Neptune 叢集](get-started-create-cluster.md)。
+ 要在其中放置資料檔案的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

  您可以使用現有的儲存貯體。如果您沒有 S3 儲存貯體，請參閱《[Amazon S3 入門指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)》**中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。
+ 以 Neptune 載入器支援的其中一種格式載入的圖形資料：

  如果您使用 Gremlin 來查詢圖形，Neptune 可以使用逗號分隔值 (`CSV`) 格式載入資料，如 [Gremlin 載入資料格式](bulk-load-tutorial-format-gremlin.md) 中所述。

  如果您使用 OpenCypher 來查詢您的圖形，Neptune 也可以載入 openCypher 特定 `CSV` 格式的資料，如 [openCypher 資料的載入格式](bulk-load-tutorial-format-opencypher.md) 中所述。

  如果您使用的是 SPARQL，Neptune 可以使用多種 RDF 格式載入資料，如 [RDF 載入資料格式](bulk-load-tutorial-format-rdf.md) 中所述。
+ Neptune 資料庫執行個體要擔任的 IAM 角色，其具有 IAM 政策，允許存取 S3 儲存貯體中的資料檔案。此政策必須授予讀取與列出許可。

   如需建立可存取 Amazon S3 的角色，然後將其與 Neptune 叢集建立關聯的相關資訊，請參閱 [必要條件：IAM 角色和 Amazon S3 存取](bulk-load-tutorial-IAM.md)。
**注意**  
Neptune `Load` API 僅需要資料檔案的讀取存取權。IAM 政策不需要允許整個儲存貯體的寫入存取權或存取權。
+ Amazon S3 VPC 端點。如需詳細資訊，請參閱 [建立 Amazon S3 VPC 端點](#bulk-load-prereqs-s3) 一節。

### 建立 Amazon S3 VPC 端點
<a name="bulk-load-prereqs-s3"></a>

Neptune 載入器需要 Amazon S3 的 VPC 端點。

**設定 Amazon S3 的存取**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 主控台。

1. 在左側導覽窗格中選擇 **Endpoints** (端點)。

1. 選擇**建立端點**。

1. 選擇 **Service Name** (服務名稱) `com.amazonaws.region.s3`。
**注意**  
如果此處的區域不正確，請務必確保主控台區域正確。

1. 選擇包含 Neptune 資料庫執行個體的 VPC。

1. 選取與您叢集相關子網路關聯的路由表旁邊的核取方塊。如果您只有一個路由表，您必須選擇此方塊。

1. 選擇**建立端點**。

如需建立端點的相關資訊，請參閱《Amazon VPC 使用者指南》**中的 [VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#create-vpc-endpoint)。如需 VPC 端點各項限制的相關資訊，請參閱 [Amazon S3 的 VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。

**將資料載入至 Neptune 資料庫執行個體**

1. 將資料檔複製至 Amazon S3 儲存貯體。S3 儲存貯體必須與載入資料的叢集位於相同的 AWS 區域。

   您可以使用下列 AWS CLI 命令，將檔案複製到儲存貯體。
**注意**  
此命令不需要從 Amazon EC2 執行個體執行。

   ```
   aws s3 cp data-file-name s3://bucket-name/object-key-name
   ```
**注意**  
在Amazon S3 中，**物件金鑰名稱**是檔案的完整路徑，包括檔案名稱。  
範例：**在命令 `aws s3 cp datafile.txt s3://examplebucket/mydirectory/datafile.txt` 中，物件鍵名稱為 **`mydirectory/datafile.txt`**。

   或者，您可以使用 AWS 管理主控台 將檔案上傳至 S3 儲存貯體。在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台，然後選擇儲存貯體。在左上角，選擇 **Upload** (上傳) 以上傳檔案。

1. 從命令列視窗中，輸入以下命令，並使用端點、Amazon S3 路徑、格式和 IAM 角色 ARN 的正確值，來執行 Neptune 載入器。

   `format` 參數可以是下列任何一個值：`csv` (適用於 Gremlin)、`opencypher` (適用於 openCypher) 或 `ntriples`、`nquads`、`turtle` 和 `rdfxml` (適用於 RDF)。如需有關其他參數的資訊，請參閱 [Neptune 載入器命令](load-api-reference-load.md)。

   如需尋找 Neptune 資料庫執行個體主機名稱的相關資訊，請參閱 [連線至 Amazon Neptune 端點](feature-overview-endpoints.md) 一節。

   區域參數必須符合叢集和 S3 儲存貯體的區域。

Amazon Neptune 可在下列 AWS 區域使用：
   + 美國東部 (維吉尼亞北部)：`us-east-1`
   + 美國東部 (俄亥俄)：`us-east-2`
   + 美國西部 (加利佛尼亞北部)：`us-west-1`
   + 美國西部 (奧勒岡)：`us-west-2`
   + 加拿大 (中部)：`ca-central-1`
   + 加拿大西部 （卡加利）：   `ca-west-1`
   + 南美洲 (聖保羅)：`sa-east-1`
   + 歐洲 (斯德哥爾摩)：`eu-north-1`
   + 歐洲 （西班牙）：   `eu-south-2`
   + 歐洲 (愛爾蘭)：`eu-west-1`
   + 歐洲 (倫敦)：`eu-west-2`
   + 歐洲 (巴黎)：`eu-west-3`
   + 歐洲 (法蘭克福)：`eu-central-1`
   + 中東 (巴林)：`me-south-1`
   + 中東 (阿拉伯聯合大公國)：`me-central-1`
   + 以色列 (特拉維夫)：`il-central-1`
   + 非洲 (開普敦)：`af-south-1`
   + 亞太區域 (香港)：`ap-east-1`
   + 亞太區域 (東京)：`ap-northeast-1`
   + 亞太區域 (首爾)：`ap-northeast-2`
   + 亞太區域 （大阪）：   `ap-northeast-3`
   + 亞太區域 (新加坡)：`ap-southeast-1`
   + 亞太區域 (雪梨)：`ap-southeast-2`
   + 亞太區域 (雅加達)：`ap-southeast-3`
   + 亞太區域 （墨爾本）：   `ap-southeast-4`
   + 亞太區域 （馬來西亞）：   `ap-southeast-5`
   + 亞太區域 (孟買)：`ap-south-1`
   + 亞太區域 （海德拉巴）：   `ap-south-2`
   + 中國 (北京)：`cn-north-1`
   + 中國 (寧夏)：`cn-northwest-1`
   + AWS GovCloud （美國西部）：   `us-gov-west-1`
   + AWS GovCloud （美國東部）：   `us-gov-east-1`

------
#### [ AWS CLI ]

   ```
   aws neptunedata start-loader-job \
     --endpoint-url https://your-neptune-endpoint:port \
     --source "s3://bucket-name/object-key-name" \
     --format "format" \
     --iam-role-arn "arn:aws:iam::account-id:role/role-name" \
     --s3-bucket-region "region" \
     --no-fail-on-error \
     --parallelism "MEDIUM" \
     --no-update-single-cardinality-properties \
     --queue-request \
     --dependencies "load_A_id" "load_B_id"
   ```

   如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)。

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://your-neptune-endpoint:port',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.start_loader_job(
       source='s3://bucket-name/object-key-name',
       format='format',
       iamRoleArn='arn:aws:iam::account-id:role/role-name',
       s3BucketRegion='region',
       failOnError=False,
       parallelism='MEDIUM',
       updateSingleCardinalityProperties=False,
       queueRequest=True,
       dependencies=['load_A_id', 'load_B_id']
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl https://your-neptune-endpoint:port/loader \
     --region us-east-1 \
     --service neptune-db \
     -X POST \
     -H 'Content-Type: application/json' \
     -d '{
           "source" : "s3://bucket-name/object-key-name",
           "format" : "format",
           "iamRoleArn" : "arn:aws:iam::account-id:role/role-name",
           "region" : "region",
           "failOnError" : "FALSE",
           "parallelism" : "MEDIUM",
           "updateSingleCardinalityProperties" : "FALSE",
           "queueRequest" : "TRUE",
           "dependencies" : ["load_A_id", "load_B_id"]
         }'
   ```

**注意**  
此範例假設您的 AWS 登入資料已在您的環境中設定。將 *us-east-1* 取代為 Neptune 叢集的區域。

------
#### [ curl ]

   ```
   curl -X POST https://your-neptune-endpoint:port/loader \
     -H 'Content-Type: application/json' \
     -d '{
           "source" : "s3://bucket-name/object-key-name",
           "format" : "format",
           "iamRoleArn" : "arn:aws:iam::account-id:role/role-name",
           "region" : "region",
           "failOnError" : "FALSE",
           "parallelism" : "MEDIUM",
           "updateSingleCardinalityProperties" : "FALSE",
           "queueRequest" : "TRUE",
           "dependencies" : ["load_A_id", "load_B_id"]
         }'
   ```

------

   如需建立 IAM 角色並將其與 Neptune 叢集建立關聯的相關資訊，請參閱 [必要條件：IAM 角色和 Amazon S3 存取](bulk-load-tutorial-IAM.md)。
**注意**  
如需載入請求參數的詳細資訊，請參閱 [Neptune 載入器請求參數](load-api-reference-load.md#load-api-reference-load-parameters))。簡而言之：  
`source` 參數接受指向單一檔案或資料夾的 Amazon S3 URI。如果您指定資料夾，Neptune 會將每個資料檔案載入該資料夾。  
資料夾可包含多個頂點檔案和多個邊緣檔案。  
URI 可以是下列任何格式。  
`s3://bucket_name/object-key-name`
`https://s3.amazonaws.com/bucket_name/object-key-name`
`https://s3-us-east-1.amazonaws.com/bucket_name/object-key-name`
`format` 參數可為以下任一項：  
用於 Gremlin 屬性圖的 Gremlin CSV 格式 (`csv`)
用於 openCypher 屬性圖的 openCypher CSV 格式 (`opencypher`)
N -Triples (`ntriples`) 格式用於 RDF/SPARQL
N-Quads (`nquads`) 格式用於 RDF/SPARQL
RDF/XML (`rdfxml`) 格式用於 RDF/SPARQL
Turtle (`turtle`) 格式用於 RDF/SPARQL
選用的 `parallelism` 參數可讓您限制大量載入程序所用的執行緒數目。它可以設定為 `LOW`、`MEDIUM`、`HIGH` 或 `OVERSUBSCRIBE`。  
當 `updateSingleCardinalityProperties` 設為 `"FALSE"` 時，如果針對邊緣或單一基數頂點屬性所載入的來源檔案中提供了多個值，則載入器會傳回錯誤。  
如果已有執行中的載入任務，則將 `queueRequest` 設為 `"TRUE"` 會造成載入請求置於佇列。  
`dependencies` 參數會在已置於佇列的一或多個載入任務順利完成時執行載入請求。

1. Neptune 載入器會傳回一個工作 `id`，可讓您檢查狀態或取消載入程序，例如：

   ```
   {
       "status" : "200 OK",
       "payload" : {
           "loadId" : "ef478d76-d9da-4d94-8ff1-08d9d4863aa5"
       }
   }
   ```

1. 輸入以下命令，從**步驟 3** 取得具有 `loadId` 之載入的狀態：

------
#### [ AWS CLI ]

   ```
   aws neptunedata get-loader-job-status \
     --endpoint-url https://your-neptune-endpoint:port \
     --load-id ef478d76-d9da-4d94-8ff1-08d9d4863aa5
   ```

   如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [get-loader-job-status](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/get-loader-job-status.html)。

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://your-neptune-endpoint:port',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.get_loader_job_status(
       loadId='ef478d76-d9da-4d94-8ff1-08d9d4863aa5'
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5' \
     --region us-east-1 \
     --service neptune-db
   ```

**注意**  
此範例假設您的 AWS 登入資料已在您的環境中設定。將 *us-east-1* 取代為 Neptune 叢集的區域。

------
#### [ curl ]

   ```
   curl -G 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5'
   ```

------

   如果載入狀態列出錯誤，您可以請求更詳細的狀態和錯誤清單。如需詳細資訊和範例，請參閱 [Neptune 載入器 Get-Status API](load-api-reference-status.md)。

1. (選用) 取消 `Load` 工作。

   輸入以下命令，從**步驟 3** 中 `Delete` 具有工作 `id` 的載入器工作：

------
#### [ AWS CLI ]

   ```
   aws neptunedata cancel-loader-job \
     --endpoint-url https://your-neptune-endpoint:port \
     --load-id ef478d76-d9da-4d94-8ff1-08d9d4863aa5
   ```

   如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [cancel-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/cancel-loader-job.html)。

------
#### [ SDK ]

   ```
   import boto3
   from botocore.config import Config
   
   client = boto3.client(
       'neptunedata',
       endpoint_url='https://your-neptune-endpoint:port',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   response = client.cancel_loader_job(
       loadId='ef478d76-d9da-4d94-8ff1-08d9d4863aa5'
   )
   
   print(response)
   ```

------
#### [ awscurl ]

   ```
   awscurl 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5' \
     --region us-east-1 \
     --service neptune-db \
     -X DELETE
   ```

**注意**  
此範例假設您的 AWS 登入資料已在您的環境中設定。將 *us-east-1* 取代為 Neptune 叢集的區域。

------
#### [ curl ]

   ```
   curl -X DELETE 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5'
   ```

------

   成功取消時，`DELETE` 命令將傳回 HTTP 程式碼 `200 OK`。

   來自已完成載入的載入工作的檔案資料不會還原。資料仍會保留在 Neptune 資料庫執行個體中。