# LogicTest: local

# Generates the explain plans the sql_activity_update_job uses to update
# transaction_activity and statement_activity tables

statement ok
set enable_zigzag_join = false

statement ok
INSERT INTO system.users VALUES ('node', NULL, true, 3)

statement ok
GRANT node TO root

statement ok
SELECT * FROM crdb_internal.transaction_activity

statement ok
SELECT * FROM crdb_internal.statement_activity

# Pretend we have max number of rows in the transaction activity table
statement ok
ALTER TABLE system.transaction_activity INJECT STATISTICS '[
  {
    "columns": ["aggregated_ts"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 72
  },
  {
    "columns": ["aggregated_ts","fingerprint_id"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","app_name"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  }
]'

# Pretend we have max number of rows in the statement activity table
statement ok
ALTER TABLE system.statement_activity INJECT STATISTICS '[
  {
    "columns": ["aggregated_ts"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 72
  },
  {
    "columns": ["aggregated_ts","fingerprint_id"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id","plan_hash"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id","plan_hash","app_name"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 200000,
    "distinct_count": 200000
  }
]'

# Pretend we have max number of rows in the transaction_statistics table
statement ok
ALTER TABLE system.transaction_statistics INJECT STATISTICS '[
  {
    "columns": ["aggregated_ts"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 12
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","app_name","node_id","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","app_name","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 30000
  }
]'

# Pretend we have max number of rows in the statement_statistics table
statement ok
ALTER TABLE system.statement_statistics INJECT STATISTICS '[
  {
    "columns": ["aggregated_ts"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 12
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id","plan_hash","app_name","node_id","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id","plan_hash","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","transaction_fingerprint_id","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["aggregated_ts","fingerprint_id","crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  },
  {
    "columns": ["crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8"],
    "created_at": "2023-01-01 1:00:00.00000+00:00",
    "row_count": 1000000,
    "distinct_count": 1000000
  }
]'

# Upsert all transaction_activity
query T retry
EXPLAIN (VERBOSE)
UPSERT INTO system.public.transaction_activity
(aggregated_ts, fingerprint_id, app_name, agg_interval, metadata,
 statistics, query, execution_count, execution_total_seconds,
 execution_total_cluster_seconds, contention_time_avg_seconds,
 cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
    (SELECT max_aggregated_ts,
            fingerprint_id,
            app_name,
            max_agg_interval,
            metadata,
            statistics,
            '' AS query,
            (statistics->'statistics'->>'cnt')::int,
            ((statistics->'statistics'->>'cnt')::float)*((statistics->'statistics'->'svcLat'->>'mean')::float),
            100 AS execution_total_cluster_seconds,
            COALESCE((statistics->'execution_statistics'->'contentionTime'->>'mean')::float,0),
            COALESCE((statistics->'execution_statistics'->'cpuSQLNanos'->>'mean')::float,0),
            (statistics->'statistics'->'svcLat'->>'mean')::float,
            0 as service_latency_p99_seconds
     FROM (SELECT
                  max(aggregated_ts) AS max_aggregated_ts,
                  app_name,
                  fingerprint_id,
                  max(agg_interval) as max_agg_interval,
                  max(metadata) as metadata,
                  merge_transaction_stats(statistics) AS statistics
           FROM system.public.transaction_statistics
           WHERE aggregated_ts = '2023-04-10 16:00:00.000000 +00:00'
             and app_name not like '$ internal%'
           GROUP BY app_name,
                    fingerprint_id));
----
distribution: local
vectorized: true
·
• upsert
│ columns: ()
│ estimated row count: 0 (missing stats)
│ into: transaction_activity(aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
│ auto commit
│ arbiter indexes: primary
│
└── • project
    │ columns: (max, fingerprint_id, app_name, max, max, merge_transaction_stats, query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, service_latency_p99_seconds, aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds, max, max, merge_transaction_stats, query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, service_latency_p99_seconds, aggregated_ts)
    │
    └── • lookup join (left outer)
        │ columns: (query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, service_latency_p99_seconds, fingerprint_id, app_name, max, max, max, merge_transaction_stats, aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
        │ estimated row count: 27,778
        │ table: transaction_activity@primary
        │ equality: (max, fingerprint_id, app_name) = (aggregated_ts, fingerprint_id, app_name)
        │ equality cols are key
        │
        └── • render
            │ columns: (query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, service_latency_p99_seconds, fingerprint_id, app_name, max, max, max, merge_transaction_stats)
            │ render query: ''
            │ render int8: ((merge_transaction_stats->'statistics')->>'cnt')::INT8
            │ render ?column?: ((merge_transaction_stats->'statistics')->>'cnt')::FLOAT8 * (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
            │ render execution_total_cluster_seconds: 100.0
            │ render coalesce: COALESCE((((merge_transaction_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
            │ render coalesce: COALESCE((((merge_transaction_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
            │ render float8: (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
            │ render service_latency_p99_seconds: 0.0
            │ render fingerprint_id: fingerprint_id
            │ render app_name: app_name
            │ render max: max
            │ render max: max
            │ render max: max
            │ render merge_transaction_stats: merge_transaction_stats
            │
            └── • group (hash)
                │ columns: (fingerprint_id, app_name, max, max, max, merge_transaction_stats)
                │ estimated row count: 27,778
                │ aggregate 0: max(aggregated_ts)
                │ aggregate 1: max(agg_interval)
                │ aggregate 2: max(metadata)
                │ aggregate 3: merge_transaction_stats(statistics)
                │ group by: fingerprint_id, app_name
                │
                └── • filter
                    │ columns: (aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics)
                    │ estimated row count: 27,778
                    │ filter: app_name NOT LIKE '$ internal%'
                    │
                    └── • scan
                          columns: (aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics)
                          estimated row count: 83,333 (8.3% of the table; stats collected <hidden> ago)
                          table: transaction_statistics@primary
                          spans: /0/2023-04-10T16:00:00Z-/0/2023-04-10T16:00:00.000000001Z /1/2023-04-10T16:00:00Z-/1/2023-04-10T16:00:00.000000001Z /2/2023-04-10T16:00:00Z-/2/2023-04-10T16:00:00.000000001Z /3/2023-04-10T16:00:00Z-/3/2023-04-10T16:00:00.000000001Z /4/2023-04-10T16:00:00Z-/4/2023-04-10T16:00:00.000000001Z /5/2023-04-10T16:00:00Z-/5/2023-04-10T16:00:00.000000001Z /6/2023-04-10T16:00:00Z-/6/2023-04-10T16:00:00.000000001Z /7/2023-04-10T16:00:00Z-/7/2023-04-10T16:00:00.000000001Z


# Upsert all statement_activity
query T retry
EXPLAIN (VERBOSE)
UPSERT INTO system.public.statement_activity (aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name,
                                       agg_interval, metadata, statistics, plan, index_recommendations, execution_count,
                                       execution_total_seconds, execution_total_cluster_seconds,
                                       contention_time_avg_seconds,
                                       cpu_sql_avg_nanos,
                                       service_latency_avg_seconds, service_latency_p99_seconds)
    (SELECT aggregated_ts,
            fingerprint_id,
            '0x0000000000000000'::bytes,
            plan_hash,
            app_name,
            max_agg_interval,
            merged_metadata,
            merged_stats,
            max_plan,
            jsonb_array_to_string_array(merged_stats -> 'index_recommendations') as idx_rec,
            (merged_stats -> 'statistics' ->> 'cnt')::int,
            ((merged_stats -> 'statistics' ->> 'cnt')::float) *
            ((merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float),
            100 AS execution_total_cluster_seconds,
            COALESCE((merged_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float, 0),
            COALESCE((merged_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float, 0),
            (merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float,
            COALESCE((merged_stats -> 'statistics' -> 'latencyInfo' ->> 'p99')::float, 0)
     FROM (SELECT max(aggregated_ts)                                           AS aggregated_ts,
                  fingerprint_id,
                  plan_hash,
                  app_name,
                  max(agg_interval) as max_agg_interval,
                  merge_stats_metadata(metadata)    AS merged_metadata,
                  merge_statement_stats(statistics) AS merged_stats,
                  max(plan) AS max_plan
           FROM system.public.statement_statistics
           WHERE aggregated_ts = '2023-04-10 16:00:00.000000 +00:00'
             and app_name not like '$ internal%'
           GROUP BY app_name,
                    fingerprint_id,
                    plan_hash));
----
distribution: local
vectorized: true
·
• upsert
│ columns: ()
│ estimated row count: 0 (missing stats)
│ into: statement_activity(aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
│ auto commit
│ arbiter indexes: primary
│
└── • project
    │ columns: (max, fingerprint_id, bytea, plan_hash, app_name, max, merge_stats_metadata, merge_statement_stats, max, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds, max, merge_stats_metadata, merge_statement_stats, max, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts)
    │
    └── • project
        │ columns: (fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, max, bytea, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
        │
        └── • lookup join (left outer)
            │ columns: ("lookup_join_const_col_@62", bytea, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, max, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
            │ estimated row count: 27,778
            │ table: statement_activity@primary
            │ equality: (max, fingerprint_id, lookup_join_const_col_@62, plan_hash, app_name) = (aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name)
            │ equality cols are key
            │
            └── • render
                │ columns: ("lookup_join_const_col_@62", bytea, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, max)
                │ render lookup_join_const_col_@62: '\x307830303030303030303030303030303030'
                │ render bytea: '\x307830303030303030303030303030303030'
                │ render idx_rec: jsonb_array_to_string_array(merge_statement_stats->'index_recommendations')
                │ render int8: ((merge_statement_stats->'statistics')->>'cnt')::INT8
                │ render ?column?: ((merge_statement_stats->'statistics')->>'cnt')::FLOAT8 * (((merge_statement_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                │ render execution_total_cluster_seconds: 100.0
                │ render coalesce: COALESCE((((merge_statement_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
                │ render coalesce: COALESCE((((merge_statement_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
                │ render float8: (((merge_statement_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                │ render coalesce: COALESCE((((merge_statement_stats->'statistics')->'latencyInfo')->>'p99')::FLOAT8, 0.0)
                │ render fingerprint_id: fingerprint_id
                │ render plan_hash: plan_hash
                │ render app_name: app_name
                │ render max: max
                │ render max: max
                │ render merge_stats_metadata: merge_stats_metadata
                │ render merge_statement_stats: merge_statement_stats
                │ render max: max
                │
                └── • group (hash)
                    │ columns: (fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, max)
                    │ estimated row count: 27,778
                    │ aggregate 0: max(aggregated_ts)
                    │ aggregate 1: max(agg_interval)
                    │ aggregate 2: merge_stats_metadata(metadata)
                    │ aggregate 3: merge_statement_stats(statistics)
                    │ aggregate 4: max(plan)
                    │ group by: fingerprint_id, plan_hash, app_name
                    │
                    └── • union all
                        │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │ estimated row count: 0
                        │
                        ├── • union all
                        │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │ estimated row count: 0
                        │   │
                        │   ├── • union all
                        │   │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │   │ estimated row count: 0
                        │   │   │
                        │   │   ├── • filter
                        │   │   │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │   │   │ estimated row count: 0
                        │   │   │   │ filter: app_name NOT LIKE '$ internal%'
                        │   │   │   │
                        │   │   │   └── • scan
                        │   │   │         columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │   │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                        │   │   │         table: statement_statistics@primary
                        │   │   │         spans: /0/2023-04-10T16:00:00Z-/0/2023-04-10T16:00:00.000000001Z
                        │   │   │
                        │   │   └── • filter
                        │   │       │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │       │ estimated row count: 0
                        │   │       │ filter: app_name NOT LIKE '$ internal%'
                        │   │       │
                        │   │       └── • scan
                        │   │             columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │   │             estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                        │   │             table: statement_statistics@primary
                        │   │             spans: /1/2023-04-10T16:00:00Z-/1/2023-04-10T16:00:00.000000001Z
                        │   │
                        │   └── • union all
                        │       │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │       │ estimated row count: 0
                        │       │
                        │       ├── • filter
                        │       │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │       │   │ estimated row count: 0
                        │       │   │ filter: app_name NOT LIKE '$ internal%'
                        │       │   │
                        │       │   └── • scan
                        │       │         columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │       │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                        │       │         table: statement_statistics@primary
                        │       │         spans: /2/2023-04-10T16:00:00Z-/2/2023-04-10T16:00:00.000000001Z
                        │       │
                        │       └── • filter
                        │           │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │           │ estimated row count: 0
                        │           │ filter: app_name NOT LIKE '$ internal%'
                        │           │
                        │           └── • scan
                        │                 columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │                 estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                        │                 table: statement_statistics@primary
                        │                 spans: /3/2023-04-10T16:00:00Z-/3/2023-04-10T16:00:00.000000001Z
                        │
                        └── • union all
                            │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │ estimated row count: 0
                            │
                            ├── • union all
                            │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │   │ estimated row count: 0
                            │   │
                            │   ├── • filter
                            │   │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │   │   │ estimated row count: 0
                            │   │   │ filter: app_name NOT LIKE '$ internal%'
                            │   │   │
                            │   │   └── • scan
                            │   │         columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │   │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                            │   │         table: statement_statistics@primary
                            │   │         spans: /4/2023-04-10T16:00:00Z-/4/2023-04-10T16:00:00.000000001Z
                            │   │
                            │   └── • filter
                            │       │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │       │ estimated row count: 0
                            │       │ filter: app_name NOT LIKE '$ internal%'
                            │       │
                            │       └── • scan
                            │             columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                            │             estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                            │             table: statement_statistics@primary
                            │             spans: /5/2023-04-10T16:00:00Z-/5/2023-04-10T16:00:00.000000001Z
                            │
                            └── • union all
                                │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                                │ estimated row count: 0
                                │
                                ├── • filter
                                │   │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                                │   │ estimated row count: 0
                                │   │ filter: app_name NOT LIKE '$ internal%'
                                │   │
                                │   └── • scan
                                │         columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                                │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                │         table: statement_statistics@primary
                                │         spans: /6/2023-04-10T16:00:00Z-/6/2023-04-10T16:00:00.000000001Z
                                │
                                └── • filter
                                    │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                                    │ estimated row count: 0
                                    │ filter: app_name NOT LIKE '$ internal%'
                                    │
                                    └── • scan
                                          columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                                          estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                          table: statement_statistics@primary
                                          spans: /7/2023-04-10T16:00:00Z-/7/2023-04-10T16:00:00.000000001Z

# Upsert top 500 statement_activity including all statements in the top 500 transactions
query T retry
EXPLAIN (VERBOSE)
WITH agg_stmt_stats AS (SELECT aggregated_ts,
                               fingerprint_id,
                               app_name,
                               merge_statement_stats(statistics) AS merged_stats
                        FROM system.public.statement_statistics
                        WHERE aggregated_ts = '2023-04-10 16:00:00.000000 +00:00'
                          and app_name not like '$ internal%'
                        GROUP BY aggregated_ts,
                                 app_name,
                                 fingerprint_id),
limit_stmt_stats AS (SELECT aggregated_ts,
                                 fingerprint_id,
                                 app_name
                          FROM (SELECT aggregated_ts,
                                       fingerprint_id,
                                       app_name,
                                       merged_stats,
                                       row_number() OVER (ORDER BY (merged_stats -> 'statistics' ->> 'cnt')::int desc)                AS ePos,
                                       row_number() OVER (ORDER BY (merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float desc) AS sPos,
                                       row_number() OVER (ORDER BY
                                               ((merged_stats -> 'statistics' ->> 'cnt')::float) *
                                               ((merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float) desc)      AS tPos,
                                       row_number() OVER (ORDER BY COALESCE((merged_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float, 0) desc) AS cPos,
                                       row_number() OVER (ORDER BY COALESCE((merged_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float, 0) desc) AS uPos,
                                       row_number() OVER (ORDER BY COALESCE((merged_stats -> 'statistics' -> 'latencyInfo' ->> 'p99')::float, 0) desc) AS lPos
                                FROM agg_stmt_stats)
                          WHERE ePos < 500
                             or sPos < 500
                             or tPos < 500
                             or (cPos < 500 AND ((merged_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float > 0))
                             or (uPos < 500 AND  ((merged_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float > 0))
                             or (lPos < 500 AND ((merged_stats -> 'statistics' -> 'latencyInfo' ->> 'p99')::float > 0)))
UPSERT INTO system.public.statement_activity
(aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name,
 agg_interval, metadata, statistics, plan, index_recommendations, execution_count,
 execution_total_seconds, execution_total_cluster_seconds,
 contention_time_avg_seconds,
 cpu_sql_avg_nanos,
 service_latency_avg_seconds, service_latency_p99_seconds)(
SELECT aggregated_ts,
       fingerprint_id,
       '0x0000000000000000'::bytes as txn_fingerprint_id,
       plan_hash,
       app_name,
       max_agg_interval,
       metadata,
       merged_stats,
       max_plan,
       jsonb_array_to_string_array(merged_stats -> 'index_recommendations') as idx_rec,
       (merged_stats -> 'statistics' ->> 'cnt')::int,
       ((merged_stats -> 'statistics' ->> 'cnt')::float) *
       ((merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float),
       100 AS execution_total_cluster_seconds,
       COALESCE((merged_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float, 0),
       COALESCE((merged_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float, 0),
       (merged_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float,
       COALESCE((merged_stats -> 'statistics' -> 'latencyInfo' ->> 'p99')::float, 0)
FROM (SELECT ss.aggregated_ts AS aggregated_ts,
             ss.fingerprint_id,
             ss.plan_hash,
             ss.app_name,
             max(ss.agg_interval) AS max_agg_interval,
             max(ss.plan) AS max_plan,
             merge_stats_metadata(ss.metadata) AS metadata,
             merge_statement_stats(ss.statistics) AS merged_stats
      FROM system.statement_statistics ss
      inner join limit_stmt_stats using (aggregated_ts, fingerprint_id, app_name)
      group by aggregated_ts, fingerprint_id, plan_hash, app_name));
----
distribution: local
vectorized: true
·
• upsert
│ columns: ()
│ estimated row count: 0 (missing stats)
│ into: statement_activity(aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
│ auto commit
│ arbiter indexes: primary
│
└── • project
    │ columns: (aggregated_ts, fingerprint_id, txn_fingerprint_id, plan_hash, app_name, max, merge_stats_metadata, merge_statement_stats, max, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds, max, merge_stats_metadata, merge_statement_stats, max, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts)
    │
    └── • project
        │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, txn_fingerprint_id, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
        │
        └── • lookup join (left outer)
            │ columns: ("lookup_join_const_col_@105", txn_fingerprint_id, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, index_recommendations, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
            │ estimated row count: 3
            │ table: statement_activity@primary
            │ equality: (aggregated_ts, fingerprint_id, lookup_join_const_col_@105, plan_hash, app_name) = (aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name)
            │ equality cols are key
            │
            └── • render
                │ columns: ("lookup_join_const_col_@105", txn_fingerprint_id, idx_rec, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "coalesce", aggregated_ts, fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats)
                │ render lookup_join_const_col_@105: '\x307830303030303030303030303030303030'
                │ render txn_fingerprint_id: '\x307830303030303030303030303030303030'
                │ render idx_rec: jsonb_array_to_string_array(merge_statement_stats->'index_recommendations')
                │ render int8: ((merge_statement_stats->'statistics')->>'cnt')::INT8
                │ render ?column?: ((merge_statement_stats->'statistics')->>'cnt')::FLOAT8 * (((merge_statement_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                │ render execution_total_cluster_seconds: 100.0
                │ render coalesce: COALESCE((((merge_statement_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
                │ render coalesce: COALESCE((((merge_statement_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
                │ render float8: (((merge_statement_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                │ render coalesce: COALESCE((((merge_statement_stats->'statistics')->'latencyInfo')->>'p99')::FLOAT8, 0.0)
                │ render aggregated_ts: any_not_null
                │ render fingerprint_id: fingerprint_id
                │ render plan_hash: plan_hash
                │ render app_name: app_name
                │ render max: max
                │ render max: max
                │ render merge_stats_metadata: merge_stats_metadata
                │ render merge_statement_stats: merge_statement_stats
                │
                └── • group (hash)
                    │ columns: (fingerprint_id, plan_hash, app_name, max, max, merge_stats_metadata, merge_statement_stats, any_not_null)
                    │ estimated row count: 3
                    │ aggregate 0: max(agg_interval)
                    │ aggregate 1: max(plan)
                    │ aggregate 2: merge_stats_metadata(metadata)
                    │ aggregate 3: merge_statement_stats(statistics)
                    │ aggregate 4: any_not_null(aggregated_ts)
                    │ group by: fingerprint_id, plan_hash, app_name
                    │
                    └── • project
                        │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan)
                        │
                        └── • project
                            │ columns: (aggregated_ts, fingerprint_id, plan_hash, app_name, agg_interval, metadata, statistics, plan, aggregated_ts, fingerprint_id, app_name)
                            │
                            └── • lookup join (inner)
                                │ columns: (aggregated_ts, fingerprint_id, app_name, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, node_id, crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8, agg_interval, metadata, statistics, plan)
                                │ estimated row count: 3
                                │ table: statement_statistics@primary
                                │ equality: (crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, node_id) = (crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, node_id)
                                │ equality cols are key
                                │
                                └── • lookup join (inner)
                                    │ columns: (aggregated_ts, fingerprint_id, app_name, aggregated_ts, fingerprint_id, transaction_fingerprint_id, plan_hash, app_name, node_id, crdb_internal_aggregated_ts_app_name_fingerprint_id_node_id_plan_hash_transaction_fingerprint_id_shard_8)
                                    │ estimated row count: 3
                                    │ table: statement_statistics@fingerprint_stats_idx
                                    │ equality: (fingerprint_id) = (fingerprint_id)
                                    │ pred: (aggregated_ts = aggregated_ts) AND (app_name = app_name)
                                    │
                                    └── • render
                                        │ columns: (aggregated_ts, fingerprint_id, app_name)
                                        │ render aggregated_ts: aggregated_ts
                                        │ render fingerprint_id: fingerprint_id
                                        │ render app_name: app_name
                                        │
                                        └── • filter
                                            │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1, row_number)
                                            │ estimated row count: 25,339
                                            │ filter: (((((row_number < 500) OR (row_number < 500)) OR (row_number < 500)) OR ((row_number < 500) AND ((((merged_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8 > 0.0))) OR ((row_number < 500) AND ((((merged_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8 > 0.0))) OR ((row_number < 500) AND ((((merged_stats->'statistics')->'latencyInfo')->>'p99')::FLOAT8 > 0.0))
                                            │
                                            └── • window
                                                │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1, row_number)
                                                │ estimated row count: 27,778
                                                │ window 0: row_number() OVER (ORDER BY row_number_6_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                │
                                                └── • window
                                                    │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                    │ estimated row count: 27,778
                                                    │ window 0: row_number() OVER (ORDER BY row_number_5_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                    │
                                                    └── • window
                                                        │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                        │ estimated row count: 27,778
                                                        │ window 0: row_number() OVER (ORDER BY row_number_4_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                        │
                                                        └── • window
                                                            │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                            │ estimated row count: 27,778
                                                            │ window 0: row_number() OVER (ORDER BY row_number_3_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                            │
                                                            └── • window
                                                                │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                                │ estimated row count: 27,778
                                                                │ window 0: row_number() OVER (ORDER BY row_number_2_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                                │
                                                                └── • window
                                                                    │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                                    │ estimated row count: 27,778
                                                                    │ window 0: row_number() OVER (ORDER BY row_number_1_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                                    │
                                                                    └── • render
                                                                        │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number_6_orderby_1_1)
                                                                        │ render row_number_1_orderby_1_1: ((merged_stats->'statistics')->>'cnt')::INT8
                                                                        │ render row_number_2_orderby_1_1: (((merged_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                                                                        │ render row_number_3_orderby_1_1: ((merged_stats->'statistics')->>'cnt')::FLOAT8 * (((merged_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                                                                        │ render row_number_4_orderby_1_1: COALESCE((((merged_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
                                                                        │ render row_number_5_orderby_1_1: COALESCE((((merged_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
                                                                        │ render row_number_6_orderby_1_1: COALESCE((((merged_stats->'statistics')->'latencyInfo')->>'p99')::FLOAT8, 0.0)
                                                                        │ render aggregated_ts: aggregated_ts
                                                                        │ render fingerprint_id: fingerprint_id
                                                                        │ render app_name: app_name
                                                                        │ render merged_stats: merged_stats
                                                                        │
                                                                        └── • render
                                                                            │ columns: (aggregated_ts, fingerprint_id, app_name, merged_stats)
                                                                            │ render aggregated_ts: any_not_null
                                                                            │ render fingerprint_id: fingerprint_id
                                                                            │ render app_name: app_name
                                                                            │ render merged_stats: merge_statement_stats
                                                                            │
                                                                            └── • group (hash)
                                                                                │ columns: (fingerprint_id, app_name, merge_statement_stats, any_not_null)
                                                                                │ estimated row count: 27,778
                                                                                │ aggregate 0: merge_statement_stats(statistics)
                                                                                │ aggregate 1: any_not_null(aggregated_ts)
                                                                                │ group by: fingerprint_id, app_name
                                                                                │
                                                                                └── • union all
                                                                                    │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │ estimated row count: 0
                                                                                    │
                                                                                    ├── • union all
                                                                                    │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │ estimated row count: 0
                                                                                    │   │
                                                                                    │   ├── • union all
                                                                                    │   │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │   │ estimated row count: 0
                                                                                    │   │   │
                                                                                    │   │   ├── • filter
                                                                                    │   │   │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │   │   │ estimated row count: 0
                                                                                    │   │   │   │ filter: app_name NOT LIKE '$ internal%'
                                                                                    │   │   │   │
                                                                                    │   │   │   └── • scan
                                                                                    │   │   │         columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │   │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                    │   │   │         table: statement_statistics@primary
                                                                                    │   │   │         spans: /0/2023-04-10T16:00:00Z-/0/2023-04-10T16:00:00.000000001Z
                                                                                    │   │   │
                                                                                    │   │   └── • filter
                                                                                    │   │       │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │       │ estimated row count: 0
                                                                                    │   │       │ filter: app_name NOT LIKE '$ internal%'
                                                                                    │   │       │
                                                                                    │   │       └── • scan
                                                                                    │   │             columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │   │             estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                    │   │             table: statement_statistics@primary
                                                                                    │   │             spans: /1/2023-04-10T16:00:00Z-/1/2023-04-10T16:00:00.000000001Z
                                                                                    │   │
                                                                                    │   └── • union all
                                                                                    │       │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │       │ estimated row count: 0
                                                                                    │       │
                                                                                    │       ├── • filter
                                                                                    │       │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │       │   │ estimated row count: 0
                                                                                    │       │   │ filter: app_name NOT LIKE '$ internal%'
                                                                                    │       │   │
                                                                                    │       │   └── • scan
                                                                                    │       │         columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │       │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                    │       │         table: statement_statistics@primary
                                                                                    │       │         spans: /2/2023-04-10T16:00:00Z-/2/2023-04-10T16:00:00.000000001Z
                                                                                    │       │
                                                                                    │       └── • filter
                                                                                    │           │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │           │ estimated row count: 0
                                                                                    │           │ filter: app_name NOT LIKE '$ internal%'
                                                                                    │           │
                                                                                    │           └── • scan
                                                                                    │                 columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                    │                 estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                    │                 table: statement_statistics@primary
                                                                                    │                 spans: /3/2023-04-10T16:00:00Z-/3/2023-04-10T16:00:00.000000001Z
                                                                                    │
                                                                                    └── • union all
                                                                                        │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │ estimated row count: 0
                                                                                        │
                                                                                        ├── • union all
                                                                                        │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │   │ estimated row count: 0
                                                                                        │   │
                                                                                        │   ├── • filter
                                                                                        │   │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │   │   │ estimated row count: 0
                                                                                        │   │   │ filter: app_name NOT LIKE '$ internal%'
                                                                                        │   │   │
                                                                                        │   │   └── • scan
                                                                                        │   │         columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │   │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                        │   │         table: statement_statistics@primary
                                                                                        │   │         spans: /4/2023-04-10T16:00:00Z-/4/2023-04-10T16:00:00.000000001Z
                                                                                        │   │
                                                                                        │   └── • filter
                                                                                        │       │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │       │ estimated row count: 0
                                                                                        │       │ filter: app_name NOT LIKE '$ internal%'
                                                                                        │       │
                                                                                        │       └── • scan
                                                                                        │             columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                        │             estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                        │             table: statement_statistics@primary
                                                                                        │             spans: /5/2023-04-10T16:00:00Z-/5/2023-04-10T16:00:00.000000001Z
                                                                                        │
                                                                                        └── • union all
                                                                                            │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                            │ estimated row count: 0
                                                                                            │
                                                                                            ├── • filter
                                                                                            │   │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                            │   │ estimated row count: 0
                                                                                            │   │ filter: app_name NOT LIKE '$ internal%'
                                                                                            │   │
                                                                                            │   └── • scan
                                                                                            │         columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                            │         estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                            │         table: statement_statistics@primary
                                                                                            │         spans: /6/2023-04-10T16:00:00Z-/6/2023-04-10T16:00:00.000000001Z
                                                                                            │
                                                                                            └── • filter
                                                                                                │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                                │ estimated row count: 0
                                                                                                │ filter: app_name NOT LIKE '$ internal%'
                                                                                                │
                                                                                                └── • scan
                                                                                                      columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                                                      estimated row count: 0 (<0.01% of the table; stats collected <hidden> ago)
                                                                                                      table: statement_statistics@primary
                                                                                                      spans: /7/2023-04-10T16:00:00Z-/7/2023-04-10T16:00:00.000000001Z

# Upsert top 500 transactions
query T retry
EXPLAIN (VERBOSE)
UPSERT INTO system.public.transaction_activity
(aggregated_ts, fingerprint_id, app_name, agg_interval, metadata,
 statistics, query, execution_count, execution_total_seconds,
 execution_total_cluster_seconds, contention_time_avg_seconds,
 cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
    (SELECT aggregated_ts,
            fingerprint_id,
            app_name,
            agg_interval,
            metadata,
            merge_stats,
            ''  AS query,
            (merge_stats -> 'statistics' ->> 'cnt')::int,
            ((merge_stats -> 'statistics' ->> 'cnt')::float) *
            ((merge_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float),
            142 AS execution_total_cluster_seconds,
            COALESCE ((merge_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float, 0),
            COALESCE ((merge_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float, 0),
            (merge_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float,
            0
     FROM (SELECT ts.aggregated_ts                                       AS aggregated_ts,
                  ts.app_name,
                  ts.fingerprint_id,
                  max(ts.agg_interval) as agg_interval,
                  max(ts.metadata) AS metadata,
                  merge_transaction_stats(statistics) AS merge_stats
           FROM system.public.transaction_statistics ts
                    inner join (SELECT fingerprint_id, app_name
                                FROM (SELECT fingerprint_id, app_name,
                                           contentionTime, cpuTime,
                                            row_number() OVER (ORDER BY (merge_stats -> 'statistics' ->> 'cnt')::int desc) AS ePos,
                                            row_number() OVER (ORDER BY (merge_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float desc) AS sPos,
                                            row_number() OVER (ORDER BY ((merge_stats -> 'statistics' ->> 'cnt')::float) *
                                                ((merge_stats -> 'statistics' -> 'svcLat' ->> 'mean')::float) desc) AS tPos,
                                            row_number() OVER (ORDER BY COALESCE((merge_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float, 0) desc) AS cPos,
                                            row_number() OVER (ORDER BY COALESCE((merge_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float, 0) desc) AS uPos
                                      FROM (SELECT fingerprint_id, app_name, merge_stats,
                                            (merge_stats -> 'execution_statistics' -> 'contentionTime' ->> 'mean')::float as contentionTime,
                                            (merge_stats -> 'execution_statistics' -> 'cpuSQLNanos' ->> 'mean')::float as cpuTime
                                            FROM (SELECT fingerprint_id, app_name,
                                                   merge_transaction_stats(statistics) AS merge_stats
                                            FROM system.public.transaction_statistics
                                            WHERE aggregated_ts = '2023-09-27 14:00:00.000000 +00:00' and
                                                  app_name not like '$ internal%'
                                            GROUP BY app_name,
                                                     fingerprint_id  )))
                                WHERE ePos < 500
                                   or sPos < 500
                                   or tPos < 500
                                   or (cPos < 500 )
                         or (uPos < 500 )) agg
                               on agg.app_name = ts.app_name and agg.fingerprint_id = ts.fingerprint_id
           WHERE aggregated_ts = '2023-09-27 14:00:00.000000 +00:00'
           GROUP BY ts.aggregated_ts,
                    ts.app_name,
                    ts.fingerprint_id));
----
distribution: local
vectorized: true
·
• upsert
│ columns: ()
│ estimated row count: 0 (missing stats)
│ into: transaction_activity(aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
│ auto commit
│ arbiter indexes: primary
│
└── • project
    │ columns: (aggregated_ts, fingerprint_id, app_name, max, max, merge_transaction_stats, query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "?column?", aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds, max, max, merge_transaction_stats, query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "?column?", aggregated_ts)
    │
    └── • lookup join (left outer)
        │ columns: (query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "?column?", aggregated_ts, fingerprint_id, app_name, max, max, merge_transaction_stats, aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, query, execution_count, execution_total_seconds, execution_total_cluster_seconds, contention_time_avg_seconds, cpu_sql_avg_nanos, service_latency_avg_seconds, service_latency_p99_seconds)
        │ estimated row count: 1
        │ table: transaction_activity@primary
        │ equality: (aggregated_ts, fingerprint_id, app_name) = (aggregated_ts, fingerprint_id, app_name)
        │ equality cols are key
        │
        └── • render
            │ columns: (query, int8, "?column?", execution_total_cluster_seconds, "coalesce", "coalesce", float8, "?column?", aggregated_ts, fingerprint_id, app_name, max, max, merge_transaction_stats)
            │ render query: ''
            │ render int8: ((merge_transaction_stats->'statistics')->>'cnt')::INT8
            │ render ?column?: ((merge_transaction_stats->'statistics')->>'cnt')::FLOAT8 * (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
            │ render execution_total_cluster_seconds: 142.0
            │ render coalesce: COALESCE((((merge_transaction_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
            │ render coalesce: COALESCE((((merge_transaction_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
            │ render float8: (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
            │ render ?column?: 0.0
            │ render aggregated_ts: any_not_null
            │ render fingerprint_id: fingerprint_id
            │ render app_name: app_name
            │ render max: max
            │ render max: max
            │ render merge_transaction_stats: merge_transaction_stats
            │
            └── • group (hash)
                │ columns: (fingerprint_id, app_name, max, max, merge_transaction_stats, any_not_null)
                │ estimated row count: 1
                │ aggregate 0: max(agg_interval)
                │ aggregate 1: max(metadata)
                │ aggregate 2: merge_transaction_stats(statistics)
                │ aggregate 3: any_not_null(aggregated_ts)
                │ group by: fingerprint_id, app_name
                │
                └── • project
                    │ columns: (aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics)
                    │
                    └── • hash join (inner)
                        │ columns: (aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics, fingerprint_id, app_name, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number)
                        │ estimated row count: 1
                        │ equality: (app_name, fingerprint_id) = (app_name, fingerprint_id)
                        │ right cols are key
                        │
                        ├── • scan
                        │     columns: (aggregated_ts, fingerprint_id, app_name, agg_interval, metadata, statistics)
                        │     estimated row count: 83,333 (8.3% of the table; stats collected <hidden> ago)
                        │     table: transaction_statistics@primary
                        │     spans: /0/2023-09-27T14:00:00Z-/0/2023-09-27T14:00:00.000000001Z /1/2023-09-27T14:00:00Z-/1/2023-09-27T14:00:00.000000001Z /2/2023-09-27T14:00:00Z-/2/2023-09-27T14:00:00.000000001Z /3/2023-09-27T14:00:00Z-/3/2023-09-27T14:00:00.000000001Z /4/2023-09-27T14:00:00Z-/4/2023-09-27T14:00:00.000000001Z /5/2023-09-27T14:00:00Z-/5/2023-09-27T14:00:00.000000001Z /6/2023-09-27T14:00:00Z-/6/2023-09-27T14:00:00.000000001Z /7/2023-09-27T14:00:00Z-/7/2023-09-27T14:00:00.000000001Z
                        │
                        └── • filter
                            │ columns: (fingerprint_id, app_name, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number)
                            │ estimated row count: 24,120
                            │ filter: ((((row_number < 500) OR (row_number < 500)) OR (row_number < 500)) OR (row_number < 500)) OR (row_number < 500)
                            │
                            └── • window
                                │ columns: (fingerprint_id, app_name, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1, row_number)
                                │ estimated row count: 27,778
                                │ window 0: row_number() OVER (ORDER BY row_number_5_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                │
                                └── • window
                                    │ columns: (fingerprint_id, app_name, row_number, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1)
                                    │ estimated row count: 27,778
                                    │ window 0: row_number() OVER (ORDER BY row_number_4_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                    │
                                    └── • window
                                        │ columns: (fingerprint_id, app_name, row_number, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1)
                                        │ estimated row count: 27,778
                                        │ window 0: row_number() OVER (ORDER BY row_number_3_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                        │
                                        └── • window
                                            │ columns: (fingerprint_id, app_name, row_number, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1)
                                            │ estimated row count: 27,778
                                            │ window 0: row_number() OVER (ORDER BY row_number_2_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                            │
                                            └── • window
                                                │ columns: (fingerprint_id, app_name, row_number, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1)
                                                │ estimated row count: 27,778
                                                │ window 0: row_number() OVER (ORDER BY row_number_1_orderby_1_1 DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                │
                                                └── • render
                                                    │ columns: (fingerprint_id, app_name, row_number_1_orderby_1_1, row_number_2_orderby_1_1, row_number_3_orderby_1_1, row_number_4_orderby_1_1, row_number_5_orderby_1_1)
                                                    │ render row_number_1_orderby_1_1: ((merge_transaction_stats->'statistics')->>'cnt')::INT8
                                                    │ render row_number_2_orderby_1_1: (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                                                    │ render row_number_3_orderby_1_1: ((merge_transaction_stats->'statistics')->>'cnt')::FLOAT8 * (((merge_transaction_stats->'statistics')->'svcLat')->>'mean')::FLOAT8
                                                    │ render row_number_4_orderby_1_1: COALESCE((((merge_transaction_stats->'execution_statistics')->'contentionTime')->>'mean')::FLOAT8, 0.0)
                                                    │ render row_number_5_orderby_1_1: COALESCE((((merge_transaction_stats->'execution_statistics')->'cpuSQLNanos')->>'mean')::FLOAT8, 0.0)
                                                    │ render fingerprint_id: fingerprint_id
                                                    │ render app_name: app_name
                                                    │
                                                    └── • group (hash)
                                                        │ columns: (fingerprint_id, app_name, merge_transaction_stats)
                                                        │ estimated row count: 27,778
                                                        │ aggregate 0: merge_transaction_stats(statistics)
                                                        │ group by: fingerprint_id, app_name
                                                        │
                                                        └── • project
                                                            │ columns: (fingerprint_id, app_name, statistics)
                                                            │
                                                            └── • filter
                                                                │ columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                │ estimated row count: 27,778
                                                                │ filter: app_name NOT LIKE '$ internal%'
                                                                │
                                                                └── • scan
                                                                      columns: (aggregated_ts, fingerprint_id, app_name, statistics)
                                                                      estimated row count: 83,333 (8.3% of the table; stats collected <hidden> ago)
                                                                      table: transaction_statistics@primary
                                                                      spans: /0/2023-09-27T14:00:00Z-/0/2023-09-27T14:00:00.000000001Z /1/2023-09-27T14:00:00Z-/1/2023-09-27T14:00:00.000000001Z /2/2023-09-27T14:00:00Z-/2/2023-09-27T14:00:00.000000001Z /3/2023-09-27T14:00:00Z-/3/2023-09-27T14:00:00.000000001Z /4/2023-09-27T14:00:00Z-/4/2023-09-27T14:00:00.000000001Z /5/2023-09-27T14:00:00Z-/5/2023-09-27T14:00:00.000000001Z /6/2023-09-27T14:00:00Z-/6/2023-09-27T14:00:00.000000001Z /7/2023-09-27T14:00:00Z-/7/2023-09-27T14:00:00.000000001Z
