diff --git a/CHANGELOG.md b/CHANGELOG.md index 44f67816624..7f69a62f5a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * [CHANGE] Update Go to 1.22.4 [#3757](https://github.com/grafana/tempo/pull/3757) [#3793](https://github.com/grafana/tempo/pull/3793) (@joe-elliott, @mapno) * [FEATURE] TraceQL support for link scope and link:traceID and link:spanID [#3741](https://github.com/grafana/tempo/pull/3741) (@stoewer) * [FEATURE] TraceQL support for event scope and event:name intrinsic [#3708](https://github.com/grafana/tempo/pull/3708) (@stoewer) +* [FEATURE] TraecQL support for event attributes [#3708](https://github.com/grafana/tempo/pull/3748) (@ie-pham) * [FEATURE] Flush and query RF1 blocks for TraceQL metric queries [#3628](https://github.com/grafana/tempo/pull/3628) [#3691](https://github.com/grafana/tempo/pull/3691) [#3723](https://github.com/grafana/tempo/pull/3723) (@mapno) * [FEATURE] Add new compare() metrics function [#3695](https://github.com/grafana/tempo/pull/3695) (@mdisibio) * [ENHANCEMENT] Tag value lookup use protobuf internally for improved latency [#3731](https://github.com/grafana/tempo/pull/3731) (@mdisibio) diff --git a/tempodb/encoding/vparquet4/block_traceql.go b/tempodb/encoding/vparquet4/block_traceql.go index f5ec0cda927..a69a5111cc0 100644 --- a/tempodb/encoding/vparquet4/block_traceql.go +++ b/tempodb/encoding/vparquet4/block_traceql.go @@ -1369,27 +1369,38 @@ func (i *mergeSpansetIterator) Close() { // // Diagram: // -// Span attribute iterator: key ----------------------------- -// ... -------------------------- | -// Span attribute iterator: valueN ----------------------| | | -// | | | -// V V V -// ------------- -// | attribute | -// | collector | -// ------------- -// | -// | List of attributes -// | -// | -// Span column iterator 1 --------------------------- | -// ... ------------------------ | | -// Span column iterator N --------------------- | | | -// (ex: name, status) | | | | -// V V V V -// ------------------ -// | span collector | -// ------------------ +// Event attribute iterator: key -------------------------------------------- +// | | +// Event attribute iterator: valunN --------------------------------------- | | +// | | | +// V V V +// ------------ +// Event column iterator 1 --------------------------------------------- | attribute | +// (ex: name, time since) | | collector | +// | ------------ +// | | +// V V +// Span attribute iterator: key ------------------------- ------------ +// ... ----------------------- | | event | +// Span attribute iterator: valueN -------------------| | | | collector | +// | | | ------------- +// V V V | +// ------------- | +// | attribute | | +// | collector | | +// ------------- | +// | | +// | List | +// | of span | +// | attributes | +// Span column iterator 1 --------------------------- | | +// ... ------------------------ | | | +// Span column iterator N --------------------- | | | | +// (ex: name, status) | | | | | +// V V V V V +// ------------------------------------------------- +// | span collector | +// ------------------------------------------------- // | // | List of Spans // Resource attribute | @@ -1534,7 +1545,7 @@ func createAllIterator(ctx context.Context, primaryIter parquetquery.Iterator, c innerIterators = append(innerIterators, primaryIter) } - eventIter, err := createEventIterator(makeIter, primaryIter, catConditions.event, allConditions) + eventIter, err := createEventIterator(makeIter, primaryIter, catConditions.event, allConditions, selectAll) if err != nil { return nil, fmt.Errorf("creating event iterator: %w", err) } @@ -1563,7 +1574,7 @@ func createAllIterator(ctx context.Context, primaryIter parquetquery.Iterator, c return createTraceIterator(makeIter, resourceIter, catConditions.trace, start, end, shardID, shardCount, allConditions, selectAll) } -func createEventIterator(makeIter makeIterFn, primaryIter parquetquery.Iterator, conditions []traceql.Condition, allConditions bool) (parquetquery.Iterator, error) { +func createEventIterator(makeIter makeIterFn, primaryIter parquetquery.Iterator, conditions []traceql.Condition, allConditions bool, selectAll bool) (parquetquery.Iterator, error) { if len(conditions) == 0 { return nil, nil } @@ -1585,7 +1596,7 @@ func createEventIterator(makeIter makeIterFn, primaryIter parquetquery.Iterator, } attrIter, err := createAttributeIterator(makeIter, genericConditions, DefinitionLevelResourceSpansILSSpanEventAttrs, - columnPathEventAttrKey, columnPathEventAttrString, columnPathEventAttrInt, columnPathEventAttrDouble, columnPathEventAttrBool, allConditions) + columnPathEventAttrKey, columnPathEventAttrString, columnPathEventAttrInt, columnPathEventAttrDouble, columnPathEventAttrBool, allConditions, selectAll) if err != nil { return nil, fmt.Errorf("creating span attribute iterator: %w", err) }