

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

# Amazon Neptune JDBC 连接
<a name="neptune-jdbc"></a>

Amazon Neptune 发布了一款[开源 JDBC 驱动程序](https://github.com/aws/amazon-neptune-jdbc-driver)，它支持 openCypher、Gremlin、SQL-Gremlin 和 SPARQL 查询。JDBC 连接使您可以使用 Tableau 等商业智能 (BI) 工具轻松连接到 Neptune。在 Neptune 上使用 JDBC 驱动程序不会产生额外费用，您仍然只需为消耗的 Neptune 资源付费。

该驱动程序与 JDBC 4.2 兼容，并且至少需要 Java 8。有关如何使用 JDBC 驱动程序的信息，请参阅 [JDBC API 文档](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/)。

该 GitHub 项目包含驱动程序的详细文档，您可以在其中提交问题和打开功能请求：

**[适用于 Amazon Neptune 的 JDBC 驱动程序](https://github.com/aws/amazon-neptune-jdbc-driver#readme)**
+ [将 SQL 与 JDBC 驱动程序结合使用](https://github.com/aws/amazon-neptune-jdbc-driver/blob/develop/markdown/sql.md)
+ [将 Gremlin 与 JDBC 驱动程序结合使用](https://github.com/aws/amazon-neptune-jdbc-driver/blob/develop/markdown/gremlin.md)
+ [将 openCypher 与 JDBC 驱动程序结合使用](https://github.com/aws/amazon-neptune-jdbc-driver/blob/develop/markdown/opencypher.md)
+ [将 SPARQL 与 JDBC 驱动程序结合使用](https://github.com/aws/amazon-neptune-jdbc-driver/blob/develop/markdown/sparql.md)

# Neptune JDBC 驱动程序入门
<a name="neptune-jdbc-getting-started"></a>

要使用 Neptune JDBC 驱动程序连接到 Neptune 实例，要么必须将 JDBC 驱动程序部署在与您的 Neptune 数据库集群在同一 VPC 中的 Amazon EC2 实例上，要么该实例必须通过 SSH 隧道或负载均衡器可用。SSH 隧道可以在驱动程序内部设置，也可以在外部设置。

您可从[此处](https://github.com/aws/amazon-neptune-jdbc-driver/releases)下载驱动程序。该驱动程序打包为单个 JAR 文件，名称类似于 `neptune-jdbc-1.0.0-all.jar`。要使用它，请将 JAR 文件放在应用程序的 `classpath` 中。或者，如果您的应用程序使用 Maven 或 Gradle，则可以使用相应的 Maven 或 Gradle 命令从 JAR 安装驱动程序。

驱动程序需要 JDBC 连接 URL 才能连接 Neptune，格式如下：

```
jdbc:neptune:(connection type)://(host);property=value;property=value;...;property=value
```

 GitHub 项目中每种查询语言的章节描述了您可以在 JDBC 连接 URL 中为该查询语言设置的属性。

如果 JAR 文件位于应用程序的 `classpath` 中，则无需进行其它配置。您可以使用 JDBC `DriverManager` 接口和 Neptune 连接字符串连接驱动程序。例如，如果您可以通过端口 8182 上的 `neptune-example.com` 端点访问您的 Neptune 数据库集群，则可以像这样连接 openCypher：

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

void example() {
    String url = "jdbc:neptune:opencypher://bolt://neptune-example:8182";

    Connection connection = DriverManager.getConnection(url);
    Statement statement = connection.createStatement();

    connection.close();
}
```

 GitHub 项目中每种查询语言的文档部分描述了在使用该查询语言时如何构造连接字符串。

# 将 Tableau 与 Neptune JDBC 驱动程序结合使用
<a name="neptune-jdbc-tableau"></a>

要将 Tableau 与 Neptune JDBC 驱动程序结合使用，请先下载并安装最新版本的 [Tableau Desktop](https://www.tableau.com/products/desktop)。下载 Neptune JDBC 驱动程序的 JAR 文件，以及 Neptune Tableau 连接器文件（`.taco` 文件）。

**在 Mac 上连接适用于 Neptune 的 Tableau**

1. 将 Neptune JDBC 驱动程序 JAR 文件放入 `/Users/(your user name)/Library/Tableau/Drivers` 文件夹中。

1. 将 Neptune Tableau 连接器 `.taco` 文件放在 `/Users/(your user name)/Documents/My Tableau Repository/Connectors` 文件夹中。

1. 如果您启用了 IAM 身份验证，请为其设置环境。请注意，在 `.zprofile/`、`.zshenv/`、`.bash_profile` 等中设置的环境变量将不起作用。必须设置环境变量，这样它们才能由 GUI 应用程序加载。

   设置凭证的一种方法是将访问密钥和私密密钥放在 `/Users/(your user name)/.aws/credentials` 文件中。

   设置服务区域的一种简单方法是打开终端，然后使用应用程序的区域（例如，`us-east-1`）输入以下命令：

   ```
   launchctl setenv SERVICE_REGION region name
   ```

   还有其它方法可以设置在重启后仍然存在的环境变量，但是无论使用哪种技术，都必须设置 GUI 应用程序可以访问的变量。

1. 要将环境变量加载到 Mac 上的 GUI 中，请在终端上输入以下命令：

   ```
   /Applications/Tableau/Desktop/2021.1.app/Contents/MacOS/Tableau
   ```

**在 Windows 计算机上连接到适用于 Neptune 的 Tableau**

1. 将 Neptune JDBC 驱动程序 JAR 文件放入 `C:\Program Files\Tableau\Drivers` 文件夹中。

1. 将 Neptune Tableau 连接器 `.taco` 文件放在 `C:\Users\(your user name)\Documents\My Tableau Repository\Connectors` 文件夹中。

1. 如果您启用了 IAM 身份验证，请为其设置环境。

   这可以像设置用户 `ACCESS_KEY`、`SECRET_KEY` 和 `SERVICE_REGION` 环境变量一样简单。

Tableau 处于打开状态后，选择窗口左侧的**更多**。如果 Tableau 连接器文件位置正确，则可以在显示的列表中选择 ** AWS的 Amazon Neptune**：

![\[在 Tableau 中选择 SQL\]](http://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/images/tableau-sql-gremlin.png)


您不必编辑端口，也不必添加任何连接选项。输入您的 Neptune 端点并设置您的 IAM 和 SSL 配置（如果您使用 IAM，则必须启用 SSL）。

当您选择**登录**时，如果您的图形很大，则连接时间可能超过 30 秒。Tableau 正在收集顶点和边缘表并联接边缘上的顶点，并创建可视化效果。

# 对 JDBC 驱动程序连接进行故障排除
<a name="neptune-jdbc-troubleshooting"></a>

如果驱动程序无法连接到服务器，请使用 JDBC `Connection` 对象的 `isValid` 函数来检查连接是否有效。如果函数返回 `false`（表示连接无效），请检查所连接的端点是否正确，以及您是否在 Neptune 数据库集群的 VPC 中，或者您是否有通往该集群的有效 SSH 隧道。

如果您从 `DriverManager.getConnection` 调用中获得 `No suitable driver found for (connection string)` 响应，则连接字符串的开头可能存在问题。请确保您的连接字符串以如下方式开头：

```
jdbc:neptune:opencypher://...
```

要收集有关连接的更多信息，可以在连接字符串中添加 `LogLevel`，如下所示：

```
jdbc:neptune:opencypher://(JDBC URL):(port);logLevel=trace
```

或者，您可以在输入属性中添加 `properties.put("logLevel", "trace")` 来记录跟踪信息。