blob: 84deaab354c5d0586a241e397990e67ec18cd9b5 [file] [log] [blame] [view] [edit]
# PerfettoSQL Built-ins
These are functions built into C++ which reduce the amount of boilerplate which
needs to be written in SQL.
## Profile Functions
### STACK_FROM_STACK_PROFILE_FRAME
`STACK_FROM_STACK_PROFILE_FRAME(frame_id)`
#### Description
Creates a stack with just the frame referenced by `frame_id` (reference to the
[stack_profile_frame](sql-tables.autogen#stack_profile_frame) table)
#### Return Type
`BYTES`
#### Arguments
Argument | Type | Description
-------- | ---- | -----------
frame_id | StackProfileFrameTable::Id | reference to the [stack_profile_frame](sql-tables.autogen#stack_profile_frame) table
### STACK_FROM_STACK_PROFILE_CALLSITE
`STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)`
#### Description
Creates a stack by taking a `callsite_id` (reference to the
[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table) and
generating a list of frames (by walking the
[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table)
#### Return Type
`BYTES`
#### Arguments
Argument | Type | Description
-------- | ---- | -----------
callsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table
### CAT_STACKS
`CAT_STACKS(([root [[,level_1 [, ...]], leaf]])`
#### Description
Creates a Stack by concatenating other Stacks. Also accepts STRING values for
which it generates a fake Frame. Null values are just ignored.
#### Return Type
`BYTES`
#### Arguments
Argument | Type | Description
-------- | ---- | -----------
root | BYTES or STRING | Stack or STRING for which a fake Frame is generated
... | BYTES or STRING | Stack or STRING for which a fake Frame is generated
leaf | BYTES or STRING | Stack or STRING for which a fake Frame is generated
### EXPERIMENTAL_PROFILE
`EXPERIMENTAL_PROFILE(stack [,sample_type, sample_units, sample_value]*)`
#### Description
Aggregation function that generates a profile in
[pprof](https://github.com/google/pprof) format from the given samples.
#### Return Type
`BYTES` ([pprof](https://github.com/google/pprof) data)
#### Arguments
Argument | Type | Description
-------- | ---- | -----------
stack | BYTES | Stack or string for which a fake Frame is generated
sample_type | STRING | Type of the sample value (e.g. size, time)
sample_units | STRING | Units of the sample value (e.g. bytes, count)
sample_value | LONG | Value for the sample
Multiple samples can be specified.
If only the `stack` argument is present, a `"samples"`, `"count"`, and `1` are
used as defaults for `sample_type`, `sample_units`, and `sample_value`
respectively.
#### Example
CPU profile
```sql
SELECT
perf_session_id,
EXPERIMENTAL_PROFILE(
STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id),
'samples',
'count',
1) AS profile
FROM perf_sample
GROUP BY perf_session_id
```
Heap profile
```sql
SELECT
EXPERIMENTAL_PROFILE(
CAT_STACKS(heap_name, STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)),
'count',
'count',
count,
'size',
'bytes',
size) AS profile
FROM heap_profile_allocation
WHERE size >= 0 AND count >= 0
```