unnest
Use unnest
to flatten a list taken as input to produce
multiple records with a single record for each element in the list. Based on
the number of items a field contains, this command discards the current
record and generates new records. Each record includes the
unnested_field
, which represents an item. All other fields
come from the original record.
The input for unnest
is LIST
, which comes from
the jsonParse
function. For more information, see Structure types. Any other types, such as MAP
,
String
and numbers
, are treated as a list with
one item in unnest
.
Command structure
The following example describes the format of this command.
unnest field into unnested_field
Example query
The following example parses a JSON object string and expands a list of field events.
fields jsonParse(@message) as json_message | unnest json_message.events into event | display event.name
The log event for this example query could be a JSON string as follows:
{ "events": [ { "name": "exception" }, { "name": "user action" } ] }
In this case, the sample query produces two records in the query result,
one with event.name
as exception
and another with
event.name
as user action
Example query
The following example flattens a list and then filters out items.
fields jsonParse(@message) as js | unnest js.accounts into account | filter account.type = "internal"
Example query
The following example flattens a list for aggregation.
fields jsonParse(trimmedData) as accounts | unnest accounts into account | stats sum(account.droppedSpans) as n by account.accountId | sort n desc | limit 10