From c01fd561825286a9b8888c3b3c14d3d63eb93af5 Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Tue, 30 Jun 2020 12:46:50 -0700 Subject: [PATCH] Web console: allow link overrides for docs, and more (#10100) * link overrides * change doc version * fix snapshots --- web-console/lib/keywords.js | 2 +- .../__snapshots__/header-bar.spec.tsx.snap | 2 +- .../src/components/header-bar/header-bar.tsx | 49 +++++----- .../src/dialogs/about-dialog/about-dialog.tsx | 15 +-- .../compaction-dialog/compaction-dialog.tsx | 8 +- ...inator-dynamic-config-dialog.spec.tsx.snap | 2 +- .../coordinator-dynamic-config-dialog.tsx | 8 +- web-console/src/dialogs/index.ts | 1 + ...erload-dynamic-config-dialog.spec.tsx.snap | 2 +- .../overlord-dynamic-config-dialog.tsx | 6 +- .../retention-dialog.spec.tsx.snap | 2 +- .../retention-dialog/retention-dialog.tsx | 8 +- web-console/src/entry.ts | 7 ++ web-console/src/links.ts | 94 +++++++++++++++++++ web-console/src/utils/ingestion-spec.tsx | 72 +++++--------- web-console/src/variables.ts | 31 ------ .../views/load-data-view/load-data-view.tsx | 80 +++++----------- .../query-view/run-button/run-button.tsx | 4 +- 18 files changed, 197 insertions(+), 196 deletions(-) create mode 100644 web-console/src/links.ts delete mode 100644 web-console/src/variables.ts diff --git a/web-console/lib/keywords.js b/web-console/lib/keywords.js index a0ec6fec953..09f4b27c3a0 100644 --- a/web-console/lib/keywords.js +++ b/web-console/lib/keywords.js @@ -40,7 +40,7 @@ exports.SQL_KEYWORDS = [ 'ON', 'RIGHT', 'OUTER', - 'FULL' + 'FULL', ]; exports.SQL_EXPRESSION_PARTS = [ diff --git a/web-console/src/components/header-bar/__snapshots__/header-bar.spec.tsx.snap b/web-console/src/components/header-bar/__snapshots__/header-bar.spec.tsx.snap index 97b32dc319f..788cabc41b7 100644 --- a/web-console/src/components/header-bar/__snapshots__/header-bar.spec.tsx.snap +++ b/web-console/src/components/header-bar/__snapshots__/header-bar.spec.tsx.snap @@ -159,7 +159,7 @@ exports[`header bar matches snapshot 1`] = ` /> It appears that the SQL endpoint is disabled. The console will fall back to{' '} - native Druid APIs and will be limited - in functionality. Look at the SQL docs{' '} - to enable the SQL endpoint. + native Druid APIs and will be + limited in functionality. Look at{' '} + the SQL docs to enable the SQL + endpoint.

); break; @@ -205,9 +200,7 @@ const RestrictedMode = React.memo(function RestrictedMode(props: RestrictedModeP {message}

For more info check out the{' '} - + console documentation . @@ -239,15 +232,25 @@ export const HeaderBar = React.memo(function HeaderBar(props: HeaderBarProps) { const helpMenu = (

setAboutDialogOpen(true)} /> - - + + + - ); diff --git a/web-console/src/dialogs/about-dialog/about-dialog.tsx b/web-console/src/dialogs/about-dialog/about-dialog.tsx index 57e7721cc93..d7546b06976 100644 --- a/web-console/src/dialogs/about-dialog/about-dialog.tsx +++ b/web-console/src/dialogs/about-dialog/about-dialog.tsx @@ -21,12 +21,7 @@ import { IconNames } from '@blueprintjs/icons'; import React from 'react'; import { ExternalLink } from '../../components'; -import { - DRUID_COMMUNITY, - DRUID_DEVELOPER_GROUP, - DRUID_USER_GROUP, - DRUID_WEBSITE, -} from '../../variables'; +import { getLink } from '../../links'; export interface AboutDialogProps { onClose: () => void; @@ -50,19 +45,19 @@ export const AboutDialog = React.memo(function AboutDialog(props: AboutDialogPro

For help and support with Druid, please refer to the{' '} - community page and the{' '} - user groups. + community page and the{' '} + user groups.

Druid is made with ❤️ by a community of passionate developers. To contribute, join in the discussion on the{' '} - developer group. + developer group.

- + Visit Druid
diff --git a/web-console/src/dialogs/compaction-dialog/compaction-dialog.tsx b/web-console/src/dialogs/compaction-dialog/compaction-dialog.tsx index 33feb54327a..46dc8579331 100644 --- a/web-console/src/dialogs/compaction-dialog/compaction-dialog.tsx +++ b/web-console/src/dialogs/compaction-dialog/compaction-dialog.tsx @@ -20,7 +20,7 @@ import { Button, Classes, Dialog, Intent } from '@blueprintjs/core'; import React from 'react'; import { AutoForm, ExternalLink } from '../../components'; -import { DRUID_DOCS_VERSION } from '../../variables'; +import { getLink } from '../../links'; import './compaction-dialog.scss'; @@ -116,9 +116,7 @@ export class CompactionDialog extends React.PureComponent< type: 'json', info: (

- + Task context {' '} for compaction tasks. @@ -137,7 +135,7 @@ export class CompactionDialog extends React.PureComponent< info: (

Tuning config {' '} diff --git a/web-console/src/dialogs/coordinator-dynamic-config-dialog/__snapshots__/coordinator-dynamic-config-dialog.spec.tsx.snap b/web-console/src/dialogs/coordinator-dynamic-config-dialog/__snapshots__/coordinator-dynamic-config-dialog.spec.tsx.snap index 9c4ee3d2484..ecc7bca2359 100644 --- a/web-console/src/dialogs/coordinator-dynamic-config-dialog/__snapshots__/coordinator-dynamic-config-dialog.spec.tsx.snap +++ b/web-console/src/dialogs/coordinator-dynamic-config-dialog/__snapshots__/coordinator-dynamic-config-dialog.spec.tsx.snap @@ -58,7 +58,7 @@ exports[`coordinator dynamic config matches snapshot 1`] = ` Edit the coordinator dynamic configuration on the fly. For more information please refer to the diff --git a/web-console/src/dialogs/coordinator-dynamic-config-dialog/coordinator-dynamic-config-dialog.tsx b/web-console/src/dialogs/coordinator-dynamic-config-dialog/coordinator-dynamic-config-dialog.tsx index 044e7eab122..20b2d79c156 100644 --- a/web-console/src/dialogs/coordinator-dynamic-config-dialog/coordinator-dynamic-config-dialog.tsx +++ b/web-console/src/dialogs/coordinator-dynamic-config-dialog/coordinator-dynamic-config-dialog.tsx @@ -21,11 +21,11 @@ import { IconNames } from '@blueprintjs/icons'; import axios from 'axios'; import React from 'react'; +import { SnitchDialog } from '..'; import { AutoForm, ExternalLink } from '../../components'; +import { getLink } from '../../links'; import { AppToaster } from '../../singletons/toaster'; import { getDruidErrorMessage, QueryManager } from '../../utils'; -import { DRUID_DOCS_VERSION } from '../../variables'; -import { SnitchDialog } from '../snitch-dialog/snitch-dialog'; import './coordinator-dynamic-config-dialog.scss'; @@ -127,9 +127,7 @@ export class CoordinatorDynamicConfigDialog extends React.PureComponent<

Edit the coordinator dynamic configuration on the fly. For more information please refer to the{' '} - + documentation . diff --git a/web-console/src/dialogs/index.ts b/web-console/src/dialogs/index.ts index 0972cdc8ef7..98d825d0f3a 100644 --- a/web-console/src/dialogs/index.ts +++ b/web-console/src/dialogs/index.ts @@ -17,6 +17,7 @@ */ export * from './about-dialog/about-dialog'; +export * from './doctor-dialog/doctor-dialog'; export * from './async-action-dialog/async-action-dialog'; export * from './compaction-dialog/compaction-dialog'; export * from './coordinator-dynamic-config-dialog/coordinator-dynamic-config-dialog'; diff --git a/web-console/src/dialogs/overlord-dynamic-config-dialog/__snapshots__/overload-dynamic-config-dialog.spec.tsx.snap b/web-console/src/dialogs/overlord-dynamic-config-dialog/__snapshots__/overload-dynamic-config-dialog.spec.tsx.snap index e4ece12934f..c7823124abe 100644 --- a/web-console/src/dialogs/overlord-dynamic-config-dialog/__snapshots__/overload-dynamic-config-dialog.spec.tsx.snap +++ b/web-console/src/dialogs/overlord-dynamic-config-dialog/__snapshots__/overload-dynamic-config-dialog.spec.tsx.snap @@ -58,7 +58,7 @@ exports[`overload dynamic config matches snapshot 1`] = ` Edit the overlord dynamic configuration on the fly. For more information please refer to the diff --git a/web-console/src/dialogs/overlord-dynamic-config-dialog/overlord-dynamic-config-dialog.tsx b/web-console/src/dialogs/overlord-dynamic-config-dialog/overlord-dynamic-config-dialog.tsx index 77879596181..3828b83dccb 100644 --- a/web-console/src/dialogs/overlord-dynamic-config-dialog/overlord-dynamic-config-dialog.tsx +++ b/web-console/src/dialogs/overlord-dynamic-config-dialog/overlord-dynamic-config-dialog.tsx @@ -21,11 +21,11 @@ import { IconNames } from '@blueprintjs/icons'; import axios from 'axios'; import React from 'react'; +import { SnitchDialog } from '..'; import { AutoForm, ExternalLink } from '../../components'; +import { getLink } from '../../links'; import { AppToaster } from '../../singletons/toaster'; import { getDruidErrorMessage, QueryManager } from '../../utils'; -import { DRUID_DOCS_VERSION } from '../../variables'; -import { SnitchDialog } from '../snitch-dialog/snitch-dialog'; import './overlord-dynamic-config-dialog.scss'; @@ -128,7 +128,7 @@ export class OverlordDynamicConfigDialog extends React.PureComponent< Edit the overlord dynamic configuration on the fly. For more information please refer to the{' '} documentation diff --git a/web-console/src/dialogs/retention-dialog/__snapshots__/retention-dialog.spec.tsx.snap b/web-console/src/dialogs/retention-dialog/__snapshots__/retention-dialog.spec.tsx.snap index f80fdc01730..76efa8b8b41 100644 --- a/web-console/src/dialogs/retention-dialog/__snapshots__/retention-dialog.spec.tsx.snap +++ b/web-console/src/dialogs/retention-dialog/__snapshots__/retention-dialog.spec.tsx.snap @@ -58,7 +58,7 @@ exports[`retention dialog matches snapshot 1`] = ` Druid uses rules to determine what data should be retained in the cluster. The rules are evaluated in order from top to bottom. For more information please refer to the diff --git a/web-console/src/dialogs/retention-dialog/retention-dialog.tsx b/web-console/src/dialogs/retention-dialog/retention-dialog.tsx index a9b695b2e4c..a563939fe86 100644 --- a/web-console/src/dialogs/retention-dialog/retention-dialog.tsx +++ b/web-console/src/dialogs/retention-dialog/retention-dialog.tsx @@ -21,10 +21,10 @@ import { IconNames } from '@blueprintjs/icons'; import axios from 'axios'; import React from 'react'; +import { SnitchDialog } from '..'; import { ExternalLink, RuleEditor } from '../../components'; +import { getLink } from '../../links'; import { QueryManager } from '../../utils'; -import { DRUID_DOCS_VERSION } from '../../variables'; -import { SnitchDialog } from '../snitch-dialog/snitch-dialog'; import './retention-dialog.scss'; @@ -183,9 +183,7 @@ export class RetentionDialog extends React.PureComponent<

Druid uses rules to determine what data should be retained in the cluster. The rules are evaluated in order from top to bottom. For more information please refer to the{' '} - + documentation . diff --git a/web-console/src/entry.ts b/web-console/src/entry.ts index 5ea04d4e860..bebb5ff71bd 100644 --- a/web-console/src/entry.ts +++ b/web-console/src/entry.ts @@ -29,6 +29,7 @@ import './ace-modes/dsql'; import './ace-modes/hjson'; import './bootstrap/react-table-defaults'; import { ConsoleApplication } from './console-application'; +import { Links, setLinkOverrides } from './links'; import { UrlBaser } from './singletons/url-baser'; import './entry.scss'; @@ -58,6 +59,9 @@ interface ConsoleConfig { // Extra context properties that will be added to all query requests mandatoryQueryContext?: Record; + + // Allow for link overriding to different docs + linkOverrides?: Links; } const consoleConfig: ConsoleConfig = (window as any).consoleConfig; @@ -75,6 +79,9 @@ if (consoleConfig.customHeaderName && consoleConfig.customHeaderValue) { if (consoleConfig.customHeaders) { Object.assign(axios.defaults.headers, consoleConfig.customHeaders); } +if (consoleConfig.linkOverrides) { + setLinkOverrides(consoleConfig.linkOverrides); +} ReactDOM.render( React.createElement(ConsoleApplication, { diff --git a/web-console/src/links.ts b/web-console/src/links.ts new file mode 100644 index 00000000000..4e45fb77ffb --- /dev/null +++ b/web-console/src/links.ts @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This is set to the latest available version and should be updated to the next version before release +import hasOwnProp from 'has-own-prop'; + +const DRUID_DOCS_VERSION = '0.19.0'; + +function fillVersion(str: string): string { + return str.replace(/\{\{VERSION}}/g, DRUID_DOCS_VERSION); +} + +export interface Links { + websiteHref: string; + githubHref: string; + docsHref: string; + communityHref: string; + slackHref: string; + userGroup: string; + developerGroup: string; +} + +const DEFAULT_LINKS: Links = { + websiteHref: 'https://druid.apache.org', + githubHref: 'https://github.com/apache/druid', + docsHref: fillVersion('https://druid.apache.org/docs/{{VERSION}}'), + communityHref: 'https://druid.apache.org/community/', + slackHref: 'https://druid.apache.org/community/join-slack', + userGroup: 'https://groups.google.com/forum/#!forum/druid-user', + developerGroup: 'https://lists.apache.org/list.html?dev@druid.apache.org', +}; + +const links = DEFAULT_LINKS; + +export function setLinkOverrides(linkOverrides: Links) { + const keys = Object.keys(DEFAULT_LINKS) as (keyof Links)[]; + for (const k of keys) { + if (hasOwnProp(linkOverrides, k)) { + links[k] = fillVersion(String(linkOverrides[k])); + } + } +} + +export type LinkNames = + | 'WEBSITE' + | 'GITHUB' + | 'DOCS' + | 'DOCS_SQL' + | 'DOCS_RUNE' + | 'DOCS_API' + | 'COMMUNITY' + | 'SLACK' + | 'USER_GROUP' + | 'DEVELOPER_GROUP'; + +export function getLink(linkName: LinkNames): string { + switch (linkName) { + case 'WEBSITE': + return links.websiteHref; + case 'GITHUB': + return links.githubHref; + case 'DOCS': + return links.docsHref; + case 'DOCS_SQL': + return `${links.docsHref}/querying/sql.html`; + case 'DOCS_RUNE': + return `${links.docsHref}/querying/querying.html`; + case 'DOCS_API': + return `${links.docsHref}/operations/api-reference.html`; + case 'COMMUNITY': + return links.communityHref; + case 'SLACK': + return links.slackHref; + case 'USER_GROUP': + return links.userGroup; + case 'DEVELOPER_GROUP': + return links.developerGroup; + } +} diff --git a/web-console/src/utils/ingestion-spec.tsx b/web-console/src/utils/ingestion-spec.tsx index 9a2d70058c2..25022bd8586 100644 --- a/web-console/src/utils/ingestion-spec.tsx +++ b/web-console/src/utils/ingestion-spec.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { Field } from '../components/auto-form/auto-form'; import { ExternalLink } from '../components/external-link/external-link'; -import { DRUID_DOCS_VERSION } from '../variables'; +import { getLink } from '../links'; import { BASIC_TIME_FORMATS, @@ -175,13 +175,13 @@ export function getIngestionDocLink(spec: IngestionSpec): string { switch (type) { case 'kafka': - return `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/development/extensions-core/kafka-ingestion.html`; + return `${getLink('DOCS')}/development/extensions-core/kafka-ingestion.html`; case 'kinesis': - return `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/development/extensions-core/kinesis-ingestion.html`; + return `${getLink('DOCS')}/development/extensions-core/kinesis-ingestion.html`; default: - return `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/ingestion/native-batch.html#firehoses`; + return `${getLink('DOCS')}/ingestion/native-batch.html#firehoses`; } } @@ -317,9 +317,7 @@ const INPUT_FORMAT_FORM_FIELDS: Field[] = [

The parser used to parse the data.

For more information see{' '} - + the documentation . @@ -609,12 +607,7 @@ const FLATTEN_FIELD_FORM_FIELDS: Field[] = [ info: ( <> Specify a flatten{' '} - - expression - - . + expression. ), }, @@ -656,12 +649,7 @@ const TRANSFORM_FORM_FIELDS: Field[] = [ info: ( <> A valid Druid{' '} - - expression - - . + expression. ), }, @@ -931,7 +919,9 @@ const METRIC_SPEC_FORM_FIELDS: Field[] = [

Supported modes are ignore, overflow, and clip. See outlier handling modes {' '} @@ -1024,9 +1014,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F info: (

Druid connects to raw data through{' '} - + inputSources . You can change your selected inputSource here. @@ -1079,9 +1067,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F required: true, info: ( <> - + inputSource.baseDir

Specifies the directory to search recursively for files to be ingested.

@@ -1105,9 +1091,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F ], info: ( <> - + inputSource.filter

@@ -1177,11 +1161,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F info: (

The{' '} - - filter - {' '} + filter{' '} to apply to the data as part of querying.

), @@ -1241,9 +1221,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F <>

JSON array of{' '} - + S3 Objects . @@ -1405,9 +1383,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F <>

JSON array of{' '} - + S3 Objects . @@ -1465,9 +1441,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F <>

JSON array of{' '} - + Google Cloud Storage Objects . @@ -1500,7 +1474,9 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F info: ( <> consumerProperties @@ -1524,7 +1500,9 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F info: ( <> consumerProperties @@ -1575,9 +1553,7 @@ export function getIoConfigFormFields(ingestionComboType: IngestionComboType): F info: ( <> The Amazon Kinesis stream endpoint for a region. You can find a list of endpoints{' '} - + here . diff --git a/web-console/src/variables.ts b/web-console/src/variables.ts deleted file mode 100644 index f018073a6a2..00000000000 --- a/web-console/src/variables.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This is set to the latest available version and should be updated to the next version before release -export const DRUID_DOCS_VERSION = '0.17.0'; - -export const DRUID_WEBSITE = 'https://druid.apache.org'; -export const DRUID_GITHUB = 'https://github.com/apache/druid'; -export const DRUID_DOCS = `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}`; -export const DRUID_DOCS_SQL = `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/querying/sql.html`; -export const DRUID_DOCS_RUNE = `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/querying/querying.html`; -export const DRUID_COMMUNITY = 'https://druid.apache.org/community/'; -export const DRUID_USER_GROUP = 'https://groups.google.com/forum/#!forum/druid-user'; -export const DRUID_ASF_SLACK = 'https://druid.apache.org/community/join-slack'; -export const DRUID_DEVELOPER_GROUP = 'https://lists.apache.org/list.html?dev@druid.apache.org'; -export const DRUID_DOCS_API = `https://druid.apache.org/docs/${DRUID_DOCS_VERSION}/operations/api-reference.html`; diff --git a/web-console/src/views/load-data-view/load-data-view.tsx b/web-console/src/views/load-data-view/load-data-view.tsx index 49d322d3746..be13c22dfbf 100644 --- a/web-console/src/views/load-data-view/load-data-view.tsx +++ b/web-console/src/views/load-data-view/load-data-view.tsx @@ -54,6 +54,7 @@ import { } from '../../components'; import { FormGroupWithInfo } from '../../components/form-group-with-info/form-group-with-info'; import { AsyncActionDialog } from '../../dialogs'; +import { getLink } from '../../links'; import { AppToaster } from '../../singletons/toaster'; import { UrlBaser } from '../../singletons/url-baser'; import { @@ -146,7 +147,6 @@ import { SampleStrategy, } from '../../utils/sampler'; import { computeFlattenPathsForData } from '../../utils/spec-utils'; -import { DRUID_DOCS_VERSION } from '../../variables'; import { ExamplePicker } from './example-picker/example-picker'; import { FilterTable, filterTableSelectedColumnName } from './filter-table/filter-table'; @@ -811,9 +811,7 @@ export class LoadDataView extends React.PureComponent If you do not see your source of raw data here, you can try to ingest it by submitting a{' '} - + JSON task or supervisor spec . @@ -916,9 +914,7 @@ export class LoadDataView extends React.PureComponent

For more information please refer to the{' '} - + documentation on loading extensions . @@ -1060,9 +1056,7 @@ export class LoadDataView extends React.PureComponent

Druid ingests raw data and converts it into a custom,{' '} - + indexed format {' '} that is optimized for analytic queries. @@ -1311,9 +1305,7 @@ export class LoadDataView extends React.PureComponent If you have nested data, you can{' '} - + flatten {' '} it here. If the provided flattening capabilities are not sufficient, please @@ -1321,9 +1313,7 @@ export class LoadDataView extends React.PureComponent )}

Ensure that your data appears correctly in a row/column orientation.

- + {!selectedFlattenField && ( <> @@ -1462,7 +1452,7 @@ export class LoadDataView extends React.PureComponent @@ -1574,9 +1564,7 @@ export class LoadDataView extends React.PureComponent - + @@ -1724,16 +1712,12 @@ export class LoadDataView extends React.PureComponentOptional

Druid can perform per-row{' '} - + transforms {' '} of column values allowing you to create new derived columns or alter existing column.

- + {Boolean(transformQueryState.error && transforms.length) && ( @@ -1964,16 +1948,10 @@ export class LoadDataView extends React.PureComponentOptional

Druid can{' '} - - filter - {' '} + filter{' '} out unwanted data by applying per-row filters.

- + {!showGlobalFilter && this.renderColumnFilterControls()} {!selectedFilter && this.renderGlobalFilterControls()} @@ -2239,9 +2217,7 @@ export class LoadDataView extends React.PureComponent )} - + {!somethingSelected && ( <> @@ -2252,14 +2228,12 @@ export class LoadDataView extends React.PureComponent Select whether or not you want to set an explicit list of{' '} dimensions {' '} and{' '} - + metrics . Explicitly setting dimensions and metrics can lead to better compression and @@ -2304,9 +2278,7 @@ export class LoadDataView extends React.PureComponent

If you enable{' '} - + roll-up , Druid will try to pre-aggregate data before indexing it to conserve storage. @@ -2315,18 +2287,12 @@ export class LoadDataView extends React.PureComponent

If you enable rollup, you must specify which columns are{' '} - + dimensions {' '} (fields you want to group and filter on), and which are{' '} - - metrics - {' '} - (fields you want to aggregate on). + metrics (fields + you want to aggregate on).

} @@ -2779,9 +2745,7 @@ export class LoadDataView extends React.PureComponent

Optional

Configure how Druid will partition data.

- +
{this.renderNextBar({ @@ -2845,9 +2809,7 @@ export class LoadDataView extends React.PureComponent

Optional

Fine tune how Druid will ingest data.

- + {this.renderNextBar({ diff --git a/web-console/src/views/query-view/run-button/run-button.tsx b/web-console/src/views/query-view/run-button/run-button.tsx index 51b7025a094..59d85bde36b 100644 --- a/web-console/src/views/query-view/run-button/run-button.tsx +++ b/web-console/src/views/query-view/run-button/run-button.tsx @@ -33,6 +33,7 @@ import { IconNames } from '@blueprintjs/icons'; import React from 'react'; import { MenuCheckbox } from '../../../components'; +import { getLink } from '../../../links'; import { pluralIfNeeded } from '../../../utils'; import { getUseApproximateCountDistinct, @@ -43,7 +44,6 @@ import { setUseApproximateTopN, setUseCache, } from '../../../utils/query-context'; -import { DRUID_DOCS_RUNE, DRUID_DOCS_SQL } from '../../../variables'; export interface RunButtonProps { runeMode: boolean; @@ -100,7 +100,7 @@ export class RunButton extends React.PureComponent {