These are functions built into C++ which reduce the amount of boilerplate which needs to be written in SQL.
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 table)
BYTES
#### Arguments
Argument | Type | Description |
---|---|---|
frame_id | StackProfileFrameTable::Id | reference to the stack_profile_frame table |
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)
BYTES
#### Arguments
Argument | Type | Description |
---|---|---|
callsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table |
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.
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(stack [,sample_type, sample_units, sample_value]*)
#### Description
Aggregation function that generates a profile in pprof format from the given samples.
BYTES
(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
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
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