This is an automated email from the ASF dual-hosted git repository.
vogievetsky pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new aeace28ccbd Web console: Add columnMapping information to the Explain
dialog (#16598)
aeace28ccbd is described below
commit aeace28ccbde8e3e65ddfc28650d981bf340666e
Author: Vadim Ogievetsky <[email protected]>
AuthorDate: Mon Aug 5 13:21:51 2024 -0700
Web console: Add columnMapping information to the Explain dialog (#16598)
* Add columnMapping information in the Explain dialog
* use arrow char
---
web-console/src/utils/druid-query.ts | 22 ++++++++++++++++++----
.../__snapshots__/explain-dialog.spec.tsx.snap | 6 +++---
.../explain-dialog/explain-dialog.spec.tsx | 22 ++++++++++++++++++++++
.../explain-dialog/explain-dialog.tsx | 4 ++--
4 files changed, 45 insertions(+), 9 deletions(-)
diff --git a/web-console/src/utils/druid-query.ts
b/web-console/src/utils/druid-query.ts
index 15410329704..fba63b94600 100644
--- a/web-console/src/utils/druid-query.ts
+++ b/web-console/src/utils/druid-query.ts
@@ -23,7 +23,7 @@ import axios from 'axios';
import { Api } from '../singletons';
import type { RowColumn } from './general';
-import { assemble } from './general';
+import { assemble, lookupBy } from './general';
const CANCELED_MESSAGE = 'Query canceled by user.';
@@ -345,10 +345,24 @@ export async function queryDruidSql<T = any>(
export interface QueryExplanation {
query: any;
signature: { name: string; type: string }[];
+ columnMappings: {
+ queryColumn: string;
+ outputColumn: string;
+ }[];
}
-export function formatSignature(queryExplanation: QueryExplanation): string {
- return queryExplanation.signature
- .map(({ name, type }) => `${C.optionalQuotes(name)}::${type}`)
+export function formatColumnMappingsAndSignature(queryExplanation:
QueryExplanation): string {
+ const columnNameToType = lookupBy(
+ queryExplanation.signature,
+ c => c.name,
+ c => c.type,
+ );
+ return queryExplanation.columnMappings
+ .map(({ queryColumn, outputColumn }) => {
+ const type = columnNameToType[queryColumn];
+ return `${C.optionalQuotes(queryColumn)}${type ? `::${type}` :
''}→${C.optionalQuotes(
+ outputColumn,
+ )}`;
+ })
.join(', ');
}
diff --git
a/web-console/src/views/workbench-view/explain-dialog/__snapshots__/explain-dialog.spec.tsx.snap
b/web-console/src/views/workbench-view/explain-dialog/__snapshots__/explain-dialog.spec.tsx.snap
index e2a5a6c3ded..806f209ef63 100644
---
a/web-console/src/views/workbench-view/explain-dialog/__snapshots__/explain-dialog.spec.tsx.snap
+++
b/web-console/src/views/workbench-view/explain-dialog/__snapshots__/explain-dialog.spec.tsx.snap
@@ -185,7 +185,7 @@ exports[`ExplainDialog matches snapshot on some data (many
queries) 1`] = `
label="Signature"
>
<Blueprint5.InputGroup
- defaultValue="channel::STRING"
+ defaultValue="channel::STRING→channel"
readOnly={true}
/>
</Blueprint5.FormGroup>
@@ -287,7 +287,7 @@ exports[`ExplainDialog matches snapshot on some data (many
queries) 1`] = `
label="Signature"
>
<Blueprint5.InputGroup
- defaultValue="channel::STRING"
+ defaultValue="channel::STRING→channel"
readOnly={true}
/>
</Blueprint5.FormGroup>
@@ -473,7 +473,7 @@ exports[`ExplainDialog matches snapshot on some data (one
query) 1`] = `
label="Signature"
>
<Blueprint5.InputGroup
- defaultValue="d0::STRING, a0::LONG"
+ defaultValue="d0::STRING→channel, a0::LONG→"Count""
readOnly={true}
/>
</Blueprint5.FormGroup>
diff --git
a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.spec.tsx
b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.spec.tsx
index 0d6a878d424..bf3b1ece6ed 100644
---
a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.spec.tsx
+++
b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.spec.tsx
@@ -160,6 +160,16 @@ describe('ExplainDialog', () => {
type: 'LONG',
},
],
+ columnMappings: [
+ {
+ queryColumn: 'd0',
+ outputColumn: 'channel',
+ },
+ {
+ queryColumn: 'a0',
+ outputColumn: 'Count',
+ },
+ ],
},
],
});
@@ -199,6 +209,12 @@ describe('ExplainDialog', () => {
type: 'STRING',
},
],
+ columnMappings: [
+ {
+ queryColumn: 'channel',
+ outputColumn: 'channel',
+ },
+ ],
},
{
query: {
@@ -234,6 +250,12 @@ describe('ExplainDialog', () => {
type: 'STRING',
},
],
+ columnMappings: [
+ {
+ queryColumn: 'channel',
+ outputColumn: 'channel',
+ },
+ ],
},
],
});
diff --git
a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx
b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx
index 4bab7e7bfb0..7f01436babb 100644
--- a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx
+++ b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx
@@ -40,7 +40,7 @@ import { Api } from '../../../singletons';
import type { QueryExplanation } from '../../../utils';
import {
deepGet,
- formatSignature,
+ formatColumnMappingsAndSignature,
getDruidErrorMessage,
nonEmptyArray,
queryDruidSql,
@@ -141,7 +141,7 @@ export const ExplainDialog = React.memo(function
ExplainDialog(props: ExplainDia
/>
</FormGroup>
<FormGroup className="signature-group" label="Signature">
- <InputGroup defaultValue={formatSignature(queryExplanation)}
readOnly />
+ <InputGroup
defaultValue={formatColumnMappingsAndSignature(queryExplanation)} readOnly />
</FormGroup>
{openQueryLabel && (
<Button
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]