Configure Queries

    You can configure the Query Service using cluster-level query settings, node-level query settings, and request-level query parameters.

    Overview

    You can configure the Query Service in the following ways:

    • Specify cluster-level settings for all nodes running the Query Service in the cluster.

    • Specify node-level settings for a single node running the Query Service.

    • Specify parameters for individual requests.

    You must set and use cluster-level query settings, node-level query settings, and request-level parameters in different ways.

    Table 1. Comparison of Query Settings and Parameters
    Set Per Set By Set On Set Via

    Cluster-level query settings [note]

    Cluster

    System administrator

    Server side

    The CLI, curl statements, or the UI

    Node-level query settings [note]

    Service Node

    System administrator

    Server side

    curl statements

    Request-level parameters

    Request (statement)

    Each user

    Client side

    cbq shell, curl statements, client programming, or the UI

    Cluster-level settings and node-level settings are collectively referred to as service-level settings.

    How Setting Levels Interact

    Some query settings are cluster-level, node-level, or request-level only. Other query settings apply to more than one level with slightly different names.

    How Cluster-Level Settings Affect Node-Level Settings

    If a cluster-level setting has an equivalent node-level setting, then changing the cluster-level setting overwrites the node-level setting for all Query nodes in the cluster.

    You can change a node-level setting for a single node to be different to the equivalent cluster-level setting. Changing the node-level setting does not affect the equivalent cluster-level setting. However, be aware that subsequent changes at the cluster-level may overwrite the node-level setting. In particular, specifying query settings via the CLI or the UI makes changes at the cluster-level.

    How Node-Level Settings Affect Request-Level Parameters

    If a request-level parameter has an equivalent node-level setting, the node-level setting usually acts as the default for the request-level parameter, as described in the tables below. Setting a request-level parameter overrides the equivalent node-level setting.

    Furthermore, for numeric values, if a request-level parameter has an equivalent node-level setting, the node-level setting dictates the upper-bound value of the request-level parameter. For example, if the node-level timeout is set to 500, then the request-level parameter cannot be set to 501 or any value higher.

    All Query Settings

    Table 2. Single-Level Settings — Not Equivalent
    Cluster-Level Only Settings Node-Level Only Settings Request-Level Only Parameters
    Table 3. Equivalent Settings for Cluster-Level and Node-Level
    Cluster-Level Name Node-Level Name Request-Level Name

    N/A

    Table 4. Equivalent Settings for Node-Level and Request-Level
    Cluster-Level Name Node-Level Name Request-Level Name

    N/A

    Table 5. Equivalent Settings for Cluster-Level, Node-Level, and Request-Level
    Cluster-Level Name Node-Level Name Request-Level Name

    Cluster-Level Query Settings

    To set a cluster-level query setting, do one of the following:

    • Web Console

    • Command Line

    • REST API

    To set cluster-level settings in the Web Console:

    1. Go to Settings  General and click Advanced Query Settings to display the settings.

    2. Specify the settings and click Save.

    The top of the Advanced Query Settings

    To set cluster-level settings at the command line, use the couchbase-cli setting-query command.

    In the following examples:

    • $BASE_URL is the protocol, host, and port — for example, http://localhost:8091.

    • $USER is the user name.

    • $PASSWORD is the password.


    This example retrieves the current cluster-level settings:

    couchbase-cli setting-query -c $BASE_URL -u $USER \
     -p $PASSWORD --get

    This example sets the cluster-level maximum parallelism and log level settings:

    couchbase-cli setting-query -c $BASE_URL -u $USER \
     -p $PASSWORD --set --log-level debug --max-parallelism 4

    To set cluster-level settings with the REST API, specify the parameters in the request body.

    In the following examples:

    • $BASE_URL is the protocol, host, and port — for example, http://localhost:8091.

    • $USER is the user name.

    • $PASSWORD is the password.


    This example retrieves the current cluster-level settings:

    curl -v -u $USER:$PASSWORD \
    $BASE_URL/settings/querySettings

    This example sets the cluster-level maximum parallelism and log level settings:

    curl -v -X POST -u $USER:$PASSWORD \
    $BASE_URL/settings/querySettings \
    -d 'queryLogLevel=debug' \
    -d 'queryMaxParallelism=4'

    The table below contains details of all cluster-level query settings.

    Table 6. Cluster-Level Query Settings
    Property Schema

    queryCleanupClientAttempts
    optional

    When enabled, the Query service preferentially aims to clean up just transactions that it has created, leaving transactions for the distributed cleanup process only when it is forced to.

    The node-level cleanupclientattempts setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: true
    Example: false

    Boolean

    queryCleanupLostAttempts
    optional

    When enabled, the Query service takes part in the distributed cleanup process, and cleans up expired transactions created by any client.

    The node-level cleanuplostattempts setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: true
    Example: false

    Boolean

    queryCleanupWindow
    optional

    Specifies how frequently the Query service checks its subset of active transaction records for cleanup. Decreasing this setting causes expiration transactions to be found more swiftly, with the tradeoff of increasing the number of reads per second used for the scanning process.

    The value for this setting is a string. Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    The node-level cleanupwindow setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: "60s"
    Example: "30s"

    String (duration)

    queryCompletedLimit
    optional

    Sets the number of requests to be logged in the completed requests catalog. As new completed requests are added, old ones are removed.

    Increase this when the completed request keyspace is not big enough to track the slow requests, such as when you want a larger sample of slow requests.

    Refer to Configure the Completed Requests for more information and examples.

    The node-level completed-limit setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 4000
    Example: 7000

    Integer (int32)

    queryCompletedMaxPlanSize
    optional

    A plan size in bytes. Limits the size of query execution plans that can be logged in the completed requests catalog. Values larger than the maximum limit are silently treated as the maximum limit. Queries with plans larger than this are not logged. You must obtain execution plans for such queries via profiling or using the EXPLAIN statement.

    Refer to Configure the Completed Requests for more information.

    The node-level completed-max-plan-size setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 262144
    Minimum: 0
    Maximum: 20840448

    Integer (int32)

    queryCompletedThreshold
    optional

    A duration in milliseconds. All completed queries lasting longer than this threshold are logged in the completed requests catalog.

    Specify 0 to track all requests, independent of duration. Specify any negative number to track none.

    Refer to Configure the Completed Requests for more information and examples.

    The node-level completed-threshold setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 1000
    Example: 7000

    Integer (int32)

    queryLogLevel
    optional

    Log level used in the logger.

    All values, in descending order of data:

    • DEBUG — For developers. Writes everything.

    • TRACE — For developers. Less info than DEBUG.

    • INFO — For admin & customers. Lists warnings & errors.

    • WARN — For admin. Only abnormal items.

    • ERROR — For admin. Only errors to be fixed.

    • SEVERE — For admin. Major items, like crashes.

    • NONE — Doesn't write anything.

    The node-level loglevel setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Values: "DEBUG", "TRACE", "INFO", "WARN", "ERROR", "SEVERE", "NONE"
    Default: "INFO"
    Example: "DEBUG"

    String

    queryMaxParallelism
    optional

    Specifies the maximum parallelism for queries on all Query nodes in the cluster.

    If the value is zero or negative, the maximum parallelism is restricted to the number of allowed cores. Similarly, if the value is greater than the number of allowed cores, the maximum parallelism is restricted to the number of allowed cores.

    (The number of allowed cores is the same as the number of logical CPUs. In Community Edition, the number of allowed cores cannot be greater than 4. In Enterprise Edition, there is no limit to the number of allowed cores.)

    Refer to Max Parallelism for more information.

    The node-level max-parallelism setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, there is a request-level max_parallelism parameter. If a request includes this parameter, it will be capped by the node-level max-parallelism setting.

    NOTE: To enable queries to run in parallel, you must specify the cluster-level queryMaxParallelism parameter, or specify the node-level max-parallelism parameter on all Query nodes.

    Default: 1
    Example: 0

    Integer (int32)

    queryMemoryQuota
    optional

    Specifies the maximum amount of memory a request may use on any Query node in the cluster, in MB.

    This parameter enforces a ceiling on the memory used for the tracked documents required for processing a request. It does not take into account any other memory that might be used to process a request, such as the stack, the operators, or some intermediate values.

    Within a transaction, this setting enforces the memory quota for the transaction by tracking the delta table and the transaction log (approximately).

    The node-level memory-quota setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, there is a request-level memory_quota parameter. If a request includes this parameter, it will be capped by the node-level memory-quota setting.

    Default: 0
    Example: 4

    Integer (int32)

    queryN1QLFeatCtrl
    optional

    SQL++ feature control. This setting is provided for technical support only.

    The node-level n1ql-feat-ctrl setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Integer (int32)

    queryNodeQuota
    optional

    Sets the soft memory limit for the Query service on every Query node in the cluster, in MB. The garbage collector tries to keep below this target. It is not a hard, absolute limit, and memory usage may exceed this value.

    When set to 0 (the default), the Query service sets a default soft memory limit for every node. To do this, the Query service calculates the difference between the total system RAM and 90% of the total system RAM:

    Total System RAM - (0.9 * Total System RAM)

    • If the difference is greater than 8 GiB, the default soft memory limit is set to the total system RAM minus 8 GiB.

    • If the difference is 8 GiB or less, the default soft memory limit is set to 90% of the total system RAM.

    The node-level node-quota setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 0

    Integer (int32)

    queryNodeQuotaValPercent
    optional

    The percentage of the queryNodeQuota that is dedicated to tracked value content memory across all active requests for every Query node in the cluster. (The queryMemoryQuota setting specifies the maximum amount of document memory an individual request may use on any Query node in the cluster.)

    The node-level node-quota-val-percent setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 67
    Minimum: 0
    Maximum: 100

    Integer (int32)

    queryNumAtrs
    optional

    Specifies the total number of active transaction records for all Query nodes in the cluster.

    The node-level numatrs setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 1024
    Minimum: 0 (exclusive)
    Example: 512

    Integer (int32)

    queryNumCpus
    optional

    The number of CPUs the Query service can use on any Query node in the cluster. Note that this setting requires a restart of the Query service to take effect.

    When set to 0 (the default), the Query service can use all available CPUs, up to the limits described below.

    The number of CPUs can never be greater than the number of logical CPUs. In Community Edition, the number of allowed CPUs cannot be greater than 4. In Enterprise Edition, there is no limit to the number of allowed CPUs.

    The node-level num-cpus setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 0

    Integer (int32)

    queryPipelineBatch
    optional

    Controls the number of items execution operators can batch for Fetch from the KV.

    The node-level pipeline-batch setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level pipeline_batch parameter specifies this property per request. The minimum of that and the node-level pipeline-batch setting is applied.

    Default: 16
    Example: 64

    Integer (int32)

    queryPipelineCap
    optional

    Maximum number of items each execution operator can buffer between various operators.

    The node-level pipeline-cap setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level pipeline_cap parameter specifies this property per request. The minimum of that and the node-level pipeline-cap setting is applied.

    Default: 512
    Example: 1024

    Integer (int32)

    queryPreparedLimit
    optional

    Maximum number of prepared statements in the cache. When this cache reaches the limit, the least recently used prepared statements will be discarded as new prepared statements are created.

    The node-level prepared-limit setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 16384
    Example: 65536

    Integer (int32)

    queryScanCap
    optional

    Maximum buffered channel size between the indexer client and the query service for index scans. This parameter controls when to use scan backfill.

    Use 0 or a negative number to disable. Smaller values reduce GC, while larger values reduce indexer backfill.

    The node-level scan-cap setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level scan_cap parameter specifies this property per request. The minimum of that and the node-level scan-cap setting is applied.

    Default: 512
    Example: 1024

    Integer (int32)

    queryTimeout
    optional

    Maximum time to spend on the request before timing out (ns).

    The value for this setting is an integer, representing a duration in nanoseconds. It must not be delimited by quotes, and must not include a unit.

    Specify 0 (the default value) or a negative integer to disable. When disabled, no timeout is applied and the request runs for however long it takes.

    The node-level timeout setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level timeout parameter specifies this property per request. The minimum of that and the node-level timeout setting is applied.

    Default: 0
    Example: 500000000

    Long (int64)

    queryTxTimeout
    optional

    Maximum time to spend on a transaction before timing out. This setting only applies to requests containing the BEGIN TRANSACTION statement, or to requests where the tximplicit parameter is set. For all other requests, it is ignored.

    The value for this setting is a string. Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    Specify 0ms (the default value) to disable. When disabled, no timeout is applied and the transaction runs for however long it takes.

    The node-level txtimeout setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, there is a request-level txtimeout parameter. If a request includes this parameter, it will be capped by the node-level txtimeout setting.

    Default: "0ms"
    Example: "0.5s"

    String (duration)

    queryTmpSpaceDir
    optional

    The path to which the Index Service writes temporary backfill files, and the Query Service writes spill files, to store any transient data during query processing.

    The specified path must already exist. Only absolute paths are allowed.

    The default path is var/lib/couchbase/tmp within the Couchbase Server installation directory.

    Example: "/opt/couchbase/var/lib/couchbase/tmp"

    String

    queryTmpSpaceSize
    optional

    In MiB, the maximum size of temporary backfill files for each indexer, and the maximum size of temporary files for spilled sorting and other operations. In a cluster with both secondary indexing and full text search, the limit for disk space use is three times this setting.

    Setting the size to 0 disables backfill. Setting the size to -1 means the size is unlimited.

    The maximum size is limited only by the available disk space.

    Default: 5120
    Example: 2048

    Integer (int32)

    queryUseCBO
    optional

    Specifies whether the cost-based optimizer is enabled.

    The node-level use-cbo setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level use_cbo parameter specifies this property per request. If a request does not include this parameter, the node-level setting is used, which defaults to true.

    Default: true
    Example: false

    Boolean

    queryUseReplica
    optional

    Specifies whether a query can fetch data from a replica vBucket if active vBuckets are inaccessible. The possible values are:

    • off — read from replica is disabled for all queries and cannot be overridden at request level.

    • on — read from replica is enabled for all queries, but can be disabled at request level.

    • unset — read from replica is enabled or disabled at request level.

    Do not enable read from replica when you require consistent results. Only SELECT queries that are not within a transaction can read from replica.

    Reading from replica is only possible if the cluster uses Couchbase Server 7.6.0 or later.

    Note that KV range scans cannot currently be started on a replica vBucket. If a query uses sequential scan and a data node becomes unavailable, the query might return an error, even if read from replica is enabled for the request.

    The node-level use-replica setting specifies this property for a single node. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level use_replica parameter specifies this property per request. If a request does not include this parameter, or if the request-level parameter is unset, the node-level setting is used. If the request-level parameter and the node-level setting are both unset, read from replica is disabled for that request.

    Values: "off", "on", "unset"
    Default: "unset"
    Example: "on"

    String

    queryCurlWhitelist
    optional

    An object which determines which URLs may be accessed by the CURL() function.

    Access

    Property Schema

    all_access
    required

    Defines whether the user has access to all URLs, or only URLs specified by the access list.

    This field set must be set to false to enable the allowed_urls and disallowed_urls fields.

    Setting this field to true enables access to all endpoints.

    Boolean

    allowed_urls
    optional

    An array of strings, each of which is a URL to which you wish to grant access. Each URL is a prefix match. The CURL() function will allow any URL that starts with this value.

    For example, if you wish to allow access to all Google APIs, add the URL https://maps.googleapis.com to the array. To allow complete access to localhost, use http://localhost.

    Note that each URL must include the port, protocol, and all other components of the URL.

    String array

    disallowed_urls
    optional

    An array of strings, each of which is a URL that will be restricted for all roles. Each URL is a prefix match. The CURL() function will disallow any URL that starts with this value.

    If both allowed_urls and disallowed_urls fields are populated, the disallowed_urls field takes precedence over allowed_urls.

    Note that each URL must include the port, protocol, and all other components of the URL.

    String array

    Node-Level Query Settings

    To set a node-level query setting:

    • Make a REST API call to the Admin REST API (/admin/settings endpoint).

    You cannot set a query setting for an individual node using the Couchbase Web Console or the command line.

    • REST API

    To set node-level settings with the REST API, specify the parameters in the request body.


    In the following examples:

    • $BASE_URL is the protocol, host, and port — for example, http://localhost:8093.

    • $USER is the user name.

    • $PASSWORD is the password.

    This example retrieves the current node-level settings:

    curl $BASE_URL/admin/settings -u $USER:$PASSWORD

    This example sets the node-level profile parameter:

    curl $BASE_URL/admin/settings -u $USER:$PASSWORD \
      -H 'Content-Type: application/json' \
      -d '{"profile": "phases"}'

    For more examples, see Manage and Monitor Queries.

    The table below contains details of all node-level query settings.

    Table 7. Node-Level Query Settings
    Property Schema

    atrcollection
    optional

    Specifies the collection where active transaction records are stored. The collection must be present. If not specified, the active transaction record is stored in the default collection in the default scope in the bucket containing the first mutated document within the transaction.

    The value must be a string in the form "bucket.scope.collection" or "namespace:bucket.scope.collection". If any part of the path contains a special character, that part of the path must be delimited in backticks ``.

    The request-level atrcollection parameter specifies this property per request. If a request does not include this parameter, the node-level atrcollection setting will be used.

    Default: ""
    Example: "default:`travel-sample`.transaction.test"

    String

    auto-prepare
    optional

    Specifies whether the query engine should create a prepared statement every time a SQL++ request is submitted, whether the PREPARE statement is included or not.

    Refer to Auto-Prepare for more information.

    Default: false
    Example: true

    Boolean

    cleanupclientattempts
    optional

    When enabled, the Query service preferentially aims to clean up just transactions that it has created, leaving transactions for the distributed cleanup process only when it is forced to.

    The cluster-level queryCleanupClientAttempts setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: true
    Example: false

    Boolean

    cleanuplostattempts
    optional

    When enabled, the Query service takes part in the distributed cleanup process, and cleans up expired transactions created by any client.

    The cluster-level queryCleanupLostAttempts setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: true
    Example: false

    Boolean

    cleanupwindow
    optional

    Specifies how frequently the Query service checks its subset of active transaction records for cleanup. Decreasing this setting causes expiration transactions to be found more swiftly, with the tradeoff of increasing the number of reads per second used for the scanning process.

    The value for this setting is a string. Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    The cluster-level queryCleanupWindow setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: "60s"
    Example: "30s"

    String (duration)

    completed
    optional

    A nested object that sets the parameters for the completed requests catalog. All completed requests that match these parameters are tracked in the completed requests catalog.

    Refer to Configure Completed Requests for more information and examples.

    completed-limit
    optional

    Sets the number of requests to be logged in the completed requests catalog. As new completed requests are added, old ones are removed.

    Increase this when the completed request keyspace is not big enough to track the slow requests, such as when you want a larger sample of slow requests.

    Refer to Configure Completed Requests for more information and examples.

    The cluster-level queryCompletedLimit setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 4000
    Example: 7000

    Integer (int32)

    completed-max-plan-size
    optional

    A plan size in bytes. Limits the size of query execution plans that can be logged in the completed requests catalog. Values larger than the maximum limit are silently treated as the maximum limit. Queries with plans larger than this are not logged. You must obtain execution plans for such queries via profiling or using the EXPLAIN statement.

    Refer to Configure Completed Requests for more information.

    The cluster-level queryCompletedMaxPlanSize setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 262144
    Minimum: 0
    Maximum: 20840448

    Integer (int32)

    completed-stream-size
    optional

    A file size in MiB. When specified, completed requests are saved to the Couchbase Server logs directory. Completed requests are saved to GZIP archives with the prefix local_request_log. The value of this property determines the size of the data to retain, per node.

    Specify 0 (the default) to disable completed request streaming.

    Refer to Stream Completed Requests for more information and examples.

    Integer (int32)

    completed-threshold
    optional

    A duration in milliseconds. All completed queries lasting longer than this threshold are logged in the completed requests catalog.

    Specify 0 to track all requests, independent of duration. Specify any negative number to track none.

    Refer to Configure Completed Requests for more information and examples.

    The cluster-level queryCompletedThreshold setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 1000
    Example: 7000

    Integer (int32)

    controls
    optional

    Specifies if there should be a controls section returned with the request results.

    When set to true, the query response document includes a controls section with runtime information provided along with the request, such as positional and named parameters or settings.

    NOTE: If the request qualifies for caching, these values will also be cached in the completed_requests system keyspace.

    The request-level controls parameter specifies this property per request. If a request does not include this parameter, the node-level controls setting will be used.

    Default: false
    Example: true

    Boolean

    cpuprofile
    optional

    The absolute path and filename to write the CPU profile to a local file.

    The output file includes a controls section and performance measurements, such as memory allocation and garbage collection, to pinpoint bottlenecks and ways to improve your code execution.

    NOTE: If cpuprofile is left running too long, it can slow the system down as its file size increases.

    To stop cpuprofile, run with the empty setting of "".

    Default: ""
    Example: "/tmp/info.txt"

    String

    debug
    optional

    Use debug mode.

    When set to true, extra logging is provided.

    Default: false
    Example: true

    Boolean

    distribute
    optional

    This field is only available with the POST method. When specified alongside other settings, this field instructs the node that is processing the request to cascade those settings to all other query nodes. The actual value of this field is ignored.

    Example: true

    Boolean

    functions-limit
    optional

    Maximum number of user-defined functions.

    Default: 16384
    Example: 7000

    Integer (int32)

    keep-alive-length
    optional

    Maximum size of buffered result.

    Default: 16384
    Example: 7000

    Integer (int32)

    loglevel
    optional

    Log level used in the logger.

    All values, in descending order of data:

    • DEBUG — For developers. Writes everything.

    • TRACE — For developers. Less info than DEBUG.

    • INFO — For admin & customers. Lists warnings & errors.

    • WARN — For admin. Only abnormal items.

    • ERROR — For admin. Only errors to be fixed.

    • SEVERE — For admin. Major items, like crashes.

    • NONE — Doesn't write anything.

    The cluster-level queryLogLevel setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Values: "DEBUG", "TRACE", "INFO", "WARN", "ERROR", "SEVERE", "NONE"
    Default: "INFO"
    Example: "DEBUG"

    String

    max-index-api
    optional

    Max index API. This setting is provided for technical support only.

    Integer (int32)

    max-parallelism
    optional

    Specifies the maximum parallelism for queries on this node.

    If the value is zero or negative, the maximum parallelism is restricted to the number of allowed cores. Similarly, if the value is greater than the number of allowed cores, the maximum parallelism is restricted to the number of allowed cores.

    (The number of allowed cores is the same as the number of logical CPUs. In Community Edition, the number of allowed cores cannot be greater than 4. In Enterprise Edition, there is no limit to the number of allowed cores.) Refer to Max Parallelism for more information.

    The cluster-level queryMaxParallelism setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, there is a request-level max_parallelism parameter. If a request includes this parameter, it will be capped by the node-level max-parallelism setting.

    NOTE: To enable queries to run in parallel, you must specify the cluster-level queryMaxParallelism parameter, or specify the node-level max-parallelism parameter on all Query nodes.

    Default: 1
    Example: 0

    Integer (int32)

    memory-quota
    optional

    Specifies the maximum amount of memory a request may use on this node, in MB.

    Specify 0 (the default value) to disable. When disabled, there is no quota.

    This parameter enforces a ceiling on the memory used for the tracked documents required for processing a request. It does not take into account any other memory that might be used to process a request, such as the stack, the operators, or some intermediate values.

    Within a transaction, this setting enforces the memory quota for the transaction by tracking the delta table and the transaction log (approximately).

    The cluster-level queryMemoryQuota setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level memory_quota parameter specifies this property per request. If a request includes this parameter, it will be capped by the node-level memory-quota setting.

    Default: 0
    Example: 4

    Integer (int32)

    memprofile
    optional

    Filename to write the diagnostic memory usage log.

    NOTE: If memprofile is left running too long, it can slow the system down as its file size increases.

    To stop memprofile, run with the empty setting of "".

    Default: ""
    Example: "/tmp/memory-usage.log"

    String

    mutexprofile
    optional

    Mutex profile. This setting is provided for technical support only.

    Default: false

    Boolean

    n1ql-feat-ctrl
    optional

    SQL++ feature control. This setting is provided for technical support only. The value may be an integer, or a string representing a hexadecimal number.

    The cluster-level queryN1QLFeatCtrl setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 76
    Example: 16460

    Integer (int32)

    node-quota
    optional

    Sets the soft memory limit for the Query service on this node, in MB. The garbage collector tries to keep below this target. It is not a hard, absolute limit, and memory usage may exceed this value.

    When set to 0 (the default), the Query service sets a default soft memory limit for the node. To do this, the Query service calculates the difference between the total system RAM and 90% of the total system RAM:

    Total System RAM - (0.9 * Total System RAM)

    • If the difference is greater than 8 GiB, the default soft memory limit is set to the total system RAM minus 8 GiB.

    • If the difference is 8 GiB or less, the default soft memory limit is set to 90% of the total system RAM.

    The cluster-level queryNodeQuota setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 0

    Integer (int32)

    node-quota-val-percent
    optional

    The percentage of the node-quota that is dedicated to tracked value content memory across all active requests on this node. (The memory-quota setting specifies the maximum amount of document memory an individual request may use on this node.)

    The cluster-level queryNodeQuotaValPercent setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 67
    Minimum: 0
    Maximum: 100

    Integer (int32)

    num-cpus
    optional

    The number of CPUs the Query service can use on this node. Note that this setting requires a restart of the Query service to take effect.

    When set to 0 (the default), the Query service can use all available CPUs, up to the limits described below.

    The number of CPUs can never be greater than the number of logical CPUs. In Community Edition, the number of allowed CPUs cannot be greater than 4. In Enterprise Edition, there is no limit to the number of allowed CPUs.

    The cluster-level queryNumCpus setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 0

    Integer (int32)

    numatrs
    optional

    Specifies the total number of active transaction records.

    The cluster-level queryNumAtrs setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    String

    pipeline-batch
    optional

    Controls the number of items execution operators can batch for Fetch from the KV.

    The cluster-level queryPipelineBatch setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level pipeline_batch parameter specifies this property per request. The minimum of that and the node-level pipeline-batch setting is applied.

    Default: 16
    Example: 64

    Integer (int32)

    pipeline-cap
    optional

    Maximum number of items each execution operator can buffer between various operators.

    The cluster-level queryPipelineCap setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level pipeline_cap parameter specifies this property per request. The minimum of that and the node-level pipeline-cap setting is applied.

    Default: 512
    Example: 1024

    Integer (int32)

    plus-servicers
    optional

    The number of service threads for transactions where the scan consistency is request_plus or at_plus. The default is 16 times the number of logical cores.

    Example: 16

    Integer (int32)

    prepared-limit
    optional

    Maximum number of prepared statements in the cache. When this cache reaches the limit, the least recently used prepared statements will be discarded as new prepared statements are created.

    The cluster-level queryPreparedLimit setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    Default: 16384
    Example: 65536

    Integer (int32)

    pretty
    optional

    Specifies whether query results are returned in pretty format.

    The request-level pretty parameter specifies this property per request. If a request does not include this parameter, the node-level setting is used, which defaults to false.

    Default: false
    Example: true

    Boolean

    profile
    optional

    Specifies if there should be a profile section returned with the request results. The valid values are:

    • off — No profiling information is added to the query response.

    • phases — The query response includes a profile section with stats and details about various phases of the query plan and execution. Three phase times will be included in the system:active_requests and system:completed_requests monitoring keyspaces.

    • timings — Besides the phase times, the profile section of the query response document will include a full query plan with timing and information about the number of processed documents at each phase. This information will be included in the system:active_requests and system:completed_requests keyspaces.

    NOTE: If profile is not set as one of the above values, then the profile setting does not change.

    Refer to Monitoring and Profiling Details for more information and examples.

    The request-level profile parameter specifies this property per request. If a request does not include this parameter, the node-level profile setting will be used.

    Values: "off", "phases", "timings"
    Default: "off"
    Example: "phases"

    String

    request-size-cap
    optional

    Maximum size of a request.

    Default: 67108864
    Example: 70000

    Integer (int32)

    scan-cap
    optional

    Maximum buffered channel size between the indexer client and the query service for index scans. This parameter controls when to use scan backfill.

    Use 0 or a negative number to disable. Smaller values reduce GC, while larger values reduce indexer backfill.

    The cluster-level queryScanCap setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level scan_cap parameter specifies this property per request. The minimum of that and the node-level scan-cap setting is applied.

    Default: 512
    Example: 1024

    Integer (int32)

    servicers
    optional

    The number of service threads for the query. The default is 4 times the number of cores on the query node.

    Default: 32
    Example: 8

    Integer (int32)

    timeout
    optional

    Maximum time to spend on the request before timing out (ns).

    The value for this setting is an integer, representing a duration in nanoseconds. It must not be delimited by quotes, and must not include a unit.

    Specify 0 (the default value) or a negative integer to disable. When disabled, no timeout is applied and the request runs for however long it takes.

    The cluster-level queryTimeout setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level timeout parameter specifies this property per request. The minimum of that and the node-level timeout setting is applied.

    Default: 0
    Example: 500000000

    Long (int64)

    txtimeout
    optional

    Maximum time to spend on a transaction before timing out (ns). This setting only applies to requests containing the BEGIN TRANSACTION statement, or to requests where the tximplicit parameter is set. For all other requests, it is ignored.

    The value for this setting is an integer, representing a duration in nanoseconds. It must not be delimited by quotes, and must not include a unit.

    Specify 0 (the default value) to disable. When disabled, no timeout is applied and the transaction runs for however long it takes.

    The cluster-level queryTxTimeout setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level txtimeout parameter specifies this property per request. The minimum of that and the node-level txtimeout setting is applied.

    Default: 0
    Example: 500000000

    Long (int64)

    use-cbo
    optional

    Specifies whether the cost-based optimizer is enabled.

    The cluster-level queryUseCBO setting specifies this property for the whole cluster. When you change the cluster-level setting, the node-level setting is over-written for all nodes in the cluster.

    In addition, the request-level use_cbo parameter specifies this property per request. If a request does not include this parameter, the node-level setting is used, which defaults to true.

    Default: true
    Example: false

    Boolean

    use-replica
    optional

    Specifies whether a query can fetch data from a replica vBucket if active vBuckets are inaccessible. The possible values are:

    • off — read from replica is disabled for all queries and cannot be overridden at request level.

    • on — read from replica is enabled for all queries, but can be disabled at request level.

    • unset — read from replica is enabled or disabled at request level.

    Do not enable read from replica when you require consistent results. Only SELECT queries that are not within a transaction can read from replica.

    Reading from replica is only possible if the cluster uses Couchbase Server 7.6.0 or later.

    Note that KV range scans cannot currently be started on a replica vBucket. If a query uses sequential scan and a data node becomes unavailable, the query might return an error, even if read from replica is enabled for the request.

    The cluster-level queryUseReplica setting specifies the default for this property for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    In addition, the request-level use_replica parameter specifies this property per request. If a request does not include this parameter, or if the request-level parameter is unset, the node-level setting is used. If the request-level parameter and the node-level setting are both unset, read from replica is disabled for that request.

    Values: "off", "on", "unset"
    Default: "unset"
    Example: "on"

    String

    Logging Parameters

    Property Schema

    aborted
    optional

    If true, all requests that generate a panic are logged.

    Default: null
    Nullable: yes
    Example: true

    Boolean

    client
    optional

    The IP address of the client. If specified, all completed requests from this IP address are logged.

    Default: ""
    Example: "172.1.2.3"

    String

    context
    optional

    The opaque ID or context provided by the client. If specified, all completed requests with this client context ID are logged.

    Refer to the request-level client_context_id parameter for more information.

    String

    error
    optional

    An error number. If specified, all completed queries returning this error number are logged.

    Default: null
    Nullable: yes
    Example: 12003

    Integer (int32)

    tag
    optional

    A unique string which tags a set of qualifiers.

    Refer to Configure Completed Requests for more information.

    Default: ""
    Example: "both_user_and_error"

    String

    threshold
    optional

    A duration in milliseconds. If specified, all completed queries lasting longer than this threshold are logged.

    This is another way of specifying the completed-threshold setting.

    Default: 1000
    Example: 7000

    Integer (int32)

    user
    optional

    A user name, as given in the request credentials. If specified, all completed queries with this user name are logged.

    Default: ""
    Example: "marco"

    String

    statement
    optional

    A LIKE search pattern to match against the query text. If specified, all completed queries where the pattern is found are logged.

    Default: ""
    Example: "%FIND USER%"

    String

    plan
    optional

    An object, or an array of objects, containing one or more field:value pairs to match against the query plan. Each pair describes a field in the query plan and the value it must have. All completed queries where the specified field:value pairs are found in the plan are logged.

    errors
    optional

    The number of errors. If specified, all completed queries that return at least this many errors are logged. Queries with fewer errors are not logged.

    Example: 5

    Integer (int32)

    Plan Qualifier

    One of …​ Schema

    An object containing one or more field:value pairs.

    or

    An array of objects, each containing one or more field:value pairs.

    Field:Value Pairs

    Property Schema

    <field>
    additional
    property

    A field:value pair describing a field in the query plan, and the value that the field must have for the request to be logged. The name of the property is the name of the field in the query plan. The value may be a string, number, array, or any other JSON value.

    Within a single JSON object, if multiple field:value pairs are specified, then all pairs must be matched (using AND). For example, {"index": "ix1", "#operator": "IntersectScan"} specifies that if the query plan has an index field with the value "ix1" AND has an IntersectScan operator, then the request should be logged.

    Within an array of JSON objects, each field:value pair must be unique, but fields can be repeated. For example, [{"index": "ix1"}, {"index": "ix2"}] specifies that if the query plan has an index field with the value "ix1" AND another index field with the value "ix2", then the request should be logged.

    Nullable: yes

    Any Type

    Request-Level Parameters

    To set a request-level parameter, do one of the following:

    Generally, use the cbq shell or the Query Workbench as a sandbox to test queries on your local machine. Use a REST API call or an SDK client program for your production queries.

    • Web Console

    • Command Line

    • REST API

    To set request-level preferences in the Query Workbench:

    1. Go to Query  Workbench and click the cog icon to display the Run-Time Preferences window.

    2. Specify the preferences — if a preference is not explicitly listed, click + next to Named Parameters and add its name and value.

    3. Click Save Preferences.

    The Run-Time Preferences window

    For more information, see Query Preferences.

    To set request-level parameters in cbq, use the \SET command. The parameter name must be prefixed by a hyphen.


    This example sets the request-level timeout, pretty-print, and max parallelism parameters, and runs a query:

    \SET -timeout "30m";
    \SET -pretty true;
    \SET -max_parallelism 3;
    SELECT * FROM "world" AS hello;

    For more information, see Parameter Manipulation in the cbq documentation.

    To set request-level parameters with the REST API, specify the parameters in the request body or the query URI.

    In the following examples:

    • $BASE_URL is the protocol, host, and port — for example, http://localhost:8093.

    • $USER is the user name.

    • $PASSWORD is the password.


    This example sets the request-level timeout, pretty-print, and max parallelism parameters, and runs a query:

    curl $BASE_URL/query/service -u $USER:$PASSWORD \
      -d 'statement=SELECT * FROM "world" AS hello;
        & timeout=30m
        & pretty=true
        & max_parallelism=3'

    For more examples, see the Query Service REST API examples.

    The table below contains details of all request-level parameters, along with examples.

    Table 8. Request-Level Parameters
    Property Schema

    args
    optional

    Supplies the values for positional parameters in the statement. Applicable if the statement or prepared statement contains 1 or more positional parameters.

    The value is an array of JSON values, one for each positional parameter in the statement.

    Refer to Named Parameters and Positional Parameters for details.

    Example: ["LAX",6]

    Any Type array

    atrcollection
    optional

    Specifies the collection where the active transaction record (ATR) is stored. The collection must be present. If not specified, the ATR is stored in the default collection in the default scope in the bucket containing the first mutated document within the transaction.

    The value must be a string in the form "bucket.scope.collection" or "namespace:bucket.scope.collection". If any part of the path contains a special character, that part of the path must be delimited in backticks ``.

    The node-level atrcollection setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting.

    Example: "default:`travel-sample`.transaction.test"

    String

    auto_execute
    optional

    Specifies that prepared statements should be executed automatically as soon as they are created. This saves you from having to make two separate requests in cases where you want to prepare a statement and execute it immediately.

    Refer to Auto-Execute for more information.

    Default: false
    Example: true

    Boolean

    client_context_id
    optional

    A piece of data supplied by the client that is echoed in the response, if present. SQL++ is agnostic about the content of this parameter; it is just echoed in the response.

    • Maximum allowed size is 64 characters; all others will be cut.
    • If it contains an escape character / or quote ", it will be rejected as error code 1110.

    String

    compression
    optional

    Compression format to use for response data on the wire.

    Values are case-insensitive.

    Values: "ZIP", "RLE", "LZMA", "LZO", "NONE"
    Default: "NONE"
    Example: "zip"

    String

    controls
    optional

    Specifies if there should be a controls section returned with the request results.

    When set to true, the query response document includes a controls section with runtime information provided along with the request, such as positional and named parameters or settings.

    If the request qualifies for caching, these values will also be cached in the completed_requests system keyspace.

    The node-level controls setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting.

    Example: true

    Boolean

    creds
    optional

    Specifies the login credentials. The Query API supports two types of identity: local (or bucket) and admin.

    The format is an identity and password. You can specify credentials for multiple identities.

    If credentials are supplied in the request header, then HTTP Basic Authentication takes precedence and creds is ignored.

    Example: [{"user":"local:bucket-name","pass":"password"},{"user":"admin:admin-name","pass":"password"}]

    Credentials array

    durability_level
    optional

    The level of durability for mutations produced by the request.

    If the request contains a BEGIN TRANSACTION statement, or a DML statement with the tximplicit parameter set to true, the durability level is specified for all mutations within that transaction.

    Durability is also supported for non-transactional DML statements. In this case, the kvtimeout parameter is used as the durability timeout.

    If not specified, the default durability level is "majority". Set the durability level to "none" or "" to specify no durability.

    Values: "", "none", "majority", "majorityAndPersistActive", "persistToMajority"
    Default: "majority"
    Example: "none"

    String

    encoded_plan
    optional

    In clusters running Couchbase Server 6.5 and later, this parameter is ignored and has no effect. It is included for compatibility with previous versions.

    String

    encoding
    optional

    Desired character encoding for the query results.

    Only possible value is UTF-8 and is case-insensitive.

    Default: "UTF-8"

    String

    format
    optional

    Desired format for the query results.

    Values are case-insensitive.

    Values: "JSON", "XML", "CSV", "TSV"
    Default: "JSON"
    Example: "XML"

    String

    kvtimeout
    optional

    The approximate time to wait for a KV get operation before timing out. This applies to statements within a transaction, and to non-transactional statements, whether durability_level is set or not.

    If use_replica is enabled for a query, then this parameter also specifies the approximate time to wait before fetching data from a replica vBucket when the active vBucket is inaccessible.

    The value for this parameter is a string. Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    Specify a duration of 0 or a negative duration to disable. When disabled, no timeout is applied and the KV operation runs for however long it takes.

    Default: "2.5s"
    Example: "10ms"

    String

    max_parallelism
    optional

    Specifies the maximum parallelism for the query.

    The default value is the same as the number of partitions of the index selected for the query.

    The node-level max-parallelism setting specifies the ceiling for this parameter for a single node. If the request-level parameter is zero or negative, the parallelism for the query is set to the node-level setting. If the request-level parameter is greater than zero and less than the node-level setting, the request-level parameter overrides the node-level setting. If the request-level parameter is greater than the node-level setting, the parallelism for the query is set to the node-level setting.

    In addition, the cluster-level queryMaxParallelism setting specifies the ceiling for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    To enable queries to run in parallel, you must specify the cluster-level queryMaxParallelism parameter, or specify the node-level max-parallelism parameter on all Query nodes.

    Example: 3

    Integer (int32)

    memory_quota
    optional

    Specifies the maximum amount of memory the request may use, in MB.

    Specify 0 (the default value) to disable. When disabled, there is no quota.

    This parameter enforces a ceiling on the memory used for the tracked documents required for processing a request. It does not take into account any other memory that might be used to process a request, such as the stack, the operators, or some intermediate values.

    Within a transaction, this setting enforces the memory quota for the transaction by tracking the delta table and the transaction log (approximately).

    The node-level memory-quota setting specifies the ceiling for this parameter for a single node. If the node-level setting is zero (the default), the request-level parameter overrides the node-level setting. If the node-level setting is greater than zero, the request-level parameter is capped by the node-level setting.

    In addition, the cluster-level queryMemoryQuota setting specifies the ceiling for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Default: 0
    Example: 4

    Integer (int32)

    metrics
    optional

    Specifies that metrics should be returned with query results.

    Default: true
    Example: false

    Boolean

    namespace
    optional

    Specifies the namespace to use. Currently, only the default namespace is available.

    Example: "default"

    String

    natural
    optional

    Couchbase Server 8.0

    The prompt for a natural language request. The Query Service uses the prompt to generate a SQL++ statement.

    If the generated statement is a SELECT statement, the generated statement is returned and executed automatically.

    If the generated statement is not a SELECT statement, the generated statement is returned, but not executed. In this case, you must verify the statement and execute it in a separate request.

    Natural language requests use the Couchbase Capella iQ service as a backend. To make a natural language request, you must have a Couchbase Capella user account.

    This parameter is available in clusters running Couchbase Server 8.0 and later.

    To use this parameter, you must also specify the natural_cred, natural_orgid, and natural_context parameters. If you don't specify all four parameters, the Query Service returns an error.

    Example: "Show me count of airlines per country"

    String

    natural_cred
    optional

    Couchbase Server 8.0

    The Couchbase Capella user account credentials for a natural language request, in the form username:password. Be careful not to expose the credentials in log files or other output.

    This parameter does not support single sign-on (SSO), multi-factor authentication (MFA), or social login credentials such as Google or GitHub.

    Natural language requests use the Couchbase Capella iQ service as a backend. To make a natural language request, you must have a Couchbase Capella user account.

    This parameter is available in clusters running Couchbase Server 8.0 and later.

    To use this parameter, you must also specify the natural, natural_orgid, and natural_context parameters. If you don't specify all four parameters, the Query Service returns an error.

    Example: "username:password"

    String (password)

    natural_orgid
    optional

    Couchbase Server 8.0

    The Couchbase Capella organization ID for a natural language request.

    Natural language requests use the Couchbase Capella iQ service as a backend. To make a natural language request, you must have a Couchbase Capella user account.

    This parameter is available in clusters running Couchbase Server 8.0 and later.

    To use this parameter, you must also specify the natural, natural_cred, and natural_context parameters. If you don't specify all four parameters, the Query Service returns an error.

    UUID (uuid)

    natural_context
    optional

    Couchbase Server 8.0

    A list of paths specifying keyspaces for a natural language request. The Query Service infers the schema of each keyspace, in order to give more precise responses from the natural language request.

    The parameter may contain up to four paths, separated by commas. Spaces are allowed. Each path may be:

    • A full path, in the form bucket.scope.collection or namespace:bucket.scope.collection.

    • A path prefix, in the form namespace:bucket or bucket, to specify the default collection in the default scope.

    • A partial path, in the form collection. In this case, you must specify the query_context parameter to provide the bucket and scope.

    Natural language requests use the Couchbase Capella iQ service as a backend. To make a natural language request, you must have a Couchbase Capella user account.

    This parameter is available in clusters running Couchbase Server 8.0 and later.

    To use this parameter, you must also specify the natural, natural_cred, and natural_orgid parameters. If you don't specify all four parameters, the Query Service returns an error.

    Example: "travel-sample, travel-sample.inventory.airline, airline"

    String

    natural_output
    optional

    Couchbase Server 8.0

    Specifies the required output for a natural language request.

    • sql — The output is a SQL++ statement.

    • jsudf — The output is a CREATE FUNCTION statement which you can use to generate a SQL++ managed JavaScript user-defined function.

    • ftssql — The output is a SQL++ statement which can use a Flex index, if available.

    Natural language requests use the Couchbase Capella iQ service as a backend. To make a natural language request, you must have a Couchbase Capella user account.

    This parameter is available in clusters running Couchbase Server 8.0 and later.

    Values: "sql", "jsudf", "ftssql"
    Default: "sql"

    String

    numatrs
    optional

    Reserved for future use. This parameter is ignored and has no effect.

    Integer (int32)

    pipeline_batch
    optional

    Controls the number of items execution operators can batch for Fetch from the KV.

    The node-level pipeline-batch setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting, but only if it is lower than the node-level setting.

    In addition, the cluster-level queryPipelineBatch setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: 64

    Integer (int32)

    pipeline_cap
    optional

    Maximum number of items each execution operator can buffer between various operators.

    The node-level pipeline-cap setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting, but only if it is lower than the node-level setting.

    In addition, the cluster-level queryPipelineCap setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: 1024

    Integer (int32)

    prepared
    optional

    Required if statement or natural not provided.

    The name of the prepared SQL++ statement to be executed. Refer to EXECUTE for examples.

    If both prepared and statement are present and non-empty, an error is returned.

    Example: "[127.0.0.1:8091]pricy_hotel"

    String

    preserve_expiry
    optional

    Specifies whether documents should keep their current expiration setting when modified by a DML statement.

    If true, documents will keep any existing expiration setting when modified by a DML statement. If the DML statement explicitly specifies the document expiration, the statement overrides this parameter, and the expiration is changed.

    If false, document expiration is set to 0 when modified by a DML statement, unless the DML statement explicitly specifies the document expiration.

    Not supported for statements in a transaction.

    Default: false
    Example: true

    Boolean

    pretty
    optional

    Specifies the query results returned in pretty format.

    The node-level pretty setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting.

    Example: false

    Boolean

    profile
    optional

    Specifies if there should be a profile section returned with the request results. The valid values are:

    • off — No profiling information is added to the query response.

    • phases — The query response includes a profile section with stats and details about various phases of the query plan and execution. Three phase times will be included in the system:active_requests and system:completed_requests monitoring keyspaces.

    • timings — Besides the phase times, the profile section of the query response document will include a full query plan with timing and information about the number of processed documents at each phase. This information will be included in the system:active_requests and system:completed_requests keyspaces.

    If profile is not set as one of the above values, then the profile setting does not change.

    The node-level profile setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting.

    Values: "off", "phases", "timings"
    Example: "phases"

    String

    query_context
    optional

    Specifies the namespace, bucket, and scope used to resolve partial keyspace references within the request.

    The query context may be a full path, containing namespace, bucket, and scope; or a relative path, containing just the bucket and scope. Currently, only the default namespace is available. If the namespace name is omitted, the default namespace in the current session is used.

    Default: "default:"
    Example: "default:travel-sample.inventory"

    String

    readonly
    optional

    Controls whether a query can change a resulting recordset.

    If readonly is true, then the following statements are not allowed:

    • CREATE INDEX
    • DROP INDEX
    • INSERT
    • MERGE
    • UPDATE
    • UPSERT

    When using GET requests, it's best to set readonly to true.

    Default: false
    Example: true

    Boolean

    scan_cap
    optional

    Maximum buffered channel size between the indexer client and the query service for index scans. This parameter controls when to use scan backfill.

    Use 0 or a negative number to disable. Smaller values reduce GC, while larger values reduce indexer backfill.

    The node-level scan-cap setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting, but only if it is lower than the node-level setting.

    In addition, the cluster-level queryScanCap setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: 1024

    Integer (int32)

    scan_consistency
    optional

    Specifies the consistency guarantee or constraint for index scanning. The valid values are:

    • not_bounded — No timestamp vector is used in the index scan. This is the fastest mode, because it avoids the costs of obtaining the vector and waiting for the index to catch up to the vector.

    • at_plus — This implements bounded consistency. The request includes a scan_vector parameter and value, which is used as a lower bound. This can be used to implement read-your-own-writes (RYOW).

    • request_plus — This implements strong consistency per request. Before processing the request, a current vector is obtained. The vector is used as a lower bound for the statements in the request. If there are DML statements in the request, RYOW is also applied within the request. (If request_plus is specified in a query that runs during a failover of an index node, the query waits until the rebalance operation completes and the index data has rebalanced before returning a result.)

    • statement_plus — This implements strong consistency per statement. Before processing each statement, a current vector is obtained and used as a lower bound for that statement.

    Values are case-insensitive.

    For multi-statement requests, the default behavior is RYOW within each request. If you want to disable RYOW within a request, add a separate request_consistency parameter that can be set to not_bounded.

    If the request contains a BEGIN TRANSACTION statement, or a DML statement with the tximplicit parameter set to true, then this parameter sets the transactional scan consistency. Refer to Transactional Scan Consistency for details.

    Values: "not_bounded", "at_plus", "request_plus", "statement_plus"
    Default: "not_bounded"
    Example: "at_plus"

    String

    scan_vector
    optional

    Required if scan_consistency is at_plus and scan_vectors not provided.

    Specify the lower bound vector timestamp for one keyspace when using at_plus scan consistency.

    Scan vectors are built of two-element [value, guard] entries:

    • value: a vBucket's sequence number (a JSON number)
    • guard: a vBucket's UUID (a string)

    Scan vectors have two forms:

    1. Full: an array of [value, guard] entries, giving an entry for every vBucket in the system.
    2. Sparse: an object providing entries for specific vBuckets, mapping a vBucket number (a string) to each [value, guard] entry.

    Note that scan_vector can only be used if the query uses at most one keyspace; if it is used for a query referencing more than one keyspace, the query will fail with an error.

    For queries referencing multiple keyspaces, use scan_vectors.

    Example: {"5":[5409393,"VB5ID"],"19":[47574574,"VB19ID"]}

    Object

    scan_vectors
    optional

    Required if scan_consistency is at_plus and scan_vector not provided.

    A map from keyspace names to scan vectors. See scan_vector.

    The scan vectors can be Full or Sparse.

    Object

    scan_wait
    optional

    Can be supplied with scan_consistency values of request_plus, statement_plus and at_plus.

    Specifies the maximum time the client is willing to wait for an index to catch up to the vector timestamp in the request.

    Specifies how much time the client is willing to wait for the indexer to satisfy the required scan_consistency and scan_vector criteria. After receiving the scan request, if the indexer is unable to catch up within the scan_wait time and initiate the scan, the indexer aborts with an error and the scan fails.

    Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    Specify 0 or a negative integer to disable.

    Default: ""
    Example: "30m"

    String (duration)

    signature
    optional

    Include a header for the results schema in the response.

    Default: true
    Example: false

    Boolean

    sort_projection
    optional

    If true, causes statement projection terms to be sorted alphabetically.

    If false (the default), statement projection terms are returned in the order specified by the query.

    Default: false
    Example: true

    Boolean

    statement
    optional

    Required if prepared or natural not provided.

    Any valid SQL++ statement for a POST request, or a read-only SQL++ statement (SELECT, EXPLAIN) for a GET request.

    If both prepared and statement are present and non-empty, an error is returned.


    When specifying the request parameters as form data, the statement may not contain an unescaped semicolon (;). If it does, the Query Service responds with error 1040. To avoid this, either URL-encode the semicolon as %3B, or just omit the semicolon if possible.

    This restriction does not apply when specifying the request parameters in JSON format.

    Example: "SELECT * FROM `travel-sample`.inventory.hotel LIMIT 1"

    String

    timeout
    optional

    Maximum time to spend on the request before timing out (s).

    The value for this parameter is a string. Its format includes an amount and an optional unit: for example, 10ms (10 milliseconds) or 0.5s (half a second). If not specified, the default unit is s (seconds). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    Specify a duration of 0 or a negative duration to disable. When disabled, no timeout is applied and the request runs for however long it takes.

    If tximplicit or txid is set, this parameter is ignored. The request inherits the remaining time of the transaction as timeout.

    The node-level timeout setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting. However, if the node-level setting is greater than 0, the timeout for the query is limited to the node-level setting.

    In addition, the cluster-level queryTimeout setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: "30m"

    String (duration)

    txdata
    optional

    Transaction data. For internal use only.

    Object

    txid
    optional

    Required for statements within a transaction.

    Transaction ID. Specifies the transaction to which a statement belongs. For use with DML statements within a transaction, rollbacks, and commits.

    The transaction ID should be the same as the transaction ID generated by the BEGIN TRANSACTION statement. The transaction must be active and non-expired.

    Example: "d81d9b4a-b758-4f98-b007-87ba262d3a51"

    UUID (UUID)

    tximplicit
    optional

    Specifies that a DML statement is a singleton transaction.

    When this parameter is true, the Query service starts a transaction and executes the statement. If execution is successful, the Query service commits the transaction; otherwise the transaction is rolled back.

    The statement may not be part of an ongoing transaction. If the txid request-level parameter is set, the tximplicit parameter is ignored.

    Default: false
    Example: true

    Boolean

    txstmtnum
    optional

    Transaction statement number. The transaction statement number must be a positive integer, and must be higher than any previous transaction statement numbers in the transaction. If the transaction statement number is lower than the transaction statement number for any previous statement, an error is generated.

    Example: 10

    Integer (int32)

    txtimeout
    optional

    Maximum time to spend on a transaction before timing out. Only applies to BEGIN TRANSACTION statements, or DML statements for which tximplicit is set. For other statements, it is ignored.

    Within a transaction, the request-level timeout parameter is ignored. The transaction timeout clock starts when the BEGIN WORK statement is successful. Once the transaction timeout is reached, no statement is allowed to continue in the transaction.

    The value for this parameter is a string. Its format includes an amount and a mandatory unit, e.g. 10ms (10 milliseconds) or 0.5s (half a second). Valid units are:

    • ns (nanoseconds)
    • us (microseconds)
    • ms (milliseconds)
    • s (seconds)
    • m (minutes)
    • h (hours)

    Specify a duration of 0 to disable. When disabled, the request-level timeout is set to the default.

    The default is "15s" for cbq files or scripts, "2m" for interactive cbq sessions or redirected input.

    The node-level txtimeout setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting. However, if the node-level setting is greater than 0, the transaction timeout for the query is limited to the node-level setting.

    In addition, the cluster-level queryTxTimeout setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: "30m"

    String (duration)

    use_cbo
    optional

    Specifies whether the cost-based optimizer is enabled.

    The node-level use-cbo setting specifies the default for this parameter for a single node. The request-level parameter overrides the node-level setting.

    In addition, the cluster-level queryUseCBO setting specifies the default for this parameter for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Example: true

    Boolean

    use_fts
    optional

    Specifies that the query should use a Search index.

    If the query contains a USING FTS hint, that takes priority over this parameter.

    If the query does not contain a USING FTS hint, and this parameter is set to true, all Search indexes are considered for the query. If a qualified Search index is available, it is selected for the query. If none of the available Search indexes are qualified, the available GSI indexes are considered instead.

    Refer to Flex Indexes for more information.

    Default: false
    Example: true

    Boolean

    use_replica
    optional

    Specifies whether a query can fetch data from a replica vBucket if active vBuckets are inaccessible. The possible values are:

    • off — read from replica is disabled for this request.

    • on — read from replica is enabled for this request, unless it has been disabled for all requests at node level.

    • unset — read from replica is specified by the node-level setting. If the node-level setting is also unset, read from replica is disabled for this request.

    Do not enable read from replica when you require consistent results. Only SELECT queries that are not within a transaction can read from replica.

    Reading from replica is only possible if the cluster uses Couchbase Server 7.6.0 or later.

    Note that KV range scans cannot currently be started on a replica vBucket. If a query uses sequential scan and a data node becomes unavailable, the query might return an error, even if read from replica is enabled for the request.

    The node-level use-replica setting specifies the default for this property for a single node. The request-level parameter usually overrides the node-level setting. However, when the node-level setting is off, the request-level parameter cannot enable the property.

    In addition, the cluster-level queryUseReplica setting specifies the default for this property for the whole cluster. When you change the cluster-level setting, the node-level setting is overwritten for all nodes in the cluster.

    Values: "off", "on", "unset"
    Default: "unset"
    Example: "on"

    String

    <$identifier>
    additional
    property

    Supplies the value for a named parameter in the statement. Applicable if the statement or prepared statement contains 1 or more named parameters.

    The name of this property consists of two parts:

    1. The $ character or the @ character.
    2. An identifier that specifies the name of the parameter. This starts with an optional underscore (_), followed by an alpha character, followed by one or more alphanumeric characters, and ends with an optional underscore (_).

    If the named parameter contains sensitive information, start and end the name of the parameter (after the initial $ or @) with an underscore (_). This masks the parameter value in the active requests catalog, the completed requests catalog, the response controls section, the cbq shell file history, and the query logs. When masked, a string parameter value is replaced by asterisks (*); other parameter values are replaced by null. Parameter masking is available in clusters running Couchbase Server 7.6.8 and later.

    The value of the named parameter can be any JSON value.

    Refer to Named Parameters and Positional Parameters for details.

    Nullable: yes
    Example: LAX

    Any Type

    Credentials

    Property Schema

    user
    optional

    An identity for authentication. Note that bucket names may be prefixed with local:, and admin names may be prefixed with admin:.

    Example: "local:bucket-name"

    String

    pass
    optional

    A password for authentication.

    Example: "password"

    String

    Transactional Scan Consistency

    If the request contains a BEGIN TRANSACTION statement, or a DML statement with the tximplicit parameter set to true, then the scan_consistency parameter sets the transactional scan consistency. If you specify a transactional scan consistency of request_plus, statement_plus, or at_plus, or if you specify no transactional scan consistency, the transactional scan consistency is set to request_plus; otherwise, the transactional scan consistency is set as specified.

    Table 9. Transactional scan consistency
    Scan consistency at start of transaction Transactional scan consistency

    Not set

    request_plus

    not_bounded

    not_bounded

    request_plus
    statement_plus
    at_plus

    request_plus

    Any DML statements within the transaction that have no scan consistency set will inherit from the transactional scan consistency. Individual DML statements within the transaction may override the transactional scan consistency. If you specify a scan consistency of not_bounded for a statement within the transaction, the scan consistency for the statement is set as specified. When you specify a scan consistency of request_plus, statement_plus, or at_plus for a statement within the transaction, the scan consistency for the statement is set to request_plus.

    However, request_plus consistency is not supported for statements using a full-text index. If any statement within the transaction uses a full-text index, by means of the SEARCH function or the Flex Index feature, the scan consistency is set to not_bounded for the duration of the Full-Text Search.

    Table 10. Overriding the transactional scan consistency
    Scan consistency for statement within transaction Inherited scan consistency

    Not set

    Transactional scan consistency
    (not_bounded for Full-Text Search)

    not_bounded

    not_bounded

    request_plus
    statement_plus
    at_plus

    request_plus
    (not_bounded for Full-Text Search)

    Named Parameters and Positional Parameters

    You can add placeholder parameters to a statement, so that you can safely supply variable values when you run the statement. A placeholder parameter may be a named parameter or a positional parameter.

    • To add a named parameter to a query, enter a dollar sign $ or an at sign @ followed by the parameter name.

    • To add a positional parameter to a query, enter a dollar sign $ or an at sign @ followed by the number of the parameter, or enter a question mark ?.

    To run a query containing placeholder parameters, you must supply values for the parameters.

    • You can use additional request-level parameters to supply the values for named parameters. The name of this property is a dollar sign $ or an at sign @ followed by the parameter name.

    • The args request-level parameter enables you to supply a list of values for positional parameters.

    You can supply the values for placeholder parameters using any of the methods used to specify request-level parameters.

    Examples

    To try the examples in this section, set the query context to the inventory scope in the travel sample dataset. For more information, see Query Context.

    In the REST API examples:

    • $BASE_URL is the protocol, host, and port — for example, http://localhost:8093.

    • $USER is the user name.

    • $PASSWORD is the password.

    Example 1. Named Parameters

    • Web Console

    • Command Line

    • REST API

    The following query uses named parameter placeholders. The parameter values are supplied using the Run-Time Preferences window.

    Named Parameters

    name

    $country

    value

    "France"

    name

    $altitude

    value

    500

    SELECT COUNT(*) FROM airport
    WHERE country = $country AND geo.alt > @altitude;

    The named parameters and named parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    The following query uses named parameter placeholders. The parameter values are supplied using the cbq shell.

    \SET -@country "France";
    \SET -$altitude 500;
    
    SELECT COUNT(*) FROM airport
    WHERE country = $country AND geo.alt > @altitude;

    The named parameters and named parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    The following query uses named parameter placeholders. The parameter values are supplied using the Query Service REST API.

    curl -v $BASE_URL/query/service \
         -d 'statement=SELECT COUNT(*) FROM airport
                       WHERE country = $country AND geo.alt > @altitude
           & query_context=travel-sample.inventory
           & $country="France" & $altitude=500' \
         -u $USER:$PASSWORD

    The named parameters and named parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    Example 2. Numbered Positional Parameters

    • Web Console

    • Command Line

    • REST API

    The following query uses numbered positional parameter placeholders. The parameter values are supplied using the Run-Time Preferences window.

    Positional Parameters

    $1

    "France"

    $2

    500

    SELECT COUNT(*) FROM airport
    WHERE country = $1 AND geo.alt > @2;

    In this case, the first positional parameter value is used for the placeholder numbered $1, the second positional parameter value is used for the placeholder numbered @2, and so on.

    The numbered positional parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    The following query uses numbered positional parameter placeholders. The parameter values are supplied using the cbq shell.

    \SET -args ["France", 500];
    
    SELECT COUNT(*) FROM airport
    WHERE country = $1 AND geo.alt > @2;

    In this case, the first positional parameter value is used for the placeholder numbered $1, the second positional parameter value is used for the placeholder numbered @2, and so on.

    The numbered positional parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    The following query uses numbered positional parameter placeholders. The parameter values are supplied using the Query Service REST API.

    curl -v $BASE_URL/query/service \
         -d 'statement=SELECT COUNT(*) FROM airport
                       WHERE country = $1 AND geo.alt > @2
           & query_context=travel-sample.inventory
           & args=["France", 500]' \
         -u $USER:$PASSWORD

    In this case, the first positional parameter value is used for the placeholder numbered $1, the second positional parameter value is used for the placeholder numbered @2, and so on.

    The numbered positional parameter placeholders in this example use a mixture of @ and $ symbol prefixes. You can use either of these symbols as preferred.

    Example 3. Unnumbered Positional Parameters

    • Web Console

    • Command Line

    • REST API

    The following query uses unnumbered positional parameter placeholders. The parameter values are supplied using the Run-Time Preferences window.

    Positional Parameters

    $1

    "France"

    $2

    500

    SELECT COUNT(*) FROM airport
    WHERE country = ? AND geo.alt > ?;

    In this case, the first positional parameter value is used for the first ? placeholder, the second positional parameter value is used for the second ? placeholder, and so on.

    The following query uses unnumbered positional parameter placeholders. The parameter values are supplied using the cbq shell.

    \SET -args ["France", 500];
    
    SELECT COUNT(*) FROM airport
    WHERE country = ? AND geo.alt > ?;

    In this case, the first positional parameter value is used for the first ? placeholder, the second positional parameter value is used for the second ? placeholder, and so on.

    The following query uses unnumbered positional parameter placeholders. The parameter values are supplied using the Query Service REST API.

    curl -v $BASE_URL/query/service \
         -d 'statement=SELECT COUNT(*) FROM airport
                       WHERE country = ? AND geo.alt > ?
           & query_context=travel-sample.inventory
           & args=["France", 500]' \
         -u $USER:$PASSWORD

    In this case, the first positional parameter value is used for the first ? placeholder, the second positional parameter value is used for the second ? placeholder, and so on.

    For more information and examples, including examples using SDKs, see the Prepare Statements for Reuse guide.