| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 | [role="xpack"][[update-transform]]= Update {transform} API[subs="attributes"]++++<titleabbrev>Update {transform}</titleabbrev>++++Updates certain properties of a {transform}.[[update-transform-request]]== {api-request-title}`POST _transform/<transform_id>/_update`[[update-transform-prereqs]]== {api-prereq-title}Requires the following privileges:* cluster: `manage_transform` (the `transform_admin` built-in role grants this  privilege)* source indices: `read`, `view_index_metadata`* destination index: `read`, `index`. If a `retention_policy` is configured, `delete` index privilege isalso required.[[update-transform-desc]]== {api-description-title}This API updates an existing {transform}. The list of properties that you canupdate is a subset of the list that you can define when you create a {transform}.When the {transform} is updated, a series of validations occur to ensure itssuccess. You can use the `defer_validation` parameter to skip these checks.All updated properties except description do not take effect until after the{transform} starts the next checkpoint. This is so there is data consistency ineach checkpoint.[IMPORTANT]====* Your {transform} remembers which roles the user who updated it had at the timeof update and runs with those privileges. If you provide<<http-clients-secondary-authorization,secondary authorization headers>>, thosecredentials are used instead.* You must use {kib} or this API to update a {transform}. Directly updating any{transform} internal, system, or hidden indices is not supported and may causepermanent failure.====[[update-transform-path-parms]]== {api-path-parms-title}`<transform_id>`::(Required, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-id][[update-transform-query-parms]]== {api-query-parms-title}`defer_validation`::(Optional, Boolean) When `true`, deferrable validations are not run. Thisbehavior may be desired if the source index does not exist until after the{transform} is updated.`timeout`::(Optional, time)Period to wait for a response. If no response is received before the timeoutexpires, the request fails and returns an error. Defaults to `30s`.[role="child_attributes"][[update-transform-request-body]]== {api-request-body-title}`description`::  (Optional, string) Free text description of the {transform}.//Begin dest`dest`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest]+.Properties of `dest`[%collapsible%open]====`index`:::(Required, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest-index]//Begin aliases`aliases`:::(Optional, array of objects)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest-aliases]+.Properties of `aliases`[%collapsible%open]=====`alias`::::(Required, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest-aliases-alias]`move_on_creation`::::(Optional, boolean)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest-aliases-move-on-creation]=====//End aliases`pipeline`:::(Optional, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=dest-pipeline]====//End dest`frequency`::(Optional, <<time-units, time units>>)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=frequency]//Begin _meta`_meta`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-metadata]//End _meta//Begin retention policy`retention_policy`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-retention]+.Properties of `retention_policy`[%collapsible%open]====`time`:::(Required, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-retention-time]+.Properties of `time`[%collapsible%open]=====`field`:::(Required, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-retention-time-field]`max_age`:::(Required, <<time-units, time units>>)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-retention-time-max-age]=========//End retention policy//Begin settings`settings`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings]+.Properties of `settings`[%collapsible%open]====`align_checkpoints`:::(Optional, boolean)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-align-checkpoints]`dates_as_epoch_millis`:::(Optional, boolean)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-dates-as-epoch-milli]`deduce_mappings`:::(Optional, boolean)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-deduce-mappings]`docs_per_second`:::(Optional, float)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-docs-per-second]`max_page_search_size`:::(Optional, integer)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-max-page-search-size]`num_failure_retries`:::(Optional, integer)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-num-failure-retries]`unattended`:::(Optional, boolean)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=transform-settings-unattended]====//End settings//Begin source`source`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=source-transforms]+.Properties of `source`[%collapsible%open]====`index`:::(Required, string or array)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=source-index-transforms]`query`:::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=source-query-transforms]====//End source//Begin sync`sync`::(Optional, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=sync]+--NOTE: You can update these properties only if it is a continuous {transform}. Youcannot change a batch {transform} into a continuous {transform} or vice versa.Instead, clone the {transform} in {kib} and add or remove the `sync` property.--+.Properties of `sync`[%collapsible%open]====//Begin sync.time`time`:::(Required, object)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=sync-time]+.Properties of `time`[%collapsible%open]=====`delay`::::(Optional, <<time-units, time units>>)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=sync-time-delay]`field`::::(Required, string)include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=sync-time-field]+--TIP: In general, it’s a good idea to use a field that contains the<<access-ingest-metadata,ingest timestamp>>. If you use a different field,you might need to set the `delay` such that it accounts for data transmissiondelays.--=====//End sync.time====//End sync[[update-transform-example]]== {api-examples-title}[source,console]--------------------------------------------------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"    }  }}--------------------------------------------------// TEST[setup:simple_kibana_continuous_pivot]When the {transform} is updated, you receive the updated configuration:[source,console-result]----{  "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" : { }}----// TESTRESPONSE[s/"version" : "8.4.0"/"version" : $body.version/]// TESTRESPONSE[s/"create_time" : 1656113450613/"create_time" : $body.create_time/]// TESTRESPONSE[s/"authorization" : \{[^}]*\},//]
 |