Id] A GUID uniquely identifying the streaming job. This
 * GUID is generated upon creation of the streaming job.
 * @member {string} [provisioningState] Describes the provisioning status of
 * the streaming job.
 * @member {string} [jobState] Describes the state of the streaming job.
 * @member {string} [outputStartMode] This property should only be utilized
 * when it is desired that the job be started immediately upon creation. Value
 * may be JobStartTime, CustomTime, or LastOutputEventTime to indicate whether
 * the starting point of the output event stream should start whenever the job
 * is started, start at a custom user time stamp specified via the
 * outputStartTime property, or start from the last event output time. Possible
 * values include: 'JobStartTime', 'CustomTime', 'LastOutputEventTime'
 * @member {date} [outputStartTime] Value is either an ISO-8601 formatted time
 * stamp that indicates the starting point of the output event stream, or null
 * to indicate that the output event stream will start whenever the streaming
 * job is started. This property must have a value if outputStartMode is set to
 * CustomTime.
 * @member {date} [lastOutputEventTime] Value is either an ISO-8601 formatted
 * timestamp indicating the last output event time of the streaming job or null
 * indicating that output has not yet been produced. In case of multiple
 * outputs or multiple streams, this shows the latest value in that set.
 * @member {string} [eventsOutOfOrderPolicy] Indicates the policy to apply to
 * events that arrive out of order in the input event stream. Possible values
 * include: 'Adjust', 'Drop'
 * @member {string} [outputErrorPolicy] Indicates the policy to apply to events
 * that arrive at the output and cannot be written to the external storage due
 * to being malformed (missing column values, column values of wrong type or
 * size). Possible values include: 'Stop', 'Drop'
 * @member {number} [eventsOutOfOrderMaxDelayInSeconds] The maximum tolerable
 * delay in seconds where out-of-order events can be adjusted to be back in
 * order.
 * @member {number} [eventsLateArrivalMaxDelayInSeconds] The maximum tolerable
 * delay in seconds where events arriving late could be included.  Supported
 * range is -1 to 1814399 (20.23:59:59 days) and -1 is used to specify wait
 * indefinitely. If the property is absent, it is interpreted to have a value
 * of -1.
 * @member {string} [dataLocale] The data locale of the stream analytics job.
 * Value should be the name of a supported.NET Culture from the set
 * https://msdn.microsoft.com/en-us/library/system.globalization.culturetypes(v=vs.110).aspx.
 * Defaults to 'en-US' if none specified.
 * @member {string} [compatibilityLevel] Controls certain runtime behaviors of
 * the streaming job. Possible values include: '1.0'
 * @member {date} [createdDate] Value is an ISO-8601 formatted UTC timestamp
 * indicating when the streaming job was created.
 * @member {array} [inputs] A list of one or more inputs to the streaming job.
 * The name property for each input is required when specifying this property
 * in a PUT request. This property cannot be modify via a PATCH operation. You
 * must use the PATCH API available for the individual input.
 * @member {object} [transformation] Indicates the query and the number of
 * streaming units to use for the streaming job. The name property of the
 * transformation is required when specifying this property in a PUT request.
 * This property cannot be modify via a PATCH operation. You must use the PATCH
 * API available for the individual tranformation.
 * @member {number} [transformation.streamingUnits] Specifies the number of
 * streaming units that the streaming job uses.
 * @member {string} [transformation.query] Specifies the query that will be run
 * in the streaming job. You can learn more about the Stream Analytics Query
 * Language (SAQL) here: https://msdn.microsoft.com/library/azure/dn834998.
 * Required on PUT (CreateOrReplace) requests.
 * @member {string} [transformation.etag] The current entity tag for the
 * transformation. This is an opaque string. You can use it to detect whether
 * the resource has changed between requests. You can also use it in the
 * If-Match or If-None-Match headers for write operations for optimistic
 * concurrency.
 * @member {array} [outputs] A list of one or more outputs for the streaming
 * job. The name property for each output is required when specifying this
 * property in a PUT request. This property cannot be modify via a PATCH
 * operation. You must use the PATCH API available for the individual output.
 * @member {array} [functions] A list of one or more functions for the
 * streaming job. The name property for each function is required when
 * specifying this property in a PUT request. This property cannot be modify
 * via a PATCH operation. You must use the PATCH API available for the
 * individual transformation.
 * @member {string} [etag] The current entity tag for the streaming job. This
 * is an opaque string. You can use it to detect whether the resource has
 * changed between requests. You can also use it in the If-Match or
 * If-None-Match headers for write operations for optimistic concurrency.
 */
export interface StreamingJob extends Resource {
  sku?: Sku;
  readonly jobId?: string;
  readonly provisioningState?: string;
  readonly jobState?: string;
  outputStartMode?: string;
  outputStartTime?: Date;
  readonly lastOutputEventTime?: Date;
  eventsOutOfOrderPolicy?: string;
  outputErrorPolicy?: string;
  eventsOutOfOrderMaxDelayInSeconds?: number;
  eventsLateArrivalMaxDelayInSeconds?: number;
  dataLocale?: string;
  compatibilityLevel?: string;
  readonly createdDate?: Date;
  inputs?: Input[];
  transformation?: Transformation;
  outputs?: Output[];
  functions?: FunctionModel[];
  readonly etag?: string;
}

/**
 * @class
 * Initializes a new instance of the StartStreamingJobParameters class.
 * @constructor
 * Parameters supplied to the Start Streaming Job operation.
 *
 * @member {string} [outputStartMode] Value may be JobStartTime, CustomTime, or
 * LastOutputEventTime to indicate whether the starting point of the output
 * event stream should start whenever the job is started, start at a custom
 * user time stamp specified via the outputStartTime property, or start from
 * the last event output time. Possible values include: 'JobStartTime',
 * 'CustomTime', 'LastOutputEventTime'
 * @member {date} [outputStartTime] Value is either an ISO-8601 formatted time
 * stamp that indicates the starting point of the output event stream, or null
 * to indicate that the output event stream will start whenever the streaming
 * job is started. This property must have a value if outputStartMode is set to
 * CustomTime.
 */
export interface StartStreamingJobParameters {
  outputStartMode?: string;
  outputStartTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the FunctionBinding class.
 * @constructor
 * The physical binding of the function. For example, in the Azure Machine
 * Learning web service’s case, this describes the endpoint.
 *
 * @member {string} type Polymorphic Discriminator
 */
export interface FunctionBinding {
  type: string;
}

/**
 * @class
 * Initializes a new instance of the JavaScriptFunctionBinding class.
 * @constructor
 * The binding to a JavaScript function.
 *
 * @member {string} [script] The JavaScript code containing a single function
 * definition. For example: 'function (x, y) { return x + y; }'
 */
export interface JavaScriptFunctionBinding extends FunctionBinding {
  script?: string;
}

/**
 * @class
 * Initializes a new instance of the AzureMachineLearningWebServiceOutputColumn class.
 * @constructor
 * Describes an output column for the Azure Machine Learning web service
 * endpoint.
 *
 * @member {string} [name] The name of the output column.
 * @member {string} [dataType] The (Azure Machine Learning supported) data type
 * of the output column. A list of valid  Azure Machine Learning data types are
 * described at https://msdn.microsoft.com/en-us/library/azure/dn905923.aspx.
 */
export interface AzureMachineLearningWebServiceOutputColumn {
  name?: string;
  dataType?: string;
}

/**
 * @class
 * Initializes a