针对若干 ODBC 兼容数据库(如 SQL Server、MySQL 和 Excel)提供了一些基本配置。可以定制和共享这些基本配置,以便为组织中的多个用户提供将数据加载到 JMP 中的单一配置。
JMP 搜索在 Windows 注册表或 ODBC.ini(在 macOS 上)中找到的现有 ODBC 配置的 DSN(数据源名称),并将它们转换为 JMP 数据连接器。这样就可以轻松访问数据源,而无需手动将现有 DSN 重新创建为配置。
安装用于所选数据源的 ODBC 驱动程序后,请按照以下步骤在 JMP 中连接至数据库:
1. 选择文件 > 数据库 > 数据连接器。“连接器”框列出了已建立连接的数据源。
2. 点击新建连接。
“选择数据连接器”窗口显示“新建连接”对话框。
图 3.51 “新建连接”对话框
3. 从这里的内置连接器、组织提供的插件连接器和用户创建的连接器的注册表中选择一种数据连接器。内置连接器的前缀为 com.jmp,插件连接器的前缀带有插件 ID,用户创建的连接器没有前缀。新连接器需要使用配置数据连接器中列出的配置选项进行配置。
4. 选定某个已配置的数据连接器后,点击连接。
“新建连接”对话框随即关闭,您将返回“选择数据连接器”窗口。
从数据库中导入数据
1. 选择文件 > 数据库 > 数据连接器。
随即显示“选择数据连接器”窗口(Figure 3.52)。
2. 若您已连接至数据库,请在“连接”框中选择该数据库。
“连接器”框列出 JMP 所连接的数据源。“架构 - 表”框列出了支持这些数据库的架构。
图 3.52 建立任何连接之前的“选择数据连接器”窗口
3. 若所需数据源未列在“连接器”框中,请点击新建连接以选择一个数据连接器。请按照配置数据连接器中的步骤进行操作。
4. 在“连接器”框内选择所需的数据源。“表”框内的表列表随之更新。更新可能需要几秒钟的时间,具体取决于表的数量和连接至数据库的速度。若数据库支持架构,将为列表中的第一个架构加载表,点击其他架构时也会为其他架构加载表。
5. 通过选择表列表中包含复选框组中的选项控制所列出的表。
注意:不同驱动程序对这些标签的解释各有不同。
用户表 点击该选项后,将在表列表中显示所有可用的用户表。用户表特定于登录到该计算机的用户。
视图 点击该选项后,将在表列表中显示“视图”以及其他所有可以打开的文件类型。“视图”是一些虚拟表,即每次打开时都更新的查询结果集。视图用于获取和组合一个或多个表中的信息。
系统表 点击该选项后,将显示表列表中的所有可用系统表。系统表是可供所有用户或系统范围内的服务使用的表。
同义词 点击该选项后,将在表列表中显示所有可用的 ORACLE 同义词。
6. 从“表”列表中选择所需表。
7. 点击打开表可导入选定表中的所有数据,点击查询生成器可指定要导入的表子集。请参见在“查询生成器”中生成 SQL 查询。
当您打开大型表时可能会略有延迟。要查看所有活动 ODBC 查询的状态,请选择视图 > 正在运行的查询。
注意:若数据之前导出到 JMP 中的数据库并且包含“表达式”列,则该列可能会被导入为“字符”列。选择列 > 列信息,然后将“数据类型”改为“表达式”。
在“选择数据连接器”窗口中选择新建后,“数据连接器编辑器”窗口随即显示。在该窗口中配置用于连接数据库的选项,如登录凭证和 SQL 格式。
对于“连接”组中与 ODBC 连接字符串键相对应的字段,将其设置为无值对应于不在连接字符串中指定它们。接受布尔值的选项接受值开和关。
图 3.53 “数据连接器编辑器”窗口
基本
指定用于加载基本配置的键的类型。
无
提供空白配置,其中所有字段均采用默认值。
ID
提供与提供的 ID 关联的配置。
文件
提供与提供的文件路径关联的配置。
规格
提供与提供的规格关联的配置。规格使用遵循以下语法的受限 JSL 格式:KEY1 = VALUE1; KEY2 = VALUE2;,其中 KEY 指的是 ID 或 Server 之类的关键字,VALUE 指的是数据连接的 ID 或 Server 值。规格对于通过使用命名的数据连接器配置 ID 访问特定数据源来测试配置非常有用。
连接
用于连接数据库的选项。
连接
指定 ODBC 连接字符串。
数据库
指定用于连接的数据库的名称。
驱动程序
指定驱动程序的名称。
密码
指定用于访问数据库的密码。
密码键
指定用于映射到密码字段的值的连接字符串键。
端口
指定端口值。
服务器
指定服务器实例的名称。
服务器键
指定用于映射到服务器字段的值的连接字符串键。
表
指定要打开的表的名称。
用户
指定服务器登录名。
用户键
指定用于映射到用户名字段的值的连接字符串键。
ODBC
异步能力
(布尔值|自动)指定驱动程序是否支持异步执行。若选定自动选项,JMP 将尝试自行确定是否支持。
块提取
(布尔值)指定驱动程序是否支持块提取。
块提取需要 8 字节对齐
(布尔值)指定驱动程序是否假定块提取内存需要 8 字节对齐。
列出同义词表
指示根据“选择数据连接器”窗口的“表列表中包含”框中的可用设置,表列表是否应包括同义词表。
始终
包括同义词表,而不考虑用户偏好。
从不
排除同义词表,而不考虑用户偏好。
也许
根据用户偏好包括同义词表。
列出系统表
指示根据“选择数据连接器”窗口的“表列表中包含”框中的可用设置,表列表是否应包括系统表。
某些驱动程序(如 Excel 驱动程序)将所有表都视为系统表。使用始终可确保列出这些表。
始终
包括系统表,而不考虑用户偏好。
从不
排除系统表,而不考虑用户偏好。
也许
根据用户偏好包括系统表。
可滚动光标
(布尔值|自动)指定驱动程序是否支持使用可滚动光标。若选定自动选项,JMP 将尝试自行确定是否支持。
JMP 将使用 SQLFetchScroll ODBC 函数而不是 SQLFetch(若受支持)。
SQLDescribeCol 可以包括表名
(布尔值)指定由 SQLDescribeCol ODBC 函数返回的列名是否可以包括表名。一些云数据源的驱动程序会这样做。若选定开选项,JMP 将分析 SQLDescribeCol ODBC 函数所返回的值。
支持架构
(布尔值|自动)指定驱动程序是否支持架构。若选定自动选项,JMP 将尝试自行确定是否支持。
值中的尾随空白很重要
(布尔值)指定是否应将尾随空白之前相同的值视为不同的值。许多数据库认为这样的值是相等的,JMP 在收集非重复值时使用该设置。
将成功获取信息视为获取错误
(布尔值)指定是否将“成功获取信息”结果视为错误。在获取数据时,一些驱动程序会截断数据,并返回结果“成功获取信息”而不是错误。
SQL
用于设置 SQL 命令的格式的选项。
默认大小写
(无|大写|小写)指定数据库如何映射未引起来的标识符的大小写。例如,SQL Server 将 select colname from ... 和 select COLNAME from ... 视为与引用的 select [COLNAME] from ... 相同,因此应将该选项设置为“大写”。该选项用于了解何时在 SQL 代码中引用标识符以保留预期的大小写。
格式日期文字
(函数)使用提供的函数将日期和时间转换为 SQL 片段。若提供了字符串“Default”,JMP 将使用自带的转换。
提供的函数应具有日期或时间以及以下字符串之一:“DATE”、“TIME” 或 “TIMESTAMP”。
公式编辑器模式
确定在用于编辑“查询生成器”中计算列的公式时,公式编辑器中默认显示的函数集。
Generic
指定一组通常适用的函数。
Access
指定一组与 Access SQL 相关的函数。
DB2
指定一组与 IBM Db2 相关的函数。
JMP
指定一组与 JMP 相关的函数。
MySQL
指定一组与 MySQL 相关的函数。
Oracle
指定一组与 Oracle Database SQL 相关的函数。
SAS
指定一组与 SAS 相关的函数。
SQL Server
指定一组与 SQL Server 相关的函数。
全部
包括上述选项提供的所有函数。
生成行计数 SQL
(函数)使用提供的函数计算 SQL 查询,该函数确定表中的行数。或者,选择选项无值将不会生成行计数。“查询生成器”使用该函数显示表中行数。
若提供了某个函数,它必须采用两个参数,即架构和表名,并使用 SQL 查询返回一个字符串。若未使用架构,则架构名称可为空。若行数未知,则结果集应为空或值为 -1。
有关函数的示例,请参见以下内容。
// Returns a query like:// SELECT NUM_ROWS FROM all_tables WHERE// table_name = 'my_table' AND owner = 'my_schema';Function({schema, table}, {quote string},quote string = Function({str}, "'" || Substitute(str, "'", "''") || "'");
Concat( "SELECT NUM_ROWS FROM all_tables WHERE table_name = ",quote string(table),
If(schema == "", "", " AND owner = " || quote string(schema)),
";")
);
关键字
(函数)指定要在 SQL 代码中被视为关键字而非标识符的字符串。该选项用于确定何时引用标识符,以避免将其解释为关键字。
引用类型
(Double (“id”)|Single ('id')|SAS ('id'n)|Brackets ([id])|Backticks (‘id‘)) 指定用于标识符的转义符和引号的类型。
支持带 In 的 Null
(布尔值)指定 NULL 是否可用在 IN 检验的列表中。
本例显示使用 ON 选项生成的代码的类型:
col IN ("val1", "val2", NULL)
本例显示使用 OFF 选项生成的代码的类型:
col IS NULL OR col IN ("val1", "val2")
尾随分号
(布尔值)指定驱动程序是否处理以分号结尾的 SQL 查询。这不会直接影响“查询生成器”生成的 SQL 代码。
不带引号的名称 Regex
(正则表达式)指定何时使用提供的正则表达式引用 SQL 代码中的标识符,该正则表达式与 SQL 代码中可用作不带引号名称的名称(不排除关键字)相匹配。默认正则表达式为 ^[A-Za-z_][A-Za-z_0-9]*$,完全匹配一个字母或下划线,后跟零个或多个字母、下划线或数字。
SQL 聚合函数
用于指定 SQL 聚合函数的选项。每个选项都设置为有值,同时有一个字符串提供函数;或设置为无值,指示不提供支持。
例如,平均 Distinct 函数包含默认字符串 “AVG(DISTINCT ”,该字符串用于生成计算非重复值的平均值的 SQL 代码,如 SELECT AVG(DISTINCT colname) FROM ...。
SQL 连接
指定“SQL 连接”选项。“查询生成器”使用这些连接来确定期望的连接类型。
需要配对连接
(布尔值)指定是否只能配对执行连接,这需要加括号。
下例显示当该选项设置为 “ON” 时会出现的配对连接。
SELECT *FROM (( table1 t1 LEFT OUTER JOIN table2 t2 ON ( t1.col2 = t2.col2 ) ) LEFT OUTER JOIN table3 t3 ON ( t1.col3 = t3.col3 ) ) ;下例显示当该选项设置为 “OFF” 时允许的连接。
SELECT *FROM table1 t1 LEFT OUTER JOIN table2 t2 ON ( t1.col2 = t2.col2 ) LEFT OUTER JOIN table3 t3 ON ( t1.col3 = t3.col3 ) ;支持交叉连接
(布尔值)指定是否支持交叉连接。
支持全外连接
(布尔值)指定是否支持全外连接。
支持内连接
(布尔值)指定是否支持内连接。
支持左外连接
(布尔值)指定是否支持左外连接。
支持右外连接
(布尔值)指定是否支持右外连接。
SQL 抽样
用于实现 SQL 抽样以返回从表中抽样的行的选项。
生成 SQL 周围的样本
(函数)确定是否以及如何包装核心 SQL 查询以使用提供的函数实现抽样。该函数采用一个参数,即样本设置,并返回空字符串(指示无包装),或返回包含占位符文本 ^QUERYSQL 的字符串,指示在哪里注入核心查询。
下例实现对“前 N 个”行的抽样。它通过在样本类型为“前 N 个”时返回查询模板(在其他情况下则返回一个空字符串)来实现该抽样。
Function({qss}, {},If(qss << Get Sample Type != "First N", "",
"SELECT * FROM (^QUERYSQL) WHERE ROWNUM <= "|| Char(qss << Get Sample Amount)
)
);
样本设置对象支持以下 JSL 消息:
<< Get Sample Amount
返回该量给样本。这是行数或百分比(介于 0 和 100 之间),具体取决于样本类型。
<< Get Sample Is Repeatable
返回是否启用可重复抽样。
<< Get Sample Seed
返回用于可重复抽样的种子。
<< Get Sample Type
返回要执行的抽样类型,是 “Percent”、“N Rows” 或 “First N” 这几个字符串之一。
<< Get Use Block Sampling
返回是使用分区抽样 (1) 还是行抽样 (0)。
生成样本 SQL
在此提供的函数确定用于在 SQL 查询中实现抽样的代码以及它在该查询中的位置。
该函数采用两个参数,抽样设置(如上文生成 SQL 周围的样本中所述),以及上下文(是一个字符串)。上下文指示查询中 JMP 生成代码的位置。
以下上下文可用:
“Before Columns”
返回 SELECT 和列名之间的值。
“Before Alias”
返回第一个表名称及其别名之间的值。
“After From”
返回查询的 FROM 子句与其他子句之前之间的值。
“After Joins”
返回查询的 JOIN 子句所在位置与其他子句(如 WHERE)之前之间的值。
“As Order By”
返回替换查询中的 ORDER BY 子句的值。这类似于下面的 “At End”,但应在值包含 ORDER BY 子句时使用。
“At End”
返回 SQL 查询末尾处的值。
支持区组抽样
(布尔值)指定抽样是否可以(或只能)按区组完成 — 在比单个行更宽泛的级别上,就像 Oracle 中的 SAMPLE BLOCK 一样。
支持可重复抽样
(布尔值)指定抽样是否可通过使用种子再现,就像 Oracle 中的 SEED (123456) 一样。
支持行抽样
(布尔值)指定抽样是否可以(或只能)按行完成。
支持抽样前 N 行
(布尔值)指定对于用户给定的 N 是否支持获取结果的前 N 行,就像 PostgreSQL 中的 LIMIT 1000 一样。
支持抽样 N 行
(布尔值)指定对于用户给定的 N 是否支持获取结果的 N 个随机行,就像 SQL Server 中的 TABLESAMPLE (1000 ROWS) 一样。
支持抽样 N 行和排序方式
(布尔值)指定是否可以在获取多个随机行的同时对输出进行排序(使用 ORDER BY)。对于 PostgreSQL 之类的数据库该设置为 "OFF",其中获取多个随机行是通过 ORDER BY RANDOM() LIMIT 1000 之类的操作实现的,这使得 ORDER BY 子句无法用于其常用目的。
支持抽样百分比
(布尔值)指定对于用户给定的 N 是否支持获取结果的抽样百分比,就像 SQL Server 中的 TABLESAMPLE (10 PERCENT) 一样。
测试
尝试使用给定的值进行连接,并显示一个消息框,确认测试是否成功。
保存副本
提供 ID 后,保存编辑器的当前状态,并使用所述 ID 将其注册到“选择数据连接器”窗口中的可用连接器列表中。请参见建立连接。
写入日志
将当前的编辑器状态写入日志。写入日志的文本可用于创建配置文件。
已配置的数据连接器可通过另存为 JMP 插件由多个用户共享和使用,即使在不同的操作系统上也是如此。
1. 选择文件 > 数据库 > 数据连接器。
2. 点击“连接器”字段中的红色小三角。
3. 选择共享连接器。
4. 通过双击或选择要共享的每个连接器并点击 > 按钮,将该连接器从连接器注册表添加到“选定的连接器”字段。
5. 在“插件文件另存为”窗口中选择保存。
6. 该数据连接器另存为 JMP 插件文件。
使用 JMP 的插件功能可以轻松安装和管理共享数据连接器。请参见《JMP Scripting Guide》的“Creating Applications”一章中的“Manage JMP Add-Ins”。
可配置的数据连接器允许连接到数据库的数据表发布到 JMP Live 并按计划刷新。这使得跨各种计算机的多个用户能够使用 JMP 和 JMP Live 的功能访问和分析一个数据源。
使用“可配置的数据连接器”创建的数据表可发布到 JMP Live 并按计划刷新。与“打开表”相比,这些数据表使刷新脚本的设置更容易,因为它们不太依赖于指定正确的 ODBC 驱动程序。
有关将报表发布到 JMP Live 的信息,请参见将报表共享至 JMP Live。