Cross workspace queries
The API allows you to query across multiple workspaces. There are two ways to execute these queries: implicit and explicit. The implicit method performs an automatic union over data in the requested workspace, while the explicit method allows more precision and control over how to access data from each workspace.
The maximum number of resources in any cross-resource query is limited to 10.
Resource identifiers
For either implicit or explicit cross-workspace queries, you need to specify the resources you will be accessing. There are four types of identifiers:
- Name - human-readable string <workspaceName> of the OMS workspace
- Qualified Name - string with format <subscriptionName>/<resourceGroup>/<workspaceName>
- Workspace ID - GUID string
- Azure Resource ID - string with format /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/ microsoft.operationalinsights/workspaces/<workspaceName>
Note
We strongly recommend identifying a workspace by its unique Workspace ID or Azure Resource ID because they remove ambiguity and are more performant.
Implicit cross workspace queries
For implicit syntax, specify the workspaces that you want to include in your query scope. The API performs a single query over each application provided in your list. The syntax for a cross-workspace POST is:
Example:
POST https://api.loganalytics.azure.com/v1/workspaces/00000000-0000-0000-0000-000000000000/query
Authorization: Bearer <user token>
Content-Type: application/json
{
"query": "union * | where TimeGenerated > ago(1d) | summarize count() by Type, TenantId",
"workspaces": ["AIFabrikamDemo1", "AIFabrikamDemo2"]
}
The same request as a GET (line breaks for readability of query parameters):
GET https://api.loganalytics.azure.com/v1/workspaces/00000000-0000-0000-0000-000000000000/query?query=union+*+%7C+where+TimeGenerated+%3E+ago(1d)+%7C+summarize+count()+by+Type%2C+TenantId&workspaces=AIFabrikamDemo1%2CAIFabrikamDemo2
Authorization: Bearer <user token>
Content-Type: application/json
This query would run over AIFabrikamDemo1, AIFabrikamDemo2, and the workspace represented by the GUID 00000000-0000-0000-0000-000000000000, returning the union of the results. In the GET version, the workspaces query parameters is a comma-separated list of resources to query.
Explicit cross workspace queries
In some cases, you might want the query to operate over a more targeted subset of the data in the workspaces of interest, combining data from multiple workspaces. In these cases, explicitly mention a workspace and table in the query, similar to making cross-cluster or cross-database queries or joins between tables.
The syntax to reference another application is: workspace('identifier').table.
Example:
POST https://api.loganalytics.azure.com/v1/workspaces/00000000-0000-0000-0000-000000000000/query
Content-Type: application/json
Authorization: Bearer <user token>
{
"query": "union (AzureActivity | where timestamp > ago(1d)), (workspaces('00000000-0000-0000-0000-000000000000').AzureActivity | where timestamp> ago(1d))"
}
You can also URL encode this query and make it a GET request. In this case, there is no query parameter for other workspaces since the workspaces will get referenced from inside the query.
Throttling
For the purposes of rate limiting, one cross-resource query counts as one API query, regardless of the number of resources in the query.