ACCESSDATA 命令
从各种 ODBC 兼容数据源中导入数据。
该命令采取 ACCESSDATA64 或 ACCESSDATA32 形式,具体取决于您使用的是 64 位还是 32 位 ODBC 驱动程序。
语法
{ACCESSDATA64 | ACCESSDATA32} {CONNECTOR | ODBC {"Driver"|"Dsn"|"File"}} NAME 值 <USER 用户 ID> <PASSWORD 数字 | PROMPT_PASSWORD> TO 表名称 CHARMAX 最大域长度 MEMOMAX 最大域长度 <ALLCHARACTER> SOURCE (连接设置) <HASH(盐值, 域)>
SQL_QUERY
(SQL 语法)
END_QUERY
参数
| 名称 | 描述 |
|---|---|
| CONNECTOR | ODBC {"Driver"|"Dsn"|"File"} |
您想要建立的 ODBC 连接的类型:
|
| NAME 值 |
Analytics 数据连接器、ODBC 驱动程序或 DSN 的名称。 例如:
|
|
USER 用户 ID 可选 |
需要用户 ID 的数据源的用户 ID。 |
|
PASSWORD 数字 | PROMPT_PASSWORD 可选 |
对于需要密码的数据源:
如果您使用 PASSWORD 数字,则必须指定一个之前创建的密码定义。 要了解更多信息,请参考PASSWORD 命令和SET 命令。 提示 将 PASSWORD 命令与 PASSWORD 数字结合使用类似于 PROMPT_PASSWORD。 这两个方法都提示用户输入密码。 PROMPT_PASSWORD 具有允许更新用户 ID 的优点。 |
| TO 表名 |
要将命令结果发送到的位置:
|
|
CHARMAX 最大域长度 |
Analytics 表中任何初始时作为您要从中导入的源中的字符数据的域的最大长度(单位为字符)。 默认值为 50。 超过最大字段长度的数据在被导入 Analytics 是会被截断。 |
|
MEMOMAX 最大域长度 |
您要导入的文本域、说明域或备注域的最大长度(单位为字符)。 默认值为 100。 超过最大字段长度的数据在被导入 Analytics 是会被截断。 |
|
ALLCHARACTER 可选 |
将字符数据类型自动分配给所有被导入的域。 一旦将数据导入 Analytics,您就可以向域分配不同的数据类型(如数值或日期时间),并且指定格式详细信息。 提示 如果您要导入包含数值 ID 值的表,则 ALLCHARACTER 很有用。 您可以使用 ALLCHARACTER 防止 Analytics 自动将数值数据类型分配给应该使用字符数据类型的值。 |
| SOURCE 连接设置 |
要连接到数据源所需的连接设置(连接字符串)。 |
|
HASH(加盐值, 域) 可选 |
导入指定域作为加密哈希值。 哈希值是单向转换,并且在您导入域之后无法解码:
HASH("QZ3x7", "SSN_NO, CC_NO, Last_Name")
有关将导入过程中哈希的值与在 ACLScript 中哈希的值进行比较的信息,请参见将用 ACCESSDATA 哈希的数据与用 ACLScript HASH( ) 函数哈希的数据进行比较。 |
| SQL_QUERY (SQL 语法) END_QUERY |
SQL 导入语句。 括号内的所有内容都是 SQL 查询的一部分且必须是有效的 SQL。 |
示例
使用本机 Analytics 数据连接器导入数据
您需要从 Amazon Redshift 云数据服务导入数据。 为此,您使用 Analytics Amazon Redshift 数据连接器:
ACCESSDATA64 CONNECTOR NAME "Amazon Redshift" USER "ACL_user" PROMPT_PASSWORD TO "Entitlement_History.FIL" CHARMAX 50 MEMOMAX 100
SOURCE( boolsaschar=0;cachesize=100;database=usage;declarefetchmode=0;maxbytea=255;maxlongvarchar=8190;maxvarchar=255;port=5439;servername=acl_test.highbond.com;singlerowmode=1;sslmode=require;textaslongvarchar=0;usemultiplestatments=0;useunicode=1)
SQL_QUERY(
SELECT
"entitlement_history"."organization" AS "organization",
"entitlement_history"."user_email" AS "user_email",
"entitlement_history"."plan_id" AS "plan_id",
"entitlement_history"."date_from" AS "date_from",
"entitlement_history"."date_to" AS "date_to"
FROM
"prm"."entitlement_history" "entitlement_history"
) END_QUERY
使用 Windows ODBC 驱动程序导入数据
您需要从 Microsoft Access 数据库导入数据。 为此,您使用 Windows ODBC 驱动程序连接到 MS Access 并完成导入:
ACCESSDATA32 ODBC "Driver" NAME "Microsoft Access Driver (*.mdb)" TO "Invoices.FIL" CHARMAX 50 MEMOMAX 100
SOURCE( dbq=C:\Users\lachlan_murray\Documents\ACL Data\Sample Data Files\Sample.mdb;defaultdir=C:\Users\lachlan_murray\Documents\ACL Data\Sample Data Files;driverid=281;fil=MS Access;maxbuffersize=2048;maxscanrows=8;pagetimeout=5;safetransactions=0;threads=3;usercommitsync=Yes)
SQL_QUERY(
SELECT
`Customer`.`CustID` AS `CustID`,
`Customer`.`Company` AS `Company`,
`Customer`.`Address` AS `Address`,
`Customer`.`City` AS `City`,
`Customer`.`Region` AS `Region`,
`Customer`.`PostalCode` AS `PostalCode`,
`Customer`.`Country` AS `Country`,
`Customer`.`Phone` AS `Phone`,
`Orders`.`OrderID` AS `OrderID`,
`Orders`.`CustID` AS `Orders_CustID`,
`Orders`.`ProdID` AS `ProdID`,
`Orders`.`OrderDate` AS `OrderDate`,
`Orders`.`Quantity` AS `Quantity`,
`Product`.`ProdID` AS `Product_ProdID`,
`Product`.`ProdName` AS `ProdName`,
`Product`.`UnitPrice` AS `UnitPrice`,
`Product`.`Descript` AS `Descript`,
`Product`.`ShipWt` AS `ShipWt`
FROM
(`Customer` `Customer`
INNER JOIN
`Orders` `Orders`
ON `Customer`.`CustID` = `Orders`.`CustID`
)
INNER JOIN
`Product` `Product`
ON `Orders`.`ProdID` = `Product`.`ProdID`
WHERE
(
`Customer`.`Region` = 'BC'
OR `Customer`.`Region` = 'WA'
)
) END_QUERY
使用 Windows DSN(数据源名称)导入数据
您需要从 Microsoft Excel 文件导入数据。 为此,您使用 Windows DSN 连接到 Excel 并完成导入:
ACCESSDATA32 ODBC "Dsn" NAME "Excel Files" TO "Trans_April_15_cutoff.FIL" CHARMAX 50 MEMOMAX 100
SOURCE( dbq=C:\Users\lachlan_murray\Documents\ACL Data\Sample Data Files\Trans_April.xls;defaultdir=C:\Users\lachlan_murray\Documents\ACL Data\Sample Data Files;driverid=1046;maxbuffersize=2048;pagetimeout=5)
SQL_QUERY(
SELECT
`Trans_Apr_`.`CARDNUM` AS `CARDNUM`,
`Trans_Apr_`.`AMOUNT` AS `AMOUNT`,
`Trans_Apr_`.`TRANS_DATE` AS `TRANS_DATE`,
`Trans_Apr_`.`CODES` AS `CODES`,
`Trans_Apr_`.`CUSTNO` AS `CUSTNO`,
`Trans_Apr_`.`DESCRIPTION` AS `DESCRIPTION`
FROM
`Trans_Apr$` `Trans_Apr_`
WHERE
(
`Trans_Apr_`.`TRANS_DATE` <= {ts '2003-04-15 00:00:00'}
)
) END_QUERY
备注
说明
有关此命令工作原理的详细信息,请参见 Analytics 帮助。
数据连接器更新
当您升级 Analytics、机器人代理或者 AX 服务器时,您应该测试您的任何使用 Analytics 数据连接器之一(ACCESSDATA 命令)导入数据的脚本。
由第三方数据源或 ODBC 驱动程序供应商进行的更改可能要求更新一个或多个数据连接器。 脚本化数据连接可能需要更新以便继续正确工作。
- 重新运行导入更新连接的最轻松方式是使用 Analytics 升级版本中的数据访问窗口手动执行导入。 从日志复制 ACCESSDATA 命令并使用它更新您的脚本。
说明
在连接到数据源并重新运行导入之前,请清除连接器缓存以冲刷现有的表名称集。
在数据访问窗口的现有连接选项卡中,在连接器名称旁边选择
> 清除缓存。 - 更新域规范您还可能需要更新脚本主体中的域规范以匹配数据源或 ODBC 驱动程序中的表架构更改。 可能的更改包括域名称、域数据类型、域和记录长度。
- 检查任何过滤的结果您还应该检查您在数据导入过程中应用的任何过滤的结果。 您还应该检查您在数据导入过程中应用的任何过滤的结果。
创建 ODBC 连接设置和 SQL 导入语句
ODBC 连接设置和 SQL 导入语句通常很冗长和复杂,如示例所示。
创建 ACCESSDATA 命令的这些部分的最简单方式是首先使用 Analytics 中的数据访问窗口连接到目标数据源,然后导入数据。 然后,您可以从日志复制整个 ACCESSDATA 命令(包括连接设置和导入语句),并且按您需要的任何方式自定义该命令。
隐藏密码值
当您使用 Analytics 中的数据访问窗口运行 ACCESSDATA 命令并提供密码时,密码值不会被写入日志。 相反,PROMPT_PASSWORD 参数被替代。
ACCESSDATA 日志文件
两个日志文件记录与 ACCESSDATA 命令相关联的交易,如果数据连接失败,则可用于排除故障:
- ServerDataAccess.log 记录在导入数据前发生的所有活动和错误
位置:C:\Users\<用户账户>\AppData\Local\ACL\ACL for Windows\Data Access\ServerDataAccess.log
说明
ServerDataAccess.log 中的“Server”是指在安装了 Analytics 的计算机上本地运行的 Analytics 的数据访问组件。
- DataAccess.log 记录有关导入操作和您要向其导入数据的 Analytics 项目的信息
位置:..\<Analytics 项目文件夹>\DataAccess.log
将用 ACCESSDATA 哈希的数据与用 ACLScript HASH( ) 函数哈希的数据进行比较
尽管您无法读取哈希数据的原始值,但在组合或者分析数据时,它仍然是有用的。
如果您想要将导入过程中 ACCESSDATA 哈希值与使用 ACLScript 的 HASH( ) 函数哈希的值进行比较,您必须将任何 Analytics 数值域或日期时间域转换为字符值,并且在对数据进行哈希处理之前消除所有前导和后继空格。
日期时间域在被转换为字符时必须使用下列格式:
- 日期时间 "YYYY-MM-DD hh:mm:ss"
- 日期 "YYYY-MM-DD"
- 时间 "hh:mm:ss"
以下示例在使用 ACLScript 的 HASH( ) 函数对该值进行哈希处理之前,使用 STRING( ) 和 ALLTRIM( ) 函数将数值类型信用卡号域转换为字符数据:
COMMENT 在导入数据之后使用的 ACL HASH 函数 HASH(ALLTRIM(STRING(CC_No, 16)), "QZ3x7")
在对 Analytics 值进行哈希处理之后,您可以将其与在 ACCESSDATA 命令导入过程中进行哈希处理的值进行比较。