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 连接的类型:

  • CONNECTOR 使用本机 Analytics 数据连接器连接
  • ODBC "Driver" 使用您的计算机上安装的 Windows ODBC 驱动程序连接
  • ODBC "Dsn" 使用您的计算机上保存的 DSN(数据源名称)连接
  • ODBC "File" 使用文件 DSN(一个已保存的 .dsn 文件)连接
NAME

Analytics 数据连接器、ODBC 驱动程序或 DSN 的名称。

例如:

  • NAME "Amazon Redshift"
  • NAME "Microsoft Access Driver (*.mdb, *.accdb)"
  • NAME "My Excel DSN"
  • NAME "excel.dsn"

USER 用户 ID

可选

需要用户 ID 的数据源的用户 ID。

PASSWORD 数字 | PROMPT_PASSWORD

可选

对于需要密码的数据源:

  • PASSWORD 数字 使用编号密码定义
  • PROMPT_PASSWORD 显示密码提示

    密码提示还允许更改用户 ID

如果您使用 PASSWORD 数字,则必须指定一个之前创建的密码定义。 要了解更多信息,请参考PASSWORD 命令SET 命令

提示

将 PASSWORD 命令与 PASSWORD 数字结合使用类似于 PROMPT_PASSWORD。 这两个方法都提示用户输入密码。 PROMPT_PASSWORD 具有允许更新用户 ID 的优点。

TO 表名

要将命令结果发送到的位置:

  • 表名将结果保存到一个 Analytics 表

    请将表名指定为具有 .FIL 文件扩展名的带引号的字符串。 例如:TO "Output.FIL"

    默认情况下,表数据文件 (.FIL) 被保存到包含 Analytics 项目的文件夹。

    请使用绝对或相对文件路径将该数据文件保存到另外的现有文件夹:

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    说明

    表名称被限制为不超过 64 个字母数字字符(不包括 .FIL 扩展名)。 该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。 该名称不能以数字开头。

CHARMAX 最大域长度

Analytics 表中任何初始时作为您要从中导入的源中的字符数据的域的最大长度(单位为字符)。

默认值为 50。 超过最大字段长度的数据在被导入 Analytics 是会被截断。

MEMOMAX 最大域长度

您要导入的文本域、说明域或备注域的最大长度(单位为字符)。

默认值为 100。 超过最大字段长度的数据在被导入 Analytics 是会被截断。

ALLCHARACTER

可选

将字符数据类型自动分配给所有被导入的域。

一旦将数据导入 Analytics,您就可以向域分配不同的数据类型(如数值或日期时间),并且指定格式详细信息。

提示

如果您要导入包含数值 ID 值的表,则 ALLCHARACTER 很有用。 您可以使用 ALLCHARACTER 防止 Analytics 自动将数值数据类型分配给应该使用字符数据类型的值。

SOURCE 连接设置

要连接到数据源所需的连接设置(连接字符串)。

HASH(加盐值, )

可选

导入指定域作为加密哈希值。 哈希值是单向转换,并且在您导入域之后无法解码:

  • 盐值 一个字母数字字符串,它被与源数据值相连接,以加强域中的值的散列性。 请以带引号的字符串的形式输入哈希值。

    盐值被限制为不超过 128 个字符。 请勿使用下列任一字符: (  )  "

  • 要进行哈希处理的一个或多个域的列表。 请以带引号的字符串形式输入域,并且用一个逗号分隔每个域。

    您必须指定您在“数据访问”窗口预览和暂存区域中看到的域名称,而非数据源中的物理域名称。

    说明

    “数据访问”窗口预览中显示的域名称是 SQL 查询("域名称" AS "别名")中的域别名值。 您必须使用别名值来引用域。

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 命令导入过程中进行哈希处理的值进行比较。