Get started with the {@link ASTQuery} class.
npm install @malloydata/malloy-query-builderGet started with the {@link ASTQuery} class.
{@link ASTQuery.toMalloy}
``ts`
query.setSource('flights');
query.setView('by_carrier');
query.toMalloy();``
run: flights -> by_carrier
This is for the Explorer, e.g., to create the query summary UI
{@link ASTQuery.getOrAddDefaultSegment}
`ts`
query.setSource('flights');
query.getOrAddDefaultSegment().addGroupBy("carrier");``
run: flights -> { group_by: carrier }
{@link ASTQuery.setViewToEmptySegment}
`ts`
query.setSource('flights');
query.setViewToEmptySegment().addGroupBy("carrier");``
run: flights -> { group_by: carrier }
{@link ASTQuery.setView}
`ts`
query.setSource('flights');
query.setView('by_carrier');``
run: flights -> by_carrier
{@link ASTSegmentViewDefinition.isRunnable}
``
run: flights -> { }`ts`
query.isRunnable() // false
{@link ASTSegmentViewDefinition.addGroupBy}
{@link ASTSegmentViewDefinition.addAggregate}
{@link ASTSegmentViewDefinition.addNest}
`ts`
const segment = query.getOrAddDefaultSegment();
segment.addGroupBy('carrier');
segment.addAggregate('flight_count');
segment.addNest('by_origin');``
run: flights -> {
group_by: carrier
aggregate: flight_count
nest: by_origin
}
{@link ASTSegmentViewDefinition.addDateGroupBy}
{@link ASTSegmentViewDefinition.addTimestampGroupBy}
`ts`
const segment = query.getOrAddDefaultSegment();
segment.addTimestampGroupBy('dep_time', 'month');``
run: flights -> {
group_by: dep_time.month
}
{@link ASTGroupByViewOperation.delete}
{@link ASTAggregateViewOperation.delete}
{@link ASTNestViewOperation.delete}
{@link ASTGroupByViewOperation.rename}
{@link ASTAggregateViewOperation.rename}
{@link ASTNestViewOperation.rename}
``
run: flights -> {
group_by: carrier
aggregate: flight_count
}`ts`
groupBy.delete();
aggregate.rename("flight_count_2");``
run: flights -> { aggregate: flight_count_2 is flight_count }
{@link ASTSegmentViewDefinition.hasField}
`ts`
query.getOrAddDefaultSegment().hasField('carrier');
{@link ASTOrderByViewOperation.delete}
``
run: flights -> {
group_by: carrier
order_by: carrier desc
}`ts`
orderBy.delete();``
run: flights -> { group_by: carrier }
{@link ASTOrderByViewOperation.setField}
``
run: flights -> {
group_by:
carrier
flight_count
order_by: carrier desc
}`ts`
orderBy.setField("flight_count");``
run: flights -> {
group_by:
carrier
flight_count
order_by: flight_count desc
}
{@link ASTOrderByViewOperation.setDirection}
``
run: flights -> {
group_by: carrier
order_by: carrier desc
}`ts`
orderBy.setDirection(Malloy.OrderByDirection.ASC);``
run: flights -> {
group_by: carrier
order_by: flight_count asc
}
* {@link ASTSegmentViewDefinition.addWhere}
* {@link ASTFilterWithFilterString.setFilterString}
* {@link ASTFilterWithFilterString.setFilter}
* {@link ASTFilterWithFilterString.getFilter}
* {@link ASTWhereViewOperation.delete}
* {@link ASTWhere.delete}
`ts`
query.getOrAddDefaultSegment().addWhere("carrier", "WN, AA");`WN, AA
run: flights -> { where: carrier ~ f }`
* {@link ASTSegmentViewDefinition.setLimit}
* {@link ASTLimitViewOperation.delete}
`ts`
query.getOrAddDefaultSegment().setLimit(10);``
run: flights -> { limit: 10 }
{@link ASTSegmentViewDefinition.addEmptyNest}
`ts`
query.getOrAddDefaultSegment().addEmptyNest("by_origin");``
run: flights -> { nest: by_origin is { } }
{@link ASTSegmentViewDefinition.getInputSchema}
`ts`
query.getOrAddDefaultSegment().getInputSchema();``
{
fields: [
{ kind: "measure", name: "flight_count", type: { kind: "string_type" }}
...
]
}
{@link IASTViewDefinition.addEmptyRefinement}
`ts`
const view = query.setView("by_carrier");
const segment = view.addEmptyRefinement();
segment.setLimit(10);``
run: flights -> by_carrier + { limit: 10 }
{@link IASTViewDefinition.addViewRefinement}
`ts`
const view = query.setView("by_carrier");
view.addViewRefinement("top10");``
run: flights -> by_carrier + top10
{@link ASTQuery.reorderFields}
{@link ASTView.reorderFields}
If the view or query is a simple segment, it will automatically reorder the clauses.
``
run: flights -> {
group_by: carrier
aggregate: flight_count
}`ts`
query.reorderFields(['flight_count', 'carrier']);``
run: flights -> {
aggregate: flight_count
group_by: carrier
}
Otherwise, it will add an annotation:
``
run: flights -> by_carrier`ts`
query.reorderFields(['flight_count', 'carrier']);``field_order = [flight_count, carrier]
run: flights -> by_carrier
* {@link ASTAggregateViewOperation.addWhere}
* {@link ASTFilterWithFilterString.setFilter}
* {@link ASTWhere.delete}
`ts`
query.getOrAddDefaultSegment().addAggregate('flight_count').addWhere('carrier', 'WN, AA');`WN, AA
run: flights -> { aggregate: flight_count { where: carrier ~ f} }`
{@link ASTReferenceQueryArrowSource.setParameter}
`ts`
query.definition.as.ArrowQueryDefinition().source.as.ReferenceQueryArrowSource().parameters.setParameter("param", 1)``
run: flights(param is 1) ->
{@link ASTReferenceQueryArrowSource.getSourceParameters}
`ts`
query.definition.as.ArrowQueryDefinition().source.as.ReferenceQueryArrowSource().getSourceParameters();
{@link IASTAnnotatable.setTagProperty}
{@link IASTAnnotatable.removeTagProperty}
`ts`
query
.getOrAddDefaultSegment()
.addGroupBy('carrier');
.setTagProperty(['a', 'b', 'c'], 10);``
run: flights -> {
# a.b.c = 10
group_by: carrier
}
`ts`
// Assume that 'by_carrier' has, in the model, a tag "bar_chart"
query
.getOrAddDefaultSegment()
.addNest('by_carrier');
.removeTagProperty(['bar_chart']);``
run: flights -> {
# -bar_chart
nest: by_carrier
}
{@link IASTAnnotatable.getIntrinsicTag}
{@link IASTAnnotatable.getInheritedTag}
`ts`
query
.getOrAddDefaultSegment()
.addGroupBy('carrier');
.getIntrinsicTag()
.has('some_tag');
query
.getOrAddDefaultSegment()
.addGroupBy('carrier');
.getInheritedTag()
.has('some_tag');
`ts`
query.setTagProperty(['bar_chart']);
query.setSource('flights');
query.setView('by_carrier');``bar_chart
run: flights -> by_carrier
This happens automatically when you call {@link ASTSegmentViewDefinition.addGroupBy}, {@link ASTSegmentViewDefinition.addAggregate}, {@link ASTSegmentViewDefinition.addNest}, {@link ASTSegmentViewDefinition.addWhere}, {@link ASTSegmentViewDefinition.addOrderBy}, {@link ASTSegmentViewDefinition.setLimit}, etc..
{@link ASTQuery.getOrAddDefaultSegment}
`ts`
query.setSource('flights');
query.getOrAddDefaultSegment().addGroupBy("carrier");``
run: flights -> { group_by: carrier }
``
run: flights -> by_carrier`ts`
query.setSource('flights');
query.getOrAddDefaultSegment().setLimit(10);```
run: flights -> by_carrier + { limit: 10 }