Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 155 additions & 0 deletions packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4145,6 +4145,160 @@ const mvMinDefinition: FunctionDefinition = {
],
};

// Do not edit this manually... generated by scripts/generate_function_definitions.ts
const mvPercentileDefinition: FunctionDefinition = {
type: 'eval',
name: 'mv_percentile',
description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_percentile', {
defaultMessage:
'Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur.',
}),
alias: undefined,
signatures: [
{
params: [
{
name: 'number',
type: 'double',
optional: false,
},
{
name: 'percentile',
type: 'double',
optional: false,
},
],
returnType: 'double',
},
{
params: [
{
name: 'number',
type: 'double',
optional: false,
},
{
name: 'percentile',
type: 'integer',
optional: false,
},
],
returnType: 'double',
},
{
params: [
{
name: 'number',
type: 'double',
optional: false,
},
{
name: 'percentile',
type: 'long',
optional: false,
},
],
returnType: 'double',
},
{
params: [
{
name: 'number',
type: 'integer',
optional: false,
},
{
name: 'percentile',
type: 'double',
optional: false,
},
],
returnType: 'integer',
},
{
params: [
{
name: 'number',
type: 'integer',
optional: false,
},
{
name: 'percentile',
type: 'integer',
optional: false,
},
],
returnType: 'integer',
},
{
params: [
{
name: 'number',
type: 'integer',
optional: false,
},
{
name: 'percentile',
type: 'long',
optional: false,
},
],
returnType: 'integer',
},
{
params: [
{
name: 'number',
type: 'long',
optional: false,
},
{
name: 'percentile',
type: 'double',
optional: false,
},
],
returnType: 'long',
},
{
params: [
{
name: 'number',
type: 'long',
optional: false,
},
{
name: 'percentile',
type: 'integer',
optional: false,
},
],
returnType: 'long',
},
{
params: [
{
name: 'number',
type: 'long',
optional: false,
},
{
name: 'percentile',
type: 'long',
optional: false,
},
],
returnType: 'long',
},
],
supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'],
supportedOptions: ['by'],
validate: undefined,
examples: [
'ROW values = [5, 5, 10, 12, 5000]\n| EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values)',
],
};

// Do not edit this manually... generated by scripts/generate_function_definitions.ts
const mvPseriesWeightedSumDefinition: FunctionDefinition = {
type: 'eval',
Expand Down Expand Up @@ -8323,6 +8477,7 @@ export const evalFunctionDefinitions = [
mvMaxDefinition,
mvMedianDefinition,
mvMinDefinition,
mvPercentileDefinition,
mvPseriesWeightedSumDefinition,
mvSliceDefinition,
mvSortDefinition,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15879,6 +15879,171 @@ describe('validation logic', () => {
[]
);
});

describe('mv_percentile', () => {
testErrorsAndWarnings('row var = mv_percentile(5.5, 5.5)', []);
testErrorsAndWarnings('row mv_percentile(5.5, 5.5)', []);
testErrorsAndWarnings('row var = mv_percentile(to_double(true), to_double(true))', []);
testErrorsAndWarnings('row var = mv_percentile(5.5, 5)', []);
testErrorsAndWarnings('row mv_percentile(5.5, 5)', []);
testErrorsAndWarnings('row var = mv_percentile(to_double(true), to_integer(true))', []);
testErrorsAndWarnings('row var = mv_percentile(to_double(true), 5)', []);
testErrorsAndWarnings('row var = mv_percentile(5, 5.5)', []);
testErrorsAndWarnings('row mv_percentile(5, 5.5)', []);
testErrorsAndWarnings('row var = mv_percentile(to_integer(true), to_double(true))', []);
testErrorsAndWarnings('row var = mv_percentile(5, 5)', []);
testErrorsAndWarnings('row mv_percentile(5, 5)', []);
testErrorsAndWarnings('row var = mv_percentile(to_integer(true), to_integer(true))', []);
testErrorsAndWarnings('row var = mv_percentile(to_integer(true), 5)', []);
testErrorsAndWarnings('row var = mv_percentile(5, to_double(true))', []);
testErrorsAndWarnings('row var = mv_percentile(5, to_integer(true))', []);

testErrorsAndWarnings('row var = mv_percentile(true, true)', [
'Argument of [mv_percentile] must be [double], found value [true] type [boolean]',
'Argument of [mv_percentile] must be [double], found value [true] type [boolean]',
]);

testErrorsAndWarnings(
'from a_index | where mv_percentile(doubleField, doubleField) > 0',
[]
);

testErrorsAndWarnings(
'from a_index | where mv_percentile(booleanField, booleanField) > 0',
[
'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]',
'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]',
]
);

testErrorsAndWarnings(
'from a_index | where mv_percentile(doubleField, integerField) > 0',
[]
);
testErrorsAndWarnings('from a_index | where mv_percentile(doubleField, longField) > 0', []);
testErrorsAndWarnings(
'from a_index | where mv_percentile(integerField, doubleField) > 0',
[]
);
testErrorsAndWarnings(
'from a_index | where mv_percentile(integerField, integerField) > 0',
[]
);
testErrorsAndWarnings(
'from a_index | where mv_percentile(integerField, longField) > 0',
[]
);
testErrorsAndWarnings('from a_index | where mv_percentile(longField, doubleField) > 0', []);
testErrorsAndWarnings(
'from a_index | where mv_percentile(longField, integerField) > 0',
[]
);
testErrorsAndWarnings('from a_index | where mv_percentile(longField, longField) > 0', []);
testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(doubleField, doubleField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, doubleField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_double(booleanField), to_double(booleanField))',
[]
);

testErrorsAndWarnings('from a_index | eval mv_percentile(booleanField, booleanField)', [
'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]',
'Argument of [mv_percentile] must be [double], found value [booleanField] type [boolean]',
]);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(doubleField, integerField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, integerField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_double(booleanField), to_integer(booleanField))',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(doubleField, longField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(doubleField, longField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_double(booleanField), longField)',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(integerField, doubleField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, doubleField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_integer(booleanField), to_double(booleanField))',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(integerField, integerField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, integerField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_integer(booleanField), to_integer(booleanField))',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(integerField, longField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(integerField, longField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(to_integer(booleanField), longField)',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(longField, doubleField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(longField, doubleField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(longField, to_double(booleanField))',
[]
);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(longField, integerField)',
[]
);
testErrorsAndWarnings('from a_index | eval mv_percentile(longField, integerField)', []);

testErrorsAndWarnings(
'from a_index | eval var = mv_percentile(longField, to_integer(booleanField))',
[]
);

testErrorsAndWarnings('from a_index | eval var = mv_percentile(longField, longField)', []);
testErrorsAndWarnings('from a_index | eval mv_percentile(longField, longField)', []);

testErrorsAndWarnings(
'from a_index | eval mv_percentile(doubleField, doubleField, extraArg)',
['Error: [mv_percentile] function expects exactly 2 arguments, got 3.']
);

testErrorsAndWarnings('from a_index | sort mv_percentile(doubleField, doubleField)', []);
testErrorsAndWarnings('from a_index | eval mv_percentile(null, null)', []);
testErrorsAndWarnings('row nullVar = null | eval mv_percentile(nullVar, nullVar)', []);
});
});
});

Expand Down
34 changes: 34 additions & 0 deletions packages/kbn-text-based-editor/src/esql_documentation_sections.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2176,6 +2176,39 @@ export const functions = {
ROW a=[2, 1]
| EVAL min_a = MV_MIN(a)
\`\`\`
`,
description:
'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)',
ignoreTag: true,
}
)}
/>
),
},
// Do not edit manually... automatically generated by scripts/generate_esql_docs.ts
{
label: i18n.translate(
'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_percentile',
{
defaultMessage: 'MV_PERCENTILE',
}
),
description: (
<Markdown
markdownContent={i18n.translate(
'textBasedEditor.query.textBasedLanguagesEditor.documentationESQL.mv_percentile.markdown',
{
defaultMessage: `<!--
This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-->

### MV_PERCENTILE
Converts a multivalued field into a single valued field containing the value at which a certain percentage of observed values occur.

\`\`\`
ROW values = [5, 5, 10, 12, 5000]
| EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values)
\`\`\`
`,
description:
'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)',
Expand Down Expand Up @@ -3370,6 +3403,7 @@ export const functions = {
ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"]
| EVAL datetime = TO_DATETIME(string)
\`\`\`
Note: Note that when converting from nanosecond resolution to millisecond resolution with this function, the nanosecond date is truncated, not rounded.
`,
description:
'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)',
Expand Down