更新转换 API

编辑

更新转换的某些属性。

请求

编辑

POST _transform/<transform_id>/_update

先决条件

编辑

需要以下权限

  • 集群:manage_transformtransform_admin 内置角色授予此权限)
  • 源索引:readview_index_metadata
  • 目标索引:readindex。如果配置了 retention_policy,还需要 delete 索引权限。

描述

编辑

此 API 更新现有转换。您可以更新的属性列表是创建转换时可以定义的列表的子集。

更新转换时,会进行一系列验证以确保其成功。您可以使用 defer_validation 参数跳过这些检查。

除了描述之外,所有更新的属性只有在转换启动下一个检查点后才会生效。这是为了确保每个检查点的数据一致性。

  • 您的转换会记住更新它时用户的角色,并使用这些权限运行。如果您提供辅助授权标头,则将使用这些凭据。
  • 您必须使用 Kibana 或此 API 更新转换。不支持直接更新任何转换内部、系统或隐藏索引,这可能会导致永久性故障。

路径参数

编辑
<transform_id>
(必需,字符串)转换的标识符。

查询参数

编辑
defer_validation
(可选,布尔值)当 true 时,不会运行可延迟的验证。如果源索引在更新转换后才存在,则可能需要此行为。
timeout
(可选,时间)等待响应的时间段。如果在超时到期之前未收到响应,则请求失败并返回错误。默认为 30 秒

请求体

编辑
description
(可选,字符串)转换的自由文本描述。
dest

(可选,对象)转换的目标。

dest 的属性
index
(必需,字符串)转换的目标索引

对于 pivot 转换,目标索引的映射将尽可能基于源字段推断。如果需要备用映射,请在启动转换之前使用创建索引 API

对于 latest 转换,永远不会推断映射。如果不需要目标索引的动态映射,请在启动转换之前使用创建索引 API

aliases
(可选,对象数组)转换目标索引应具有的别名。别名是使用转换的存储凭据进行操作的,这意味着在创建时提供的辅助凭据(如果同时指定了主凭据和辅助凭据)。

无论目标索引是由转换创建还是用户预先创建的,目标索引都会添加到别名中。

+ .aliases 的属性

详情
alias
(必需,字符串)别名的名称。
move_on_creation
(可选,布尔值)目标索引是否应为该别名中的唯一索引。如果为 true,则在将目标索引添加到此别名之前,将从此别名中删除所有其他索引。默认为 false
pipeline
(可选,字符串)摄取管道的唯一标识符。
frequency
(可选,时间单位)当转换连续运行时,检查源索引中更改的间隔。最小值是 1 秒,最大值是 1 小时。默认值是 1 分钟
_meta
(可选,对象)定义可选的转换元数据。
retention_policy

(可选,对象)定义转换的保留策略。符合定义条件的数据将从目标索引中删除。

retention_policy 的属性
time

(必需,对象)指定转换使用时间字段来设置保留策略。如果保留策略的 time.field 存在且包含早于 max.age 的数据,则会删除数据。

time 的属性
field
(必需,字符串)用于计算文档年龄的日期字段。将 time.field 设置为现有日期字段。
max_age
(必需,时间单位)指定目标索引中文档的最大年龄。早于配置值的文档将从目标索引中删除。
settings

(可选,对象)定义可选的转换设置。

settings 的属性
align_checkpoints
(可选,布尔值)指定是否应优化转换检查点范围以提高性能。当日期直方图指定为转换配置中的组源时,此类优化可以将检查点范围与日期直方图间隔对齐。因此,将执行较少的目标索引文档更新,从而提高整体性能。默认值为 true,这意味着如果可能,将优化检查点范围。
dates_as_epoch_millis
(可选,布尔值)定义输出中的日期应写为 ISO 格式字符串(默认)还是自纪元以来的毫秒数。epoch_millis 一直是 7.11 版本之前创建的转换的默认值。为了兼容输出,请将其设置为 true。默认值是 false
deduce_mappings
(可选,布尔值)指定转换是否应从转换配置中推断出目标索引映射。默认值为 true,这意味着如果可能,将推断出目标索引映射。
docs_per_second
(可选,浮点数)指定每秒输入文档数的限制。此设置通过在搜索请求之间添加等待时间来限制转换。默认值是 null,它禁用限制。
max_page_search_size
(可选,整数)定义每个检查点的复合聚合的初始页面大小。如果发生断路器异常,则页面大小会动态调整为较低的值。最小值是 10,最大值是 65,536。默认值是 500
num_failure_retries
(可选,整数)定义将转换任务标记为 failed 之前,可恢复失败的重试次数。最小值是 0,最大值是 100。可以使用 -1 表示无穷大。在这种情况下,转换永远不会放弃重试可恢复的故障。默认值是群集级别的设置 num_transform_failure_retries
unattended
(可选,布尔值)如果为 true,则转换以无人值守模式运行。在无人值守模式下,转换在发生错误时无限期重试,这意味着转换永远不会失败。将重试次数设置为无穷大以外的值会导致验证失败。默认为 false
source

(可选,对象)转换的数据源。

source 的属性
index

(必需,字符串或数组)转换的源索引。它可以是单个索引、索引模式(例如,"my-index-*")、索引数组(例如,["my-index-000001", "my-index-000002"])或索引模式数组(例如,["my-index-*", "my-other-index-*"]。对于远程索引,使用语法 "remote_name:index_name"

如果任何索引位于远程群集中,则主节点和至少一个转换节点必须具有 remote_cluster_client 节点角色。

query
(可选,对象)一个查询子句,用于从源索引检索数据子集。请参阅查询 DSL
sync

(可选,对象)定义转换持续运行所需的属性。

只有当它是连续转换时,才能更新这些属性。您不能将批量转换更改为连续转换,反之亦然。相反,请在 Kibana 中克隆转换,并添加或删除 sync 属性。

sync 的属性
time

(必需,对象)指定转换使用时间字段来同步源索引和目标索引。

time 的属性
delay
(可选,时间单位)当前时间和最新输入数据时间之间的时间延迟。默认值是 60 秒
field

(必需,字符串)用于标识源中新文档的日期字段。

一般来说,最好使用包含摄取时间戳的字段。如果您使用不同的字段,则可能需要设置 delay 以使其考虑数据传输延迟。

示例

编辑
resp = client.transform.update_transform(
    transform_id="simple-kibana-ecomm-pivot",
    source={
        "index": "kibana_sample_data_ecommerce",
        "query": {
            "term": {
                "geoip.continent_name": {
                    "value": "Asia"
                }
            }
        }
    },
    description="Maximum priced ecommerce data by customer_id in Asia",
    dest={
        "index": "kibana_sample_data_ecommerce_transform_v2",
        "pipeline": "add_timestamp_pipeline"
    },
    frequency="15m",
    sync={
        "time": {
            "field": "order_date",
            "delay": "120s"
        }
    },
)
print(resp)
response = client.transform.update_transform(
  transform_id: 'simple-kibana-ecomm-pivot',
  body: {
    source: {
      index: 'kibana_sample_data_ecommerce',
      query: {
        term: {
          'geoip.continent_name' => {
            value: 'Asia'
          }
        }
      }
    },
    description: 'Maximum priced ecommerce data by customer_id in Asia',
    dest: {
      index: 'kibana_sample_data_ecommerce_transform_v2',
      pipeline: 'add_timestamp_pipeline'
    },
    frequency: '15m',
    sync: {
      time: {
        field: 'order_date',
        delay: '120s'
      }
    }
  }
)
puts response
const response = await client.transform.updateTransform({
  transform_id: "simple-kibana-ecomm-pivot",
  source: {
    index: "kibana_sample_data_ecommerce",
    query: {
      term: {
        "geoip.continent_name": {
          value: "Asia",
        },
      },
    },
  },
  description: "Maximum priced ecommerce data by customer_id in Asia",
  dest: {
    index: "kibana_sample_data_ecommerce_transform_v2",
    pipeline: "add_timestamp_pipeline",
  },
  frequency: "15m",
  sync: {
    time: {
      field: "order_date",
      delay: "120s",
    },
  },
});
console.log(response);
POST _transform/simple-kibana-ecomm-pivot/_update
{
  "source": {
    "index": "kibana_sample_data_ecommerce",
    "query": {
      "term": {
        "geoip.continent_name": {
          "value": "Asia"
        }
      }
    }
  },
  "description": "Maximum priced ecommerce data by customer_id in Asia",
  "dest": {
    "index": "kibana_sample_data_ecommerce_transform_v2",
    "pipeline": "add_timestamp_pipeline"
  },
  "frequency": "15m",
  "sync": {
    "time": {
      "field": "order_date",
      "delay": "120s"
    }
  }
}

更新转换后,您会收到更新的配置

{
  "id" : "simple-kibana-ecomm-pivot",
  "authorization" : {
    "roles" : [
      "superuser"
    ]
  },
  "version" : "8.4.0",
  "create_time" : 1656113450613,
  "source" : {
    "index" : [
      "kibana_sample_data_ecommerce"
    ],
    "query" : {
      "term" : {
        "geoip.continent_name" : {
          "value" : "Asia"
        }
      }
    }
  },
  "dest" : {
    "index" : "kibana_sample_data_ecommerce_transform_v2",
    "pipeline" : "add_timestamp_pipeline"
  },
  "frequency" : "15m",
  "sync" : {
    "time" : {
      "field" : "order_date",
      "delay" : "120s"
    }
  },
  "pivot" : {
    "group_by" : {
      "customer_id" : {
        "terms" : {
          "field" : "customer_id"
        }
      }
    },
    "aggregations" : {
      "max_price" : {
        "max" : {
          "field" : "taxful_total_price"
        }
      }
    }
  },
  "description" : "Maximum priced ecommerce data by customer_id in Asia",
  "settings" : { }
}