> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# /create/tablemonitor

```
URL: http://<db.host>:<db.port>/create/tablemonitor
```

Creates a monitor that watches for a single table modification event type
(insert, update, or delete) on a particular table (identified by input
parameter *table\_name*) and forwards event notifications to subscribers via
ZMQ. After this call completes, subscribe to the returned output parameter
*topic\_id* on the ZMQ table monitor port (default 9002). Each time an operation
of the given type on the table completes, a multipart message is published for
that topic; the first part contains only the topic ID, and each subsequent part
contains one binary-encoded Avro object that corresponds to the event and can
be decoded using output parameter *type\_schema*. The monitor will continue to
run (regardless of whether or not there are any subscribers) until deactivated
with [/clear/tablemonitor](/content/api/rest/clear_tablemonitor_rest).

For more information on table monitors, see
[Table Monitors](../../concepts/table_monitors/).

## Input Parameter Description

<ParamField body="table_name" type="string">
  Name of the table to monitor, in \[schema\_name.]table\_name format, using standard [name resolution rules](../../concepts/tables/#table-name-resolution).
</ParamField>

<ParamField body="options" type="map of string to strings">
  Optional parameters.

  The default value is an empty map ( \{} ).

  <Expandable title="options">
    <ParamField body="event">
      Type of modification event on the target table to be monitored by this table monitor.

      The default value is `insert`.

      * **insert**: Get notifications of new record insertions. The new row images are forwarded to the subscribers.
      * **update**: Get notifications of update operations. The modified row count information is forwarded to the subscribers.
      * **delete**: Get notifications of delete operations. The deleted row count information is forwarded to the subscribers.
    </ParamField>

    <ParamField body="monitor_id">
      ID to use for this monitor instead of a randomly generated one.
    </ParamField>

    <ParamField body="datasink_name">
      Name of an existing [data sink](../../concepts/data_sinks/) to send change data notifications to.
    </ParamField>

    <ParamField body="max_consecutive_failures">
      Maximum number of consecutive failed notification attempts before suspending the stream. A value of -1 (default) disables auto-suspend. This value is by rank and not overall.
    </ParamField>

    <ParamField body="failed_notifications_table_name">
      Name of a [table](../../concepts/tables/) to which failed stream notifications are written when the stream is suspended. The database will attempt to send notifications persisted in this table when the stream is resumed. The table has the following columns: rank (long), job\_id (long), uuid (uuid), timestamp (timestamp), error\_msg (string), payload (bytes). Leave this option empty to disable persisting failed notification events.
    </ParamField>

    <ParamField body="destination">
      Destination for the output data in format 'destination\_type://path\[:port]'. Supported destination types are 'http', 'https' and 'kafka'.
    </ParamField>

    <ParamField body="kafka_topic_name">
      Name of the Kafka topic to publish to if *destination* in input parameter *options* is specified and is a Kafka broker.
    </ParamField>

    <ParamField body="increasing_column">
      Column on subscribed table that will increase for new records (e.g., TIMESTAMP).
    </ParamField>

    <ParamField body="expression">
      Filter expression to limit records for notification.
    </ParamField>

    <ParamField body="join_table_names">
      A comma-separated list of tables (optionally with aliases) to include in the join. The monitored table input parameter *table\_name* must be included, representing only the newly inserted rows (deltas) since the last notification. Other tables can be any existing tables or views. Aliases can be used with the 'table\_name as alias' syntax.
    </ParamField>

    <ParamField body="join_column_names">
      A comma-separated list of columns or expressions to include from the joined tables. Column references can use table names or aliases defined in 'join\_table\_names'. Each column can optionally be aliased using 'as'. The selected columns will also appear in the notification output.
    </ParamField>

    <ParamField body="join_expressions">
      Filter or join expressions to apply when combining the tables. Expressions are standard SQL-style conditions and can reference any table or alias listed in 'join\_table\_names'. This corresponds to the WHERE clause of the underlying join, and can include conditions to filter the delta rows.
    </ParamField>

    <ParamField body="refresh_method">
      Method controlling when the table monitor reports changes to the input parameter *table\_name*.

      The default value is `on_change`.

      * **on\_change**: Report changes as they occur.
      * **periodic**: Report changes periodically at rate specified by *refresh\_period*.
    </ParamField>

    <ParamField body="refresh_period">
      When *refresh\_method* is *periodic*, specifies the period in seconds at which changes are reported.
    </ParamField>

    <ParamField body="refresh_start_time">
      When *refresh\_method* is *periodic*, specifies the first time at which changes are reported.  Value is a datetime string with format 'YYYY-MM-DD HH:MM:SS'.
    </ParamField>
  </Expandable>
</ParamField>

## Output Parameter Description

The Kinetica server embeds the endpoint response inside a standard response structure which contains status information and the actual response to the query.  Here is a description of the various fields of the wrapper:

<ResponseField name="status" type="String">
  'OK' or 'ERROR'
</ResponseField>

<ResponseField name="message" type="String">
  Empty if success or an error message
</ResponseField>

<ResponseField name="data_type" type="String">
  'create\_table\_monitor\_response' or 'none' in case of an error
</ResponseField>

<ResponseField name="data" type="String">
  Empty string
</ResponseField>

<ResponseField name="data_str" type="JSON or String">
  This embedded JSON represents the result of the /create/tablemonitor endpoint:

  <Expandable title="data_str">
    <ResponseField name="topic_id" type="string">
      The ZMQ topic ID to subscribe to for table events.
    </ResponseField>

    <ResponseField name="table_name" type="string">
      Value of input parameter *table\_name*.
    </ResponseField>

    <ResponseField name="type_schema" type="string">
      JSON Avro schema of the table, for use in decoding published records.
    </ResponseField>

    <ResponseField name="info" type="map of string to strings">
      Additional information.

      The default value is an empty map ( \{} ).

      <Expandable title="info">
        <ResponseField name="ttl">
          For insert\_table/delete\_table events, the ttl of the table.
        </ResponseField>

        <ResponseField name="insert_topic_id">
          The topic id for 'insert' *event* in input parameter *options*.
        </ResponseField>

        <ResponseField name="update_topic_id">
          The topic id for 'update' *event* in input parameter *options*.
        </ResponseField>

        <ResponseField name="delete_topic_id">
          The topic id for 'delete' *event* in input parameter *options*.
        </ResponseField>

        <ResponseField name="insert_type_schema">
          The JSON Avro schema of the table in output parameter *table\_name*.
        </ResponseField>

        <ResponseField name="update_type_schema">
          The JSON Avro schema for 'update' events.
        </ResponseField>

        <ResponseField name="delete_type_schema">
          The JSON Avro schema for 'delete' events.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>

  Empty string in case of an error.
</ResponseField>
