in web-console/src/helpers/spec-conversion.ts [454:516]
function metricSpecToSqlExpression(metricSpec: MetricSpec): string | undefined {
if (metricSpec.type === 'count') {
return `COUNT(*)`; // count is special as it does not have a fieldName
}
if (!metricSpec.fieldName) return;
const column = C(metricSpec.fieldName);
switch (metricSpec.type) {
case 'longSum':
case 'floatSum':
case 'doubleSum':
return `SUM(${column})`;
case 'longMin':
case 'floatMin':
case 'doubleMin':
return `MIN(${column})`;
case 'longMax':
case 'floatMax':
case 'doubleMax':
return `MAX(${column})`;
case 'doubleFirst':
case 'floatFirst':
case 'longFirst':
return `EARLIEST(${column})`;
case 'stringFirst':
return `EARLIEST(${column}, ${L(metricSpec.maxStringBytes || 128)})`;
case 'doubleLast':
case 'floatLast':
case 'longLast':
return `LATEST(${column})`;
case 'stringLast':
return `LATEST(${column}, ${L(metricSpec.maxStringBytes || 128)})`;
case 'thetaSketch':
return `APPROX_COUNT_DISTINCT_DS_THETA(${column}${extraArgs([metricSpec.size, 16384])})`;
case 'HLLSketchBuild':
case 'HLLSketchMerge':
return `APPROX_COUNT_DISTINCT_DS_HLL(${column}${extraArgs(
[metricSpec.lgK, 12],
[metricSpec.tgtHllType, 'HLL_4'],
)})`;
case 'quantilesDoublesSketch':
// For consistency with the above this should be APPROX_QUANTILE_DS but that requires a post agg so it does not work quite right.
return `DS_QUANTILES_SKETCH(${column}${extraArgs([metricSpec.k, 128])})`;
case 'hyperUnique':
return `APPROX_COUNT_DISTINCT_BUILTIN(${column})`;
default:
// The following things are (knowingly) not supported:
// tDigestSketch, momentSketch, fixedBucketsHistogram
return;
}
}