From 2e68ce1a059608f25837eb67a10568203ddf5e18 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Sun, 15 Aug 2021 08:48:51 -0500 Subject: [PATCH] Developer guide - index patterns key concepts (#96017) * add index patterns key concepts --- dev_docs/assets/data_view_diagram.png | Bin 0 -> 69257 bytes dev_docs/key_concepts/data_views.mdx | 32 ++ dev_docs/tutorials/data_views.mdx | 86 +++++ src/plugins/data/README.mdx | 465 +------------------------- 4 files changed, 122 insertions(+), 461 deletions(-) create mode 100644 dev_docs/assets/data_view_diagram.png create mode 100644 dev_docs/key_concepts/data_views.mdx create mode 100644 dev_docs/tutorials/data_views.mdx diff --git a/dev_docs/assets/data_view_diagram.png b/dev_docs/assets/data_view_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0a47abc195d95232661dc9ad9edb5e41e638cc GIT binary patch literal 69257 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 literal 0 HcmV?d00001 diff --git a/dev_docs/key_concepts/data_views.mdx b/dev_docs/key_concepts/data_views.mdx new file mode 100644 index 0000000000000..e2b64c8705c48 --- /dev/null +++ b/dev_docs/key_concepts/data_views.mdx @@ -0,0 +1,32 @@ +--- +id: kibDataViewsKeyConcepts +slug: /kibana-dev-docs/data-view-intro +title: Data Views +summary: Data views are the central method of defining queryable data sets in Kibana +date: 2021-08-11 +tags: ['kibana','dev', 'contributor', 'api docs'] +--- + +*Note: Kibana index patterns are currently being renamed to data views. There will be some naming inconsistencies until the transition is complete.* + +Data views (formerly Kibana index patterns or KIPs) are the central method of describing sets of indices for queries. Usage is strongly recommended +as a number of high level rely on them. Further, they provide a consistent view of data across +a variety Kibana apps. + +Data views are defined by a wildcard string (an index pattern) which matches indices, data streams, and index aliases, optionally specify a +timestamp field for time series data, and are stored as a . They have a field list which comprises all the fields in matching indices plus fields defined specifically +on the data view via runtime fields. Schema-on-read functionality is provided by data view defined runtime fields. + +![image](../assets/data_view_diagram.png) + + + +The data view API is made available via the data plugin (`data.indexPatterns`, soon to be renamed) and most commonly used with +(`data.search.search.SearchSource`) to perform queries. SearchSource will apply existing filters and queries from the search bar UI. + +Users can create data views via [Data view management](https://www.elastic.co/guide/en/kibana/current/index-patterns.html). +Additionally, they can be created through the data view API. + +Data views also allow formatters and custom labels to be defined for fields. + diff --git a/dev_docs/tutorials/data_views.mdx b/dev_docs/tutorials/data_views.mdx new file mode 100644 index 0000000000000..453146d81c4d7 --- /dev/null +++ b/dev_docs/tutorials/data_views.mdx @@ -0,0 +1,86 @@ +--- +id: kibDevTutorialDataViews +slug: /kibana-dev-docs/tutorials/data-views +title: Data views API +summary: Data views API +date: 2021-08-11 +tags: ['kibana', 'onboarding', 'dev', 'architecture'] +--- + +*Note: Kibana index patterns are currently being renamed to data views. There will be some naming inconsistencies until the transition is complete.* + +### Data views API + +- Get list of data views +- Get default data view and examine fields +- Get data view by id +- Find data view by title +- Create data view +- Create data view and save it +- Modify data view and save it +- Delete data view + +#### Get list of data view titles and ids + +``` +const idsAndTitles = await data.indexPatterns.getIdsWithTitle(); +idsAndTitles.forEach(({id, title}) => console.log(`Data view id: ${id} title: ${title}`)); +``` + +#### Get default data view and examine fields + +``` +const defaultDataView = await data.indexPatterns.getDefault(); +defaultDataView.fields.forEach(({name}) => { console.log(name); }) +``` + +#### Get data view by id + +``` +const id = 'xxxxxx-xxx-xxxxxx'; +const dataView = await data.indexPatterns.get(id); +``` + +#### Find data view by title + +``` +const title = 'kibana-*'; +const [dataView] = await data.indexPatterns.find(title); +``` + +#### Create data view + +``` +const dataView = await data.indexPatterns.create({ title: 'kibana-*' }); +``` + +#### Create data view and save it immediately + +``` +const dataView = await data.indexPatterns.createAndSave({ title: 'kibana-*' }); +``` + +#### Create data view, modify, and save + +``` +const dataView = await data.indexPatterns.create({ title: 'kibana-*' }); +dataView.setFieldCustomLabel('customer_name', 'Customer Name'); +data.indexPatterns.createSavedObject(dataView); +``` + +#### Modify data view and save it + +``` +dataView.setFieldCustomLabel('customer_name', 'Customer Name'); +await data.indexPatterns.updateSavedObject(dataView); +``` + +#### Delete index pattern + +``` +await data.indexPatterns.delete(dataViewId); +``` + +### Data view HTTP API + +Rest-like HTTP CRUD+ API - [docs](https://www.elastic.co/guide/en/kibana/master/index-patterns-api.html) diff --git a/src/plugins/data/README.mdx b/src/plugins/data/README.mdx index c2da9a686cacb..40e82d3034ee2 100644 --- a/src/plugins/data/README.mdx +++ b/src/plugins/data/README.mdx @@ -49,471 +49,14 @@ This is helpful when you want to provide a user with options, for example when c ``` -## Index Patterns +## Data Views -The Index Patterns API provides a consistent method of structuring and formatting documents +The data views API provides a consistent method of structuring and formatting documents and field lists across the various Kibana apps. Its typically used in conjunction with -SearchSource for composing queries. + for composing queries. -### Index Patterns API +*Note: Kibana index patterns are currently being renamed to data views. There will be some naming inconsistencies until the transition is complete.* -- Get list of index patterns -- Get default index pattern and examine fields -- Get index pattern by id -- Find index pattern by title -- Create index pattern -- Create index pattern and save it -- Modify index pattern and save it -- Delete index pattern - -#### Get list of index pattern titles and ids - -``` -const idsAndTitles = await data.indexPatterns.getIdsWithTitle(); -idsAndTitles.forEach(({id, title}) => console.log(`Index pattern id: ${id} title: ${title}`)); -``` - -#### Get default index pattern and examine fields - -``` -const defaultIndexPattern = await data.indexPatterns.getDefault(); -defaultIndexPattern.fields.forEach(({name}) => { console.log(name); }) -``` - -#### Get index pattern by id - -``` -const id = 'xxxxxx-xxx-xxxxxx'; -const indexPattern = await data.indexPatterns.get(id); -``` - -#### Find index pattern by title - -``` -const title = 'kibana-*'; -const [indexPattern] = await data.indexPatterns.find(title); -``` - -#### Create index pattern - -``` -const indexPattern = await data.indexPatterns.create({ title: 'kibana-*' }); -``` - -#### Create index pattern and save it immediately - -``` -const indexPattern = await data.indexPatterns.createAndSave({ title: 'kibana-*' }); -``` - -#### Create index pattern, modify, and save - -``` -const indexPattern = await data.indexPatterns.create({ title: 'kibana-*' }); -indexPattern.setFieldCustomLabel('customer_name', 'Customer Name'); -data.indexPatterns.createSavedObject(indexPattern); -``` - -#### Modify index pattern and save it - -``` -indexPattern.setFieldCustomLabel('customer_name', 'Customer Name'); -await data.indexPatterns.updateSavedObject(indexPattern); -``` - -#### Delete index pattern - -``` -await data.indexPatterns.delete(indexPatternId); -``` - -### Index Patterns HTTP API - -Index patterns provide Rest-like HTTP CRUD+ API with the following endpoints: - -- Index Patterns API - - Create an index pattern — `POST /api/index_patterns/index_pattern` - - Fetch an index pattern by `{id}` — `GET /api/index_patterns/index_pattern/{id}` - - Delete an index pattern by `{id}` — `DELETE /api/index_patterns/index_pattern/{id}` - - Partially update an index pattern by `{id}` — `POST /api/index_patterns/index_pattern/{id}` -- Fields API - - Update field — `POST /api/index_patterns/index_pattern/{id}/fields` -- Scripted Fields API - - Create a scripted field — `POST /api/index_patterns/index_pattern/{id}/scripted_field` - - Upsert a scripted field — `PUT /api/index_patterns/index_pattern/{id}/scripted_field` - - Fetch a scripted field — `GET /api/index_patterns/index_pattern/{id}/scripted_field/{name}` - - Remove a scripted field — `DELETE /api/index_patterns/index_pattern/{id}/scripted_field/{name}` - - Update a scripted field — `POST /api/index_patterns/index_pattern/{id}/scripted_field/{name}` - -### Index Patterns API - -Index Patterns REST API allows you to create, retrieve and delete index patterns. I also -exposes an update endpoint which allows you to update specific fields without changing -the rest of the index pattern object. - -#### Create an index pattern - -Create an index pattern with a custom title. - -``` -POST /api/index_patterns/index_pattern -{ - "index_pattern": { - "title": "hello" - } -} -``` - -Customize creation behavior with: - -- `override` — if set to `true`, replaces an existing index pattern if an - index pattern with the provided title already exists. Defaults to `false`. -- `refresh_fields` — if set to `true` reloads index pattern fields after - the index pattern is stored. Defaults to `false`. - -``` -POST /api/index_patterns/index_pattern -{ - "override": false, - "refresh_fields": true, - "index_pattern": { - "title": "hello" - } -} -``` - -At creation all index pattern fields are option and you can provide them. - -``` -POST /api/index_patterns/index_pattern -{ - "index_pattern": { - "id": "...", - "version": "...", - "title": "...", - "type": "...", - "intervalName": "...", - "timeFieldName": "...", - "sourceFilters": [], - "fields": {}, - "typeMeta": {}, - "fieldFormats": {}, - "fieldAttrs": {} - } -} -``` - -The endpoint returns the created index pattern object. - -```json -{ - "index_pattern": {} -} -``` - -#### Fetch an index pattern by ID - -Retrieve an index pattern by its ID. - -``` -GET /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -``` - -Returns an index pattern object. - -```json -{ - "index_pattern": { - "id": "...", - "version": "...", - "title": "...", - "type": "...", - "intervalName": "...", - "timeFieldName": "...", - "sourceFilters": [], - "fields": {}, - "typeMeta": {}, - "fieldFormats": {}, - "fieldAttrs": {} - } -} -``` - -#### Delete an index pattern by ID - -Delete and index pattern by its ID. - -``` -DELETE /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -``` - -Returns an '200 OK` response with empty body on success. - -#### Partially update an index pattern by ID - -Update part of an index pattern. Only provided fields will be updated on the -index pattern, missing fields will stay as they are persisted. - -These fields can be update partially: - -- `title` -- `timeFieldName` -- `intervalName` -- `fields` (optionally refresh fields) -- `sourceFilters` -- `fieldFormatMap` -- `type` -- `typeMeta` - -Update a title of an index pattern. - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -{ - "index_pattern": { - "title": "new_title" - } -} -``` - -All update fields are optional, you can specify the following fields. - -``` -POST /api/index_patterns/index_pattern -{ - "index_pattern": { - "title": "...", - "timeFieldName": "...", - "intervalName": "...", - "sourceFilters": [], - "fieldFormats": {}, - "type": "...", - "typeMeta": {}, - "fields": {} - } -} -``` - -- `refresh_fields` — if set to `true` reloads index pattern fields after - the index pattern is stored. Defaults to `false`. - -``` -POST /api/index_patterns/index_pattern -{ - "refresh_fields": true, - "index_pattern": { - "fields": {} - } -} -``` - -This endpoint returns the updated index pattern object. - -```json -{ - "index_pattern": {} -} -``` - -### Fields API - -Fields API allows to change field metadata, such as `count`, `customLabel`, and `format`. - -#### Update fields - -Update endpoint allows you to update fields presentation metadata, such as `count`, -`customLabel`, and `format`. You can update multiple fields in one request. Updates -are merges with persisted metadata. To remove existing metadata specify `null` as value. - -Set popularity `count` for field `foo`: - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/fields -{ - "fields": { - "foo": { - "count": 123 - } - } -} -``` - -Update multiple metadata values and fields in one request: - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/fields -{ - "fields": { - "foo": { - "count": 123, - "customLabel": "Foo" - }, - "bar": { - "customLabel": "Bar" - } - } -} -``` - -Use `null` value to delete metadata: - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/fields -{ - "fields": { - "foo": { - "customLabel": null - } - } -} -``` - -This endpoint returns the updated index pattern object. - -```json -{ - "index_pattern": {} -} -``` - -### Scripted Fields API - -Scripted Fields API provides CRUD API for scripted fields of an index pattern. - -#### Create a scripted field - -Create a field by simply specifying its name, will default to `string` type. Returns -an error if a field with the provided name already exists. - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field -{ - "field": { - "name": "my_field" - } -} -``` - -Create a field by specifying all field properties. - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field -{ - "field": { - "name": "", - "type": "", - "searchable": false, - "aggregatable": false, - "count": 0, - "script": "", - "scripted": false, - "lang": "", - "conflictDescriptions": {}, - "format": {}, - "esTypes": [], - "readFromDocValues": false, - "subType": {}, - "indexed": false, - "customLabel": "", - "shortDotsEnable": false - } -} -``` - -#### Upsert a scripted field - -Creates a new field or updates an existing one, if one already exists with the same name. - -Create a field by simply specifying its name. - -``` -PUT /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field -{ - "field": { - "name": "my_field" - } -} -``` - -Create a field by specifying all field properties. - -``` -PUT /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field -{ - "field": { - "name": "", - "type": "", - "searchable": false, - "aggregatable": false, - "count": 0, - "script": "", - "scripted": false, - "lang": "", - "conflictDescriptions": {}, - "format": {}, - "esTypes": [], - "readFromDocValues": false, - "subType": {}, - "indexed": false, - "customLabel": "", - "shortDotsEnable": false - } -} -``` - -#### Fetch a scripted field - -Fetch an existing index pattern field by field name. - -``` -GET /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field/ -``` - -Returns the field object. - -```json -{ - "field": {} -} -``` - -#### Delete a scripted field - -Delete a field of an index pattern. - -``` -DELETE /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field/ -``` - -#### Update a an existing scripted field - -Updates an exiting field by mergin provided properties with the existing ones. If -there is no existing field with the specified name, returns a `404 Not Found` error. - -You can specify any field properties, except `name` which is specified in the URL path. - -``` -POST /api/index_patterns/index_pattern/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/scripted_field/ -{ - "field": { - "type": "", - "searchable": false, - "aggregatable": false, - "count": 0, - "script": "", - "scripted": false, - "lang": "", - "conflictDescriptions": {}, - "format": {}, - "esTypes": [], - "readFromDocValues": false, - "subType": {}, - "indexed": false, - "customLabel": "", - "shortDotsEnable": false - } -} -``` ## Query