Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Сводка или преобразование данных ›Преобразование данных

Учебное пособие: Преобразование демонстрационных данных электронной коммерции

Преобразования позволяют извлекать информацию из индекса Elasticsearch, преобразовывать её и сохранять в другом индексе. Давайте воспользуемся демо-данными Kibana, чтобы продемонстрировать, как можно сворачивать и обобщать данные с помощью преобразований.

  1. Убедитесь, что ваша среда правильно настроена для использования преобразований. Если функции безопасности Elasticsearch включены, для выполнения этого учебника вам нужен пользователь с правами на предварительный просмотр и создание преобразований. Вам также нужны определенные права на индексы источника и назначения. См. Настройка.
  2. Выберите свой индекс источника.

    В этом примере мы будем использовать образцовые данные заказов электронной коммерции. Если вы еще не знакомы с индексом kibana_sample_data_ecommerce, используйте панель Доход в Kibana для изучения данных. Подумайте, какие выводы вы хотели бы получить из этих данных электронной коммерции.

  3. Выберите тип преобразования «поворотная таблица» и поэкспериментируйте с различными вариантами группировки и агрегирования данных.

    Существует два типа преобразований, но сначала мы попробуем преобразовать ваши данные с помощью поворотной таблицы, которая включает использование по крайней мере одного поля для группировки и применение по крайней мере одной агрегации. Вы можете предварительно просмотреть, как будут выглядеть преобразованные данные, поэтому не стесняйтесь поиграть с ними! Вы также можете включить гистограммы для лучшего понимания распределения значений в ваших данных.

    Например, вы можете сгруппировать данные по идентификатору продукта и рассчитать общее количество продаж для каждого продукта и его среднюю цену. В качестве альтернативы, вы можете изучить поведение отдельных клиентов и рассчитать, сколько каждый клиент потратил в общей сложности и сколько различных категорий продуктов они приобрели. Или вы можете учитывать валюты или географические данные. Каковы самые интересные способы преобразования и интерпретации этих данных?

    Перейдите в Управление > Управление стеком > Данные > Преобразования в Kibana и используйте мастер для создания преобразования:

    Creating a simple transform in Kibana

    Сгруппируйте данные по идентификатору клиента и добавьте одну или несколько агрегаций, чтобы узнать больше о заказах каждого клиента. Например, давайте вычислим сумму приобретенных ими продуктов, общую стоимость их покупок, максимальное количество продуктов, которые они приобрели в одном заказе, и общее количество их заказов. Мы добьемся этого, используя агрегацию sum по полям total_quantity и taxless_total_price, агрегацию max по полю total_quantity и агрегацию cardinality по полю order_id:

    Adding multiple aggregations to a transform in Kibana

    Если вас интересует подмножество данных, вы можете необязательно включить элемент запрос. В этом примере мы отфильтровали данные таким образом, чтобы рассматривать только заказы с currency значением EUR. В качестве альтернативы, мы могли бы сгруппировать данные и по этому полю тоже. Если вы хотите использовать более сложные запросы, вы можете создать свою таблицу данных из сохраненного запроса.

    Если хотите, вы можете использовать API предварительного просмотра преобразований.

    Пример API
    POST _transform/_preview
    {
      "source": {
        "index": "kibana_sample_data_ecommerce",
        "query": {
          "bool": {
            "filter": {
              "term": {"currency": "EUR"}
            }
          }
        }
      },
      "pivot": {
        "group_by": {
          "customer_id": {
            "terms": {
              "field": "customer_id"
            }
          }
        },
        "aggregations": {
          "total_quantity.sum": {
            "sum": {
              "field": "total_quantity"
            }
          },
          "taxless_total_price.sum": {
            "sum": {
              "field": "taxless_total_price"
            }
          },
          "total_quantity.max": {
            "max": {
              "field": "total_quantity"
            }
          },
          "order_id.cardinality": {
            "cardinality": {
              "field": "order_id"
            }
          }
        }
      }
    }
  4. Когда вы будете удовлетворены тем, что видите в предварительном просмотре, создайте преобразование.

    1. Укажите идентификатор преобразования, имя индекса назначения и, необязательно, описание. Если индекс назначения не существует, он будет автоматически создан при запуске преобразования.
    2. Решите, хотите ли вы, чтобы преобразование выполнялось один раз или непрерывно. Поскольку индекс образцовых данных не изменяется, давайте воспользуемся стандартным поведением и выполним преобразование только один раз. Однако, если вы хотите попробовать, нажмите Непрерывный режим. Вы должны выбрать поле, которое преобразование может использовать для проверки, какие сущности изменились. Как правило, рекомендуется использовать поле метки времени обработки. Однако в этом примере вы можете использовать поле order_date.
    3. Необязательно, вы можете настроить политику хранения, которая применяется к вашему преобразованию. Выберите поле даты, используемое для определения старых документов в индексе назначения, и укажите максимальный срок хранения. Документы, старше заданного значения, удаляются из индекса назначения.
    Adding transfrom ID and retention policy to a transform in Kibana

    В Kibana, прежде чем закончить создание преобразования, вы можете скопировать запрос API предварительного просмотра преобразования в буфер обмена. Эта информация пригодится позже, когда вы будете решать, хотите ли вы вручную создать индекс назначения.

    Copy the Dev Console statement of the transform preview to the clipboard

    Если хотите, вы можете использовать API создания преобразований.

    Пример API
    PUT _transform/ecommerce-customer-transform
    {
      "source": {
        "index": [
          "kibana_sample_data_ecommerce"
        ],
        "query": {
          "bool": {
            "filter": {
              "term": {
                "currency": "EUR"
              }
            }
          }
        }
      },
      "pivot": {
        "group_by": {
          "customer_id": {
            "terms": {
              "field": "customer_id"
            }
          }
        },
        "aggregations": {
          "total_quantity.sum": {
            "sum": {
              "field": "total_quantity"
            }
          },
          "taxless_total_price.sum": {
            "sum": {
              "field": "taxless_total_price"
            }
          },
          "total_quantity.max": {
            "max": {
              "field": "total_quantity"
            }
          },
          "order_id.cardinality": {
            "cardinality": {
              "field": "order_id"
            }
          }
        }
      },
      "dest": {
        "index": "ecommerce-customers"
      },
      "retention_policy": {
        "time": {
          "field": "order_date",
          "max_age": "60d"
        }
      }
    }
  5. Необязательно: создайте индекс назначения.

    Если индекс назначения не существует, он создаётся при первом запуске преобразования. Преобразование «поворотная таблица» выводит определения отображения для индекса назначения из исходных индексов и агрегаций преобразования. Если в индексе назначения есть поля, полученные из скриптов (например, если вы используете агрегации scripted_metrics или bucket_scripts), они создаются с помощью динамических отображений. Вы можете использовать API предварительного просмотра преобразования, чтобы предварительно просмотреть отображения, которые он будет использовать для индекса назначения. В Kibana, если вы скопировали запрос API в буфер обмена, вставьте его в консоль, а затем обратитесь к объекту generated_dest_index в ответе API.

    Преобразования могут иметь больше параметров конфигурации, предоставляемых API, чем параметры, доступные в Kibana. Например, вы можете задать конвейер обработки для dest, вызвав создание преобразования. Для всех параметров конфигурации преобразования см. документацию.

    Пример API
    {
      "preview" : [
        {
          "total_quantity" : {
            "max" : 2,
            "sum" : 118.0
          },
          "taxless_total_price" : {
            "sum" : 3946.9765625
          },
          "customer_id" : "10",
          "order_id" : {
            "cardinality" : 59
          }
        },
        ...
      ],
      "generated_dest_index" : {
        "mappings" : {
          "_meta" : {
            "_transform" : {
              "transform" : "transform-preview",
              "version" : {
                "created" : "8.0.0"
              },
              "creation_date_in_millis" : 1621991264061
            },
            "created_by" : "transform"
          },
          "properties" : {
            "total_quantity.sum" : {
              "type" : "double"
            },
            "total_quantity" : {
              "type" : "object"
            },
            "taxless_total_price" : {
              "type" : "object"
            },
            "taxless_total_price.sum" : {
              "type" : "double"
            },
            "order_id.cardinality" : {
              "type" : "long"
            },
            "customer_id" : {
              "type" : "keyword"
            },
            "total_quantity.max" : {
              "type" : "integer"
            },
            "order_id" : {
              "type" : "object"
            }
          }
        },
        "settings" : {
          "index" : {
            "number_of_shards" : "1",
            "auto_expand_replicas" : "0-1"
          }
        },
        "aliases" : { }
      }
    }

    В некоторых случаях выведенные отображения могут быть несовместимы с фактическими данными. Например, могут произойти переполнения чисел или динамически отображаемые поля могут содержать как числа, так и строки. Чтобы избежать этой проблемы, создайте индекс назначения до запуска преобразования. Дополнительные сведения см. в API создания индекса.

    Пример API

    Вы можете использовать информацию из предварительного просмотра преобразования для создания индекса назначения. Например:

    PUT /ecommerce-customers
    {
      "mappings": {
        "properties": {
          "total_quantity.sum" : {
            "type" : "double"
          },
          "total_quantity" : {
            "type" : "object"
          },
          "taxless_total_price" : {
            "type" : "object"
          },
          "taxless_total_price.sum" : {
            "type" : "double"
          },
          "order_id.cardinality" : {
            "type" : "long"
          },
          "customer_id" : {
            "type" : "keyword"
          },
          "total_quantity.max" : {
            "type" : "integer"
          },
          "order_id" : {
            "type" : "object"
          }
        }
      }
    }
  6. Запустите преобразование.

    Несмотря на то, что использование ресурсов автоматически корректируется в зависимости от нагрузки кластера, преобразование увеличивает нагрузку на поиск и индексацию в вашем кластере во время выполнения. Однако, если вы столкнулись с чрезмерной нагрузкой, вы можете остановить его.

    Вы можете запускать, останавливать и управлять преобразованиями в Kibana:

    Managing transforms in Kibana

    В качестве альтернативы можно использовать API запуска преобразований и API остановки преобразований.

    Пример API
    POST _transform/ecommerce-customer-transform/_start

    Если вы выбрали пакетное преобразование, это единая операция, имеющая одну контрольную точку. Вы не можете перезапустить его после завершения. Непрерывные преобразования отличаются тем, что они постоянно увеличивают и обрабатывают контрольные точки по мере поступления новых исходных данных.

  7. Просмотрите данные в вашем новом индексе.

    Например, используйте приложение Обзор в Kibana:

    Exploring the new index in Kibana
  8. Необязательно: создайте другое преобразование, на этот раз используя метод latest.

    Этот метод заполняет индекс назначения последними документами для каждого уникального значения ключа. Например, вы можете найти последние заказы (отсортированные по полю order_date) для каждого клиента или для каждой страны и региона.

    Creating a latest transform in Kibana
    Пример API
    POST _transform/_preview
    {
      "source": {
        "index": "kibana_sample_data_ecommerce",
        "query": {
          "bool": {
            "filter": {
              "term": {"currency": "EUR"}
            }
          }
        }
      },
      "latest": {
        "unique_key": ["geoip.country_iso_code", "geoip.region_name"],
        "sort": "order_date"
      }
    }

    Если индекс назначения не существует, он создаётся при первом запуске преобразования. Однако преобразования «последние» не вычисляют определения отображения при создании индекса. Вместо этого они используют динамические отображения. Чтобы использовать явные отображения, создайте индекс назначения до запуска преобразования.

  9. Если вы не хотите хранить преобразование, вы можете удалить его в Kibana или использовать API удаления преобразований. По умолчанию при удалении преобразования его индекс назначения и шаблоны индексов Kibana остаются.

Теперь, когда вы создали простые преобразования для образцовых данных Kibana, подумайте о возможных вариантах использования для ваших собственных данных. Дополнительные идеи см. в Когда использовать преобразования и Примерах.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/ecommerce-transforms.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API