ExecuteCosmosSqlQuery Function
Executes a query against data in JSON columns
Parameters
Parameters allow for data to be passed to the function.
| Name | Type | Nullable | Unicode | Description |
|---|---|---|---|---|
|
QueryText
|
Edm.String | False | False | Cosmos sql query. |
|
EntityLogicalName
|
Edm.String | False | False | LogicalName of the elastic table |
|
QueryParameters
|
ParameterCollection | True | True | Values for any parameters that are specified in the QueryText parameter. |
|
PageSize
|
Edm.Int64 | True | True | Number of records returned in a single page. |
|
PagingCookie
|
Edm.String | True | False | Paging cookie to be used. |
|
PartitionId
|
Edm.String | True | False | Partitionid to set the scope of the query. |
Return type
| Type | Nullable | Description |
|---|---|---|
| crmbaseentity | False | The ExecuteCosmosSqlQuery function returns the following value. |
Remarks
Use Structured Query Language (SQL) as a JSON query language to compose the query used in the QueryText parameter. More information: Azure Cosmos DB / NoSQL / Getting started with queries
When your QueryText includes named parameter references using '@', they must be included in the QueryParameters property as a parameter collection. A ParameterCollection Complex Type is a collection of Keys and Values. The values are defined using Object Complex Type so that you can specify the type of parameter using .NET names, such as System.String or System.Int32.
Example
Request
GET [Organization Uri]/api/data/v9.2/ExecuteCosmosSqlQuery(QueryText=@p1,EntityLogicalName=@p2,QueryParameters=@p3,PageSize=@p4,PartitionId=@p5)?@p1='select c.props.contoso_deviceid as deviceId, c.props.contoso_timestamp as timestamp, c.props.contoso_energyconsumption.power as power from c where c.props.contoso_sensortype=@sensortype and c.props.contoso_energyconsumption.power > @power'
&@p2='contoso_sensordata'
&@p3={"Keys":["@sensortype","@power"],"Values":[{"Type":"System.String","Value":"Humidity"},{"Type":"System.Int32","Value":"5"}]}
&@p4=50
&@p5='Device-ABC-1234'
MSCRM.SessionToken: 207:8#142792107#7=-1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#expando/$entity",
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"PagingCookie": "W3sidG9rZW4iOiIrUklEOn5DVm9OQUpJaWRuTjBJajRBQUFBd0R3PT0jUlQ6MSNUUkM6NTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBWFFpUGdBQUFEQVBveUkrQUFBQU1BOD0iLCJyYW5nZSI6eyJtaW4iOiIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIm1heCI6IjE0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19XQ==",
"HasMore": true,
"Result@odata.type": "#Collection(Microsoft.Dynamics.CRM.expando)",
"Result": [
{
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"deviceId": "Device-ABC-1234",
"power": 6
},
[ 49 records truncated for brevity]
]
}
The return type is a crmbaseentity, but actually it represents an expando.
This entity has the following attributes:
| Name | Type | Description |
|---|---|---|
PagingCookie |
String | A value to set for subsequent requests when there are more results. |
HasMore |
Bool | Whether there are more records in the results. |
Result |
String | JSON with values with the results. |
Despite returning expando, because the return value isn't dynamic, it is a closed type. You will need to parse the response.
When you have specified a PageSize that is less than the total number of results matching the criteria of your query, you can send additional requests with the same query by passing the PagingCookie value in subsequent requests. For example:
Request
GET [Organization Uri]/api/data/v9.2/ExecuteCosmosSqlQuery(QueryText=@p1,EntityLogicalName=@p2,QueryParameters=@p3,PageSize=@p4,PagingCookie=@p5,PartitionId=@p6)?@p1='select c.props.contoso_deviceid as deviceId, c.props.contoso_timestamp as timestamp, c.props.contoso_energyconsumption.power as power from c where c.props.contoso_sensortype=@sensortype and c.props.contoso_energyconsumption.power > @power'
&@p2='contoso_sensordata'
&@p3={"Keys":["@sensortype","@power"],"Values":[{"Type":"System.String","Value":"Humidity"},{"Type":"System.Int32","Value":"5"}]}
&@p4=50
@p5='W3sidG9rZW4iOiIrUklEOn5DVm9OQUpJaWRuTjBJajRBQUFBd0R3PT0jUlQ6MSNUUkM6NTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBWFFpUGdBQUFEQVBveUkrQUFBQU1BOD0iLCJyYW5nZSI6eyJtaW4iOiIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIm1heCI6IjE0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19XQ=='
&@p6='Device-ABC-1234'
MSCRM.SessionToken: 207:8#142792107#7=-1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
You can continue to get paged results until the HasMore property returns false.
More information: