关于在 Amazon OpenSearch 服务中使用直接查询的建议 - 亚马逊 OpenSearch 服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

关于在 Amazon OpenSearch 服务中使用直接查询的建议

本页提供了使用亚马逊 OpenSearch 服务直接查询来分析来自 CloudWatch 日志、Amazon S3 和亚马逊安全湖的数据的建议。这些最佳实践可帮助您优化性能并确保高效查询,而无需摄取或复制数据。

一般建议

在使用直接查询功能时,建议执行以下操作:

  • 使用该COALESCE SQL函数来处理缺失的列并确保返回结果。

  • 使用查询限制来确保不会提取太多数据。

  • 如果您计划多次分析同一个数据集,请创建一个索引视图,以便在完成分析后将数据完全摄取 OpenSearch 和索引,然后将其丢弃。

  • 当不再需要加速任务和索引时,将其删除。

  • 不支持包含相同但仅在大小写上有所不同(例如field1FIELD1)的字段名称的查询。

    例如,不支持以下查询:

    Select AWSAccountId, AwsAccountId from LogGroup Select a.@LogStream, b.@logStream from Table A INNER Join Table B ona.id = b.id

    但是,由于两个日志组中的字段名 (@logStream) 相同,因此支持以下查询:

    Select a.@logStream, b.@logStream from Table A INNER Join Table B on a.id = b.id
  • 函数和表达式必须对字段名进行操作,并且是SELECT语句的一部分,该语FROM句中指定了日志组。

    例如,不支持以下查询:

    SELECT cos(10) FROM LogGroup

    支持此查询:

    SELECT cos(field1) FROM LogGroup

亚马逊 S3 建议

如果您使用亚马逊 OpenSearch 服务在 Amazon S3 中直接查询数据,我们还建议您采取以下措施:

  • 使用年、月、日、小时的分区格式将数据摄取到 Amazon S3 中,以加快查询速度。

  • 构建跳过索引时,请对基数较高的字段使用 Bloom 过滤器,对值范围较大的字段使用 min/max 索引。对于高基数字段,可以考虑使用基于值的方法来提高查询效率。

  • 使用索引状态管理来维护实例化视图和覆盖索引的存储。

CloudWatch 日志推荐

如果您使用 Amazon Ser OpenSearch vice 在 CloudWatch 日志中引导查询数据,我们还建议您采取以下措施:

  • 在一个查询中搜索多个日志组时,请使用适当的语法。有关更多信息,请参阅 多日志组函数

  • 使用 SQL 或 PPL 命令时,请将某些字段用反引号括起来,以便成功查询它们。带有特殊字符(非字母和非数字)的字段需要使用反引号。例如,用反引号@messageOperation.Export,起来、和Test::Field。您无需用反引号将纯字母名称的列括起来。

    包含简单字段的查询示例:

    SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;

    附加了反引号的类似查询:

    SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;

安全湖建议

如果您使用 Amazon Ser OpenSearch vice 在安全湖中直接查询数据,我们还建议您采取以下措施: