-- :api: put-job :request: PutJobRequest :response: PutJobResponse -- [id="{upid}-{api}"] === Put Job API The Put Job API can be used to create a new {ml} job in the cluster. The API accepts a +{request}+ object as a request and returns a +{response}+. [id="{upid}-{api}-request"] ==== Put Job Request A +{request}+ requires the following argument: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-request] -------------------------------------------------- <1> The configuration of the {ml} job to create as a `Job` [id="{upid}-{api}-config"] ==== Job Configuration The `Job` object contains all the details about the {ml} job configuration. A `Job` requires the following arguments: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-config] -------------------------------------------------- <1> The job ID <2> An analysis configuration <3> A data description <4> Optionally, a human-readable description [id="{upid}-{api}-analysis-config"] ==== Analysis Configuration The analysis configuration of the {ml} job is defined in the `AnalysisConfig`. `AnalysisConfig` reflects all the configuration settings that can be defined using the REST API. Using the REST API, we could define this analysis configuration: [source,js] -------------------------------------------------- "analysis_config" : { "bucket_span" : "10m", "detectors" : [ { "detector_description" : "Sum of total", "function" : "sum", "field_name" : "total" } ] } -------------------------------------------------- // NOTCONSOLE Using the `AnalysisConfig` object and the high level REST client, the list of detectors must be built first. An example of building a `Detector` instance is as follows: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-detector] -------------------------------------------------- <1> The function to use <2> The field to apply the function to <3> Optionally, a human-readable description Then the same configuration would be: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-analysis-config] -------------------------------------------------- <1> Create a list of detectors <2> Pass the list of detectors to the analysis config builder constructor <3> The bucket span [id="{upid}-{api}-data-description"] ==== Data Description After defining the analysis config, the next thing to define is the data description, using a `DataDescription` instance. `DataDescription` reflects all the configuration settings that can be defined using the REST API. Using the REST API, we could define this metrics configuration: [source,js] -------------------------------------------------- "data_description" : { "time_field" : "timestamp" } -------------------------------------------------- // NOTCONSOLE Using the `DataDescription` object and the high level REST client, the same configuration would be: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-data-description] -------------------------------------------------- <1> The time field include::../execution.asciidoc[] [id="{upid}-{api}-response"] ==== Response The returned +{response}+ returns the full representation of the new {ml} job if it has been successfully created. This will contain the creation time and other fields initialized using default values: ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests-file}[{api}-response] -------------------------------------------------- <1> The creation time is a field that was not passed in the `Job` object in the request