将 Anylogic 8.6 连接到 redshift 数据库
Connecting Anylogic 8.6 to a redshift database
我有兴趣将 Anylogic 8.6 中的模型链接到 Redshift 数据库中的 table/view。这将使模型能够自动获取新数据来定义我们的人口和 运行,从而实现更好的运营决策(即我们期待明天发生什么,明天总是在变化)。
此版本具有与 excel 电子表格或 SQL 服务器数据库的本机连接。在 FAQ 中有一个链接到 MySQL 的分步指南。我已经将本指南改编为适用于 Redshift,但我不太清楚如何让连接真正启动,或者如何测试它是否真的有效。
这是我所做的:
- 已从以下位置下载最新的 JDBC 驱动程序:https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html
- 我已将所有驱动程序文件提取到模型的文件夹中。
- 我在 AnyLogic 中打开模型,选择 'Projects' 视图并在 'Dependencies' 选项卡上导入驱动程序 JAR 文件(引用文件 RedshiftJDBC42-no-awssdk-1.2.50.1077.jar)
- 转到 Main 的 'Advanced Java' 属性并在导入部分键入以下行:
import com.amazon.redshift.jdbc42.Driver;
。模型 compiles/builds 没有错误。
我不确定下一步该做什么。
当我转到数据库并尝试导入 table 时,我仍然只看到 Excel/SQL 服务器
的选项
从 'Connectivity' 调色板中,我将 'Database' 拖到模型的 'Main' 部分。然后我
a) 选择连接为 'Other database type'
b) 在 'JDBC Driver' 部分我输入了 com.amazon.redshift.jdbc42.Driver
c) 在连接 URL 中我输入了以下内容:jdbc:redshift://<Server>:<Port>/<Database>?ssl=true&tcpKeepAlive=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
(这是来自 workbench/dBeaver/KNIME 的标准连接字符串并与那些一起工作,所有这些都是 JDBC)
d) 使用我平时 username/password 用于正常 SQL 工作
执行此操作后,我仍然只看到导入 table 的常用选项。所以我从 'Connectivity' 调色板中添加了一个 'query' 项目,并做了一个简单的 'Select * from Table' - 但我不清楚如何将它放入我的本地数据库...
我的下一步是什么?还是我在这里浪费时间? Redshift 连接对于让我们的模型 suitable 用于更广泛的操作用途大有帮助...
非常感谢。
将外部数据库 (DB) 表导入 built-in AnyLogic DB 与通过数据库对象和连接面板元素从外部数据库读取/写入外部数据库不同。后者不affect/change前者
后者可以用于任何 JDBC-compliant 数据库,如您所见(这就是 FAQ 说明所指的内容)。
前者仅支持 Excel/Access 和 SQL 服务器。 (如果你考虑一下,这需要将外部数据库的模式转换为 built-in AnyLogic DB 的模式,它实际上是一个标准的 HSQLDB 数据库;因此根据定义,这不是'universal' 操作,即使使用 JDBC,因此仅支持某些外部数据库。)
因此您可以从 Redshift 数据库读取并写入内部 AnyLogic 数据库以执行 'manual import'(您可以将其作为模型初始化的一部分调用);您还可以避免连接选项板查询元素,而只是以标准 Java 方式执行 SELECT 查询,也许使用 visually-added 数据库对象更容易获得连接。
但请务必记住,这 仅 让您能够使用 internal-DB-linked 的 built-in 视觉配置,例如代理人数和属性库块;您始终可以通过直接查询外部数据库来完成此操作(例如,这意味着需要更多 'manual' 代码来设置代理群体)。此外,您还拥有有效拥有两个数据库副本的存储开销,并且任何性能差异都不清楚(权衡 one-off 导入成本与 'local' H[=46= 的任何可能改进]之后的数据库查询)。
可能也可以使用它用于数据库导入的底层 AnyLogic JavaAPI(例如,importFromExternalDatabase
功能;搜索帮助)使这稍微简单一些,但您仍然需要 pre-prepared 内部数据库表设置(或编写代码来执行诸如解析外部数据库模式并创建适当的 HSQLDB表)。
我有兴趣将 Anylogic 8.6 中的模型链接到 Redshift 数据库中的 table/view。这将使模型能够自动获取新数据来定义我们的人口和 运行,从而实现更好的运营决策(即我们期待明天发生什么,明天总是在变化)。
此版本具有与 excel 电子表格或 SQL 服务器数据库的本机连接。在 FAQ 中有一个链接到 MySQL 的分步指南。我已经将本指南改编为适用于 Redshift,但我不太清楚如何让连接真正启动,或者如何测试它是否真的有效。
这是我所做的:
- 已从以下位置下载最新的 JDBC 驱动程序:https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html
- 我已将所有驱动程序文件提取到模型的文件夹中。
- 我在 AnyLogic 中打开模型,选择 'Projects' 视图并在 'Dependencies' 选项卡上导入驱动程序 JAR 文件(引用文件 RedshiftJDBC42-no-awssdk-1.2.50.1077.jar)
- 转到 Main 的 'Advanced Java' 属性并在导入部分键入以下行:
import com.amazon.redshift.jdbc42.Driver;
。模型 compiles/builds 没有错误。
我不确定下一步该做什么。
当我转到数据库并尝试导入 table 时,我仍然只看到 Excel/SQL 服务器
的选项从 'Connectivity' 调色板中,我将 'Database' 拖到模型的 'Main' 部分。然后我
a) 选择连接为 'Other database type'
b) 在 'JDBC Driver' 部分我输入了
com.amazon.redshift.jdbc42.Driver
c) 在连接 URL 中我输入了以下内容:
jdbc:redshift://<Server>:<Port>/<Database>?ssl=true&tcpKeepAlive=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
(这是来自 workbench/dBeaver/KNIME 的标准连接字符串并与那些一起工作,所有这些都是 JDBC)d) 使用我平时 username/password 用于正常 SQL 工作
执行此操作后,我仍然只看到导入 table 的常用选项。所以我从 'Connectivity' 调色板中添加了一个 'query' 项目,并做了一个简单的 'Select * from Table' - 但我不清楚如何将它放入我的本地数据库...
我的下一步是什么?还是我在这里浪费时间? Redshift 连接对于让我们的模型 suitable 用于更广泛的操作用途大有帮助...
非常感谢。
将外部数据库 (DB) 表导入 built-in AnyLogic DB 与通过数据库对象和连接面板元素从外部数据库读取/写入外部数据库不同。后者不affect/change前者
后者可以用于任何 JDBC-compliant 数据库,如您所见(这就是 FAQ 说明所指的内容)。
前者仅支持 Excel/Access 和 SQL 服务器。 (如果你考虑一下,这需要将外部数据库的模式转换为 built-in AnyLogic DB 的模式,它实际上是一个标准的 HSQLDB 数据库;因此根据定义,这不是'universal' 操作,即使使用 JDBC,因此仅支持某些外部数据库。)
因此您可以从 Redshift 数据库读取并写入内部 AnyLogic 数据库以执行 'manual import'(您可以将其作为模型初始化的一部分调用);您还可以避免连接选项板查询元素,而只是以标准 Java 方式执行 SELECT 查询,也许使用 visually-added 数据库对象更容易获得连接。
但请务必记住,这 仅 让您能够使用 internal-DB-linked 的 built-in 视觉配置,例如代理人数和属性库块;您始终可以通过直接查询外部数据库来完成此操作(例如,这意味着需要更多 'manual' 代码来设置代理群体)。此外,您还拥有有效拥有两个数据库副本的存储开销,并且任何性能差异都不清楚(权衡 one-off 导入成本与 'local' H[=46= 的任何可能改进]之后的数据库查询)。
可能也可以使用它用于数据库导入的底层 AnyLogic JavaAPI(例如,importFromExternalDatabase
功能;搜索帮助)使这稍微简单一些,但您仍然需要 pre-prepared 内部数据库表设置(或编写代码来执行诸如解析外部数据库模式并创建适当的 HSQLDB表)。