

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon SDK 运行 Gremlin 查询
<a name="access-graph-gremlin-sdk"></a>

借助 Amazon SDK，您可以使用自己选择的编程语言对您的 Neptune 图运行 Gremlin 查询。Neptune 数据 API SDK（服务名称`neptunedata`）提供了提交 Grem [ExecuteGremlinQuery](https://docs.amazonaws.cn/neptune/latest/data-api/API_ExecuteGremlinQuery.html)lin 查询的操作。

您必须从与您的 Neptune 数据库集群位于同一虚拟私有云 (VPC) 中的 Amazon EC2 实例，或者从与您的集群终端节点有网络连接的位置运行这些示例。

可以在下面找到每种 SDK 语言的`neptunedata`服务 API 参考文档的直接链接：


| 编程语言 | neptunedata API 参考 | 
| --- | --- | 
| C\+\+ | [https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-neptunedata/html/annotated.html](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-neptunedata/html/annotated.html) | 
| Go | [https://docs.amazonaws.cn/sdk-for-go/api/service/neptunedata/](https://docs.amazonaws.cn/sdk-for-go/api/service/neptunedata/) | 
| Java | [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/neptunedata/package-summary.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/neptunedata/package-summary.html) | 
| JavaScript | [https://docs.amazonaws.cn/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-neptunedata/](https://docs.amazonaws.cn/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-neptunedata/) | 
| Kotlin | [https://sdk.amazonaws.com/kotlin/api/latest/neptunedata/index.html](https://sdk.amazonaws.com/kotlin/api/latest/neptunedata/index.html) | 
| .NET | [https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/Neptunedata/NNeptunedata.html](https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/Neptunedata/NNeptunedata.html) | 
| PHP | [https://docs.amazonaws.cn/aws-sdk-php/v3/api/namespace-Aws.Neptunedata.html](https://docs.amazonaws.cn/aws-sdk-php/v3/api/namespace-Aws.Neptunedata.html) | 
| Python | [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/neptunedata.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/neptunedata.html) | 
| Ruby | [https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/Neptunedata.html](https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/Neptunedata.html) | 
| Rust | [https://crates.io/crates/aws-sdk-neptunedata](https://crates.io/crates/aws-sdk-neptunedata) | 
| CLI | [https://docs.amazonaws.cn/cli/latest/reference/neptunedata/](https://docs.amazonaws.cn/cli/latest/reference/neptunedata/) | 

## Gremlin SDK 示例 Amazon
<a name="access-graph-gremlin-sdk-examples"></a>

以下示例说明如何设置`neptunedata`客户端、运行 Gremlin 查询和打印结果。将{{YOUR\_NEPTUNE\_HOST}}和{{YOUR\_NEPTUNE\_PORT}}替换为您的 Neptune 数据库集群的终端节点和端口。

**客户端超时和重试配置**  
SDK 客户端超时控制*客户端*等待响应的时间。它不能控制查询在服务器上运行多长时间。如果客户端在服务器完成之前超时，则在客户端无法检索结果的情况下，查询可能会继续在 Neptune 上运行。  
我们建议将客户端读取超时设置为`0`（无超时），或者设置为比 Neptune 数据库集群上服务器端 nept [une\_query\_timeout](parameters.md#parameters-db-cluster-parameters-neptune_query_timeout) 设置至少长几秒钟的值。这使得 Neptune 可以控制查询何时超时。  
我们还建议将最大重试尝试次数设置为`1`（不允许重试）。如果 SDK 重试服务器上仍在运行的查询，则可能会导致重复操作。这对于变异查询尤其重要，因为在变异查询中，重试可能会导致意想不到的重复写入。

------
#### [ Python ]

1. 按照[安装说明安装](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) Boto3。

1. 创建名为的文件`gremlinExample.py`并粘贴以下代码：

   ```
   import boto3
   import json
   from botocore.config import Config
   
   # Disable the client-side read timeout and retries so that
   # Neptune's server-side neptune_query_timeout controls query duration.
   client = boto3.client(
       'neptunedata',
       endpoint_url=f'https://{{YOUR_NEPTUNE_HOST}}:{{YOUR_NEPTUNE_PORT}}',
       config=Config(read_timeout=None, retries={'total_max_attempts': 1})
   )
   
   # Use the untyped GraphSON v3 serializer for a cleaner JSON response.
   response = client.execute_gremlin_query(
       gremlinQuery='g.V().limit(1)',
       serializer='application/vnd.gremlin-v3.0+json;types=false'
   )
   
   print(json.dumps(response['result'], indent=2))
   ```

1. 运行示例：`python gremlinExample.py`

------
#### [ Java ]

1. 按照[安装说明](https://docs.amazonaws.cn//sdk-for-java/latest/developer-guide/setup.html)设置适用于 Java 的 Amazon SDK。

1. 使用以下代码设置`NeptunedataClient`、运行 Gremlin 查询并打印结果：

   ```
   import java.net.URI;
   import java.time.Duration;
   import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
   import software.amazon.awssdk.core.retry.RetryPolicy;
   import software.amazon.awssdk.services.neptunedata.NeptunedataClient;
   import software.amazon.awssdk.services.neptunedata.model.ExecuteGremlinQueryRequest;
   import software.amazon.awssdk.services.neptunedata.model.ExecuteGremlinQueryResponse;
   
   // Disable the client-side timeout and retries so that
   // Neptune's server-side neptune_query_timeout controls query duration.
   NeptunedataClient client = NeptunedataClient.builder()
       .endpointOverride(URI.create("https://{{YOUR_NEPTUNE_HOST}}:{{YOUR_NEPTUNE_PORT}}"))
       .overrideConfiguration(ClientOverrideConfiguration.builder()
           .apiCallTimeout(Duration.ZERO)
           .retryPolicy(RetryPolicy.none())
           .build())
       .build();
   
   // Use the untyped GraphSON v3 serializer for a cleaner JSON response.
   ExecuteGremlinQueryRequest request = ExecuteGremlinQueryRequest.builder()
       .gremlinQuery("g.V().limit(1)")
       .serializer("application/vnd.gremlin-v3.0+json;types=false")
       .build();
   
   ExecuteGremlinQueryResponse response = client.executeGremlinQuery(request);
   
   System.out.println(response.result().toString());
   ```

------
#### [ JavaScript ]

1. 按照[安装说明](https://docs.amazonaws.cn//sdk-for-javascript/v3/developer-guide/getting-started-nodejs.html)为设置 S Amazon DK JavaScript。安装 neptunedata 客户端软件包:. `npm install @aws-sdk/client-neptunedata` 

1. 创建名为的文件`gremlinExample.js`并粘贴以下代码：

   ```
   import { NeptunedataClient, ExecuteGremlinQueryCommand } from "@aws-sdk/client-neptunedata";
   import { NodeHttpHandler } from "@smithy/node-http-handler";
   
   const config = {
       endpoint: "https://{{YOUR_NEPTUNE_HOST}}:{{YOUR_NEPTUNE_PORT}}",
       // Disable the client-side request timeout so that
       // Neptune's server-side neptune_query_timeout controls query duration.
       requestHandler: new NodeHttpHandler({
           requestTimeout: 0
       }),
       maxAttempts: 1
   };
   
   const client = new NeptunedataClient(config);
   
   // Use the untyped GraphSON v3 serializer for a cleaner JSON response.
   const input = {
       gremlinQuery: "g.V().limit(1)",
       serializer: "application/vnd.gremlin-v3.0+json;types=false"
   };
   
   const command = new ExecuteGremlinQueryCommand(input);
   const response = await client.send(command);
   
   console.log(JSON.stringify(response, null, 2));
   ```

1. 运行示例：`node gremlinExample.js`

------