# Retrieve SQL from segment rule

Retrieve a SQL from a segment rule.

Endpoint: POST /audiences/{audienceId}/segments/query
Version: 1.0.0
Security: TdApikeyAuth

## Path parameters:

  - `audienceId` (integer, required)
    Master Segment id of the segment

## Request fields (application/json):

  - `format` (string)
    Enum: "sql"

  - `kind` (integer)
    0: batch, 1: realtime, 2: funnel_stage

  - `rule` (any)
    - `conditions` (array, required)
      - `conditions` (array, required)
        - `arrayMatching` (any, required) — one of:
          - variant 3:
            - `atLeast` (number, required)
          - variant 4:
            - `atMost` (number, required)
          - variant 5:
            - `exactly` (number, required)
        - `exclude` (boolean, required)
        - `leftValue` (any, required) — one of:
          - partial_v5_rule.yaml-v5IonRule-attributeNameValue:
            - `name` (string, required)
          - partial_v5_rule.yaml-v5IonRule-customerGroupAttributeValue:
            - `customerGroup` (string, required)
            - `name` (string, required)
          - partial_v5_rule.yaml-v5IonRule-aggregationValue:
            - `aggregation` (any, required) — one of:
              - variant 1:
                - `column` (string, required)
                - `groupingColumns` (array)
                - `type` (string, required)
                  Enum: "Sum", "Min", "Max", "Average"
              - variant 2:
                - `groupingColumns` (array, required)
                - `type` (string, required)
                  Enum: "Count"
              - variant 3:
                - `columns` (array, required)
                - `type` (string, required)
                  Enum: "CountDistinct"
              - variant 4:
                - `column` (string, required)
                - `groupingColumns` (array)
                - `orderColumn` (string, required)
                - `type` (string, required)
                  Enum: "First", "Last"
            - `filter` (any, required) — one of:
              - partial_v5_rule.yaml-v5IonRule-andFilter:
                - `conditions` (array, required)
                  - `conditions` (array, required)
                  - `type` (string, required)
                    Enum: "Or"
                - `type` (string, required)
                  Enum: "And"
              - partial_v5_rule.yaml-v5IonRule-orFilter:
                - `conditions` (array, required)
                  - `conditions` (array, required)
                  - `type` (string, required)
                    Enum: same as `type` in "partial_v5_rule.yaml-v5IonRule-andFilter" (1 values)
                - `type` (string, required)
                  Enum: same as `type` (1 values)
            - `source` (object, required)
            - `source.name` (string, required)
            - `window` (object)
            - `window.duration` (object, required)
            - `window.duration.day` (number)
            - `window.duration.hour` (number)
            - `window.duration.minute` (number)
            - `window.duration.second` (number)
            - `window.type` (string, required)
              Enum: "TimeSliding"
        - `limit` (object)
        - `limit.number` (number, required)
        - `limit.orderColumns` (array) — one of:
          - variant 1:
            - `column` (string, required)
            - `order` (string, required)
              Enum: "ascending", "descending"
            - `type` (string, required)
              Enum: "Column"
          - variant 2:
            - `order` (string, required)
              Enum: same as `order` in "variant 1" (2 values)
            - `type` (string, required)
              Enum: "Aggregation"
        - `limit.type` (string, required)
          Enum: "Count", "Percent"
        - `operator` (any, required) — one of:
          - variant 1:
            - `not` (boolean, required)
            - `rightValue` (object, required)
            - `rightValue.last` (any, required)
              - `day` (number)
              - `hour` (number)
              - `minute` (number)
              - `month` (number)
              - `quarter` (number)
              - `second` (number)
              - `week` (number)
              - `year` (number)
            - `rightValue.unit` (string, required)
              Enum: "year", "quarter", "month", "week", "day", "hour", "minute", "second"
            - `type` (string, required)
              Enum: "GreaterEqual"
          - variant 3:
            - `not` (boolean, required)
            - `rightValue` (object, required)
            - `rightValue.timestamp` (string, required)
            - `type` (string, required)
              Enum: "Equal"
          - variant 4:
            - `not` (boolean, required)
              Enum: false
            - `rightValue` (any, required) — one of:
              - variant 1:
                - `timestamp` (string, required)
              - variant 2:
                - `last` (any, required)
                  - `day` (number)
                  - `hour` (number)
                  - `minute` (number)
                  - `month` (number)
                  - `quarter` (number)
                  - `second` (number)
                  - `week` (number)
                  - `year` (number)
                - `unit` (string, required)
                  Enum: same as `rightValue.unit` in "variant 1" (8 values)
            - `type` (string, required)
              Enum: "Greater"
          - variant 5:
            - `not` (boolean, required)
              Enum: same as `not` in "variant 4" (1 values)
            - `rightValue` (object, required)
            - `rightValue.timestamp` (string, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 1" (1 values)
          - variant 6:
            - `not` (boolean, required)
              Enum: same as `not` in "variant 4" (1 values)
            - `rightValue` (any, required) — one of:
              - variant 1:
                - `timestamp` (string, required)
              - variant 2:
                - `last` (any, required)
                  - `day` (number)
                  - `hour` (number)
                  - `minute` (number)
                  - `month` (number)
                  - `quarter` (number)
                  - `second` (number)
                  - `week` (number)
                  - `year` (number)
                - `unit` (string, required)
                  Enum: same as `rightValue.unit` in "variant 1" (8 values)
            - `type` (string, required)
              Enum: "Less"
          - variant 7:
            - `not` (boolean, required)
              Enum: same as `not` in "variant 4" (1 values)
            - `rightValue` (any, required) — one of:
              - variant 1:
                - `timestamp` (string, required)
              - variant 2:
                - `last` (any, required)
                  - `day` (number)
                  - `hour` (number)
                  - `minute` (number)
                  - `month` (number)
                  - `quarter` (number)
                  - `second` (number)
                  - `week` (number)
                  - `year` (number)
                - `unit` (string, required)
                  Enum: same as `rightValue.unit` in "variant 1" (8 values)
            - `type` (string, required)
              Enum: "LessEqual"
          - variant 8:
            - `maxValue` (any, required) — one of:
              - variant 1:
                - `timestamp` (string, required)
              - variant 2:
                - `last` (any, required)
                  - `day` (number)
                  - `hour` (number)
                  - `minute` (number)
                  - `month` (number)
                  - `quarter` (number)
                  - `second` (number)
                  - `week` (number)
                  - `year` (number)
                - `unit` (string, required)
                  Enum: same as `rightValue.unit` in "variant 1" (8 values)
            - `minValue` (any, required) — one of:
              - variant 1:
                - `timestamp` (string, required)
              - variant 2:
                - `last` (any, required)
                  - `day` (number)
                  - `hour` (number)
                  - `minute` (number)
                  - `month` (number)
                  - `quarter` (number)
                  - `second` (number)
                  - `week` (number)
                  - `year` (number)
                - `unit` (string, required)
                  Enum: same as `rightValue.unit` in "variant 1" (8 values)
            - `not` (boolean, required)
            - `type` (string, required)
              Enum: "Between"
          - variant 9:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 3" (1 values)
          - variant 10:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: "IsNull"
          - variant 11:
            - `not` (boolean, required)
            - `rightValues` (array, required)
            - `type` (string, required)
              Enum: "In"
          - variant 12:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 4" (1 values)
          - variant 13:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 6" (1 values)
          - variant 14:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 1" (1 values)
          - variant 15:
            - `not` (boolean, required)
            - `rightValue` (any, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 7" (1 values)
          - variant 16:
            - `maxValue` (any, required)
            - `minValue` (any, required)
            - `not` (boolean, required)
            - `rightValue` (number, required)
            - `type` (string, required)
              Enum: same as `type` in "variant 8" (1 values)
          - variant 17:
            - `not` (boolean, required)
            - `rightValues` (array, required)
            - `type` (string, required)
              Enum: "Contain"
          - variant 18:
            - `not` (boolean, required)
            - `rightValues` (array, required)
            - `type` (string, required)
              Enum: "StartWith"
          - variant 19:
            - `not` (boolean, required)
            - `rightValues` (array, required)
            - `type` (string, required)
              Enum: "EndWith"
          - variant 20:
            - `not` (boolean, required)
            - `rightValue` (string, required)
            - `type` (string, required)
              Enum: "Regexp"
        - `type` (string, required)
          Enum: "Value"
      - `description` (string)
      - `expr` (string)
      - `type` (string, required)
        Enum: "Or", "And", "Composite"
    - `expr` (string)
    - `limit` (object)
    - `limit.number` (number, required)
    - `limit.orderColumns` (array) — one of:
      - variant 1:
        - `column` (string, required)
        - `order` (string, required)
          Enum: same as `order` in "variant 1" (2 values)
        - `type` (string, required)
          Enum: same as `type` in "variant 1" (1 values)
      - variant 2:
        - `order` (string, required)
          Enum: same as `order` in "variant 1" (2 values)
        - `type` (string, required)
          Enum: same as `type` in "variant 2" (1 values)
    - `limit.type` (string, required)
      Enum: same as `limit.type` (2 values)
    - `type` (string, required)
      Enum: same as `type` (3 values)

  - `funnel_stage` (object)
    required if creating segment as a rule of funnel_stage

  - `funnel_stage.funnel_id` (integer)

  - `funnel_stage.stage_id` (integer)

  - `realtime` (boolean)
    use kind instead

## Response 200 fields (application/json):

  - `body` (object) — one of:
    - variant 1:
      - `sql` (string)
    - variant 2:
      - `sql` (string, required)
      - `statement` (object, required)
        an object tree which will be sent to cdp-kvs-server
      - `batch_workflows` (object, required)
        workflow definition; key is file namd and value is file content of the generating workflow.

## Response 400 fields (application/json):

  - `code` (string, required)

  - `message` (string, required)

## Response 5XX fields (application/json):

  - `status` (integer, required)
    Error status

  - `error` (string, required)
    Error message

  - `details` (string)
    Detailed error message


