impulse_query_engine.analyze.query.query_builder
QueryBuilder
class QueryBuilder()
__init__
def __init__(db: "impulse_query_engine.analyze.MeasurementDB")
Initialize the QueryBuilder.
Arguments:
db(impulse_query_engine.analyze.MeasurementDB): Measurement database object.
where
def where(*args)
Add filter expressions to the query.
Arguments:
*args(list): Filter expressions to be added.
Returns:
QueryBuilder: The updated QueryBuilder instance.
filter
def filter(*args)
Alias for where().
Arguments:
*args(list): Filter expressions to be added.
Returns:
QueryBuilder: The updated QueryBuilder instance.
havingTag
def havingTag(**kwargs)
Add tag-based filters to the query.
Arguments:
**kwargs(dict): Tag-value pairs to filter by.
Returns:
QueryBuilder: The updated QueryBuilder instance.
tag
def tag(key: str, cast_type: str | None = None) -> TagSelector
Create a tag selector for the given key.
Arguments:
key(str): Name of the tag (element_id in the EAV table).cast_type(str or None): Spark type to cast the tag value to before comparison (e.g."int","double","string").
Returns:
TagSelector: Tag selector object.
metric
def metric(name) -> MetricSelector
Create a metric selector for the given name.
Arguments:
name(str): Name of the metric.
Returns:
MetricSelector: Metric selector object.
channel
def channel(**kwargs) -> TimeSeriesSelector
Create a time series selector for the given channel tags.
Arguments:
**kwargs(dict): Channel tag-value pairs.
Returns:
TimeSeriesSelector: Time series selector object.
select
def select(*args) -> Self
Set the selection expressions for the query.
Arguments:
*args(list): Selection expressions.
Returns:
QueryBuilder: The updated QueryBuilder instance.
solve
def solve(spark,
solver: QuerySolver = BlobSolver(),
pre_filtered_containers_df: DataFrame = None) -> DataFrame
Execute the query using the specified solver and return a Spark DataFrame.
Arguments:
spark(SparkSession): Spark session used for query execution.solver(QuerySolver): Query solver to use (default is BlobSolver).pre_filtered_containers_df(DataFrame): Pre-filtered container metrics DataFrame for incremental processing. When provided, only these containers will be processed. When None, all containers matching query filters are processed (full mode).
Returns:
pyspark.sql.DataFrame: DataFrame containing query results.
solve_calculated_channels
def solve_calculated_channels(
spark,
solver: QuerySolver = BlobSolver(),
pre_filtered_containers_df: DataFrame = None) -> DataFrame
Compute calculated channels and return a narrow silver-shaped DataFrame.
Every selection must be a :class:CalculatedChannel. This runs the same
metadata filter pipeline as :meth:solve (resolving the input channels
each calculated channel depends on), then evaluates each calculated
channel per container and emits rows in the silver channel_data shape
— container_id, channel_id, tstart, tend, value — plus a single
identity MapType(string, string) column holding each channel's
identity dict.
Arguments:
spark(SparkSession): Spark session used for query execution.solver(QuerySolver): Query solver to use. Must implementsolve_calculated_channels(DefaultSolverdoes); the defaultBlobSolverdoes not.pre_filtered_containers_df(DataFrame): Pre-filtered container metrics for incremental processing. When provided, only these containers are processed; when None, all containers matching the query filters are processed.
Raises:
ValueError: If any selection is not aCalculatedChannel, or if a wrapped expression does not evaluate to aSampleSeries.
Returns:
pyspark.sql.DataFrame: Narrow DataFrame [container_id, channel_id, tstart, tend, value, identity].
toPandas
def toPandas(spark, solver: QuerySolver = BlobSolver()) -> pd.DataFrame
Execute the query and collect results into a Pandas DataFrame.
Arguments:
spark(SparkSession): Spark session used for query execution.solver(QuerySolver): Query solver to use (default is BlobSolver).
Returns:
pd.DataFrame: Pandas DataFrame containing query results.