将 Machine Learning (ML) 与 Aurora MySQL 结合使用 - Amazon Aurora
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Machine Learning (ML) 与 Aurora MySQL 结合使用

借助 Aurora 机器学习,您可以使用 SQL 语言向数据库应用程序添加基于机器学习的预测。Aurora 机器学习 利用 Aurora 数据库与 AWS 机器学习 (ML) 服务 SageMaker 和 Amazon Comprehend 之间的高度优化集成。

Aurora 机器学习 具有以下好处:

  • 您可以向现有的数据库应用程序添加基于 ML 的预测。您无需构建自定义集成或另外学习工具。您可以将机器学习处理作为对存储函数的调用直接嵌入到 SQL 查询中。

  • ML 集成是使 ML 服务能够处理事务数据的快速方法。无需将数据移出数据库即可执行机器学习操作。无需转换或重新导入机器学习操作的结果即可在数据库应用程序中使用它们。

  • 您可以使用现有的治理策略来控制谁有权访问基础数据和所生成的见解。

AWS ML 服务是在其自己的生产环境中设置和运行的托管服务。目前,Aurora 机器学习 与 Amazon Comprehend 集成以执行情绪分析,与 SageMaker 集成以执行各种 ML 算法。

有关 Amazon Comprehend 的一般信息,请参阅Amazon Comprehend。有关结合使用 Aurora 和 Amazon Comprehend 的详细信息,请参阅使用 Amazon Comprehend 进行情绪检测

有关 SageMaker 的一般信息,请参阅SageMaker。有关结合使用 Aurora 和 SageMaker 的详细信息,请参阅使用 SageMaker 运行您自己的 ML 模型

Aurora 机器学习 的先决条件

目前,Aurora 机器学习 要求集群使用 Aurora MySQL 数据库引擎。此功能可用于任何运行 Aurora MySQL 2.07.0 及更高版本的 Aurora 集群。您可以将较旧的 Aurora 集群升级到这些版本之一,并在该集群中使用此功能。

启用 Aurora 机器学习

启用 ML 功能包括以下步骤:

  • 启用 Aurora 集群以访问 Amazon 机器学习服务 SageMaker 或 Amazon Comprehend,具体取决于您希望应用程序采用的 ML 算法的种类。

  • 然后,对于 SageMaker,使用 Aurora CREATE FUNCTION 语句来设置访问推理功能的存储函数。

    注意

    Aurora 机器学习 包含一些内置函数,可调用 Amazon Comprehend 进行情绪分析。如果只使用 Amazon Comprehend,则无需运行任何 CREATE FUNCTION 语句。

设置对 Amazon Comprehend 和 SageMaker 的 IAM 访问权限

启用 Aurora MySQL 集群以访问 AWS ML 服务,然后才可以访问 SageMaker 和 Amazon Comprehend。为了使您的 Aurora MySQL 数据库集群能够代表您访问 AWS ML 服务,请创建并配置 AWS Identity and Access Management (IAM) 角色。这些角色授权 Aurora MySQL 数据库的用户访问 AWS ML 服务。

当您使用 AWS 管理控制台 时,AWS 会自动为您进行 IAM 设置。您可以跳过以下信息,并按照使用控制台将 Aurora 数据库集群连接到 Amazon S3、SageMaker 或 Amazon Comprehend中的过程操作。

使用 AWS CLI 或 RDS API 为 SageMaker 或 Amazon Comprehend 设置 IAM 角色的过程包括以下步骤:

  1. 创建一个 IAM 策略,以指定 Aurora MySQL 集群可以调用的 SageMaker 终端节点,或启用对 Amazon Comprehend 的访问。

  2. 创建一个 IAM 角色,以允许您的 Aurora MySQL 数据库集群访问 AWS ML 服务。上面创建的 IAM 策略将附加到 IAM 角色。

  3. 要允许 Aurora MySQL 数据库集群访问 AWS ML 服务,请将上面创建的 IAM 角色与该数据库集群关联。

  4. 要允许数据库应用程序调用 AWS ML 服务,您还必须向特定数据库用户授予权限。对于 SageMaker,因为对终端节点的调用被包装在一个存储函数中,所以您还要向调用它们的任何数据库用户授予对存储函数的 EXECUTE 权限。

有关如何允许 Aurora MySQL 数据库集群代表您访问其他 AWS 服务的一般信息,请参阅授权 Amazon Aurora MySQL 代表您访问其他 AWS 服务

使用控制台将 Aurora 数据库集群连接到 Amazon S3、SageMaker 或 Amazon Comprehend

Aurora 机器学习 要求您的数据库集群使用 Amazon S3、SageMaker 和 Amazon Comprehend 的某种组合。Amazon Comprehend 用于情绪分析。SageMaker 用于各种机器学习算法。对于 Aurora 机器学习,Amazon S3 仅用于训练 SageMaker 模型。如果您还没有训练后的模型,而训练又是您的责任,则只需对 Aurora 机器学习 使用 Amazon S3。要将数据库集群连接到这些服务,需要为每个 Amazon 服务设置 AWS Identity and Access Management (IAM) 角色。IAM 角色使数据库集群的用户可以使用相应的服务进行身份验证。

要为 Amazon S3、SageMaker 或 Amazon Comprehend 生成 IAM 角色,请对所需的每个服务重复以下步骤。

将数据库集群连接到 Amazon 服务

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要使用的 Aurora MySQL 数据库集群。

  3. 选择 Connectivity & security (连接和安全性) 选项卡。

  4. Manage IAM roles (管理 IAM 角色) 部分中选择 Select a service to connect to this cluster (选择一个服务以连接到此集群)

  5. 从下拉列表中选择要连接的服务。

    • Amazon S3

    • Amazon Comprehend

    • SageMaker

  6. 选择 Connect service (连接服务)

  7. Connect cluster (连接集群) 窗口中输入特定服务所需的信息:

    • 对于 SageMaker,输入 SageMaker 终端节点的 Amazon 资源名称 (ARN)。有关终端节点表示内容的详细信息,请参阅在 Amazon SageMaker 托管服务上部署模型

      SageMaker 控制台的导航窗格中选择 Endpoints (终端节点),然后复制您要使用的终端节点的 ARN。

    • 对于 Amazon Comprehend,无需指定任何附加参数。

    • 对于 Amazon S3,请输入要使用的 Amazon S3 存储桶的 ARN。

      Amazon S3 存储桶 ARN 的格式为 arn:aws:s3:::bucket_name。确保您使用的 Amazon S3 存储桶是按照训练 SageMaker 模型的要求设置。当您训练模型时,您的 Aurora 数据库集群需要权限才能将数据导出到 Amazon S3 存储桶,也需要权限才能从存储桶中导入数据。

      有关 Amazon S3 存储桶 ARN 的更多信息,请参阅Amazon Simple Storage Service 开发人员指南中的在策略中指定资源。有关在 SageMaker 中使用 Amazon S3 存储桶的更多信息,请参阅Amazon SageMaker 开发人员指南中的步骤 1:创建 Amazon Amazon S3 存储桶

  8. 选择 Connect service (连接服务)

  9. Aurora 创建一个新 IAM 角色并将其添加到数据库集群的 Current IAM roles for this cluster (此集群的当前 IAM 角色) 列表中。IAM 角色的状态最初为 In progress (正在进行)。对于每个已连接的服务,将使用以下模式自动生成 IAM 角色名称:

    • Amazon S3 IAM 角色名称模式为 rds-cluster_ID-S3-policy-timestamp

    • SageMaker IAM 角色名称模式为 rds-cluster_ID-SageMaker-policy-timestamp

    • Amazon Comprehend IAM 角色名称模式为 rds-cluster_ID-Comprehend-policy-timestamp

    Aurora 还创建新的 IAM 策略并将其附加到角色。策略名称遵循类似的命名约定,并具有时间戳。

创建 IAM 策略以访问 SageMaker(仅限 AWS CLI)

注意

当您使用 AWS 管理控制台 时,Aurora 会自动创建 IAM 策略。在这种情况下,您可以跳过此部分。

以下策略添加 Aurora MySQL 代表您调用 SageMaker 函数所需的权限。可以在一个策略中指定需要数据库应用程序从 Aurora MySQL 集群访问的所有 SageMaker 终端节点。该策略允许您为 SageMaker 终端节点指定 AWS 区域。但是,Aurora MySQL 集群只能调用部署在与该集群相同的 AWS 区域中的 SageMaker 模型。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" } ] }

以下命令通过 AWS CLI 执行相同的操作。

aws iam put-role-policy --role-name role_name --policy-name policy_name --policy-document '{"Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" }]}'

创建 IAM 策略以访问 Amazon Comprehend(仅限 AWS CLI)

注意

当您使用 AWS 管理控制台 时,Aurora 会自动创建 IAM 策略。在这种情况下,您可以跳过此部分。

以下策略添加 Aurora MySQL 代表您调用 AWS Amazon Comprehend 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeComprehendDetectSentiment", "Effect": "Allow", "Action": [ "comprehend:DetectSentiment", "comprehend:BatchDetectSentiment" ], "Resource": "*" } ] }

以下命令通过 AWS CLI 执行相同的操作。

aws iam put-role-policy --role-name role_name --policy-name policy_name --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeComprehendDetectSentiment", "Effect": "Allow", "Action": [ "comprehend:DetectSentiment", "comprehend:BatchDetectSentiment" ], "Resource": "*" }]}'

创建 IAM 策略来授予对 Amazon Comprehend 的访问权限

  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择 Policies

  3. 选择 Create policy

  4. Visual editor (可视化编辑器) 选项卡上,选择 Choose a service (选择服务),然后选择 Comprehend

  5. 对于 Actions (操作),请选择 DetectSentimentBatchDetectSentiment

  6. 选择查看策略

  7. 对于 Name (名称),请输入 IAM 策略名称。在创建 IAM 角色与 Aurora 数据库集群关联时,需要使用此名称。您也可以添加可选的 Description (描述) 值。

  8. 选择 Create policy

  9. 完成创建 IAM 角色以允许 Amazon Aurora 访问 AWS 服务中的过程。

创建 IAM 角色以访问 SageMaker 和 Amazon Comprehend

创建 IAM 策略后,请创建一个 IAM 角色,使 Aurora MySQL 集群可以代表您的数据库用户代入该角色以访问 ML 服务。要创建 IAM 角色,您可以使用 AWS 管理控制台 或 AWS CLI。要创建 IAM 角色并将前面的策略附加到该角色,请遵循创建 IAM 角色以允许 Amazon Aurora 访问 AWS 服务中描述的步骤。有关 IAM 角色的更多信息,请参阅 AWS Identity and Access Management 用户指南中的 IAM 角色

您只能使用全局 IAM 角色进行身份验证。不能使用与数据库用户或会话关联的 IAM 角色。Aurora 与 Lambda 和 Amazon S3 服务的集成也有这一要求。

将 IAM 角色与 Aurora MySQL 数据库集群关联(仅限 AWS CLI)

注意

当您使用 AWS 管理控制台 时,Aurora 会自动创建 IAM 策略。在这种情况下,您可以跳过此部分。

最后一步是将具有附加 IAM 策略的 IAM 角色与您的 Aurora MySQL 数据库集群关联。要将 IAM 角色与 Aurora 数据库集群关联,您可以执行两个操作:

  1. 通过使用 AWS 管理控制台、add-role-to-db-cluster AWS CLI 命令或 AddRoleToDBCluster RDS API 操作,将角色添加到数据库集群的关联角色列表中。

  2. 将相关的 AWS ML 服务的集群级别参数设置为关联的 IAM 角色的 ARN。根据要在 Aurora 集群中使用的 AWS ML 服务来使用 aws_default_sagemaker_role 和/或 aws_default_comprehend_role 参数。

集群级别的参数分成数据库集群参数组。要设置上述集群参数,请使用现有的自定义数据库集群组或创建一个新的集群组。要创建新的数据库集群参数组,请从 AWS CLI 中调用 create-db-cluster-parameter-group 命令,如下所示。

PROMPT> aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --db-parameter-group-family aurora-mysql5.7 --description "Allow access to Amazon S3, AWS Lambda, AWS SageMaker, and AWS Comprehend"

在数据库集群参数组中设置相应的集群级别参数以及相关的 IAM 角色 ARN 值,如下所示。

PROMPT> aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --parameters "ParameterName=aws_default_s3_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraS3Role,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_sagemaker_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraSageMakerRole,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_comprehend_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraComprehendRole,ApplyMethod=pending-reboot"

修改数据库集群以使用新的数据库集群参数组。然后,重新启动集群。下面演示了如何操作。

PROMPT> aws rds modify-db-cluster --db-cluster-identifier your_cluster_id --db-cluster-parameter-group-nameAllowAWSAccessToExternalServices PROMPT> aws rds failover-db-cluster --db-cluster-identifier your_cluster_id

在重新启动实例后,您的 IAM 角色将与数据库集群关联。

授予 SQL 权限以调用 Aurora 机器学习 服务

创建所需的 IAM 策略和角色并将角色与 Aurora MySQL 数据库集群关联后,您授权各个数据库用户为 SageMaker 调用 Aurora 机器学习 存储函数,为 Amazon Comprehend 调用内置函数。

必须为调用本机函数的数据库用户授予 INVOKE SAGEMAKERINVOKE COMPREHEND 权限。要为用户授予该权限,请以主用户身份连接到数据库实例,然后运行以下语句。替换数据库用户的相应详细信息。

GRANT INVOKE SAGEMAKER ON *.* TO user@domain-or-ip-address GRANT INVOKE COMPREHEND ON *.* TO user@domain-or-ip-address

对于 SageMaker,用户定义的函数定义要发送到模型的参数,以生成推理并配置要调用的终端节点名称。对于打算调用终端节点的每个数据库用户,您为针对 SageMaker 配置的存储函数授予 EXECUTE 权限。

GRANT EXECUTE ON FUNCTION db1.anomaly_score TO user1@domain-or-ip-address1 GRANT EXECUTE ON FUNCTION db2.company_forecasts TO user2@domain-or-ip-address2

允许 Aurora MySQL 与其他 AWS 服务的网络通信

由于 SageMaker 和 Amazon Comprehend 是外部 AWS 服务,您还必须将 Aurora 数据库集群配置为允许与目标 AWS 服务的出站连接。有关更多信息,请参阅启用从 Amazon Aurora MySQL 到其他 AWS 服务的网络通信

您可以使用 VPC 终端节点连接到 Amazon S3。目前无法使用 AWS PrivateLink 将 Aurora 连接到 AWS 机器学习服务或 Amazon S3。

将数据导出到 Amazon S3 以进行 SageMaker 模型训练

根据您的团队划分机器学习任务的方式,您可能不执行此任务。如果其他人为您提供了 SageMaker 模型,则可跳过此部分。

要训练 SageMaker 模型,请将数据导出到 Amazon S3 存储桶。Jupyter SageMaker 笔记本实例使用 Amazon S3 存储桶在部署模型之前对其进行训练。您可以使用 SELECT INTO OUTFILE S3 语句从 Aurora MySQL 数据库集群中查询数据,并将数据直接保存到 Amazon S3 存储桶中存储的文本文件。然后,笔记本实例将使用 Amazon S3 存储桶中的数据进行训练。

Aurora 机器学习 将扩展 Aurora MySQL 中现有的 SELECT INTO OUTFILE 语法,以将数据导出为 CSV 格式。需要此格式的模型可以直接使用生成的 CSV 文件进行训练。

SELECT * INTO OUTFILE S3 's3_uri' [FORMAT {CSV|TEXT} [HEADER]] FROM table_name;

该扩展支持标准 CSV 格式。

  • 格式 TEXT 与现有的 MySQL 导出格式相同。这是默认格式。

  • 格式 CSV 是一种新引入的格式,遵循 RFC-4180 中的规范。

  • 如果指定可选关键字 HEADER,则输出文件包含一个标题行。标题行中的标签与 SELECT 语句中的列名称相对应。

  • 您仍可使用关键字 CSVHEADER 作为标识符。

现在,SELECT INTO 的扩展句法和语法如下:

INTO OUTFILE S3 's3_uri' [CHARACTER SET charset_name] [FORMAT {CSV|TEXT} [HEADER]] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]

使用 SageMaker 运行您自己的 ML 模型

SageMaker 是一项完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速轻松地构建和训练机器学习模型。然后,他们可以直接将模型部署到生产就绪的托管环境中。SageMaker 提供了一个集成的 Jupyter 创作笔记本实例,便于访问您的数据源。这样,您就可以在不管理服务器硬件基础设施的情况下执行探索和分析。此外,它还可以提供常见的机器学习算法,这些算法经过了优化,可以在分布式环境中高效处理非常大的数据集。借助对自带算法和框架的原生支持,SageMaker 可以提供灵活并且适合具体工作流程的分布式训练选项。

目前,通过 text/csvContentType,Aurora 机器学习 支持任何可读取和写入逗号分隔值格式的 SageMaker 终端节点。目前接受此格式的内置 SageMaker 算法有随机森林砍伐、Linear Learner、1P、XGBoost 和 3P。如果算法每项返回多个输出,则 Aurora 机器学习 函数只返回第一项。预计第一项将是一个具有代表性的结果。

Aurora 机器学习 始终在与 Aurora 集群相同的 AWS 区域中调用 SageMaker 终端节点。因此,对于单区域 Aurora 集群,请始终将模型部署在与 Aurora MySQL 集群相同的 AWS 区域中。

如果要使用 Aurora 全局数据库,则为作为全局数据库一部分的每个 AWS 区域设置相同的服务间集成。尤其要确保全局数据库中的所有 AWS 区域均满足以下条件:

  • 配置适当的 IAM 角色,以访问每个 AWS 区域中的全局数据库集群的外部服务,如 SageMaker、Amazon Comprehend 或 Lambda。

  • 确保所有 AWS 区域都具有使用相同终端节点名称部署的相同且已训练的 SageMaker 模型。在主 AWS 区域中为 Aurora 机器学习 函数运行 CREATE FUNCTION 语句之前,请执行此操作。在全局数据库中,您在主 AWS 区域中运行的所有 CREATE FUNCTION 语句也会立即在所有辅助区域中运行。

要使用 SageMaker 中部署的模型进行推理,请使用熟悉的 MySQL 数据定义语言 (DDL) 语句为存储函数创建用户定义的函数。每个存储函数表示托管模型的 SageMaker 终端节点。定义此类函数时,请指定模型的输入参数、要调用的特定 SageMaker 终端节点以及返回类型。该函数在对输入参数应用模型后,将返回由 SageMaker 终端节点计算的推理。所有 Aurora 机器学习 存储函数均返回数字类型或 VARCHAR。您可以使用除 BIT 以外的任何数字类型。不允许使用其他类型,例如 JSONBLOBTEXTDATE。使用与导出到 Amazon S3 进行模型训练的输入参数相同的模型输入参数。

CREATE FUNCTION function_name (arg1 type1, arg2 type2, ...) -- variable number of arguments [DEFINER = user] -- same as existing MySQL CREATE FUNCTION RETURNS mysql_type -- For example, INTEGER, REAL, ... [SQL SECURITY { DEFINER | INVOKER } ] -- same as existing MySQL CREATE FUNCTION ALIAS AWS_SAGEMAKER_INVOKE_ENDPOINT -- ALIAS replaces the stored function body. Only AWS_SAGEMAKER_INVOKE_ENDPOINT is supported for now. ENDPOINT NAME 'endpoint_name' [MAX_BATCH_SIZE max_batch_size]; -- default is 10,000

这是现有 CREATE FUNCTION DDL 语句的变体。在定义 SageMaker 函数的 CREATE FUNCTION 语句中,不要指定函数体;而要指定函数体通常所在的新关键字 ALIAS。目前,Aurora 机器学习 只支持 aws_sagemaker_invoke_endpoint 使用这种扩展语法。您还必须指定 endpoint_name 参数。可选参数 max_batch_size 将实际批处理请求中处理的最大输入数量限制为 SageMaker。每个模型的 SageMaker 终端节点可以具有不同的特性。max_batch_size 参数可以帮助避免因输入过大而导致的错误,或者使 SageMaker 更快地返回响应。max_batch_size 参数影响用于 ML 请求处理的内部缓冲区的大小。为 max_batch_size 指定太大的值可能会导致数据库实例产生大量内存开销。

建议将 MANIFEST 设置保留为默认值 OFF。尽管可以使用 MANIFEST ON 选项,但某些 SageMaker 功能无法直接使用通过此选项导出的 CSV。清单格式与 SageMaker 预期的清单格式不兼容。

您为每个 SageMaker 模型创建一个单独的存储函数。需要将函数映射到模型,因为终端节点与特定的模型关联,并且每个模型接受的参数不同。将 SQL 类型用于模型输入和模型输出类型有助于避免在 AWS 服务之间来回传递数据时出现类型转换错误。您可以控制谁可以应用模型。也可以通过指定表示最大批处理大小的参数来控制运行时特性。

目前,所有 Aurora 机器学习 函数都具有 NOT DETERMINISTIC 属性。如果您未明确指定该属性,Aurora 会自动设置 NOT DETERMINISTIC。提出这一要求是因为可以在不向数据库发出任何通知的情况下更改 ML 模型。如果发生这种情况,则调用 Aurora 机器学习 函数可能会在单个事务中针对同一输入返回不同的结果。

不能在 CREATE FUNCTION 语句中使用特性 CONTAINS SQLNO SQLREADS SQL DATAMODIFIES SQL DATA

下面是调用 SageMaker 终端节点来检测异常的示例用法。这里有一个 SageMaker 终端节点 random-cut-forest-modelrandom-cut-forest 算法已对相应的模型进行了训练。对于每个输入,模型都会返回一个异常分数。本例显示了分数比平均分数大 3 个标准偏差(大约为 99.9%)的数据点。

create function anomaly_score(value real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'random-cut-forest-model-demo'; set @score_cutoff = (select avg(anomaly_score(value)) + 3 * std(anomaly_score(value)) from nyc_taxi); select *, anomaly_detection(value) score from nyc_taxi where anomaly_detection(value) > @score_cutoff;

返回字符串的 SageMaker 函数的字符集要求

建议为返回字符串值的 SageMaker 函数指定一个字符集 utf8mb4 作为返回类型。如果这不切实际,则为返回类型使用足够大的字符串长度,以容纳以 utf8mb4 字符集表示的值。下面的示例展示了如何为您的函数声明 utf8mb4 字符集。

CREATE FUNCTION my_ml_func(...) RETURNS VARCHAR(5) CHARSET utf8mb4 ALIAS ...

目前,每个返回字符串的 SageMaker 函数都使用字符集 utf8mb4 作为返回值。即使您的 ML 函数为其返回类型隐式或显式声明了不同的字符集,返回值仍使用此字符集。如果您的 ML 函数为返回值声明了不同的字符集,那么如果将返回的数据存储在不够长的表列中,则该数据可能会被无提示截断。例如,带有 DISTINCT 子句的查询将创建一个临时表。因此,由于查询期间内部处理字符串的方式原因,ML 函数结果可能会被截断。

使用 Amazon Comprehend 进行情绪检测

Amazon Comprehend 使用机器学习查找文本数据中的见解和关系。即使您没有任何机器学习经验或专业知识,也可以使用此 AWS 机器学习服务。Aurora 机器学习 使用 Amazon Comprehend 对存储在数据库中的文本进行情绪分析。例如,使用 Amazon Comprehend,您可以分析联络中心的呼入文档,以检测情绪并更好地了解呼叫方-代理的动态。您可以在 AWS 机器学习博客上的分析联络中心呼叫帖子中找到进一步的描述。

您也可以使用单个查询将情绪分析与对数据库中其他信息的分析相结合。例如,您可以检测联络中心呼入文档的平均情绪,以了解综合了以下方面的问题:

  • 超过 30 天未解决。

  • 关于特定产品或功能。

  • 由社交媒体影响力最大的客户提出。

使用 Aurora 机器学习 中的 Amazon Comprehend 就像调用 SQL 函数一样容易。Aurora 机器学习 提供两个内置 Amazon Comprehend 函数(aws_comprehend_detect_sentiment()aws_comprehend_detect_sentiment_confidence()),以通过 Amazon Comprehend 执行情绪分析。对于您分析的每个文本片段,这些函数将帮助您确定情绪和置信度。

-- Returns one of 'POSITIVE', 'NEGATIVE', 'NEUTRAL', 'MIXED' aws_comprehend_detect_sentiment( input_text ,language_code [,max_batch_size] -- default is 25. should be greater than 0 ) -- Returns a double value that indicates confidence of the result of aws_comprehend_detect_sentiment. aws_comprehend_detect_sentiment_confidence( input_text ,language_code [,max_batch_size] -- default is 25. should be greater than 0. )

max_batch_size 可帮助您优化 Amazon Comprehend 函数调用的性能。较大的批处理大小为了提高 Aurora 集群上的内存使用率而牺牲更快的性能。有关更多信息,请参阅Aurora 机器学习 的性能注意事项

有关 Amazon Comprehend 中情绪检测函数的参数和返回类型的信息,请参阅 DetectSentiment

典型的 Amazon Comprehend 查询会查找情绪为特定值且置信度大于特定数字的行。例如,以下查询显示了如何确定数据库中文档的平均情绪。该查询只考虑评估的置信度至少为 80% 的文档。

SELECT AVG(CASE aws_comprehend_detect_sentiment(productTable.document, 'en') WHEN 'POSITIVE' THEN 1.0 WHEN 'NEGATIVE' THEN -1.0 ELSE 0.0 END) AS avg_sentiment, COUNT(*) AS total FROM productTable WHERE productTable.productCode = 1302 AND aws_comprehend_detect_sentiment_confidence(productTable.document, 'en') >= 0.80;
注意

Amazon Comprehend 当前只在部分 AWS 区域中可用。要查看在哪些 AWS 区域可以使用 Amazon Comprehend,请参阅 AWS 区域表页面

Aurora 机器学习 的性能注意事项

Aurora 机器学习 函数调用中的大部分工作都在外部 ML 服务中进行。通过这种分离,您可以独立于 Aurora 集群扩展机器学习服务的资源。在 Aurora 中,您主要关注的是使函数调用本身尽可能高效。

查询缓存

Aurora MySQL 查询缓存不适用于 ML 函数。对于任何调用 ML 函数的 SQL 语句,Aurora MySQL 都不会将查询结果存储在查询缓存中。

Aurora 机器学习 函数调用的批处理优化

您可以从 Aurora 集群影响 Aurora 机器学习 性能的主要方面是针对 Aurora 机器学习 存储函数调用的批处理模式设置。机器学习函数通常需要大量开销,因此为每一行单独调用外部服务是不切实际的。Aurora 机器学习 可以将对多行的外部 Aurora 机器学习 服务的调用合并为一个批处理,从而最大程度减少这种开销。Aurora 机器学习 接收所有输入行的响应,并在查询运行时将响应传递给查询(一次一行)。这种优化可提高 Aurora 查询的吞吐量并减少延迟,而不会改变结果。

创建连接到 SageMaker 终端节点的 Aurora 存储函数时,需要定义批处理大小参数。该参数影响每个对 SageMaker 的基础调用所传输的行数。对于处理大量行的查询,为每一行单独进行 SageMaker 调用的开销可能很大。存储过程处理的数据集越大,批处理大小就可以越大。

如果批处理模式优化可以应用于 SageMaker 函数,您可以通过查看 EXPLAIN PLAN 语句生成的查询计划来确定。在本例中,执行计划中的 extra 列包括 Batched machine learning。以下示例显示了对使用批处理模式的 SageMaker 函数的调用。

mysql> create function anomaly_score(val real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'my-rcf-model-20191126'; Query OK, 0 rows affected (0.01 sec) mysql> explain select timestamp, value, anomaly_score(value) from nyc_taxi; +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | 1 | SIMPLE | nyc_taxi | NULL | ALL | NULL | NULL | NULL | NULL | 48 | 100.00 | Batched machine learning | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ 1 row in set, 1 warning (0.01 sec)

调用内置 Amazon Comprehend 函数之一时,可通过指定可选的 max_batch_size 参数来控制批处理大小。该参数限制每个批次中处理的 input_text 值的最大数。通过一次发送多个项目,减少了 Aurora 和 Amazon Comprehend 之间的往返次数。在使用 LIMIT 子句的查询等情况下,限制批处理大小非常有用。通过使用一个较小的 max_batch_size 值,可以避免调用 Amazon Comprehend 的次数超过输入文本的次数。

用于评估 Aurora 机器学习 函数的批处理优化适用于以下情况:

  • 选择列表或 SELECT 语句的 WHERE 子句中的函数调用。有一些例外,如下所述。

  • INSERTVALUES 列表以及 REPLACE 语句中的函数调用。

  • UPDATE 语句中的 SET 值中的 ML 函数。

    INSERT INTO MY_TABLE (col1, col2, col3) VALUES (ML_FUNC(1), ML_FUNC(2), ML_FUNC(3)), (ML_FUNC(4), ML_FUNC(5), ML_FUNC(6)); UPDATE MY_TABLE SET col1 = ML_FUNC(col2), SET col3 = ML_FUNC(col4) WHERE ...;

监控 Aurora 机器学习

为了监控 Aurora 机器学习 批处理操作的性能,Aurora MySQL 包含几个全局变量,您可以按如下方式查询这些变量。

show status like 'Aurora_ml%';

可以使用 FLUSH STATUS 语句重置这些状态变量。因此,自上次重置变量以来,所有数字均表示总计、平均值等。

Aurora_ml_logical_response_cnt

在数据库实例用户运行的所有查询中,Aurora MySQL 从 ML 服务接收的响应次数总计。

Aurora_ml_actual_request_cnt

在数据库实例用户运行的所有查询中,Aurora MySQL 从 ML 服务接收的请求次数总计。

Aurora_ml_actual_response_cnt

在数据库实例用户运行的所有查询中,Aurora MySQL 从 ML 服务接收的响应次数总计。

Aurora_ml_cache_hit_cnt

在数据库实例用户运行的所有查询中,Aurora MySQL 从 ML 服务接收的内部缓存命中次数总计。

Aurora_ml_single_request_cnt

在数据库实例用户运行的所有查询中,非批处理模式评估的 ML 函数总计。

有关监控从 Aurora 机器学习 函数调用的 SageMaker 操作的性能的信息,请参阅监控 Amazon SageMaker

Aurora 机器学习 的限制

以下限制适用于 Aurora 机器学习。

不能对 generated-always 列使用 Aurora 机器学习 函数。同样的限制也适用于任何 Aurora MySQL 存储函数。这些函数与此二进制日志 (binlog) 格式不兼容。有关生成的列的信息,请参阅 MySQL 文档

调用 Aurora 机器学习 函数时,设置 —binlog-format=STATEMENT 引发异常。发生错误的原因是,Aurora 机器学习 认为所有 ML 函数都是不确定的,而不确定的存储函数与这种 binlog 格式不兼容。有关这种 binlog 格式的信息,请参阅 MySQL 文档