--- url: https://docs.dataplatform.ovh.net/index.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Data Platform ## What is Data Platform? Data Platform is a managed platform for building data products, with the infrastructure decisions already made: there is no cluster to size, no orchestrator to run and no deployment pipeline to build. Connecting sources, storing and modelling data, processing it, analyzing it and exposing the result as an API or an application are all provisioned and operated by the platform, behind four levels of automation, so effort goes into business logic rather than logistics. ![The four levels of automation](/images/public-cloud/data-platform/product/picts/automation_levels.png) A [project](https://docs.dataplatform.ovh.net/manage-projects.md) is the unit of work and the unit of isolation. It holds the sources, tables, buckets, pipelines, queries, dashboards, APIs and apps that make up one data system, together with the access rules over them. Creating a project deploys more than 60 microservices and provisions machines in the selected cloud region in under eight minutes, with no further input. :::info Access to a project is usually shared collaboratively along role lines: one group works on ingestion and transformation, another on analytics, another on the application layer. The [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md) decides who can read and change what, down to individual table attributes. ::: If Data Platform is new to you, the fastest way in is the six-step guide that builds a working application on sample data. From there, the [services](https://docs.dataplatform.ovh.net/landing-page-services.md) documentation covers each component in the order data moves through it. [### Getting started→ Build a first end-to-end application in six steps. ](/landing-page-getting-started)[### Tutorials→ Complete worked use cases, from Kafka to Superset. ](/landing-page-tutorials)[### Services→ The seven services a project is made of, in data order. ](/landing-page-services)[### Developers→ Public APIs and the SDKs behind them. ](/landing-page-developers)[### Manage your platform→ Organizations, projects, pricing and finding your way around. ](/landing-page-manage) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/landing-page-getting-started.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Get started with your analytics application ## What you will build The Getting Started guide will teach you **how to create an analytics project using the Platform**, through concrete examples and best practices. At the end of this tutorial, you will be completely self-sufficient. You’ll be able to create and deploy your own customized analytics application with sophisticated data processing. :::info **Before you start.** Access to Data Platform is set up once per organization: see [Sign up and sign in](https://docs.dataplatform.ovh.net/manage-organizations-signin-signup.md). Then [create a project](https://docs.dataplatform.ovh.net/manage-projects-create.md), which takes about eight minutes to provision. The tutorial below assumes both are done. ::: The guide uses sample data, and demonstrates how to build an analytics application with predictive insights correlating subway traffic in the city of Chicago with weather variables and the time of the year. ![Final application](/images/public-cloud/data-platform/getting-started/picts/cta2.jpg) _Photo by Skyler Gerald on Unsplash_ The guide walks through building that application step by step, from connecting the sample data to deploying the finished app. This guide takes about **1 hour** to complete. :::info We recommend using **Chrome** as your default browser. If you're using a different browser and face any issues, check out the link to our support portal to get in touch. ::: ## Setting-up your environment Before you start working with data, you will need to set-up a working project environment. Your working environment is called a **Project**. It includes all the necessary tools and dedicated compute and storage resources you’ll need to build your analytics application. ![Setting-up your environment — Dp new homepage](/images/public-cloud/data-platform/getting-started/picts/dp_new_homepage.png) When asked, choose the template to create an **end-to-end project**. This will instantiate all the services on the Platform to be ready to use in your project. ![Setting-up your environment — Create dataplant2 template](/images/public-cloud/data-platform/getting-started/picts/create-dataplant2-template.png) Proceed with the creation. Once you have spinned up a Project, open it to [move on to creating your first application](https://docs.dataplatform.ovh.net/landing-page-getting-started.md)! ## Build your analytics app from scratch on the Platform The goal of this tutorial is to get you familiar with the Platform so that you can start creating your own applications as soon and as quickly as possible. We'll walk you through the main steps to **build a data visualization app in less than 1 hour**. The application to be built serves to visualize the rides in Chicago's railway stations. It will look like this by the end of this tutorial: ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/dashboard-final-new.png) You will use sample datasets, and all the features and pre-written code provided for you by the Platform. ## Six easy steps After having [created a Project](https://docs.dataplatform.ovh.net/landing-page-getting-started.md#setting-up-your-environment), your data application will be created in 6 easy steps. [Connect

Connect sources in the Connectors

Define, analyze & clean your data sources

](https://docs.dataplatform.ovh.net/getting-started-connect-sources.md) [Organize

Organize your data in the Lakehouse Manager

Create and Build your data models

](https://docs.dataplatform.ovh.net/getting-started-organize-data.md) [Transfer

Prepare the data on the Data Processing Engine

Configure the data import and transformation processes

](https://docs.dataplatform.ovh.net/getting-started-prepare-data.md) [Query

Make queries in the Analytics Manager

Create custom queries to retrieve data from your data model

](https://docs.dataplatform.ovh.net/getting-started-create-queries.md) [Expose

Expose your data through an API

Expose your data by deploying an API dedicated to your Project

](https://docs.dataplatform.ovh.net/getting-started-expose-api.md) [Visualize

Visualize it on the APP Manager

Create and deploy your front-end application

](https://docs.dataplatform.ovh.net/getting-started-visualize-data.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-connect-sources.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Define, analyze and clean your data sources ## Objective In this step, you will learn how to **connect your first data source** to your Project, **analyze** and **clean** it in a consistent way so that relations between your data can be understood at a glance. :::info This step assumes a project is open. If you do not have one yet, [create a project](https://docs.dataplatform.ovh.net/manage-projects-create.md) first. ::: The **Connectors** is the first component you should use when starting out on your Project. It is the component that controls: - Data sources collection - Data analysis & cleaning ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/connectors-home.png) The data source consists of two CSV files containing data about Chicago weather and public transport. ## Connect your first source Let’s go get your data! :::info To get your data, download the following files [here](https://eu.dataplatform.ovh.net/getting-started/chicago_files.zip). Once unzipped, you will find 2 _.csv_ files: ::: - _chicago\_calendar\_full.csv_ - a table with weather conditions by day where each row represents a day. - _station\_rides.csv_ - a table with railway usage information per station per day where each row represents a day on a given station. Inside the Connectors, go to the menu **Sources** (1) and click on the **New Source** (2) button on the top right-hand corner to connect your very first data source. ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/datacatalog-step1.png) There are many connectors supported by the Platform. In this tutorial, you will use a simple file upload. Look for _File upload_ in the search bar, click on the icon and then click on the green _Select_ button or you can quickly click the _File Upload_ button on the bottom right. ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/datacatalog-step2.png) Give a name to your source: for example _chicago\_files_. Then you can **drag & drop or upload the 2 files** provided at the beginning of the tutorial, and click on **Create**. ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/datacatalog-step3.png) Your files are now loaded to a [bucket](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md)! ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/datacatalog-step4.png) Now, let's move on to extracting their metadata. ## Analyze your source data You should still be inside the Connectors component. Click on **Analyzer** from the left-hand menu. Here you will extract metadata (i.e. information about your data) from your sources and choose which columns you want to display. The two source files you just uploaded appear on the sidebar. Click on the respective source name (i.e. _chicago\_files_) to expand it. Then, click on each of the files to automatically launch a metadata extraction. ![Connectors](/images/public-cloud/data-platform/getting-started/app-init/picts/datacatalog-step5.png) The metadata extraction should take around 30 seconds. :::info The Analyzer is also where you can add blueprint rules (by clicking on the blue button _New Rule_). The Platform automatically applies a formatting transformation on dates to set them in a standard _yyyy-mm-dd_ format. ::: [ Learn more about the Analyzer](https://docs.dataplatform.ovh.net/landing-page-connectors-analyzer.md) It's time to head to the Lakehouse Manager to see what's next. [Create and Build your data models](https://docs.dataplatform.ovh.net/getting-started-organize-data.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-organize-data.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create and Build your data models ## Objective The **Lakehouse Manager** is the next component you will be using. It is the component that controls: - Data warehousing - Policy Tag Management Using the Lakehouse Manager let us plan out your data structure at the **conceptual level**. This will be done with the help of the _Tables_ functionality. ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-home.png) :::info This tutorial is meant for **Standard Datasets** using the _Lakehouse Manager Engine_. To know how to follow this same step with **External Datasets** click [here](https://docs.dataplatform.ovh.net/tutorials-external-datasets.md). ::: ## Organize your data in tables ### Create your primary schema #### Add tables to the data model Once that your metadata has been extracted, it's time to head to the Tables dashboard. This is where you will **build a unified and queryable view of all your data**. The empty Tables page should look like this. ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step1.png) The _All tables_ tab is where you have access to the entirety of your data. The _New View_ tab allows you to create views of only a part of your data in order to collaborate better in large teams. Since this is a simple tutorial, you should work in the _All tables_ tab. Now let’s concentrate on creating your primary tables and their attributes. First, hover your cursor over the blue ➕ **NEW TABLE** button on the right-hand side of the screen. This will reveal the create options : - Upload a file - Create from Connectors source - Create an empty tables :::info For the purpose of this tutorial, we shall proceed with **Create from a Connectors source.** To create a table using upload a file refer to the [create tables](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md#create-a-table) documentation. ::: ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step2.png) Once you click on _create from a connectors source_, you will be shown a list of sources from the previous step. Click on source you want to add and proceed further by clicking on _Next_. No need to change the default settings here. :::info The options _Build the table, load the table once, and generate Load action for later_ can be disabled and each step can be done individually as well. This can be explored in detail [here](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md#create-a-table) ::: Press **Create** and proceed to repeat the same with the second table as well. ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step3.png) ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step4.png) :::info Note that each time you make a change on the Tables page, your visual configuration is **automatically saved**. ::: At this stage, your Tables page should look like this. ![Lakehouse Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step5.png) :::info Note that the Platform uses the metadata information captured in the Analyzer step to automatically create tables and assign attribute names & types. The source files provided are good to go, however in a real Project you should use the Analyzer to check the data sources, before dragging and dropping them in the Tables page. ::: ### Create your aggregate table Now, you will aggregate all important data from the sources (namely rides, dates and temperatures) into one table that will be used in the final application.To create your first _Aggregate_ table, click on the blue ➕ icon. Select _Create an empty table_, and you will be shown a new table configuration. Set a name (_dataset\_history_ for example) and save it. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step6.png) ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step7.png) Now, before you start adding attributes to the new empty table you have created you will need to change the view from list to canvas on the bottom right side of the screen to make the next steps easier. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step8.png) ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step9.png) Move the attributes below by drag and drop to _dataset\_history_: | Original table | Attributes to drag-and-drop | | :-------------------------: | ------------------------------------------------------------------------ | | **stations\_rides** | _date_ / _lat_ / _lng_ / _rides_ / _station\_id_ / _station\_name_ | | **chicago\_calendar\_full** | _month_ / _temperature_ / _week\_day_ / _week\_day\_label_ / _weekend_ / | ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step10.png) Finally, you will need to create one new attribute to help translate numerical temperature data into understandable categories (cold, hot, ..). Start by clicking on the ➕ icon that appears at the top of the table _dataset\_history_ when you click on it. You can then create or edit an attribute inside a table. Define the attribute as such: | Attribute name | Type | Nature | | :------------------: | ------ | --------- | | **cat\_temperature** | String | Dimension | ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step11.png) :::info For the moment, this attribute is not physically specified. This will be done later in another component: the Data Processing Engine. ::: [ Learn more about Tables](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md) ### Finalize the build :::warning One last quick check! Make sure to **double-check that your data model looks exactly like the one in the screenshots** before moving to the next step. If some attributes are missing you will get stuck in later steps of the tutorial. ::: Now, click on the _Build_ icon (under the blue ➕ icon) to effectively create/update the tables and attributes in your dataset. This still doesn't load the data into the tables (which will be done in the next article), it simply applies the logical schema to tables and attributes in your underlying dataset. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/lakehouse-step12.png) :::info While the visual logical schema of the data is automatically saved, changes to your tables won't be visible in the rest of the Platform as long as they are not built. ::: The build task for this tutorial shouldn't take more than a few minutes to run. Once it is done, you can move on. ### Add relevant metrics with Virtual Attributes Before moving on to the physical processing (ETL/ELT) of the data into this model, let's prepare additional metrics for analytics later on. The final application that you are building following this tutorial includes a chart with the **number of rides per day on a given station**: ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/dashboard-final-new.png) However, you do not have the necessary data to build that chart directly on the primary sources. You will need a metric that gives you the average number of rides per day for a given station and that can be used in queries and dashboards. But how do you compute it using the Platform? One way to do this is to create a **virtual attribute**. Virtual attributes allow you to calculate SQL formulas that will be **computed on the fly** and won't be stored in the database. They can be used in a query or a chart in your final dashboard. :::info Adding or editing virtual attributes does not require rebuilding the schema. ::: Switch to the **Attributes** page. This page lists all physical and virtual attributes in your data model, and the lineage in your Project. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/attributes-step1.png) Click on the _New Attribute_ button to create a virtual attribute. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/attributes-step2.png) In the creation window, make sure to select _Virtual_ as the realm. ![lakehouse manager](/images/public-cloud/data-platform/getting-started/app-init/picts/attributes-step3.png) Now add these two attributes and their respective SQL code: | Attribute name | SQL | | :------------------------------------: | -------------------------------------------------------------------------------------- | | **avg\_rides\_per\_day\_per\_station** | SUM(rides)/COUNT(DISTINCT CONCAT(CAST(date AS VARCHAR), CAST(station\_id AS VARCHAR))) | | **yearmonth** | SUBSTR(CAST(date as VARCHAR),1,7) | The **yearmonth** attribute gives you the year and month in the format _yyyy-mm_. You will use it later. :::info Notice how you just used two different methods to generate new attributes/metrics from imported data: **adding an attribute to a Aggregate table** and **virtual attributes**. ::: - Adding a new physical attribute takes up storage and requires you to physically define them in the Data Processing Engine, but this makes them more rigorous as their specifications can then be edited without changing the whole data model. - Virtual attributes are a quick win but can become hard to manage if you need to modify them when scaling. It's time to head to the Data Processing Engine to see what's next. [Prepare your data pipelines with the Data Processing Engine](https://docs.dataplatform.ovh.net/getting-started-prepare-data.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-prepare-data.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Configure data imports and transformations ## Objective The Data Processing Engine (DPE) is the component that lets you **create and execute data pipelines outside and within the Platform**. Everything is automated, from the management and deployment to the scalability, to help you focus on the business logic of your data Project rather than its logistics. While the Lakehouse Manager is where you plan out your data structure at the **conceptual level**, the Data Processing Engine is where you execute actions to **physically impact your data**. ![DPE](/images/public-cloud/data-platform/getting-started/app-init/picts/homepage-dpe.png) :::info This tutorial is meant for **Standard Datasets** using the _Lakehouse Manager Engine_. To know how to follow this same step with **External Datasets** click [here](https://docs.dataplatform.ovh.net/tutorials-external-datasets.md). ::: ## Actions An [action](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) consists of a unitary physical operation on the data. Actions can be organized in stages in order to produce automated data processing pipelines called [workflows](https://docs.dataplatform.ovh.net/dpe-workflows.md). Click on the **Actions** menu of your Data Processing Engine. You should see the two _Load_ actions that were[ automatically generated in the previous step](https://docs.dataplatform.ovh.net/getting-started-organize-data.md#organize-your-data-in-tables): ![DPE Actions](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step1.png) These Load actions will physically extract the data from your sources and load it into your data warehouse, following the schema made in the Lakehouse Manager. ### Create more actions :::info Our Marketplace gives you access to a dozen of curated actions to kick-start your data processing Projects: _load_ actions, _aggregate_ actions, _delete_ actions, etc. If you cannot find what you need in the catalog, you can always resort to a _custom_ action that allows you to **run any piece of Python 3+ code** as part of your data pipelines. ::: [ Learn more about custom actions](https://docs.dataplatform.ovh.net/dpe-actions-custom.md). For this tutorial, you will create an action used to aggregate your data into the _dataset\_history_ table you created in the previous part. Click on **New action** and select the _Aggregate action_ template from the Store. ![DPE agg action 1](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step2.png) There will be 3 simple steps to configure the aggregate action: - **(1)** Select the source table : _stations\_rides_ - **(2)** Select the destination table: _dataset\_history_ - **(3)** Select the source table : _chicago\_calendar\_full_ Change the join condition to an _INNER join_ using the dropdown menu. This will ensure that you do not have any null fields in the records of your dataset\_history table. Also make sure to copy and paste the following sql code to let the aggregate action know how the tables are going to be linked: ``` stations_rides.date = chicago_calendar_full.date ``` :::warning Note this is required because the concept of _joining tables using primary keys_ does not exist for **standard datasets**. If you are using an **external dataset**, then it will be automatically generated. ::: ![DPE agg action 2](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step3.png) The attributes need to be manually mapped out. Refer the screenshot below and make sure all the attributes are mapped correctly. Make sure that the all the attribute are in the **SELECT** function. :::warning If you are using an **external dataset**, then the attributes will be automatically mapped out. Only the attribute _rides_ needs to be switched to **SUM**. ::: ![DPE agg action 4](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step4.png) Finally, let's define the categorical attribute _cat\_temperature_ that you created earlier. Click on the **\< map >** (short for "mapping") option in blue option dropdown as shown below and switch it to **\< sql >**. ![DPE agg action 3](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step5.png) Simply copy-paste the SQL command below: ``` CASE WHEN chicago_calendar_full.temperature < 40 THEN 'very cold' WHEN chicago_calendar_full.temperature < 48 THEN 'cold' WHEN chicago_calendar_full.temperature < 55 THEN 'medium' WHEN chicago_calendar_full.temperature < 62 THEN 'hot' ELSE 'very hot' END ``` :::warning **Leaving a destination attribute unmapped in the Aggregate action configuration will trigger an error when the action is launched**. If you'd rather leave the destination field empty, make sure to simply remove it from the list of mapped attributes. ::: [ Learn more about Aggregate actions](https://docs.dataplatform.ovh.net/dpe-actions-aggregate.md) Click on **Create** at the top-right. ![DPE agg action 3](/images/public-cloud/data-platform/getting-started/app-init/picts/actions-step6.png) **You have now generated all the actions** required for this tutorial. :::info Of course, your real-life Project will probably have more than 3 actions. You can organize your actions in folders and rename them if needed. You can also use more than one repository, especially if you are working in collaboration with teammates. Repositories of actions can be versioned and also synced with external Git repositories. Check-out the [dedicated product documentation](https://docs.dataplatform.ovh.net/dpe-actions-manage.md#manage-actions) page to learn more about how to do that! ::: [ Learn more about Actions in the Product Documentation](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) Before you proceed to the next step in creating workflows, we will create one final action - **Delete**. Its use is very straightforward, to delete the contents of the selected table(s). Create a new delete action and add all the tables we have created so far - the idea is simple, if you are loading a table with new data or loading the table again with old data then you will need to clean the table before doing so because its best practice. ## Workflows A workflow defines the order in which your actions run. Within a workflow, actions are organized in sequential stages. Within a stage, all actions will be run in parallel while stages will always run one after the other. The same action can be used multiple times in the same workflow. A workflow, just like an action, can either be launched manually, set up to run on a schedule or triggered through an API call. :::info Note that it is important to remember that **stages are run one after the other** in the order you planned them while **actions contained in a stage are all run all at the same time** regardless of the order. In short, the order of the actions inside a stage does not matter while the stages’ order inside a workflow does. ::: To create your first workflow, you'll need to head to the _Workflow_ tab and click on **New Workflow**. Head to preferences or double-click on the header name to set a new name _Import Chicago Data_. ![DPE workflow 1](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step1.png) Let's start by defining three different stages by clicking on **Add a stage**. Then, add actions in each stage using the dropdown search selector following the screenshot provided as a guide for each stage. ![DPE workflow 2](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step2.png) After creating the workflow (**create**), press **Play**. :::info Please note that workflows might take a few minutes to run when you launch them for the first time. The total time should not exceed 10 minutes - if it does, please reach out to our support team. ::: While the workflow is running, something you can do is **schedule it to run daily** using a trigger. Head to the _Preferences_ tab of your workflows and scroll to the Triggers widget on the bottom left side. Click **+Add**. ![DPE workflow 4](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step3.png) Select the trigger type as _CRON_ and mode as _Simple_. Navigate to the **Daily** tab and in the list of options select _Every 1 day(s)_ as shown in the picture below: ![DPE workflow 4](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step4.png) Hit the **Confirm** button to create the new trigger event with the name of your choice and it will append it below the _Launch Endpoint_ present by default in the Trigger event table. ![DPE workflow 5](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step5.png) :::info There is a lot more you can configure in a workflow's preferences. Namely, you can [scale horizontally and vertically](https://docs.dataplatform.ovh.net/dpe-jobs-resources.md) any processing job, use [workload segmentation](https://docs.dataplatform.ovh.net/tutorials-segmentation.md) to accelerate the data processing and even save all these configurations for repeated use thanks to [environments](https://docs.dataplatform.ovh.net/dpe-environments.md). ::: [ Learn more about configuring the execution preferences.](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md) :::warning Make sure to click on the **Save** button on the top right of the screen whenever you make a modification to your workflows. Actions are stored in repositories which can be versioned which is not the case for workflows or environments. _Autosave_ is therefore disabled for both workflows & environments. ::: ## Jobs To wrap up this section, here are a few words about the last tab of the Data Processing Engine component: jobs. The Jobs tab summarizes **all executions triggered in the Data Processing Engine** and includes advanced metrics reports. Jobs are listed under three main categories: running, queued and past executions. Having a look at the last jobs executed, you can verify the status of the workflow you just launched. ![DPE Jobs](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step6.png) :::info Resource allocation on the Platform is done through **proprietary units called [DPU](https://docs.dataplatform.ovh.net/manage-pricing.md#billing-units)**, Data Platform Units. You can change the amount of DPU dedicated to an action or workflow in their [preferences](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md). ::: You now have completed the Data Engineering section of the _Getting Started_ tutorial. A good way to make sure your data properly loaded is to go back to the [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) and look at the number of rows loaded into the table. Just open the **list view mode** and check the _rows_ column, if the field has a number (indicating how many rows have been loaded) then everything worked well. ![rows loaded](/images/public-cloud/data-platform/getting-started/app-init/picts/workflow-step7.png) Remember you are setting up a **production-grade system**, hence why you need both a Lakehouse Manager and a Data Processing Engine. Don't hesitate to reach out at the Data Platform Channel within the [Discord Server](https://discord.com/channels/850031577277792286/1163465539981672559) if you're running into any issues or you'd like help to speed up your data pipelines, optimize their performance, adding custom exotic data sources or creating custom scripts! Now let's move on to the next component in your data system: the Analytics Manager. [Create insightful queries with the Analytics Manager](https://docs.dataplatform.ovh.net/getting-started-create-queries.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-create-queries.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create queries on your data ## Objective The [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md) allows you, thanks to a **low-code approach**, to prepare and centralize the queries matching your business KPIs. This component constitutes the interface between your data scientist team and your application developer team. ## Pre-requisites Beforehand, you need to make sure all the previous steps of the Project are up and running. Your Lakehouse Manager schema was built properly and your workflow ran smoothly. In this tutorial, you will build your first queries. ![Pre-requisites — Homepage Analytics Manager](/images/public-cloud/data-platform/getting-started/app-init/picts/homepage-am.png) ## Build your first queries Now, you will create your first queries in order to make data ready for visualization: - _rides\_per\_month_ to understand the average number of rides each month. You'll use it to build your first graph. - _rides\_per\_cat\_temperature_ to understand the average number of rides depending on temperature. ### Create the first query Open **Queries** in the sidebar and then click on **New Query**. This will open the Query window where you can give your query a name, parametrize the data as well the scale, order the results and add filters. In this screen, you can also view the results of your queries with tables or charts. ![analytics manager](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query.png) To begin with, name your query `rides_per_month`. Then start typing 'avg\_' in the **Data search bar** and click on the _avg\_rides\_per\_day\_per\_station_ attribute. ![Create the first query — New query2](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query2.png) The compute mode is **select** by default, you can change it by clicking on the arrow and changing the selected options. For the purpose of this tutorial, leave it as it is by default here. ![Create the first query — New query3](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query3.png) Then, click on the **Scale search bar**. Here, you want to display the average number of rides **each month** per date. Select _yearmonth_ as a scale. ![Create the first query — New query4](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query4.png) Then, click on the green button **Run** to run the query. You'll see the result of the query at the bottom panel, by default it is on table view. You can change the display format: table, line chart, bar chart, area chart or pie chart. Choose by clicking on the buttons of the bottom panel (as indicated in the image below). ![Create the first query — New query5](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query5.png) :::info When you build a query in the Analytics Manager, you don't have to specify the table names. The Platform will **automatically choose the most suitable table**. But you can still force a specific table by clicking the table icon next to _Data_. ::: [ Learn more about how the Analytics Manager works.](https://docs.dataplatform.ovh.net/analytics-manager-queries-visual-builder.md#choice-of-table) ### Create a second query Queries aren't meant to be used in a dashboard only, they also provide an easy environment to explore your data using an array of data visualization options. Create a new query: - Name it `rides_per_cat_temperature`. - Select _avg\_rides\_per\_day\_per\_station_ with compute mode **select**. - Select _cat\_temperature_ as your scale. - Select _avg\_rides\_per\_day\_per\_station_ as the **Order** (ascending order by default). :::warning If you remember, _avg\_rides\_per\_day\_per\_station_ is a virtual attribute you have set in a previous step of the tutorial (Collect data). You cannot use any other compute mode than **Select** with this virtual attribute as it contains an SQL aggregate function. Adding **Sum** as compute mode would end up imbricating two SQL aggregate functions, resulting in an error. ::: Just like the screenshot below, click on **bar chart icon** to automatically display the data as a bar chart. ![Create a second query — New query6](/images/public-cloud/data-platform/getting-started/app-init/picts/new-query6.png) You have created two queries in the Analytics Manager. The next step is to expose that data through an API, which you will create and deploy for use in your application. [Expose your data by deploying an API](https://docs.dataplatform.ovh.net/getting-started-expose-api.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-expose-api.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Deploy your first API ## Objective An API is crucial as it is the interface between the external world (namely your applications) and the rest of your Project (i.e. your Lakehouse Manager and queries). You will have to call this API when building your application, in the next and final tutorial. ![Project home](/images/public-cloud/data-platform/getting-started/app-init/picts/homepage-api.png) ## Create a new API From your Project's home page, click on **+** inside the API module. You will be able to choose between **an existing API template** from the internal _Store_, or to **import your own code** by linking a Git repository. Since you're just starting, we've made a simple NodeJS template just for you. Proceed by selecting the only template available: _API NodeJS_. ![API store](/images/public-cloud/data-platform/getting-started/app-init/picts/api-store-new.png) Choose a name for your API, and enable the option **auto build** & **auto deploy**. This will download the source code of your API, automatically build it and deploy it for you. ![API settings](/images/public-cloud/data-platform/getting-started/app-init/picts/api-settings-new.png) From there, give it a couple of seconds as the creation of the API may take a moment. The build takes a few minutes. ![API building home](/images/public-cloud/data-platform/getting-started/app-init/picts/api_building1.png) :::info The Platform uses a **[blue-green](https://en.wikipedia.org/wiki/Blue-green_deployment) deployment methodology** ensuring 100% availability of your data. You can therefore seamlessly create & deploy new versions of your API without risking any downtime! ::: When the deployment is complete, the **Open** button appears. ![API deployed](/images/public-cloud/data-platform/getting-started/app-init/picts/api_deployed.png) When you open your API, you will land on the screen below confirming that your API is alive & healthy. It's that easy! [ Learn more about your Project APIs](https://docs.dataplatform.ovh.net/sdk/api.md) ![API open](/images/public-cloud/data-platform/getting-started/app-init/picts/api_open.png) The next and final step will consist of creating and deploying your first application on the Platform in under 5 minutes. [Create your first app](https://docs.dataplatform.ovh.net/getting-started-visualize-data.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/getting-started-visualize-data.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Build and deploy a front-end application ## Objective In this tutorial you'll **learn how to build and deploy your first application**. To make it easier for you, you won't start from scratch. We've prepared a template to accelerate the process, thanks to pre-built graphs. Initiate your application from **Application Services** by clicking **Create an application**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/homepage-api.png) Select the template _ReactJS - Getting Started_ from the store. This template produces a complete BI dashboard. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/apps-store-new.png) Fill in the different fields as shown in the screenshot below and press **Confirm**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/apps-settings-new.png) Click on **Confirm**, your app will automatically build and deploy. The process should take a couple of minutes, in the meantime feel free to read through the pre-requisites below. ## Requirements Every previous step of the Getting Started guide must have been completed: - The API is up and running. - Queries in the Analytics Manager are properly requesting your data warehouse. - The Lakehouse Manager shows a properly built logical schema. Virtual attributes are created and tables linked. - Your Data Processing Engine workflow has been correctly run. Let's create your first dashboard. ## Set up your canvas Click on the **Dashboard** menu. In an app, dashboards are its pages. A first dashboard, _Rides Analytics_, has been added by default when you selected the template at the beginning. It comes with styles and logos! ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/createdashboard-empty.png) Click on the **house** icon to set it as the default landing page of your app. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/createdashboard.png) ### Set up a header Head to the **Menus** menu. It is the page where you can define items such as header menus and filters for your whole app. It has already been pre-populated with several pages and items due to the template you used to initiate the app. You should land on the header page. This means every item you add here will be embedded in the header of your app (i.e the upper part). You can switch to the sidebar page (to embed items in the left sidebar of your app) at the top right-hand corner. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/header-v-sidebar.png) Switch back to the header page. Expand **tabs** to see the container's items. Click on _Add an item_ to add a tab in your header. Select **link**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-menu.png) Fill in the fields as shown below. You can also define a logo icon for your app header! ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/createmenu2.png) ### Set up a dynamic parameter Dynamic parameters are widgets to **filter your data on your pages**. Here, you will add one dynamic parameter to filter on the date. Click on **Sidebar** on the top right-hand corner and create a container. :::info If you are unfamiliar with [containers](https://docs.dataplatform.ovh.net/app-services-apps-menus.md), think of them as folders for items. ::: ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-sidebar.png) Drag the new container on top of the footer (which has to be at the bottom). ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-sidebar2.png) Open the container then add an item: select **Parameters**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-sidebar3.png) Pick the _Select box_ one, then head to the **options** of the new parameter. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/createparameters.png) Fill in the options as shown in the screenshot below. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/parameters-options.png) In the **Infos** tab, give it the following name: _select\_stations_, and press Confirm. :::info Note that every dynamic parameter like the date picker and select boxes can be customized. To learn how to do that, head to the technical documentation for application components! ::: [ Learn more about dynamic parameters](https://docs.dataplatform.ovh.net/sdk/app-dynamic_parameters.md). Your canvas configuration is now done. With a menu and a filter, you can now create your first graph. ## Set up a chart Go to the **Dashboard** tab and click on the **Edit** icon on your _Ride Analytics_ dashboard. You can see that the menu and the filter we've just created are well set up here! ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/empty-app-new.png) #### Step 1. Create a panel Click on the ➕ icon to create a panel (**Containers > Panel**). ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-panel-new.png) Once it's created, you can resize it so it spans across the screen. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-panel-new2.png) #### Step 2. Give a title to your chart **Inside your new panel**, click on the ➕icon and select **Basic UI > HTML**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-html-new.png) Name it _Rides history_ and apply the H1 style by clicking on the H button. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/create-html-new2.png) #### Step 3. Generate your chart Inside your panel, click on the ➕icon and select **Chart**. Pick the _Recharts - Bar_ type. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/recharts-area-new.png) Click on **Request**, and select **Query selector** to pick the _rides\_per\_month_ query you've created in the Analytics Manager. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/area-chart-query.png) To complete the setup, you have to connect this chart with the filter we've already created. Go to the **Infos** tab, in the **Linked dynamic parameters** section, and add _select\_stations_. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/area-chart-parameters.png) You can now test if your filter is properly working. Enter the read-only mode by clicking on the **Play** icon, and modify dates or holiday type to see how your data is changing. Your first chart is done! ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/chart-readonly-new.png) :::info Your first dashboard is now complete. You can also improve its appearance. In our _Getting Further guide series_, we have released more tutorials for you to check out: [click here to learn more about the app builder's capabilities](https://docs.dataplatform.ovh.net/tutorials-customize-first-app.md)! ::: ## Build and deploy the new version of your app One last step: put your dashboard into production. First, don't forget to **Save** your dashboard to make sure all your edits are consistently saved ( icon in the top middle bar). ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/save-app.png) Then go back to the **Overview** tab of the Application Manager. Changes brought to your application since you first created it **must be builded** in order to be visible by your end-users. You could stop the currently deployed version to build those changes, but the Platform also allows you to do it [without interruption of service](https://en.wikipedia.org/wiki/Blue-green_deployment).\ First, **Copy** the currently deployed version of the application. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/copy-app.png) Then you need to name the new version (_v2_ in the screenshot below). ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/enter-tag-name.png) Now, click on **Build**, and then **Deploy**. ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/build-app2.png) :::info The **build** process usually takes a couple of minutes. If you're curious about what is going on or if the build fails, open the log console by expanding the version panel and inspect the logs. Feel free to send logs to our support team if you're not sure how to troubleshoot it yourself! ::: Your app is **live** and can now be accessed online! The link can be obtained in the Overview tab by clicking on **Open**. :::info The [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md) lets you configure access rights to your app and your Project administration. ::: ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/open-app.png) ![Application Services](/images/public-cloud/data-platform/getting-started/app-init/picts/dashboard-final-new.png) That's it! Your dashboard is live and accessible by your users. Its data is refreshed automatically every day, stored in the cloud and will always be reliable. **You've completed the Platforms' Getting Started tutorial!** You're now ready to go live on the platform, explore by yourself and take on your own Projects by yourself. Obviously, you can come back to this tutorial at any time! We encourage you to check out the rest of the documentation to dive deeper into a specific component of the product when needed. The next step will consist of discover advanced features of the app builder. [Customize your first app further](https://docs.dataplatform.ovh.net/tutorials-customize-first-app.md) Also, don't hesitate to **get in touch** if you need anything, our support & product team is dedicated to helping you deliver faster any AI applications you have in mind. ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/landing-page-tutorials.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Data Platform tutorials ## How the tutorials are organized From streaming a Kafka topic to publishing a Superset dashboard, each tutorial here is self-contained, and most ship with the code and sample data they need. They are grouped below by where they sit in the data journey. :::info The tutorials assume a working project. If you do not have one yet, the [Getting started](https://docs.dataplatform.ovh.net/landing-page-getting-started.md) guide builds a first end-to-end application, and these tutorials extend from there. ::: They fall into four groups. **Project setup and configuration** covers the work around a project: building your own app, exporting and importing configuration, generating API keys, and versioning. **Data ingestion and transformation** covers getting data in and reshaping it: Kafka, IoT fleets, the Python SDK, SQL, external datasets, and segmentation. **Analytics and BI** covers reading data back out: Trino, PySpark, AI Endpoints, billing analysis, and Apache Superset. **Data export and management** covers the edges: dated export folders, bucket role conditions, and custom event handling. Start with the [project checklist](https://docs.dataplatform.ovh.net/tutorials-project-checklist.md) if you are setting up a new project and want the shape of the work before the detail. [### Your project checklist→ The shape of the work before the detail. ](/tutorials-project-checklist)[### Project setup & configuration→ Apps, configuration, API keys and versioning. ](/landing-page-tutorials-project-setup)[### Data ingestion & transformation→ Get data in, then reshape it. ](/landing-page-tutorials-data-engineering)[### Analytics & BI→ Trino, PySpark, AI Endpoints and Superset. ](/landing-page-tutorials-analytics-bi)[### Data export & management→ Exports, permissions and inbound events. ](/landing-page-tutorials-data-export) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-project-checklist.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Project checklist and best practices ## Objective You have decided to go along and you have just spun up your Project! Great! What's next? Where to start? As the first users of our platform we, have accumulated several years of experience in carrying out data Projects. We have curated a list of best practices, learned through our services practice over the years, which we are excited to share with you. Projects on **Data Platform** allow you to gather a team and work together on the same data Project. You can start with some basic file uploading and seamlessly switch to near real-time data processing, keeping your methodology and easily scaling as your Project grows.\ So start, iterate, and grow your Project step-by-step: your Project will meet your growing needs. A typical Project often goes through the following **main milestones**: - A quick [checklist](#checklist) on the use case and Project scope - Give your [teammates access](#user-management) - Do iteratively, and as needed: - Adapt the [Project resources](#manage-resources) to your needs - Define [Data Sources](#collect-data) - Design [Tables](#organize-data) - Build [Actions and Workflows to process data](#process-data) - Build [Queries and Dashboards](#write-queries) to visualize your data - Build [Apps & API](#build-applications) - Give [access to end-users](#give-access-to-your-application) - [Monitor Jobs & Deployments](#monitor) - Get feedback ## Checklist :::warning We recommend you go through our [Getting Started guide](https://docs.dataplatform.ovh.net/landing-page-getting-started.md) so you get a good understanding of the key Project components and Data Platform concepts. ::: Before take-off, here are some basic checks on your use case scope and agenda that we share with you: - Data sources - Which data do you need? - Is data available? How? Is data history available? - Storage sizing: how much data volume and compute will this Project require? - How often should it be refreshed? - Describe your own personal data book: - The "data story": where does it come from? How has it been produced? Your data flow history? - Data fields: what does it mean? what is it for? - Detailed Business Rules (about data) - KPI: how to compute them? what do they mean? - What is to be produced? - UX Storyboard - API for external use - Exporting files - Risk detection and mitigation - What could go wrong? What is intricate in your Project? - Identify/anticipate possible bottlenecks or hurdles - Identify & Leverage short iterations - View and check data as early as possible - Release early, release often! ## User Management Projects make it easy to work as a team on a Project. There are two levels of team management: - [Members](https://docs.dataplatform.ovh.net/manage-organizations.md) of your Data Platform organization are your teammates. They have created a Data Platform account - [Users](https://docs.dataplatform.ovh.net/iam-users.md) in your Project are either teammates working on this Project, or end-users of your API and apps - Members of an organization are automatically added as users in all Projects in this organization. Permissions must be granted manually to non-admins. After [adding your team to your organization](https://docs.dataplatform.ovh.net/manage-organizations.md), check [how to give them access rights in each Project's **Identity Access Manager**](https://docs.dataplatform.ovh.net/iam-users.md#manage-project-iam-users) according to their skills and permissions. Your end-users access rights are also managed in the Identity Access Manager. ## Manage resources Projects were designed from scratch to scale easily as the requirements of your data Project evolve. You can independently **scale horizontally and vertically** any component of your choice in just a few clicks, for example your [apps](https://docs.dataplatform.ovh.net/landing-page-app-services-apps.md). Each component in your Project will consume [resources](https://docs.dataplatform.ovh.net/manage-pricing.md) when it is actively running (either through a job or a deployment). :::info Even when it is idle, your Project uses a handful of DPUs by default. You can manage this amount in the [Control Center](https://docs.dataplatform.ovh.net/control-center-monitoring.md#infrastructure-monitoring-panels). ::: [ Learn more about resource consumption](https://docs.dataplatform.ovh.net/manage-pricing.md) ## Collect data Take a look at [available connectors](https://docs.dataplatform.ovh.net/connectors-sources-configure.md) and remember that it is always possible to write a [custom action](https://docs.dataplatform.ovh.net/dpe-actions-custom.md) to do whatever is not already possible through the interface. If you need to manage files in your Project, we recommend using the [Lakehouse Manager buckets](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md): - organize buckets either **by topic** (referentials for instance), **by type of processing** or **by providers** depending on your needs - within a bucket, you can use **folders** to better organize your files - when defining a [source](https://docs.dataplatform.ovh.net/landing-page-connectors-sources.md), the _Data Platform Buckets_ connector allows you to select a bucket then select files as sources - if you have multiple files in the same bucket/folder: - if each file is different, you can [analyze](https://docs.dataplatform.ovh.net/landing-page-connectors-analyzer.md) them separately and use them as a source for [Data Processing Engine actions](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) - if all files need to be processed the same way: you just need to select one to **analyze**, you will use it as a source and [use segmentation over a set of files](https://docs.dataplatform.ovh.net/tutorials-segmentation-files.md) to process them - check out [how to send files to the buckets with S31-compatible tools](https://docs.dataplatform.ovh.net/tutorials-bucket-s3-access.md) to integrate in your in-house process ## Analyze data and design blueprint rules Once you have set up your sources, take the time to [analyze](https://docs.dataplatform.ovh.net/landing-page-connectors-analyzer.md) them and configure basic source cleaning rules called [blueprint rules](https://docs.dataplatform.ovh.net/connectors-analyzer-blueprint-rules.md). This can help fix some common issues such as: - date formatting - number formatting - clean up strings - skip incomplete lines - ... and much more In the long run, this step will save you a lot of time! ## Organize data The [Tables page](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md) is where you [prepare your database schema](https://docs.dataplatform.ovh.net/getting-started-organize-data.md#organize-your-data-in-tables). ### Tables - We recommend using a prefix depending on the type of data: - `ref_`: for referentials and stable data, without any temporal information - `raw_`: data imported _as is_ with minimal changes. This can be used to trace back data issues - `prm_`: primary tables, i.e. improved quality data from `raw_` - `fct_`: consolidating `facts` from several `prim_` and `ref_` in a common `scale` - `agr_`: aggregation of data on a different `scale` (for instance `datetime` to `date` or `date` to `year`) - they are usually designed to optimize queries - build one `agr_` table per **scale granularity** adding all needed attributes - then add attributes names that indicate granularity (`agr_station_yearmonth`, `agr_movie_date`) - `tmp_`: temporary tables used for processing (mark them as **not queryable**) - `mlm_`: for tables used in a machine learning model - Give clear names that describe what one row of data represents - Define [indexes](https://docs.dataplatform.ovh.net/lakehouse-manager-manage-tables.md) to speed up data operations ### Attributes Use [Attributes tab](https://docs.dataplatform.ovh.net/lakehouse-manager-attributes.md) to review all attributes, in which tables they are used, which DPE Actions uses it, etc. Here are some best-practices about attributes (i.e. field names in tables): - attribute type: choose between _dimension_ or _measure_ - _dimension_: qualitative information that can be scaled by, filtered by, etc but not summed. - _measure_: numerical information that can, most of the time, be summed, counted, averaged, etc. - attribute naming: - use a _prefix_ to distinguish them (e.g. `client_`, `fb_`, `site_`) - name `measure` attributes so they give a hint on a temporal window: - `_nb_` : number for that day - `_total_` : value for this day - `_diff_` : difference from previous day - ... - clearly indicate what it is (i.e. `_amount_`, `_ticket_`, `_fans_`) - give unit of measure if not obvious (i.e. `_g`, `_kg`, `_wh`, `_kwh`, `_eur`, `_usd`) :::warning It is very important to **use the same attribute name and type** across all tables to **name the same piece of information**. Thus when playing a query in the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md), it dynamically checks the most suitable object for required fields. ::: ### Explorer Use [Explorer](https://docs.dataplatform.ovh.net/lakehouse-manager-explorer.md) to quicly check table contents. ## Process data The [Data Processing Engine (DPE)](https://docs.dataplatform.ovh.net/landing-page-dpe.md) is used to build [actions](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) which are the heart of your physical data flow. They can run alone or organized into groups named [workflows](https://docs.dataplatform.ovh.net/dpe-workflows.md). ### Actions Make sure you have a deep look at provided [actions types](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md). If you need to go further, start writing a [Custom Action](https://docs.dataplatform.ovh.net/dpe-actions-custom.md) using our [SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md) to interact with the rest of your Project leveraging **Python** or **PySpark**. :::info Use the [notebooks](https://docs.dataplatform.ovh.net/dpe-notebooks.md) to quickly prototype a Custom Action, then export it to the Data Processing Engine ::: - For [Aggregate Actions](https://docs.dataplatform.ovh.net/dpe-actions-aggregate.md): - `scale`: must be the same granularity as the primary key of the destination table - **double check your rules for joining tables**: this is the main source of errors - Set **log level** appropriately during lifecycle (i.e. `debug` if needed, `info` otherwise) - Use **Auto flush all** to flush all caches and visualize the updates brought by the action on the datasets ### Use Repositories and Versions As your Project grows, don't forget you can organize actions in [repositories using versions](https://docs.dataplatform.ovh.net/dpe-actions-manage.md#manage-actions) according to your needs. :::info Actions are listed in alphabetical order: you can add prefixes such as numbers to better organize them. ::: ### Use segmentation To leverage the full power of the Data Platform's DPE, use [Segmentation](https://docs.dataplatform.ovh.net/dpe-jobs-segmentation.md) to parallelize computing tasks at an action's level. ### Use a perimeter To limit an action or a workflow on a subset of your data, e.g. for last 30 days, use the [Perimeter](https://docs.dataplatform.ovh.net/dpe-jobs-perimeter.md) option. ## Write queries Use folders and repositories to organize saved [queries](https://docs.dataplatform.ovh.net/analytics-manager-queries.md) in the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). For instance: - _Data Quality_: queries to check Data Quality - _Data Analysis_: queries to view basic features - _App-xxx_: prepare queries to use inside your Application - This allows you to update the database schema and the queries without having to deploy a new app version - Give clear, descriptive names to your queries ### Query Engine - unified SQL Engine over multiple databases - [Explorer](https://docs.dataplatform.ovh.net/lakehouse-manager-explorer.md) in Lakehouse Manager - [Build and Publish Dashboards](https://docs.dataplatform.ovh.net/analytics-manager-dashboards.md) - [Access from tools like PowerBI](https://docs.dataplatform.ovh.net/landing-page-connectors-consumers.md) ## Build applications Take the time to understand [Application Services](https://docs.dataplatform.ovh.net/landing-page-app-services.md) and the possible [settings](https://docs.dataplatform.ovh.net/app-services-apps-deploy.md#application-settings). ### Helpful tips - Design a Storyboard before starting your Project - Make sure your `dynamic parameters` are present in all tables you need to request - Use **object's label** in **Tables** for automatic translation - Leverage [Formatters](https://docs.dataplatform.ovh.net/app-services-apps-formatter.md) and [Translations](https://docs.dataplatform.ovh.net/app-services-apps-translations.md) - Leverage [Style templates](https://docs.dataplatform.ovh.net/sdk/app-charts-template.md) to streamline your Apps development A typical application development lifecycle is: 1. Design a storyboard - check data is available - identify `dynamic parameters` - identify needed _charts_ and _custom components_ 2. Analytics Manager: prepare and check needed queries 3. Implement a first version in the UI - set up `dynamic parameters` - set up `dashboards` and `menus` - set up available `charts` as needed - set up `dictionaries`, `formatters` and `translations` 4. Improve that version - Adapt CSS as needed - Leverage [Style templates](https://docs.dataplatform.ovh.net/sdk/app-charts-template.md) - Implement your own [custom chart](https://docs.dataplatform.ovh.net/sdk/app-custom-chart.md) or [custom component](https://docs.dataplatform.ovh.net/sdk/app-custom-component.md) as needed 5. Test and iterate again 6. Give access to more users ### Customize your application further Application is based upon the ReactJS framework. We strongly recommend you go through our [guide on advanced app customization](https://docs.dataplatform.ovh.net/tutorials-app-development.md). ### Git repositories It is usually recommended to [synchronize your application with a Git repository](https://docs.dataplatform.ovh.net/app-services-apps-git-integration.md) and deploy two applications: - `my-develop`: synchronized with your **develop** branch - `my-master`: synchronized with your **master** branch ### Custom Domain Names By default, your application is available at : ```yaml https://my-project.eu.dataplatform.ovh.net/my-develop-app/ ``` You may change it easily in the [App's settings](https://docs.dataplatform.ovh.net/app-services-apps-deploy.md#application-settings) to be : ```yaml https://my-beautiful-app.eu.dataplatform.ovh.net/ ``` If you need further customization, you may register [your own domain and provide your own SSL certificates](https://docs.dataplatform.ovh.net/app-services-apps-custom-domain.md) : ```yaml https://my-beautiful-app.example.com/ ``` ## Give access to your application By default, every `Application` created in **Application Services** has its counterpart in the **Identity Access Manager**. - [Application Services](https://docs.dataplatform.ovh.net/landing-page-app-services.md) - it manages the instance that will be deployed and run - it is linked to an **Identity Application Manager's Application** - it will use that **IAM App** configuration about **Auth Providers**, **Users**, etc - [Identity Access Manager](https://docs.dataplatform.ovh.net/iam-application-authentication.md), you can define: - Logo - Application Title - Allowed Authentication Provider Add all the [end-users](https://docs.dataplatform.ovh.net/iam-users.md) that will have access to your application (using [authentication providers](https://docs.dataplatform.ovh.net/iam-auth-providers.md) if your company has a SSO provider), and use [roles](https://docs.dataplatform.ovh.net/iam-roles-conditions.md) and [groups](https://docs.dataplatform.ovh.net/iam-groups.md) to manage data access control. ## Front API Default Front API checks authentication, process App's requests adding **dynamic parameters** and **implementing ACLs**. Here are some scenarios where custom API is needed. - Implement transformers - Implement custom "evolution" - Implement complex ACL ## Monitor [Control Center](https://docs.dataplatform.ovh.net/landing-page-control-center.md) gives access to: - [monitoring](https://docs.dataplatform.ovh.net/control-center-monitoring.md) resource usages and health - [logs of all deployments and jobs](https://docs.dataplatform.ovh.net/control-center-logs-explorer.md) - [creating alerts on deployments and jobs](https://docs.dataplatform.ovh.net/landing-page-control-center-alerting.md) - a complete view of all [jobs executions and scheduling](https://docs.dataplatform.ovh.net/control-center-jobs-central.md) at Project and Organization's level ## Project Backup ### Project Configuration Learn more about how to [backup and restore your Project configuration](https://docs.dataplatform.ovh.net/tutorials-export-import-config.md). ### Exporting data Using a [Data Processing Engine custom Action](https://docs.dataplatform.ovh.net/dpe-actions-custom.md), you can export all your data to a [bucket](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md) in the Lakehouse Manager. ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). 1 : S3 is a trademark of Amazon Technologies, Inc. OVHcloud's service is not sponsored by, endorsed by, or otherwise affiliated with Amazon Technologies, Inc. --- url: https://docs.dataplatform.ovh.net/landing-page-tutorials-project-setup.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Project setup & configuration ## Structure, versions and credentials Customize your first app picks up where the Getting started tutorial ends: a richer chart, units on the values, and a rebuilt version of the same app. Building your own application is the longest tutorial here, a multi-part guide through importing code from a Git repository, working with the config files, creating components and adding custom ones. It is the path to take when the low-code app builder is not enough. The rest are shorter and independent. Exporting and importing a configuration moves a project's setup between environments, which is how a staging project becomes a production one. Generating API keys creates the credentials an external system uses to authenticate against the project. Versioning basics covers the platform's own version control on action repositories, and how to sync a repository with Git instead. :::warning The application development tutorial is being reworked, with no date set. It remains accurate for the current platform. ::: [### Customize your first app→ Pick up where Getting started ends. A richer chart, units, and a rebuilt version of the app. ](/tutorials-customize-first-app)[### Develop your own app→ Six parts, from a Git import to custom components. Rework pending, no date. ](/tutorials-app-development)[### Export / import a configuration→ Move a project's setup between environments. ](/tutorials-export-import-config)[### Generate API keys for external access→ Credentials for an outside system. ](/tutorials-generate-api-keys)[### Learn versioning basics→ Platform version control, or Git on a repository. ](/tutorials-versioning-basics) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-customize-first-app.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Customize your first application further ## Objective In this tutorial you'll discover advanced features of the visual app builder to **customize the visual aspects** of a simple application. :::info This tutorial contains extended content for the _Getting Started_ section called [Build and deploy a front-end application](https://docs.dataplatform.ovh.net/getting-started-visualize-data.md). ::: ## Requirements This tutorial assumes that you have been through **all five sections** of the [Getting Started tutorial](https://docs.dataplatform.ovh.net/landing-page-getting-started.md). Your Data Processing Engine, your Lakehouse Manager, your Analytics Manager have been configured as described in their respective pages, and you have deployed an API as well as an APP which you are going to customize. ## Create a more advanced chart First, let's discover one more chart type: a horizontal bar chart to show the top 7 stations in terms of total traffic. Instead of choosing a query that has already been prepared in the Analytics Manager, you can also **create new queries on the fly** when creating a chart. To do this, shrink down the first panel and **create** a second one next to it. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/create-other-panel.png) Inside the second panel, click on the ➕icon and select **HTML**. Name it _Top 7 Stations_ with style **H1**. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/create-other-html.png) Inside the second panel, click on the ➕icon and select Chart. Pick the _Recharts - Bar Horizontal_ type. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/create-other-chart.png) In the Request tab, choose the _Request_ mode and enter _rides_ as data (Sum and Descending) and _station\_name_ as scale. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/create-other-chart2.png) ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/create-other-chart3.png) One last step! Queries can be fully customized using the advanced JSON editor. More specifically, you need to add a custom parameter to **limit the number** of stations to 7. To do that, head to the advanced mode of your query as shown below and simply add `"limit":7,` below line 2 in the "data" JSON object: ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/query-advanced.png) So far, your dashboard should look something like this. Don't forget to **save**. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/chart-intermediate-new.png) ## Customizing further There is a lot that you can do in the app builder to design your app exactly the way you want it. ### Units Click on the **play** button at the top of the dashboard to switch to read-only mode. Hover over the bars of the _Top 7 stations_ chart. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/show-units.png) These units could be formatted in millions for better clarity. To do that, go to the **Formatter** tab. A measure called _RIDES_ was already added by choosing the Getting Started template. :::info More generally, if you need to add a new measure, it must have the **same name as the attribute** that you are trying to format. ::: ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/new-formatter.png) As for the formatting parameters, enter _Mpax_ for unit, _0_ for round (to display integers), and _0.000001_ for multiplicator (to display millions). :::info The Formatter runs in autosave mode: your changes are saved as you type, and there is no Save button to click. ::: ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/formatter-round.png) Here's the result: ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/formatter-round2.png) ## Rebuild and deploy the new version of your app One last step: publish the recent dashboard changes to production. To do this, don't forget to save and then go back to the **Overview** tab of the Application Manager. You should first **Stop** the currently deployed application. As soon as it has shut down, click on **Build**, and then **Deploy**. :::info The **build** process usually takes a couple of minutes. If you're curious of what is going on or if the build fails: open the log console by expanding the version panel and inspect the logs. Feel free to send logs to our support team if you're not sure how to troubleshoot it yourself! ::: Your app is **live** and can now be accessed online!\ The link can be obtained in the Overview tab by clicking on **Open**. ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/open-app.png) ![Application Services](/images/public-cloud/data-platform/getting-further/app-manager/picts/dashboard-final-new.png) Your figures are now available in the application. **You've completed the Advanced application builder tutorial!** You are now ready to build complex data applications on the Platform. Obviously, you can come back to this tutorial at any time! We encourage you to check out the rest of the documentation to dive deeper into a specific component of the product when needed. Also, don't hesitate to **get in touch** if you need anything, our support & product team is dedicated to helping you deliver faster any AI applications your have in mind. ## Looking for more flexibility? The visual app builder is great for getting started quickly, but if you are a developer looking for **full control over your application code**, we provide additional templates built with modern front-end frameworks. These templates connect to the same Front API and let you build fully custom applications using your own development workflow. [Build a custom app with React, Vite & Shadcn](https://docs.dataplatform.ovh.net/tutorials-app-development-react-shadcn.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-app-development.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Develop your own application ## Objective In this advanced step-by-step guide, you will learn how to make your own custom application components, whether charts and dynamic filters, customize them, embed them in the platform and much more. Here, you will continue the development of the application you created in the [first part of the Getting Started Guide](https://docs.dataplatform.ovh.net/landing-page-getting-started.md). The goal? Provide you with all the tools to create custom code based off the API references & boilerplates provided. :::warning This is an advanced guide aimed at developers, front-end engineers, or application architects. We recommend being familiar with basic front-end development concepts. ::: Below is a **quick preview of what we will be able to achieve by the end of this guide**. As you can see you'll add a custom map component, more complex filter options & cleaner styling for all other charts. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/gs-advanced-layout.png) ## Let's get rolling! 👉Here are the steps that you'll need to follow: [Connect

Build

How to build, deploy & manage versions using external code

](https://docs.dataplatform.ovh.net/tutorials-app-development-build.md) [Transfer

Configure

Understand app architecture and configuration files

](https://docs.dataplatform.ovh.net/tutorials-app-development-config.md) [Query

Customize

Create, edit and customize charts styles using existing components

](https://docs.dataplatform.ovh.net/tutorials-app-development-components.md) [Expose

Extend

Add custom components (or extensions) as dynamic parameters and charts

](https://docs.dataplatform.ovh.net/tutorials-app-development-custom-components.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-app-development-build.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Build your app with an external repository ## Objective Here, you will learn how to set-up a React application and run it locally. By the end of this guide, you will be able to edit a Data Platform application by running it **locally**, **connecting** it to the Platform' ecosystem and **deploying** it with a git repository. ## Requirements There are a few things you need before starting : - Follow the [Analytics App Getting Started guide](https://docs.dataplatform.ovh.net/landing-page-getting-started.md) up until [this](https://docs.dataplatform.ovh.net/getting-started-create-queries.md) point. This is where you expose your API. - Install [git](https://git-scm.com/). - Install [Node.js](https://nodejs.org/en/). - Install [yarn](https://yarnpkg.com/) (recommended) or [npm](https://www.npmjs.com/). - Install [npx](https://www.npmjs.com/package/npx). - Have a **text editor**. You'll be writing HTML, CSS, and JavaScript. :::info The point of communication between your **Data Platform Project** and your app, is the **Data Platform API** that you exposed in Application Services. That is why it is required to complete the [Getting Started guide](https://docs.dataplatform.ovh.net/landing-page-getting-started.md) until the part where you expose your data and queries on the API. ::: ## Set-up an application & connect it to Data Platform ### Create an app using an existing template Clone this [repository](https://github.com/forepaas/getting-started/) and open it: ```bash git clone https://github.com/forepaas/getting-started.git cd getting-started/ ``` Switch to the branch release/basic ```bash git checkout release/basic ``` Before installing the Node modules, you'll need to ensure our map-related dependencies are configured for the current environment. Open your package.json file and add the following lines to your dependencies section, or update them if they already exist: ```json "dependencies": { // ... other existing dependencies "leaflet": "^1.6.0", "react-leaflet": "^2.7.0", "react-leaflet-markercluster": "^2.0.0" }, ``` Install node modules : ```bash yarn ``` :::warning If you get an error concerning **certificates** when installing yarn, you should contact your IT department to solve the issue. ::: Install npx (Skip this step if you have already installed it globaly): ```bash yarn global add npx ``` Install the Platform modules ```bash npm run fppm i ``` :::warning If you run into problems installing the modules, it may be due to your NodeJS configurations. Uninstall and reinstall NodeJS to fix the issue. ::: :::warning If the issue persists, it could be due to NodeJS version compatibility. Install NodeJS v16.20.2 to fix the issue. ::: Run your app : ```bash yarn start ``` :::info Open `http://localhost:3333` to check your app. If you see no error but a blank screen, you still need to adjust the app configuration before the panels appear. The blank screen means your app is up & running. ::: ### Connect a git repository to the platform (optional) To link a git repository to the platform, please follow this [guide](https://docs.dataplatform.ovh.net/app-services-apps-git-integration.md) :::info Now that you've learned how to create and launch your app, it's time to understand its architecture. ::: [Understand app architecture and configuration files](https://docs.dataplatform.ovh.net/tutorials-app-development-config.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-app-development-config.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Discover the app configuration files ## Objective This guide covers the configuration files of a Data Platform application: what each directory holds, then how to edit the global configuration, an API attribute, the sidebar's date-picker and a dashboard. ## Understand the app files ### Understand the app architecture You have now a complete application. Your app tree should look like this: ```bash ├── config ├── node_modules ├── forepaas ├── public ├── scripts └── src ``` Let's clarify the content of each directory: - `config`: This folder holds most of the application configuration. In this folder, you can define and update your configuration files for dashboards, menus, styles, translations etc... The most important file here is `global.json`, it allows you to declare and use all of these configuration files. (explained right after) - `forepaas`: This is the equivalent of `node_modules` for the platform. It contains all the basic components needed to embed your application to Data Platform. All the packages listed in /forepaas.json are installed here. - `node_modules` : The node\_modules folder contains libraries downloaded from npm. It is based on /package.json. - `public`: This folder contains all the static files (fonts, icons, images...). You can access a file stored in this folder through this url `/assets/{subfolder}/{name}.{extension}`.\ For example, the url to access `favicon.png` (and display it in a `` tag) located in `assets/img` is \`/assets/img/favicon.png - `scripts`: This folder contains some useful scripts that you can use to generate components, dashboards or zip this Project to upload it easily on the platform. - `src`: In this folder, you can create or update your own custom components and services. We will teach you how to do it in the next steps of this tutorial. ### Understand the configuration files The global configuration file is `global.json`. This file represents the entry point of your application.\ It is where you declare your environment variables, routes, dashboards, and many more important fields. Open `global.json` located in the `config` folder.\ Initially, it looks like this: ```json { "authentication": "{{ENV.CAM_URL}}", "api": "{{ENV.API_URL}}", "application_name": "{{ENV.APP_NAME || 'ForePaaS'}}", "debug": "{{ENV.DEBUG}}", "loader": "spinner", "lang": "fr", "version": 3, "storage": { "type": "sessionStorage" }, "root": "/rides-analytics", "menu": [ "file://config/menus/header.json", "file://config/menus/sidebar.json" ], "dashboarding": { "/rides-analytics": "file://config/dashboards/rides-analytics.json" }, "style": "file://config/style.json", "reportings": "file://config/reportings.json", "i18n": { "en": "file://config/i18n/en.json" }, "formatter": "file://config/formatter.json" } ``` Let's explain the most important fields below : - `authentication` : refers to the authentication url, it should have this shape: `https://{api-subdomain}.eu.dataplatform.ovh.net/cam?app_id={app_id}`.\ By default it is defined as an environment variable. It is important to keep it this way to deploy your app on production. Please refer to this [part](#overwrite-the-global-configuration-file) to understand how to overwrite this field for local development purposes. - `api` : Same as above, but, refers to the api URL, it should have this shape: `https://{api-subdomain}.eu.dataplatform.ovh.net/{api-alias}`. - `application_name` : Your application title - `root` : The root path of your application. - `menu` : An array containing your menus configuration files.\ The header and the sidebar are already defined by default. - `dashboarding` : An object to define your dashboards. The attribute is the dashboard url, and the value is the dashboard configuration file. - `style` : The style configuration file. It allows you to style the components. Some components are already styled there. - `i18n` : An object to define all your supported languages. The attribute is the language alias, and the value is the translation configuration file associated to the language. - `formatter` : The formatter configuration file. It allows you to format the data, round numbers, add units, etc...\ Some fields are already formatted by default. ## Edit the configuration files Now that you are more familiar with app architecture, you can finally edit the app! ### Overwrite the global configuration file The first step is to link your local application to the authentication service and to the API created previously on your Project. Since we only need these changes to happen locally, we don't want to directly edit `global.json`. We will create another file `global-override.json` to override it instead. - Create `global-override.json` in the `config` folder - Copy and paste this json into your new file: ```json { "authentication": "https://{api-subdomain}.eu.dataplatform.ovh.net/cam?app_id={app_id}", "api": "https://{api-subdomain}.eu.dataplatform.ovh.net/{api-alias}" } ``` There are three variables that you need to replace: - `{api-subdomain}` : Log into the platform, go to your API settings, this variable is referred to as the "Subdomain" in the Domain Name System panel - `{api-alias}` : This variable can be extracted from the "Domain" by removing `eu.dataplatform.ovh.net/` ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/api-alias-subdomain.png) - `app_id` : Go to the Identity Access Manager page. In the Application tab, go to edit your app. This variable is referred to as "Id" in the application information. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/app-id.png) :::warning Remember that it is necessary to modify authentication privileges to allow to fetch your online data from your local build. Do it by adding your local host (`http://localhost:3333` by default) to the CORS origin in [_Identity Access Manager_](https://docs.dataplatform.ovh.net/landing-page-iam.md) > _Settings_ > _CORS origin_ > _Add_. ::: Save all files. The locally running app now displays a bit more of an advanced view of what you had at the end of the Getting Started guide. The following image shows how it will look on the first start after configuring the `global-override.json` but as you can see there seems to be an issue with the holiday select box and the rides history data display. The following section explains how to resolve these problems. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/first-run.png) ### Add the cat\_holiday attribute to your API You may notice that in the sidebar the **holidays selector** isn't displayed correctly. That is the case because you have no exposed attribute related to holidays as part of the getting-started guide. :::info In the app template provided to you, that attribute is named _cat\_holiday_. We encourage you to try to understand why this problem appears by looking into the _sidebar.json_ file for mentions of the dictionary name. ::: To address this, you have to: - Add a string attribute named _cat\_holiday_ to the table _dataset\_history_. - Build the _dataset\_history_ table and generate the respective DPE Action again. - In the DPE, change the table's Aggregate Action to correct create the _cat\_holiday_ attribute with the code below. ```sql CASE WHEN chicago_calendar_full.christmas_holidays=1 THEN 'Christmas Holidays' WHEN chicago_calendar_full.summer_holidays=1 THEN 'Summer Break' WHEN chicago_calendar_full.spring_holidays=1 THEN 'SpringBreak' WHEN chicago_calendar_full.public_holiday=1 THEN 'Bank Holiday' WHEN chicago_calendar_full.autumn_holidays=1 THEN 'Fall Holidays' WHEN chicago_calendar_full.sport_holidays=1 THEN 'Sport Holidays' ELSE 'off leave' END ``` - Run the respective workflow again. - Flush the cache in Application Services. Now, just rerun your app and the **Holidays Selector** should be looking good. ### Edit the range of the date-picker in sidebar.json The reason the rides-history chart shows "no data" is that the date-picker is not set to match the dataset’s actual range. Currently, the sidebar’s date-picker only displays a date range from today to one year ago because of its configuration. Since our Chicago files dataset covers the years 2015 to 2020, we need to update the `sidebar.json` file by modifying specific fields to ensure the date-picker includes the full range of our data. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/data-picker-range.png) To address this, you have to: - go to `sidebar.json` - find the fields for startAt, minDate, maxDate, endAt. - replace the above section with the code below. ```json "startAt": "2015-01-01", "minDate": "2015-01-01", "maxDate": "2020-12-31", "endAt": "2020-12-31" ``` Now, just save and rerun your app and the **data-picker** should be having the range between 2015 and 2020. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/data-picker-range-fixed.png) Now that the date picker is fixed, let's test it out! Select a range, for example, from **January 1st, 2015, to January 1st, 2016**. You should now see the rides-history chart populate with data. If the chart looks scattered or incorrect, it's probably because the data isn't ordered by date. To sort this, open `rides-analytics.json` and add the following snippet to the `rides-history` request definition: ```json "order": { "yearmonth": "asc" } ``` ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/data-picker-range-fixed-2.png) ### Change the attribute used for stations picker in the sidebar Currently, when you interact with the 'Stations' selector in the sidebar, you'll see a list of raw station IDs. While these are technically correct, they don't offer much in terms of user-friendliness! Let's enhance this by displaying the actual station names instead, making the selection process much clearer. To achieve this: - Navigate to the `sidebar.json` configuration file. - Locate the component definition that has the ID `dyn-stations`. - Update the attribute property within this component's dictionary to **station\_name**. This tells the component to fetch and display the human-readable names from your dataset. - Next, you might observe that the **Top 7 Stations** chart is currently displaying `station_id` values instead of more readable station names. To correct this, apply a similar change to the one you made earlier: - open your `rides-analytics.json` file and locate the configuration for the 'Top 7 Stations' chart. - Then, update its relevant field **scale** to use `station_name`. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/station-name-picker-fixed.png) ## Edit a dashboard As you saw in `global.json`, your application already has a dashboard called `rides-analytics`. In this part, you will see how to edit the dashboard configuration file to change the layout and the positions of the elements. Let's start by opening `rides-analytics.json` in `config/dashboards`. You will first create a panel and control the height, the width and the position of an item. To create a panel, append these few lines to the end of the array `items` It will be a placeholder for your future search bar, so let's make `search-bar` its id. ```json { "type": "panel", "id" : "search-bar", "sizeX": 100, "sizeY": 100, "row": 0, "col": 0, "items": [] } ``` - _type:_ Represents the item's type. It can be a component provided by the Platform by default or a specific component. - _id:_ The id of your item. - _size X:_ Represents the width of the item. The value must be between 0 and 100 as it represents a percentage of the containing item's width. - _size Y:_ Represents the height of the item. - _row:_ Represents the row offset. - _col:_ Represents the column offset. After adding the panel, the application looks like this: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/gs-panel.png) Now, edit the panel to reduce its height by changing the value of _sizeY_ to 19.\ After that, move **all the other panels** to the bottom by changing the value of _row_ for each of them. Add 20 to the current value to push down the other panels. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/gs-panel-20.png) Now, to ensure the best possible viewing experience when we introduce our custom interactive map later in the tutorial, we'll make a strategic update to the dashboard's layout. This isn't just for aesthetics; it's designed to allow the map to co-exist gracefully with the rest of your dashboard. As part of this, we'll also add a new panel to serve as the perfect placeholder for our interactive map. Replace the entire content of your rides-analytics.json file with the configuration provided below. Upon saving, you'll observe the updated dashboard layout. :::details rides-analytics.json ```json { "name": "Rides analytics", "width": 100, "height": 100, "margin": [ 10, 10 ], "description": "", "items": [ { "type": "panel", "id" : "search-bar", "sizeX": 100, "sizeY": 19, "row": 0, "col": 0, "items": [ ] }, { "type": "panel", "id": "custom-map", "sizeX": 75, "sizeY": 99, "row": 20, "col": 0, "items": [] }, { "type": "panel", "id": "top-stations-container", "sizeX": 24, "sizeY": 99, "row": 20, "col": 76, "items": [ { "type": "chart", "chart": { "id": "chart-7843335", "component": "recharts.bar-horizontal", "options": {}, "request": { "data": { "limit": 7, "fields": { "rides": [ "sum" ] } }, "scale": { "fields": [ "station_name" ] }, "order": { "rides": "desc" } } }, "sizeX": 100, "sizeY": 86, "row": 6, "col": 0 }, { "type": "html", "content": "Station top 7", "customclass": "chart-title", "sizeX": 100, "sizeY": 5, "row": 0, "col": 0 } ] }, { "type": "panel", "id": "rides-history-container", "sizeX": 75, "sizeY": 70, "row": 120, "col": 0, "items": [ { "type": "html", "content": "Rides history", "customclass": "chart-title" }, { "type": "chart", "chart": { "id": "chart-4992931", "component": "recharts.line", "request": { "data": { "fields": { "avg_rides_per_day_per_station": [ "select" ] } }, "scale": { "fields": [ "yearmonth" ] }, "filter": {}, "order": { "yearmonth": "asc" } }, "options": { "yAxis": { "domain": [ 0, 6000 ] } }, "dynamic-parameters": [ "dynamic-date", "dynamic-holidays", "dynamic-stations" ] }, "sizeX": 100, "sizeY": 55, "col": 0, "row": 9 } ] }, { "type": "panel", "id": "weekly-seasonality-container", "sizeX": 24, "sizeY": 135, "row": 120, "col": 76, "items": [ { "type": "chart", "chart": { "id": "chart-3259339", "component": "recharts.donut", "request": { "data": { "fields": { "avg_rides_per_day_per_station": [ "select" ] } }, "scale": { "fields": [ "week_day_label" ] } }, "options": {} }, "sizeX": 103, "sizeY": 61, "row": 29, "col": 0 }, { "type": "html", "content": "Weekly seasonality", "customclass": "chart-title", "sizeX": 93, "sizeY": 12, "row": 0, "col": 0 } ] }, { "type": "panel", "id": "rides-temperature-container", "sizeX": 37, "sizeY": 64, "row": 191, "col": 0, "items": [ { "type": "chart", "chart": { "id": "chart-6930201", "component": "recharts.bar", "request": { "data": { "fields": { "avg_rides_per_day_per_station": [ "select" ] } }, "scale": { "fields": [ "cat_temperature" ] } }, "options": {} }, "sizeX": 100, "sizeY": 54, "row": 6, "col": 0 }, { "type": "html", "content": "Rides per Temperature", "customclass": "chart-title", "sizeX": 100, "sizeY": 8, "row": 0, "col": 0 } ] } ], "url": "/rides-analytics", "path": "", "tags": [] } ``` ::: The layout of your rides analytics page is now ready. Now we'll learn how to add a new dashboard to our application. ### Generate a dashboard To generate a new dashboard, create a new json file in `config/dashboards`.\ You can speed up the process by using our script ```bash yarn generate ``` Using the arrow keys choose **dashboard**, then type the name of your new dashboard ("learn" in this case) ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/generate-dashboard.png) To link your dashboard to your app, edit `global.json` by adding a new entry in the _dashboarding_ section. ```json "/learn": "file://config/dashboards/learn.json" ``` The key represents the url path of your new dashboard.\ The value represents the path to the .json file associated with this dashboard. Your new dashboard page should now be accessible at `http://localhost:3333/#/learn`. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/learn-dashboard.png) As a last step, we will need to enable access to this dashboard from the UI. To do so, go to `config/menus/header.json` and add this entry in the _items_ array of the _tabs_ container: ```json { "type":"link", "text":"Rides", "url":"/rides-analytics" }, { "type": "link", "text": "Learn", "url": "/learn" } ``` This will allow us to easily switch between the two dashboards we have. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/learn-final.png) ## You're making good progress! You are now familiar with the app architecture and how to work on it locally.\ Let's introduce the topic of the next page: customizing your application. There are several ways you can use to style your components: - Use [style templates](https://docs.dataplatform.ovh.net/sdk/app-charts-template.md): It allows you to define templates which will be applied by default. - Style at the component level: The style will be only applied to a specific component. You can achieve this by passing some props when declaring a chart or a dynamic parameter.\ Example: Go to `config/dashboards/rides-analytics.json` and see the options field inside the line chart inside _rides-history-container_ panel. - Style at the module level (for dynamic parameter only): The style will be applied to all the dynamic parameter of this type. Example: properties passed inside `select-box` in `style.json` :::info **Note**: We recommend you use [style templates](https://docs.dataplatform.ovh.net/sdk/app-charts-template.md) for charts and `style.json` for dynamic parameters. ::: :::info **Deprecated for chart**: ::: - Style at the module level (eg. recharts): The style will be applied to all the components of the module.\ Example: properties passed inside `recharts` in `style.json` - Style at the component type level (eg. recharts-bar): The style will be applied to all the components that share the specified component type\ Example: properties passed inside `recharts-bar` in `style.json` Next, learn how to create and edit charts. :::info [Edit and create custom charts](https://docs.dataplatform.ovh.net/tutorials-app-development-components.md) ::: ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-app-development-components.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create and edit components ## Objective In this tutorial, you will learn how to create and edit your first charts, and add them to your dashboards. ## Create and edit a chart component ### Add a component You can easily add a new component to your Rides Analytics dashboard. To do so, append this json object to the array _items_ in `rides-analytics.json` ```json { "type": "panel", "id": "rides-holidays-container", "sizeX": 37, "sizeY": 64, "row": 191, "col": 38, "items": [ { "type": "chart", "chart": { "id": "chart-6930201", "component": "recharts.bar", "request": { "data": { "fields": { "avg_rides_per_day_per_station": ["select"] } }, "scale": { "fields": ["cat_holiday"] } }, "options": {} }, "sizeX": 100, "sizeY": 54, "row": 6, "col": 0 }, { "type": "html", "content": "Rides variability on Holidays", "customclass": "chart-title", "sizeX": 100, "sizeY": 5, "row": 0, "col": 0 } ] } ``` This json defines a panel that contains 2 items, the **chart** itself and **its title**. A **chart** is a special item that needs a request to work. Once the chart component is loaded, the request is performed and the result is displayed differently according to the chart's type.\ The request has the same format as the [Analytics Manager's queries](https://docs.dataplatform.ovh.net/analytics-manager-queries-visual-builder.md). You can also create your request in the Analytics Manager and put the request id instead of the request itself. In this case, you will have to replace `request` by `requestId` in the json above. The type of the chart is defined with the `component` key. There are many types of charts available natively in Data Platform, but you can also create your own components, we will show you how to achieve this in the next part of this guide.\ In this example, we've defined a new bar chart using the [recharts](https://recharts.org/en-US/) library. The request computes the average number of rides per day for each holiday. Initially, your chart looks like this: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/recharts-bar-example.png) ### Customize a chart Since this chart is made with the recharts library, there are many properties that you can change. :::info The full list is available in [Recharts Bar documentation page](https://recharts.org/en-US/api/BarChart). ::: To pass these properties from your chart configuration json, you simply have to edit the `options` key relative to this chart.\ For example, to change the size of the bars, add a `barSize` property in the `options` as below: ```json "options": { "barSize": 20 } ``` You can also customize the axes by adding the `xAxis` or `yAxis` property. You can then pass the properties available in [Recharts Axis documentation page](https://recharts.org/en-US/api/XAxis)\ For example, change the domain and scale of your YAxis: ```json "options": { "barSize": 20, "yAxis": { "domain": [ 2000, 3800 ], "scale": "linear" } } ``` After these few changes, your chart looks now like this: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/recharts-bar-example-2.png) Let's backtrack a minute to the chart configuration file in order to explain the **title configuration**.\ This component is also natively available with Data Platform. It allows you to write HTML code in the `content` property. It will be wrapped in a div. You can associate a custom class to this div by using the `customclass` property. The html code associated to the json defined above is: ```html
Rides variability on Holidays
``` :::info Learn more about custom charts in the [**Technical Guide**](https://docs.dataplatform.ovh.net/sdk/app-custom-chart.md)! ::: ## Create and edit a dynamic parameter A dynamic parameter allows the user to interact with one or more charts by changing their requests on the fly. To create a new dynamic parameter, open `config/menus/sidebar.json` and add the following json object to the _containers_ object, right above the _footer_ item. ```json { "id": "dyn-weekday", "items": [ { "type": "html", "content": "Weekday", "customclass": "dyn-title" }, { "type": "dynamic-parameter", "dynamic-parameter": { "type": "filter", "id": "dynamic-weekday", "dictionary": "week_day_label", "component": "selectbox", "placeholder": "Select Weekday", "multi": true }, "style": { "paddingBottom": "10px" } } ] } ``` This json defines a dynamic parameter that allows you to filter chart requests by one or more week days. It follows the same logic as the one followed by charts. Here, we detail a bit this configuration: - `type`: indicates how the dynamic parameter will be used, as a filter in this case. It means that any chart associated with this dynamic parameter will see its results be filtered to display only those matching the selected weekdays. - `dictionary`: sets the field linked to this dynamic-parameter. - `component`: sets the component that this dynamic-parameter is associated with, in here, the _selectbox_ component. - `id`: serves to reference this object inside the platform and is commonly used to link this dynamic parameter to charts. - `placeholder`: specific to the _selectbox_ component, specifies the text displayed inside the selectbox by default. - `multi`: specific to the _selectbox_ component, it's a boolean property that allows selecting several options when set to true. After copy-pasting the json object above defining this dynamic parameter, your new component should now appear in the sidebar: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/weekdays-selectbox.png) To actually use this newly created dynamic-parameter, you have to link it to a chart. You can do this by editing the charts configuration. - Open `config/dashboards/rides-analytics.json` - In the json object defining the **rides history chart**, append `"dynamic-weekday"` to the dynamic-parameters array. - Reload your page, your dynamic parameter is now linked to the rides history chart. - Select a day to filter the chart by weekday and watch it refresh with new data. :::info Learn more about dynamic parameters in the [**Technical Guide**](https://docs.dataplatform.ovh.net/sdk/app-dynamic_parameters.md)! ::: You have learned how to use existing components. You are now ready to take on [creating your own custom components and use them to make unique dynamic parameters and charts!](https://docs.dataplatform.ovh.net/tutorials-app-development-custom-components.md) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/tutorials-app-development-custom-components.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Add custom components ## Objective With the React framework, you can **create your own components** from scratch. These components can be used for two things: [dynamic parameters](https://docs.dataplatform.ovh.net/tutorials-app-development-custom-components.md#use-a-custom-component-as-a-dynamic-parameter) and [charts](https://docs.dataplatform.ovh.net/tutorials-app-development-custom-components.md#use-a-custom-component-as-a-chart). :::info At any point, feel free to refer to the [**Technical Guide**](https://docs.dataplatform.ovh.net/sdk/app-custom-component.md) to learn more about custom components! ::: ## Use a custom component as a dynamic parameter ### Generate a component Let's see how to create a custom component and how to use it as a dynamic parameter. As an example, we will show step-by-step you how to create this checkbox group component: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-checkbox-final.png) To generate a component, you can use our pre-build script by running the command below: ```bash yarn generate ``` Select the **component** generator, name it `DynamicParameterCheckbox` and answer "No" to the last question as shown below: ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/generate-checkbox.png) :::warning It is important that your component name starts with **DynamicParameter** to register it as a dynamic parameter ::: This script generates a folder in `src/components` containing three files : - `DynamicParameterCheckbox.jsx` - `DynamicParameterCheckbox.less` - `index.js` ### Declare a component Before you start working on the component itself let's take a minute to see how to declare it and use it. Follow these steps to declare the new component: - Go to `src/components/index.js` - Import the component by adding this line at the top of the file : ```js import DynamicParameterCheckbox from "./DynamicParameterCheckbox"; ``` - Declare it by adding its name to the components object ```js components: { ... DynamicParameterCheckbox }, ``` You can now call this component in your configuration files by specifying its **alias**. To obtain a component alias, transform its name from camelCase to kebab-case (`DynamicParameterCheckbox` becomes `dynamic-parameter-checkbox`), then remove "dynamic-parameter" and/or "chart" from it. Here, the component's alias is `checkbox`. Now go to `config/menus/sidebar.json` and change the _component_ property of _dynamic-weekday_ to `"checkbox"` (i.e. the alias). Go to your application page, notice that **the dynamic-weekday component has changed**. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-checkbox-1.png) The component is displayed but not yet functional: its behavior is defined in the next section. ### Edit a component The framework used in this guide is going to be React. :::info We will guide you step by step to make your components, but if you are having any trouble because you are not familiar with this framework you can check the documentation [here](https://reactjs.org/docs/getting-started.html). ::: Also, since we are working with functional components, we will use one of latest features available, **React Hooks**. You can check this [page](https://reactjs.org/docs/hooks-intro.html) for more information. Let's start editing `DynamicParameterCheckbox.jsx` Since this component is declared as a dynamic-parameter, some props are already automatically passed to it by Platforms data flow logic. These props can be logged when the component renders the first time, by making use of the [useEffect](https://reactjs.org/docs/hooks-reference.html#useeffect) hook. Start by importing `useEffect` and `useState` (you will need this one later) by changing the first line of the file: ```js import React, { useEffect, useState } from 'react' ``` Then add `props` to the arguments of the functional component: ```jsx const DynamicParameterCheckbox = (props) => { ``` Finally, add the useEffect hook inside this function right before the return statement. Your functional component should be defined as below: ```jsx const DynamicParameterCheckbox = (props) => { useEffect(() => { console.log(props); }, []); return
DynamicParameterCheckbox
; }; ``` Open your browser's console panel, you should be able to see the props. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-checkbox-props.png) As you can see, most of these props are passed in `sidebar.json` when defining the dynamic-parameter.\ The only exception is `items` which is the result of an internal request querying the field specified in `dictionary` (`week_day` in this case) ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-checkbox-items.png) Now let's create the checkboxes. To achieve this, you will need to install a small package: `react-checkbox-group`. Do so by running: ```bash yarn add react-checkbox-group ``` This package allows you to use a checkbox group component. You can now import it by adding this line at the top of the file: ```js import CheckboxGroup from 'react-checkbox-group' ``` Add a boolean variable `expanded` to the component state to be able to display or hide the `CheckboxGroup` with a little arrow icon: ```js const DynamicParameterCheckbox = (props) => { const [expanded, setExpanded] = useState(true) ... ``` Change the function return statement like this: ```jsx return (
{props.title} setExpanded(!expanded)} className={`fa fa-chevron-${expanded ? 'down' : 'right'} expand-icon`} />
{expanded && {(Checkbox) => ( {props.items.map(option =>
)}
)}
}
) ``` The title section is using _props.title_. This means that you need to pass a `title` prop in **dynamic-weekday** definition in `config/menus/sidebar.json`, as shown below: (the HTML element has also been removed since it's now redundant) ```json { "id": "dyn-weekday", "items": [ { "type": "dynamic-parameter", "dynamic-parameter": { "type": "filter", "id": "dynamic-weekday", "dictionary": "week_day_label", "component": "checkbox", "title": "Days" }, "style": { "paddingBottom": "10px" } } ] } ``` Finally, style your component by changing `DynamicParameterCheckbox.less`, using the code snippet below. :::details DynamicParameterCheckbox.less ```less // DynamicParameterCheckbox stylesheet @import "../../styles/_variables.less"; .checkbox-header { display: flex; flex-direction: row; align-items: center; } .dyn-checkbox-container { display: flex; align-items: flex-end; margin: 3px; } .dyn-checkbox { -webkit-appearance: none; background-color: #fafafa; border: 1px solid #cacece; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05); padding: 7px; border-radius: 3px; display: inline-block; position: relative; } .dyn-checkbox:hover { cursor: pointer; box-shadow: 0 1px 2px @primary-color, inset 0px 1px 3px @primary-color; border: 1px solid @primary-color; } .dyn-checkbox:active, .dyn-checkbox:checked:active { box-shadow: 0 1px 2px @primary-color, inset 0px 1px 3px @primary-color; } .dyn-checkbox:checked { background-color: @primary-color; border: 1px solid @primary-color; box-shadow: 0 1px 2px @primary-color, inset 0px -15px 10px -12px @primary-color, inset 15px 10px -12px @primary-color; color: white; } .dyn-checkbox:checked:after { content: "\2714"; font-size: 12px; position: absolute; top: -1px; left: 2px; color: white; } .dyn-checkbox-label { cursor: pointer; font-family: "Source Sans Pro"; font-size: 14px; letter-spacing: 0; color: #97a7b7; line-height: 17px; margin-left: 5px; } .fa.expand-icon { color: #97a7b7; font-size: 12px; cursor: pointer; margin-left: 5px; } .fa.expand-icon:hover { color: #3e4550; cursor: pointer; } ``` ::: Your dynamic-parameter looks good now, but it's not working properly yet. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-checkbox-wip.png) There is a problem, you cannot check any box! The reason is that you need to bind CheckboxGroup to our dynamic-parameter component. To do so, you have to add an array to the state of your component. It will keep track of the selected options, so name it `selectedOptions`: ```jsx const DynamicParameterCheckbox = (props) => { const [expanded, setExpanded] = useState(true) const [selectedOptions, setSelectedOptions] = useState([]) ... ``` Add a function `onChange` to update the array you have just defined: ```jsx const onChange = options => { setSelectedOptions(options); }; ``` Finally, you need to add the two properties (`onChange` and `value`, an array containing `selectedOptions`) to CheckboxGroup. Bind them by changing the return statement: ```jsx return ( ... ... ``` The last step is to bind this dynamic-parameter to the [redux global store](https://redux.js.org/api/store) to allow it to affect charts requests. We'll use React Redux hooks for a more modern and streamlined approach. Add these lines to the imports at the top of the file: ```jsx import { useSelector, useDispatch } from 'react-redux' import { set } from 'forepaas/store/querystring/action' ``` Next, inside your DynamicParameterCheckbox functional component, access the Redux state and dispatch function using hooks. Place these lines, inside your component function: ```jsx const options = useSelector((state) => state.querystring[props.id]) const dispatch = useDispatch() ``` - `useSelector`: This hook allows you to extract data from the Redux store state. Here, we're fetching the value associated with props.id from the querystring part of your Redux state. This options variable will automatically update whenever the Redux state changes for this specific ID. - `useDispatch`: This hook returns a reference to the dispatch function from the Redux store. You'll use this dispatch function to send actions to update the store. Inside your `DynamicParameterCheckbox` functional component, create a helper function `updateModel` to dispatch your actions to the global store: ```jsx const updateModel = (model) => { if (props.id) { let value = (model || []).map((item) => item && item.value ? item.value : item) dispatch(set(props.id, value.length ? value : null)) } } ``` This function now uses the dispatch function obtained from `useDispatch` to send the set action, updating the querystring in the Redux store. Then, update your onChange function to simply call updateModel with the new options: ```jsx const onChange = (options) => { updateModel(options) } ``` To ensure your component's internal state (selectedOptions) is synchronized with the Redux store's state (especially after a page refresh or external changes to the Redux state for this parameter), update your `useEffect` hook like this: ```jsx useEffect (() => { setSelectedOptions(options) }, [options]) ``` This `useEffect` hook will run whenever the options value (which comes directly from your Redux store via `useSelector`) changes. It keeps your component's local `selectedOptions` state in sync with the global Redux state, providing a consistent view of the dynamic parameter. Your dynamic parameter is now connected to the global store. You can make sure of this because the charts connected to dynamic-weekday are affected by this dynamic parameter. You have created your first custom dynamic parameter.\ The final code is available [here](https://github.com/forepaas/getting-started/tree/release/advanced/src/components/DynamicParameterCheckbox). ### Adding a search bar Let's add a second dynamic parameter to be able to filter by station. ![alt text](/images/public-cloud/data-platform/getting-further/app-dev/picts/dynamic-parameter-autocomplete-box.png) Generate a new component: ```bash yarn generate ``` Select the **component** generator. Name it `DynamicParameterAutocompleteBox` and answer "No" to the last question. Change the content of the newly generated .jsx file to this: :::details DynamicParameterAutocompleteBox.jsx ```jsx import React, { useState, useEffect } from 'react' import Select, { createFilter } from 'react-select' import { useSelector, useDispatch } from 'react-redux' import { set } from 'forepaas/store/querystring/action' const searchIcon = () => ({ alignItems: 'center', display: 'flex', ':before': { fontFamily: 'FontAwesome', content: '"\f002"', marginRight: 8 } }) const customStyles = { control: (base, state) => ({ ...base, height: '57px', borderWidth: '0px', boxShadow: '5px 5px -2px rgba(0, 0, 0, 0.1)' }), option: (base, state) => ({ ...base, color: state.theme.colors.neutral50, fontSize: '13px', height: '48px', display: 'flex', alignItems: 'center', fontWeight: 500, letterSpacing: 0 }), menu: (base, state) => ({ ...base, zIndex: 2000 }), multiValue: (base, state) => ({ ...base, borderRadius: '21px', backgroundColor: state.theme.colors.primary75, color: state.theme.colors.neutral0, height: '34px', alignItems: 'center' }), multiValueLabel: (base, state) => ({ ...base, color: state.theme.colors.neutral0, display: 'flex', alignItems: 'center', marginLeft: '10px', fontWeight: 600, letterSpacing: 0 }), placeholder: (base, state) => ({ ...base, color: state.theme.colors.neutral20, fontSize: '14px', ...searchIcon() }), multiValueRemove: (base, state) => { return ({ ...base, color: state.theme.colors.neutral0, borderRadius: '10px', padding: '0px', margin: '10px', border: `1px solid ${state.theme.colors.neutral0}`, ':hover': { backgroundColor: state.theme.colors.neutral0, color: state.theme.colors.primary75, cursor: 'pointer' } }) } } const DynamicParameterAutocompleteBox = ({ items, ...props }) => { const [selectedOptions, setSelectedOptions] = useState([]) const selectedValues = useSelector((state) => state.querystring[props.id]) const dispatch = useDispatch() items.sort((a,b) => (a.label > b.label) ? 1 : ((b.label > a.label) ? -1 : 0)) const customTheme = theme => ({ ...theme, colors: { ...theme.colors, primary: props.primaryColor || '#00CCF9', primary25: props.primary25Color || 'rgba(16,182,233,0.06)', primary50: props.primary50Color || 'rgba(16,182,233,0.20)', primary75: props.primary75Color || 'rgba(16,182,233,0.8)', neutral20: props.placeholderColor || '#97A7B7', neutral50: props.menuColor || '#485465' } }) useEffect (() => { const mappedOptions = items.filter(item => (selectedValues || []).includes(item.value)) setSelectedOptions(mappedOptions) }, [selectedValues, items]) const updateModel = (model) => { if (props.id) { let values = (model || []).map((item) => item && item.value ? item.value : item) dispatch(set(props.id, values.length ? values : null)) } } const onChange = (options) => { if (options && !Array.isArray(options)) { options = [options] } updateModel(options) } return ( ) } ``` At each modification of the input, we will update the component state. But as mentioned earlier, this has no effect on the store.\ You must add one line in the `handleChange` function. ```jsx handleChange (event) { this.setState({model: event.target.value}) this.updateModel(event.target.value) } ``` Your dynamic parameter is ready! - If you change its content, URL will change too (with its value). - If you connect it to a chart, it will be filtered automatically. --- url: https://docs.dataplatform.ovh.net/sdk/app-faq.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Troubleshooting & FAQ :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: This page provides an accessible reference to solutions for common issues you may have when developing your application on Data Platform as well as some **Frequently Asked Questions**. - [Troubleshooting](https://docs.dataplatform.ovh.net/sdk/app-faq.md#troubleshooting) - [Incorrect query](https://docs.dataplatform.ovh.net/sdk/app-faq.md#incorrect-query) - [FAQ](https://docs.dataplatform.ovh.net/sdk/app-faq.md#faq) - [How to use a specific NodeJS version?](https://docs.dataplatform.ovh.net/sdk/app-faq.md#how-to-use-a-specific-nodejs-version) - [How to format a value using an existing formatter?](https://docs.dataplatform.ovh.net/sdk/app-faq.md#how-to-format-a-value-using-an-existing-formatter) - [How to use registered translations?](https://docs.dataplatform.ovh.net/sdk/app-faq.md#how-to-use-registered-translations) - [How to make a query and get its results outside a Chart?](https://docs.dataplatform.ovh.net/sdk/app-faq.md#how-to-make-a-query-and-get-its-results-outside-a-chart) - [How to deploy a Simple Web App?](https://docs.dataplatform.ovh.net/sdk/app-faq.md#how-to-deploy-a-simple-web-app) If you do not find an answer to your question, please reach out to our [Support team](https://docs.dataplatform.ovh.net/sdk/app-faq.md#cannot-find-an-answer-to-your-question-%F0%9F%86%98)! *** ## Troubleshooting ### Incorrect Query #### Occurrence This error occurs when you use attempt to access a _query_ that isn't available. ![incorrect\_query](/images/sdk/technical/sdk/app/incorrect_query.png) ##### Common causes & solutions **Undeployed API** If the API associated to your APP isn't deployed, your APP won't be able to retrieve the query in the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). Check if your API is deployed and deploy it if it isn't. **Typo in your query** Check if the fields in your query are written correctly and if they exist in the Analytics Manager. *** ## FAQ ### How to use a specific NodeJS version? It is possible to specify the NodeJS version to use when building App by specifying in `./forepaas.json`: ```json "node": 14, ``` *** ### How to format a value using an existing formatter? ```jsx // Leverage "turnover" as declared in ./config/formatter.json to format a given value import { FpMeasure } from 'forepaas/formatter' function formatValue(field, value) { let measure = new FpMeasure(field); return measure.setValue(value).toString(); } console.log(formatValue("turnover", 100)); ``` *** ### How to use registered translations? ```jsx import FpTranslate from 'forepaas/translate' console.log(FpTranslate("key_to_be_translated"}) ``` *** ### How to make a query and get its results outside a Chart? ```jsx import FpQueryBuilder from 'forepaas/query-builder' const query = { data: { fields: { date: ["min","max"] } } } let request = new FpQueryBuilder.FpQuery(query) request.compute().then((response) => { // display array of results from the query console.log(response.results) // displays the first item in results console.log(response.results[0]) // get 'data' from 1st item and displays values let item= response.results[0].data console.log(item.date.min[0].value, item.date.max[0].value) }) ``` *** ### How to deploy a Simple Web App? Sometimes it is needed to deploy a simple web app or using a different SDK. App's code may be provided either through a ZIP file or a Git repository. It must provide at least: - `forepaas.json`: minimal version described below - `package.json`: minimal version described below - `production/`: folder that will be the root of the website after deployment, the `package.json` file may contain a `build` command to make that folder **forepaas.json** ```json { "type": "app", "language": "js", "framework": "custom", "modules": {} } ``` **package.json** ```json { "name": "app_name", "version": "1.0.0", "main": "index.js", "scripts": { "build": "echo no build to do" } } ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Front API SDK :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: In Data Platform, the Front API is the **Project's gateway for remote requests**. It is built and deployed using [API Manager](https://docs.dataplatform.ovh.net/landing-page-app-services-apis.md) and has two main purposes: - Access from the [Front App](https://docs.dataplatform.ovh.net/sdk/app.md) with all tight integration built-in - Access from other remote systems that need to request your Project In addition, vanilla Front APIs deployed by default have the following features: - Enforce authentication and data ACL as declared in the [Identity Application Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md) - Pass on requests using [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md) format - Access to a `WebStorage` to be used by Front App - adding [available extensions](https://docs.dataplatform.ovh.net/app-services-apis-extensions-list.md), export CSV/XLSX *** ## Customize your Project's API using the SDK ### When is customization needed? The aforementioned features are sufficient for most use cases, but you can extend it much further. The Front API SDK is written in NodeJS. After an [API has been deployed](https://docs.dataplatform.ovh.net/app-services-apis-deploy.md), it is easy to download it and start hacking. Typical cases: - needs to provide an endpoint with a specific request and response format - needs to implement _transformers_ to dynamically change QB requests (adding fields, changing filters or scales on the fly) - implement advanced permissions restrictions on data fields - merge several QB requests to one result - request external API on behalf of Front App - ... and whatever you may do in NodeJS! :::warning Customizing a Front API requires some knowledge of JavaScript, NodeJS and Web Service development, and should be done by advanced users. ::: ### Requirements - [NodeJS](https://nodejs.org/en/): Front API is implemented in NodeJS - [Docker](https://www.docker.com/): Front API may be started with Docker - [Git](https://git-scm.com/): we strongly advise to version your code with Git and use it to deploy on Data Platform ### What can you customize? Check out the following articles to discover how to customize an API using the SDK. - [Discover the structure of an API](https://docs.dataplatform.ovh.net/sdk/api-api-files.md) - [Launch in a local environment](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md) - [Manage modules](https://docs.dataplatform.ovh.net/sdk/api-configure-module.md) - [Handle queries](https://docs.dataplatform.ovh.net/sdk/api-queries.md) - [Add query transformers](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md) - [Add query endpoints](https://docs.dataplatform.ovh.net/sdk/api-qb-endpoint.md) - [Add query data ACL](https://docs.dataplatform.ovh.net/sdk/api-qb-acl.md) - [Create custom API endpoints](https://docs.dataplatform.ovh.net/sdk/api-custom-endpoints.md) - [Expose a bucket file](https://docs.dataplatform.ovh.net/sdk/api-download-file-datastore.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-api-files.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Structure of an API on Data Platform :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: Here is the content of the source code of an API. Note that the SDK is available in NodeJS. ``` ├── .gitignore ├── Dockerfile.dev ├── LICENSE.md ├── LICENSE.txt ├── app.js ├── dev.sh ├── forepaas | |-- cache-controller | |-- cache-redis | |-- cam | |-- logger-console | |-- qb | |-- reportings | |-- sdk | `-- webstorage ├── forepaas.json ├── package.json ├── run.sh └── yarn.lock ``` - [Core files of the API](https://docs.dataplatform.ovh.net/sdk/api-api-files.md#the-core-files-of-the-api) - [Launcher utilities](https://docs.dataplatform.ovh.net/sdk/api-api-files.md#launcher-utilities) - [Git](https://docs.dataplatform.ovh.net/sdk/api-api-files.md#git) - [License](https://docs.dataplatform.ovh.net/sdk/api-api-files.md#license) ### The core files of the API ``` ├── app.js ├── forepaas.json ├── forepaas ├── package.json └── yarn.lock ``` - `app.js`: central point of the API and will serve to launch all the rest. Here you can directly access the ExpressJS instance (via the app variable) - `forepaas.json`: describes the list of extensions that make up your API - `forepaas/`: contains the extensions installed in your API - `package.json` : contains the NodeJS dependencies associated with your API - `yarn.lock` : we use [yarn](https://yarnpkg.com/lang/en/) as package manager, it generates a file `yarn.lock` to **lock dependencies associated with your API**. ### Launcher utilities - Docker - `Dockerfile.dev`: a **Docker** description of the context in which the API runs. - `dev.sh`: a script to launch the docker environment quickly. - NodeJS - `run.sh` : a script to launch your API directly ### Git - `.gitignore`: defines the Git files and folder that will not be _commited_ (in case you use git). ### License These two files mention the Data Platform license associated with this SDK. - `LICENSE.md` - `LICENSE.txt` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-api-launch.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Launch an API in a local environment :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: While **OVHcloud Data Platform** is great as a tool for hosting deployed APIs during both development and production, it’s not always the natural place to edit code. Most software engineers prefer to edit their code on their computer. Below is how you can build and deploy an API from a local development environment. - [0) Requirements](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md#requirements) - [1) Download and install locally](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md#download-and-install-locally) - [2) Launch the API](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md#launch-the-api) - [3) Manage authentication](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md#manage-authentication) - [4) Launch everything together](https://docs.dataplatform.ovh.net/sdk/api-api-launch.md#launch-everything-together) *** ## Requirements ### NodeJS Currently we use v10 in production, but we will soon update it to 14. In local, it will work with both versions, we recommend using v14 right now, but to keep a look on the functions used while the update is not done in production. Install it from [here](https://nodejs.org/en/). ### Redis (optional) By default the API use Redis as cache in production It can be disable for dev, but you can also use a local redis #### Install redis If you want to have it locally, we recommand to install and use [Docker](https://docs.docker.com/desktop/). Then it is possible to: ```sh # start a redis locally docker run --name redis -d -p 6379:6379 redis # stop it docker stop redis # restart it docker start redis # remove it (need to be stop before, or to add the flag -f in the command) docker rm redis ``` #### or Disable cache - Open "forepaas.json" - Replace these occurence ```json "cache": { "module": "cache-redis" }, ``` by ```json "_cache": { "module": "cache-redis" }, ``` - Remove the cache redis main occurence ```json "cache-redis": { "version": "2.0.0" }, ``` *** ## Download and install locally - From the GUI, go to the API Overview [https://eu.dataplatform.ovh.net/#/api/\\\{ProjectID\\}/\\\{API\_NAME\\}](https://eu.dataplatform.ovh.net/#/api/\\\{ProjectID\\}/\\\{API_NAME\\}) - Select the tag you want to copy, then click on "Download that version" - Extract the zip in a folder of your choice - Install node dependencies (we use the package manager yarn by default, we recommend you to use the same to have same condition than production) ```sh yarn ``` *** ## Launch the API By default you should find a "run.sh" script, already here, giving a sample of quick run ```sh KONG_INTERNAL_URI=false \ FOREPAAS_APPLICATION_CREDENTIALS=./creds.json \ FOREPAAS_QB_RESOURCE_ID=http://qb-service:9000 \ REDIS_URI=redis://127.0.0.1 \ ENV=development \ yarn run start ``` - **KONG\_INTERNAL\_URI**: it will disable a production mode for URL computing, we plan to remove that variable in future - **FOREPAAS\_APPLICATION\_CREDENTIALS**: used to link to a local `creds.json` file, it will be described below - **FOREPAAS\_QB\_RESOURCE\_ID**: get legacy ACL resources - **REDIS\_URI**: if using a local redis, it should override the URL here, as explained in previous section (it should already be the correct value) - **ENV**: set to `development` for local development - `yarn run start`: it will launch the API, use `yarn run watch` to reload as soon as code is updated in local environement If you launch the API, it should start well, but you will not be identify to the platform and your API will not be able to call the Project API. For this, you need to get authenticated. *** ## Manage authentication By default, in production on **OVHcloud Data Platform**, the API is self-authenticated to the other Project components. But when you are in a local development environment, you need to authenticate though the [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md). The best way to do it is by [generating API and secret key for a user (or a service account)](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md). You will also need your [Project subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md). Once you have the keys and project subdomain, you can create a file called "creds.json" at the root of the API. This file should never be committed (set in .gitignore by default). ```json { "dataplant_url": "https://{DATAPLANT_SUBDOMAIN}.eu.dataplatform.ovh.net", "api_key": "610aa8766608131b00000095610aa87f6608131b00000097", "secret_key": "8559d0f805dbb981XXXXXXXXXXXXXXXXXXXXXXXXXXXXX8bf9af358a4" } ``` *** ## Launch everything together Launch your API by calling the "run.sh" file. ```sh sh run.sh ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-configure-module.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Manage modules :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: APIs work primarily with **modules** that can be interconnected. Those modules are configured in the `forepaas.json` file at the root of your [Front API](https://docs.dataplatform.ovh.net/sdk/api-api-files.md), along with the rest of the API configuration: ```json //forepaas.json {   "id": "frontapi", // unique ID: used if you choose to publish as a "template" in the store   "type": "api", // forepaas.json is used for 'app' and 'api', here it is 'api'   "language": "node", // Language used for the API   "name": "FrontAPI",   "version": "0.0.1",   "modules": {...}, // Detailed below in the "Configure modules" section   "dependencies": {...} // ``` > This file is fully configurable via the **OVHcloud Data Platform**, on the [Extension configuration of your API](https://docs.dataplatform.ovh.net/app-services-apis-extensions-list.md). > The file `forepaas.json` is automatically modified each time you install or uninstall a module from the platform. The modules' configuration is done via two separate fields: - the `modules` key: it contains the list of modules to be installed - the `dependencies` key *** ## Configure modules Here is an example of a configuration : ```json   "modules": {     "sdk": {       "version": "2.4.0"     },     "iam": {       "version": "1.0.0"     },     "cache-redis": {       "version": "2.0.0"     },     "qb": {       "version": "2.4.0",       "dependencies": {         "authentication": {           "module": "iam"         },         "cache": {           "module": "cache-redis"         }       }     }   } ``` For a better understanding, here is a short description of each module: - `sdk`: the heart of the Front API. It is essential, but replaceable if you want to modify the standard behavior of **OVHcloud Data Platform** APIs - `iam`: a connector to the Project's [Identity Access Manager](https://docs.dataplatform.ovh.net/developers-api-authentication.md). It allows you to manage access to your API. - `cache-redis`: a cache connector to a _Redis_ database - `qb`: a connector to the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md), to query and use your data in your applications All modules act independently. However, `qb` module relies upon _cache_ and _authentication_. In this sample, it is configured to use `iam` module to manage _authentication_ and `cache-redis` for _cache_. :::warning ⚠️ Without the `iam` module, your API does not have any access control! ::: ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-queries.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Handle queries :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: One of the core function of the API is to handle queries to your Data Platform data system from the outside world, or from an [application](https://docs.dataplatform.ovh.net/landing-page-app-services-apps.md). You can [add transformers](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md) to your queries to modify them on the fly, add new [query endpoints](https://docs.dataplatform.ovh.net/sdk/api-qb-endpoint.md), and [manage the data ACL](https://docs.dataplatform.ovh.net/sdk/api-qb-acl.md) for the queries passed on to Data Platform. [Pass on external queries](https://docs.dataplatform.ovh.net/sdk/api-queries.md#pass-on-external-queries-queries) [Add query transformers in your API](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md) [Add query endpoints in your API](https://docs.dataplatform.ovh.net/sdk/api-qb-endpoint.md) [Add query data ACL in your API](https://docs.dataplatform.ovh.net/sdk/api-qb-acl.md) *** ## Pass on external queries ### Configure a web service for query execution Queries can be executed from an external appliance / service through configuring a Web Service. The return formats may be JSON, CSV or XLSX. #### Get credentials By default, in production, the API is self-authenticated to the other Project components. But when you are calling it from the outside world, you need to authenticate though the [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md). The best way to do it is by [getting an authentication token using API and secret key for a user (or a service account)](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md). #### Run queries via the web service **JSON output** ``` curl -X POST \ https://my-project.eu.dataplatform.ovh.net/myapi-api/qb/query?app_id=your_app_id \ -H 'Content-Type: application/json' \ -H 'authorization: Bearer your_token' \ -d '{ "data": { "fields": { "date": ["min", "max"] } } }' ``` **CSV output** ```sh curl -X POST \ https://my-project.eu.dataplatform.ovh.net/myapi-api/qb/query.csv?app_id=your_app_id \ -H 'Content-Type: application/json' \ -H 'authorization: Bearer your_token' \ -d '{ "data": { "fields": { "date": ["min", "max"] } } }' ``` > Note that CSV formatting may be controlled with `options` in the query, as for instance: ```json "options":{ "collapse": "false", "scales": { "x": [ {"field": "field_name_1", "type":"scale"}, /*...*/ {"field": "field_name_n", "type":"scale"} ], "y": [{"type": "data"}] } } ``` **XLSX output** ```sh curl -X POST \ https://my-project.eu.dataplatform.ovh.net/myapi-api/qb/query.xlsx?app_id=your_app_id \ -H 'Content-Type: application/json' \ -H 'authorization: Bearer your_token' \ -d '{ "data": { "fields": { "date": ["min", "max"] } } }' ``` :::info Note that using `options` it is possible to better control the output. ::: ### Front API basic endpoints reference Here are the list of basic endpoints that comes with the default Front API. ## _GET_ /refresh Flush the cache **Responses** | Code | Description | | ---- | :------------------------------ | | 200 | A simple success `true` message | ## _GET_ /qb/dataset Retrieves the dataset from the Analytics Manager **Responses** | Code | Description | | ---- | :------------------------------------- | | 200 | The dataset from the Analytics Manager | ## _POST_ /qb/query Make a query from an Analytics Manager JSON request **Responses** | Code | Description | | ---- | :---------------------------------- | | 200 | A result from the Analytics Manager | ## _GET_ /webstorage/`{key}` Retrieves a value for a key in the webstorage **Parameters** | Name | Located in | Description | Required | Schema | | :--- | :--------- | :---------- | :------- | :----- | | key | path | | Yes | string | **Responses** | Code | Description | | ---- | ------------- | | 200 | The content | | 404 | Key not found | ## _PUT_ /webstorage/`{key}` Puts a value from the body of the request to a key in the webstorage **Parameters** | Name | Located in | Description | Required | Schema | | :--- | :--------- | :---------- | :------- | :----- | | key | path | | Yes | string | **Responses** | Code | Description | | ---- | --------------- | | 200 | The new content | ## _DELETE_ /webstorage/`{key}` Removes a value for a specific key in webstorage **Parameters** | Name | Located in | Description | Required | Schema | | :--- | :--------- | :---------- | :------- | :----- | | key | path | | Yes | string | **Responses** | Code | Description | | ---- | -------------------- | | 200 | The previous content | | 404 | Key not found | ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create Transformers for Analytics Manager queries :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: Transformers intercept and change queries right before they are sent to the Analytics Manager. In the default flow, **Default Transformers** are called by the API's query module (`/forepaas/qb`), in order to inject the values of the **Dynamic Parameters** to the filters and scales of the query. *** ## Typical use case For a better understanding of how transformers work and can be created, let's use an example that is often found in data Projects. Let's say that most of the displayed data is filtered on the same `date` attribute. However, let's imagine some tables do not have a `date` attribute, but instead a `previous_date` attribute.\ With default behavior, queries made to this table would return a **No table found for this query** error. To solve this, a custom transformer is needed. - [Create a custom transformer](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md#Create-a-custom-transformer) - [Configure the Front App](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md#Configure-the-Front-App) - [Customize a transformer](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md#Customize-Transformer) - [Check the transformation](https://docs.dataplatform.ovh.net/sdk/api-qb-transformers.md#Check-the-transformation) *** ## Create a custom transformer Just like custom endpoints, creating a new transformer requires adding files in a specific directory: `/src/qb/transformers`. There are 3 types of transformers available for each part of a query : - `filter`: for which you can create a `filter.js` file - `data`: for which you can create a `data.js` file - `scale`: for which you can create a `scale.js` file In the case described above, create `./src/qb/transformers/filter.js`, copying the default one from `./forepaas/qb/transformers/filter.js` **./src/qb/transformers/filter.js** ```js module.exports = { default:(query,{reference,value})=>{ if(value === null) return Promise.resolve(query) if(!Array.isArray(value)) value = (value||"").split(';') query.filter = query.filter || {} if (reference.search(/^range_/) !== -1) { let rangeref = reference.replace(/^range_/, '') query.filter[rangeref] = query.filter[rangeref] || {} if(Array.isArray(value)) value = value[0] if(value) query.filter[rangeref].between = value.split(',') return Promise.resolve(query) } query.filter[reference] = query.filter[reference] || {} query.filter[reference].in = query.filter[reference].in || [] query.filter[reference].in = query.filter[reference].in.concat(value) return Promise.resolve(query) } } ``` Transformers are objects with at least one `default` method.\ This method takes the following parameters: - `query`: the full query modified by the function - `reference`: as defined in the dynamic parameter configuration in the **Front App** - `value`: value(s) passed by the **Front App** This function is called for each Dynamic Parameter passed with the Query. At this point, the Front API keeps the same behavior, going through this custom transformer rather than the default one. *** ## Configure the Front App With that in mind let's have a look at a regular request.\ Here is the configuration of a chart: ```json { ... "chart": { "requestId": "xyz123-xyz123-xyz123-xyz123-xyz123", "dynamic-parameters": [ "datepicker" ] }, ... } ``` The generated HTTPS request is a _POST_ call on the endpoint `/qb/query/xyz123-xyz123-xyz123-xyz123-xyz123` with the following body: ```json { "dynamic_parameters": [ { "type": "filter", "transform": "default", "value": [ "1582502400,1582588799" ], "params": [], "reference": "range_date" } ] } ``` Here only 2 things need to change in order to get the needed feature: - `default`: needs to be changed to a custom value, for instance `changeRef` - `params`: needs to include `previous_date` so our custom transformer may use it. The `dynamic-parameters` configuration allows you to do both those changes. Going back to the chart's configuration, the transformer type will be set using a `|` and the `params` using a `:`. ```json { ... "chart": { "requestId": "xyz123-xyz123-xyz123-xyz123-xyz123", "dynamic-parameters": [ "datepicker|changeRef:range_previous_date" ] }, ... } ``` And the _POST_ body becomes : ```json { "dynamic_parameters": [ { "type": "filter", "transform": "changeRef", "value": [ "1582502400,1582588799" ], "params": ["rnge_previous_date"], "reference": "range_date" } ] } ``` It is now necessary to handle it in the `filter` transformer. *** ## Customize transformer A new method `changeRef` needs to be implemented in the object taking the same input as `default`, plus the `params`array described above. ```js module.exports = { ... changeRef: (query, { reference, value, params }) => {} } ``` In that case, it is suited to factorize `default` method, so `changeRef` may be implemented by calling it with different rules for `reference`. Therefore, the full **/src/qb/transformers/filter.js** ends up looking like this: ```js const defaultTransformer = (query, { reference, value }) => { if (value === null) return Promise.resolve(query) if (!Array.isArray(value)) value = (value || "").split(';') query.filter = query.filter || {} if (reference.search(/^range_/) !== -1) { let rangeref = reference.replace(/^range_/, '') query.filter[rangeref] = query.filter[rangeref] || {} if (Array.isArray(value)) value = value[0] if (value) query.filter[rangeref].between = value.split(',') return Promise.resolve(query) } query.filter[reference] = query.filter[reference] || {} query.filter[reference].in = query.filter[reference].in || [] query.filter[reference].in = query.filter[reference].in.concat(value) return Promise.resolve(query) } module.exports = { default: defaultTransformer, changeRef: (query, { reference, value, params }) => { return defaultTransformer(query, { reference: params[0] || reference, value }) } } ``` The `changeRef` method calls the `defaultTransformer` function, changing `reference` in the process. *** ## Check the transformation The last step is to make sure that query uses the `changeRef` option. In the end, the query sent by the chart will have the following body: ```json { "filter": { "previous_date": { "between": ["1582502400","1582588799"] } } } ``` > 💡 Using these techniques on `filter`, `scale` or `data` coupled with [Front App's Dynamic parameters](https://docs.dataplatform.ovh.net/sdk/app-dynamic_parameters.md) allows you to thouroughly customize your apps! ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-qb-endpoint.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create a custom endpoint for Analytics Manager queries :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: It is possible to easily extend the Analytics Manager query flow by adding new `endpoints`.\ Those endpoints can then be called from any `chart` in the **Front App** to be displayed. Here are some use examples: - [merge 2 queries in one result](https://docs.dataplatform.ovh.net/sdk/api-qb-endpoint.md#merge-two-queries) - use Machine Learning to compute and display forecast - do some computation on results before returning them *** ## Create a new endpoint > Simply add a file in `./src/qb/endpoints/`.\ > This folder does not exist by default, it must be created from the root of the Front API. For instance, adding the following file provides an answer from a _GET_ request on `qb/hello_world` : **./src/qb/endpoints/hello\_world.js** ```js module.exports = { method: "GET", request: function(req, res, next) { res.send('hello') } } ``` *** ## Merge two queries In this example, consider a dataset containing the **turnover** of Data Platform and 4 other companies. The objective is to compare : - the evolution of the Data Platform turnover - the evolution of the sum of all turnover (Data Platform + 4 others). The Analytics Manager query format needs 2 different queries : ```json // Data Platform Turnover { "data":{ "fields":{ "turnover":["sum"] } }, "scale":{ "fields":["date"] }, "filter":{ "company": ["Data Platform"] } } // Global Turnover { "data":{ "fields":{ "turnover": ["sum"] } }, "scale":{ "fields":["date"] } } ``` In order to build a chart with 2 curves in the Front App, the custom endpoint should return the appropriate result set. ```js const QueryBuilder = require('../../../forepaas/qb/services/QueryBuilder') const Merge = require('../../../forepaas/qb/services/Merge') const Formatter = require('../../../forepaas/qb/services/Formatter') module.exports = { method: 'GET', request: (req, res, next) => { // define 2 queries let queries = { // query 1 : forepaas turnover forepaas: { data: { fields: { turnover: ["sum"] } }, scale: { fields: ["date"] }, filter: { company: ["Data Platform"] } }, // query 2: global turnover global:{ data: { fields: { turnover: ["sum"] } }, scale: { fields: ["date"] } } }; // execute queries and merge results QueryBuilder.queries(req, queries).then(responses => { let response = new Merge(responses, { renameWithId:true }).request(); return Formatter(res, 'json', response); }).catch(next) } } ``` In this example : 1. both queries are made through the `QueryBuilder.queries()` helper function. 2. responses consist of 2 distinct results : the Front App does not handle it as is. 3. the module `Merge` offers basic merge functions to accumulate queries.\ The `renameWithId` option provides two _forepaas:turnover_ and _global:turnover_ fields in return. :::info **To be noticed**\ Caching and activation of authentication is done automatically. ::: *** ## Improve to be dynamic In most cases, custom endpoints are not simple **GET** requests that always compute the same request. Usually, the request(s) sent to the Analytics Manager are dynamically generated using the body of the request.\ In order to do so, the request's method needs to change to **POST** and queries passed as variable. These changes result in the following code: ```js const QueryBuilder = require('../../../forepaas/qb/services/QueryBuilder') const Merge = require('../../../forepaas/qb/services/Merge') const Formatter = require('../../../forepaas/qb/services/Formatter') module.exports = { method: 'POST', request: (req, res, next) => { // define 2 queries from req.body let queries = { forepaas:{ ...req.body, filter: { company: ["Data Platform"] } }, global: req.body }; // execute queries and merge results QueryBuilder.queries(req,queries).then(responses=>{ let response = new Merge(responses, { renameWithId:true }).request() return Formatter(res, 'json', response) }).catch(next) } } ``` *** ## Call it from the Front App In the JSON of a `Chart`, instead of using the `request` parameter, all you have to do is use the `endpoint` parameter, as in this example: ```json { "component": "echarts", "endpoint": { "method": "GET", "query": "qb/hello_world", "params": { "data":{ "fields":{ "turnover": ["sum"] } }, "scale":{ "fields":["date"] } } } } ``` :::warning For an endpoint in **POST**, dynamic parameter values will be passed in `req.body`. ::: ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-qb-acl.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Customize Analytics Manager ACL rules in Front API :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: :::warning The extension `qb` must be installed. ::: Create a file: /src/qb/services/ACL.js from this template: ```js module.exports = async (req,query,dataset)=> { return query } ``` For the moment no rules will be applied. From this function you will be able to : - Disallow the user to make the query OR - Update the query content by adding field inside the query (filter for example) A complete example : ```js // This function is called each time you launch a query from the Front API, // and allows you to intercept it. // thus you can easily forbid a query or modify it (in order to apply a filter) module.exports = async (req,query,dataset)=> \{ // req.authentication.session contains the object provided by IAM // or your custom authentication // If you wish to deny certain requests for non-admins. if(query.data.fields.quantity && !req.authentication.session.isAdmin) \{ let err = new Error('QuantityNotAuthorized') err.status = 401 throw err \} // If you need to apply a filter for non-admin if(!req.authentication.session.isAdmin) \{ query.filter = query.filter || \{\} query.filter.company = \{ in:["Data Platform"] \} \} return query ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-custom-endpoints.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create custom endpoints :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: It is possible to create completely new **endpoints** in your API. - [Add new routes](#add-new-routes) - [Upload files through APIs](#upload-files-through-apis) *** ## Add new routes **./src/index.js** ```js const IAM = require('../forepaas/iam/IAM') /* We define an AuthInterceptor, that checks for user authentication, to be used in the new routes. Without adding it, the new routes will be publicly available. In the /qb/* endpoints the same mechanism is already done. */ let AuthInterceptor = function (req, _res, next) { new IAM().checkSession(req, (err, session) => { if (err) { return next(err); } req.authentication = { session } next(); }) } /* The SDK loads src/index.js, if present, and execute the exported function passing the "Express app". That gives an opportunity to add routes. */ module.exports = (app) => { // this route checks for user authentication app.get('/hello/user', [AuthInterceptor], (req, res, next) => { res.ok({"hello": "user !"}); }); // this route will be public app.get('/hello/everyone', (req, res, next) => { res.ok({"hello": "world !"}); }); } ``` > **Notes:** - The SDK uses [Express](https://expressjs.com/) - If the `./src/index.js` file exists, it is executed as a function passing the Express `app` - This allows you to declare new routes using Express methods - It is needed to handle Authentication in those implementations *** ## Upload files through APIs You can use the same mechanism and a library such as [Multer](https://www.npmjs.com/package/multer). For instance, to process `my-budget.csv`: ```js const IAM = require('../forepaas/iam/IAM') const upload = multer() module.exports = (app) => { app.get('/send/budget', [AuthInterceptor, upload.single('budget')], (req, res, next) => { console.log(req.file) res.ok() }) } ``` It is then possible to process the file from the Front API, store it in the [Lakehouse Manager buckets](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md) and launch a [Data Processing Engine](https://docs.dataplatform.ovh.net/landing-page-dpe.md) workflow or action! ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/sdk/api-download-file-datastore.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Expose a file from your buckets :::warning **Rework pending, no delivery date.** The Front App SDK (ReactJS) and the Front API SDK (NodeJS) are both being replaced. This page documents the current release, remains accurate, and is maintained until the replacement ships. Code written against it keeps working. ::: A custom endpoint can be added to your API to serve a file from a [Lakehouse Manager bucket](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md) (object store). - [1) Get credentials](#get-credentials) - [2) Create a custom module to expose the file](#create-a-custom-module-to-expose-the-file) - [3) Launch the API](#launch-the-api) *** ## Get credentials The person/service authenticating to access the file through this new API endpoint must have at least **read access** on the buckets in the Lakehouse Manager. Create an [Identity Access Manager user](https://docs.dataplatform.ovh.net/iam-users.md) (or service account) with a role containing the permission _Datastore bucket read_. Then [generate API and secret key for this user](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md): those keys will be used when configuring the API endpoint. *** ## Create a custom module to expose the file In your api, you can add / edit this code ```json // forepaas.json // In modules key, add the configuration of your new module "s3-sample": { "version": "local", "dependencies": { "authentication": { "module": "iam" } } }, ``` In the folder forepaas, create a subfolder named "s3-sample" Inside, you will have to create 2 main files ```json // forepaas/s3-sample/forepaas.json { "id": "s3-sample", "type": "package", "name": "S3 Saple", "version": "1.0.0", "npmDependencies": { "aws-sdk": "2.966.0" } } ``` ```js // forepaas/s3-sample/factory.js const express = require('express') const router = express.Router() const AWS = require('aws-sdk') const util = require('util') // Modify those values for your environment let accessKey = 'YOUR_ACCESS_KEY' let secretKey = 'YOUR_SECRET_KEY' let endpoint = 'https://YOUR_PROJECT_SUBDOMAIN.eu.dataplatform.ovh.net' let bucket = 'project-YOUR_PROJECTID-YOUR_BUCKET' let region = 'forepaas' // If no authentication is bind, it will use that default function let defaultDependencies = { authentication: { checkSession:(req,cb) => cb() } } let dependencies = {} let factory = new AbstractFactory(dependencies) let createSuper = factory.create factory.create = function(moduleName) { createSuper.call(moduleName) this.moduleName = 's3-sample' factory.setDependencies(defaultDependencies) let dependencies = this.getDependencies() // Use authentication if binded in forepaas.json router.use(async (req,res,next)=>{ try { req.session = await util.promisify(dependencies.authentication.checkSession)(req) next() } catch (err) { next(err) } }) // Set our custom endpoint // Will be available on GET /s3-sample/custom-endpoint router.get('/custom-endpoint',async (req,res,next)=>{ try { // Use s3 connector, to get a file in datstore const dataStoreClient = new AWS.S3({ accessKeyId: accessKey, secretAccessKey: secretKey, endpoint: `${endpoint}/datastore`, region: region, signatureVersion: 'v4', s3ForcePathStyle: true }) dataStoreClient.getObject({ Bucket: bucket, Key: 'my-file.csv' }) .createReadStream() .on('error', (err) => { next(err) }) .pipe(res) } catch (err) { next(err) } }) // Initialise the router for enable endpoint this.initRouter(router) return this } module.exports = factory ``` *** ## Launch the API You can now run the API, locally or on Data Platform. Get your endpoint as such: ``` GET API_URL/s3-sample/custom-endpoint ``` If you have enabled authentication (from the main _forepaas.json_ file), you will have to add a queryString parameter with a [valid token from the Identity Access Manager](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md#generate-an-authentication-token) ``` GET API_URL/s3-sample/custom-endpoint?token=1234 ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/index.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # ForePaaS Legacy Platform :::warning The ForePaaS Legacy Platform no longer accepts new signups. If your company would like to get started on the platform, please use [OVHcloud Data Platform](https://www.ovhcloud.com/fr/public-cloud/data-platform/) and its [documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: OVHcloud Data Platform evolved from the ForePaaS platform. Most concepts carried over under new names, and a few services were replaced or retired. This section groups the documentation that only applies to the ForePaaS Legacy Platform, for customers still operating on it. ## Terminology mapping | ForePaaS Legacy Platform | OVHcloud Data Platform | | :-------------------------------------- | :---------------------------------------------------------------------------------------------------------------- | | Dataplant | [Project](https://docs.dataplatform.ovh.net/manage-projects.md) | | Data Manager | [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) | | Query Builder | [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md) | | Storage Engines (PostgreSQL, Snowflake) | Built-in [Trino/Iceberg lakehouse storage](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) | | PRIM, MART and ML datasets | A single [default dataset](https://docs.dataplatform.ovh.net/lakehouse-manager-datasets.md), plus custom datasets | | Machine Learning Manager | Not available on OVHcloud Data Platform | | ForePaaS Store | [Connector catalog](https://docs.dataplatform.ovh.net/landing-page-connectors.md) and DPE action catalog | ## What you will find in this section - [Storage Engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md): the PostgreSQL and Snowflake warehouse engines of the legacy platform, and [how to link them](https://docs.dataplatform.ovh.net/legacy/lakehouse-manager-settings.md) to a Dataplant. - [Machine Learning Manager](https://docs.dataplatform.ovh.net/legacy/ml.md): model training, pipelines and notebooks, including the [getting started tutorial](https://docs.dataplatform.ovh.net/legacy/getting-started-ml.md). - [ForePaaS APIs](https://docs.dataplatform.ovh.net/legacy/api-reference.md): the legacy API references (Query Builder, Data Manager, IAM, Buckets, ForePaaS Store). - [Account setup](https://docs.dataplatform.ovh.net/legacy/account-setup.md): legacy account and organization management. - [Query Builder to Analytics Manager migration guide](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md): what changed when queries moved to the Analytics Manager. - [ForePaaS Store](https://docs.dataplatform.ovh.net/legacy/project-marketplace.md): the legacy collaborative marketplace. Every page in this section carries a notice linking to the closest equivalent in the current documentation. --- url: https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Storage engines :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Lakehouse Manager documentation](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md). ::: Storage engines are responsible for **”physically” storing the data** of your Project. They are the technological system with which your Project services - such as [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) or [Data Processing Engine](https://docs.dataplatform.ovh.net/landing-page-dpe.md) - communicate when they need to read or write data. If you use storage services such as [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md), then you Project is linked to at least one storage engine. It is possible to use multiple storage engines in the same Project: you can link a different one for [every dataset](https://docs.dataplatform.ovh.net/lakehouse-manager-datasets.md) in [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md). It is also possible to use the same storage engine for multiple Projects. > You must have **storage engine permissions** in order to manage (i.e. create, link to Project, delete) storage engines. These permissions are set at user level in your [organization settings](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-member-permissions-in-your-organization). Even if a user has no permission on storage engines, they are still able to use it and access the data in it from inside the [Project](https://docs.dataplatform.ovh.net/manage-projects.md) - it's only the management of engines that is restricted. ![se](/images/legacy/product/project/storage-engine/storage-engine-menu2.png) Every storage engine has a technical name that is sometimes used alternatively in API calls. This technical name always starts with _i\__, for example: `i_0941a7f635f1`. This ID can typically be found in the [SQL-string converted by the Analytics Manager](https://docs.dataplatform.ovh.net/analytics-manager-history.md) from the original user query and used to effectively run the query on the engines. Storage engines consume [DPU](https://docs.dataplatform.ovh.net/manage-pricing.md) (the platform Units) when they are active. You can choose the size (in DPU) of your engine when you [create it](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md#create-a-storage-engine) or at any time later on, by [editing it](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md#edit-a-storage-engine). - [Create a storage engine](#create-a-storage-engine) - [Choose the type of engine](#choose-the-type-of-engine) - [Choose the cloud provider and location](#choose-the-cloud-provider-and-location) - [Choose the size of your engine](#choose-the-size-of-your-engine) - [Choose high availability status](#choose-high-availability-status) - [Include in your default configuration](#include-in-your-default-configuration) - [Link a storage engine to a Project](#link-a-storage-engine-to-a-Project) - [Edit a storage engine](#edit-a-storage-engine) *** ## Create a storage engine You can create a storage engine instance from the **Storage Engines** service. ![se](/images/legacy/product/project/storage-engine/se-service.png) > You must have **storage engine permission** `create` in order to create storage engine instances. These permissions are set at user level in your [organization settings](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-member-permissions-in-your-organization). In both cases, you will need to fill in the following information: #### Choose the type of engine the Platform currently lets you choose among two engines. - **PostgreSQL**: [PostgreSQL](https://www.postgresql.org/) is an open-source relational database powering leading business and mobile applications. PostgreSQL is also very popular as an affordable data warehousing solution with a very good price/performance ratio. PostgreSQL is currently available on _Google Cloud Platform_, _Microsoft Azure_, _Amazon Web Services_ and _OVHcloud_. - **Snowflake**: [Snowflake](https://www.snowflake.com/) offers a cloud-based data storage and analytics service. Its architecture has been built for the cloud and leverages all the scalability and performances available. Snowflake is currently only available on _Google Cloud Platform_, _Microsoft Azure_ and _Amazon Web Services_. ![se](/images/legacy/product/project/storage-engine/choose-type2.png) #### Choose the cloud provider and location You can choose the cloud provider and location of your storage engine among the following: - _Google Cloud Platform_ (1 location available): Snowflake and PostgreSQL available - _Microsoft Azure_ (1 location available): Snowflake and PostgreSQL available - _Amazon Web Services_ (1 location available): Snowflake and PostgreSQL available - _OVHcloud_ (1 location available): PostgreSQL available ![se](/images/legacy/product/project/storage-engine/choose-provider.png) It is recommended to use the same cloud provider and location for your storage engine as the one chosen for your Projects. This is because by default, storage engine and Projects communicate on private network for better performances and security. :::warning If you link a storage engine to a Project that is in another cloud provider or location, it will **permanently open your storage engine instance publically**. The connection will then be encrypted and established on public network. ::: #### Choose the size of your engine Storage engines consume [DPU](https://docs.dataplatform.ovh.net/manage-pricing.md) (the platform Units) when they are active. You can choose the size (in DPU) of your engine which will determine the computing power allocated to read and write data in your databases. For PostgreSQL, the smallest possible size is 2 DPU with _Google Cloud Platform_ and _OVHcloud_, or 4 DPU with _Microsoft Azure_ and _Amazon Web Services_. For Snowflake, the smallest possible size is 16 DPU anywhere. ![se](/images/legacy/product/project/storage-engine/choose-size.png) #### Choose high availability status High availability is a common paradigm in infrastructure management where **instances are replicated several times in order to avoid interruption of service** in case one of them goes down. Since the storage engines host the databases which are the core of all your Projects, avoiding downtime on them is an essential part of a setting up a production-grade data system. - **On PostgreSQL**: high-availability is _off_ by default and can be switched on. When it is switched on, the number of instances deployed is doubled (i.e you are invoiced twice as much): if one the instances goes down, the other one stays active for you to use. - **On Snowflake**: high-availability is _always on_ by default and cannot be switched off. It is an internal feature when using Snowflake and replication is handled internally on their platform to ensure no interruption of service on your end. You are only paying for one storage engine instance. ![se](/images/legacy/product/project/storage-engine/choose-ha.png) > Creating a new storage engine can take up to 5-10 minutes, depending on hardware availability. Please make sure your engine has been correctly created and is marked as active ✅ before linking it to a new Project. *** ## Link a storage engine to a Project #### Sandbox Each Project features a free **Sandbox** instance. This is a storage engine which is located in the data center of your Project, and shared with other users of this data center. By shared, we mean that the performances are shared. Your data is always protected. :::warning The Sandbox instance is intended for proof-of-concepts (POCs), development or test purposes; and is not designed to be used in a production environment as the performances can be inconsistent. ::: :::info For the moment, Sandbox is based on the [Snowflake](https://www.snowflake.com/) technology. Essentially, this means that if you choose to use a Sandbox storage engine, any SQL expression used in your Project must be Snowflake-compatible. ::: #### Dedicated storage engine As an alternative to the free Sandbox instance, you can either **choose storage engines that you already own** in your organization, or **[create](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md#create-a-storage-engine) a new one**. Any engine can be used with any Project - if the engine is in a different region or cloud provider, the connection will be encrypted and established on public network. ![se](/images/legacy/product/project/storage-engine/dp-default-config.png) *** ## Edit a storage engine > You must have **storage engine permission** `update` in order to edit storage engine instances. These permissions are set at user level in your [organization settings](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-member-permissions-in-your-organization). You can edit a storage engine's characteristics from the **Storage Engines** service, by clicking on the **pen** 🖊️ icon of a storage engine. ![se](/images/legacy/product/project/storage-engine/edit-storage.png) You can edit the **name, description, tags** and **size** of your storage engine. ![se](/images/legacy/product/project/storage-engine/edit-storage2.png) *** ## Delete a storage engine > You must have **storage engine permission** `delete` in order to delete storage engine instances. These permissions are set at user level in your [organization settings](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-member-permissions-in-your-organization). You can delete a storage engine instance from the **Storage Engines** service, by clicking on the **Delete** 🗑️ icon of a storage engine. This option is only available if the storage engine isn't linked to any [project](https://docs.dataplatform.ovh.net/manage-projects.md) in your organization. [Deleting a project](https://docs.dataplatform.ovh.net/manage-projects-delete.md) unlinks all storage engines from it. ![se](/images/legacy/product/project/storage-engine/delete-storage2.png) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/lakehouse-manager-settings.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Settings :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Lakehouse Manager documentation](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md). ::: The Lakehouse Manager settings let you manage the [storage engine(s)](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md) linked to your Project, i.e. the system storing all the structured data you bring in your Project. ![LHM-settings](/images/legacy/product/lakehouse-manager/settings-1.png) - [Link / unlink a storage engine](#link-unlink-a-storage-engine) *** ## Link / unlink a storage engine A storage engine is said to be **linked** to a Project if the Project is able to connect to it (through an automated generation of credentials). The list of storage engines currently linked to a Project are displayed in the "Linked storage engines" table: ![LHM-settings](/images/legacy/product/lakehouse-manager/settings-2.png) The possible status for a linked storage engine are: - _linking_: the storage engine instance is currently being linked to the Project - _unlinking_: the storage engine instance is currently being unlinked from the Project - _failed_: the storage engine instance has failed to link to the Project. Please delink it and link it again - _updating_: the storage engine instance is linked but is currently being updated (for ex: horizontal or vertical resizing). Availability may be reduced - _terminated_: the storage engine instance is being deleted - green checkmark: the storage engine instance is successfully linked to the Project and fully available ### Link a storage engine You can only link storage engines that are part of your [organization](https://docs.dataplatform.ovh.net/manage-organizations.md). To link a new storage engine, click on **Link storage engine** ![settings](/images/legacy/product/lakehouse-manager/settings-3.png) You will see the list of non-linked storage engines that are in your organization. Select one or more, and press **Link** to link them to the Project. ![LHM-settings](/images/legacy/product/lakehouse-manager/settings-3.png) > The linking process can take up to a minute. You can also [create a new storage engine](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md#create-a-storage-engine) by pressing **Add new**. They will be added to the list of storage engines of your organization. ![LHM-settings](/images/legacy/product/lakehouse-manager/settings-5.png) ### Unlink a storage engine !> You can only unlink a storage engine if no [table](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md) is using it. To unlink an engine, press the **unlink** icon next to the engine. ![LHM-settings](/images/legacy/product/lakehouse-manager/settings-6.png) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/account-setup.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Profile and organizations :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: Creating your own user profile is the first necessary step in order to use ForePaaS. It can be done in under 5 minutes and is **completely free**! You can then create or join an **organization**: it is a workspace shared with your teammates to work on projects. Once you are part of an organization, you can create [Dataplants](https://docs.dataplatform.ovh.net/manage-projects.md) which are dedicated environments where you can carry out specific data projects. Each Dataplant usually represents one project. > 💡 ForePaaS charges at the organization level through the purchase of a subscription plan. ![boa](/images/legacy/product/account-setup/boa.png) *** ## Create a ForePaaS account Join your team on ForePaaS by creating yourself an account on the platform. It is completely free! [Create your ForePaaS profile!](https://docs.dataplatform.ovh.net/legacy/account-setup-create-account.md) *** ## Create or join an organization An organization represents a company or a specific business unit. It is where you can add all your teammates to work on multiple data projects. [Learn more about organizations!](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-create.md) *** ## Activate a subscription for your organization **ForePaaS doesn't charge per user or Dataplant, but for an organization's subscription plan and consumption**. You can purchase a subscription for your organization by yourself through your [Billing Account](https://docs.dataplatform.ovh.net/manage-pricing.md). [Get started with a subscription!](https://docs.dataplatform.ovh.net/manage-pricing.md) *** ## Create your first Dataplant A Dataplant is like a mini-factory to build AI projects and applications. It contains all the necessary components from raw extraction to restitution. Dataplants individually have a set of dedicated resources that can be allocated freely depending on the needs of your project. [Create your first Dataplant!](https://docs.dataplatform.ovh.net/index.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/account-setup-create-account.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create a ForePaaS account :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: !> We have temporarily restricted signups on the ForePaaS Platform. Please reach out to our support team if you have any question. ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/account-setup-edit-account.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Edit your ForePaaS account :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: At any time, you have the possibility to view and edit your user profile from the platform by clicking on [Profile](https://hq.forepaas.io/#/user) at the top right. ![profile](/images/legacy/product/account-setup/profile.png) ### Preferences The **Preferences** tab lets you edit basic user information on your profile. ![profile](/images/legacy/product/account-setup/profile-informations.png) You can also see the list of organizations you are part of, as well as organizations where you might have potential teammates based on your email domain. You can request to join those organizations by clicking on the corresponding **Request to join** button. _Admins_ of this organization will receive an email and will have to [manually approve your application](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#accept-or-deny-requests-to-join-your-forepaas-organization). ![profile](/images/legacy/product/account-setup/profile-requesttojoin.jpg) ### Security The **Security** tab lets you change your password, manage multi-factor authentication and track recent logins. ![profile](/images/legacy/product/account-setup/profile-auth.png) It also enables you to manage _linked accounts_, i.e. the single-sign-on (SSO) accounts which you use to log into ForePaaS. ![profile](/images/legacy/product/account-setup/profile-linkedaccounts.png) --- url: https://docs.dataplatform.ovh.net/legacy/account-setup-organization-create.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create or join an organization :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: Organizations are the compartmentalized teams that link individual members, Dataplants and plans together. You can have as many teammates in your organization as you want. Your organization can work on multiple data projects at the same time. Each project is carried out inside a [Dataplant](https://docs.dataplatform.ovh.net/manage-projects.md): you can create as many as you want. > To create or join an organization, make sure that you already have a [ForePaaS user account](https://docs.dataplatform.ovh.net/legacy/account-setup.md) *** ## Create an organization Go to [hq.forepaas.io](https://hq.forepaas.io). ### If you are not in an organization If you are not part of an organization already, you will be able to create a new one: ![start without organization](/images/legacy/product/account-setup/startWithoutOrganization.png) ### If you are already in an organization If you are already in an organization, click on the drop-down menu located at the top left and then on **New organization**. ![start with an organization](/images/legacy/product/account-setup/startWithOrganization.png) Fill in the name and press **Done**. *** ## Join an existing organization To join an organization that already exists (if your team already has one, for example), you need to ask someone already on there to invite you. [Learn how to invite members](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md) You will receive an email with a clickable link inviting you to join their organization. ![Join An Organization](/images/legacy/product/account-setup/joinOrganization.png) *** ## Manage your organization settings You can manage your organization by opening the drop-down menu at the top right and by clicking on **Organization**. ![Go To Organization](/images/legacy/product/account-setup/goToOrganization.png) From there, you will be able to configure: - Your organization members and permissions - Your Dataplants - Your datasets - Your billing settings - Other parameters: Name, description, SSL certificates, domain names, etc. [Learn how to configure an organization](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-settings.md) --- url: https://docs.dataplatform.ovh.net/legacy/account-setup-organization-settings.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Edit organization settings :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: To open the settings of an organization, navigate to the top right of the screen and hover over the **badge 💳 icon**. Click on **Organization**. ![Org Details](/images/legacy/product/account-setup/goToOrganization.png) *** ## Overview Landing on your organization dashboard, you have access in the blink of an eye to the main information of your organization on ForePaaS: - Number of members and admins - Dataplants activity - Resource consumption You can also see the main metrics usage of your Dataplant(s). ![Organization Dashboard](/images/legacy/product/account-setup/organization_dashboard.png) *** ## Members Manage your organization's members, add a new member or edit access rights. :::warning These are your organization's members, which are different from the Dataplant's users you'll find in the Identity Access Manager (IAM). ::: [Manage organization members](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md) [Manage Dataplant users in the IAM](https://docs.dataplatform.ovh.net/landing-page-iam-users.md) *** ## Dataplants The Dataplants tab gives you an overview and direct access to all the [Dataplants](https://docs.dataplatform.ovh.net/manage-projects.md) created inside the organization you're currently in. ![Dataplants](/images/legacy/product/account-setup/organization-dataplants.png) *** ## Storage The Storage tab gives you an overview and direct access to all the **storage engines** that have been added in your organization. [Learn more about storage engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md) ![Dataplants](/images/legacy/product/account-setup/organization-storage.png) *** ## Quotas :::info This feature is coming soon! ::: Quotas are restrictions that are set automatically for all organizations. They constitute safeguards against accidental over-consumption and are imposed by all cloud providers.\ Think of them as an equivalent of the quotas your bank can impose on the maximum withdrawal or payment amount per week. > You cannot modify quotas by yourself. To do so, submit your request on the quotas page. A ForePaaS expert will get back to you shortly! *** ## Plan The Plan tab is where you can **manage your subscription plan**. It shows all the features included in your current plan, as well as the option to upgrade it. - In _Billing_, you can get the details of your next invoice with a breakdown of the month-to-date balance per cost category. - In _Receipts_, you can download past invoices as PDFs. [Learn more about billing and pricing](https://docs.dataplatform.ovh.net/manage-pricing.md) *** ## Settings The Settings tab is the place where you'll manage: - **basic information** about your organization: name, description, multi-factor authentication requirements, and plan cancellation. This is also where you can manage the option to let users with the same email domain as people in your organization to request to join it. - **infrastructure** options: domain name and certificates. You can customize domain names for your applications deployed on ForePaaS, and create SSH certificates to access your secure domain names. Adding your certificate, you'll need a server certificate (.crt file) or key (.key). --- url: https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Add members to an organization :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [Organizations and user profiles](https://docs.dataplatform.ovh.net/manage-organizations.md). ::: On the ForePaaS Platform, you can have as many people as you want in your organization. Those members can have full or restricted access to the projects (i.e. [Dataplants](https://docs.dataplatform.ovh.net/manage-projects.md) and [storage engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md)) in the organization. :::info To manage access control to the components or the applications inside a specific Dataplant, you need to use this Dataplant's [Identity Access Manager (IAM)](https://docs.dataplatform.ovh.net/landing-page-iam.md). ::: - [How to invite a member in your ForePaaS organization](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#invite-members-in-your-organization) - [How to accept/deny requests to join your ForePaaS organization](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#accept-or-deny-requests-to-join-your-forepaas-organization) - [How to manage member permissions](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-member-permissions-in-your-organization) *** ## Invite members in your organization ### Organization member list Go directly to [ForePaaS](https://hq.forepaas.io) and access the organization for which you want to add members by clicking on the drop-down menu at the top left. ![Access Org](/images/legacy/product/account-setup/org-add-users_1.png) Then open your organization by clicking on **Organization** at the top-right. ![Org Details](/images/legacy/product/account-setup/goToOrganization.png) Click on the _Members_ tab. You should be able to **see the list of members within the organization** as well as yourself. ![List users](/images/legacy/product/account-setup/org-add-users_3.png) Click on _+ Add Member_ button to invite a collaborator. ### Fill in member information Fill in the new user's **email address** regardless of whether this person already has a ForePaaS account: - If the new collaborator _doesn't have a ForePaaS account_, they will receive an invitation to sign-up and log-in to the platform. They will be automatically added to the organization after signing-up and validating the email. - If the new collaborator _has a ForePaaS account_, they will simply be prompted to join the organization ![users](/images/legacy/product/account-setup/org-add-users_email1.png) > 💡 You can add multiple members with the same permissions in one go by adding multiple addresses in the **email(s)** field You will need to choose the user's **role**. There are 2 organization roles: - **Admin**: Admins have **all access & control rights** on all elements of an organization. They can therefore edit, manage or delete Dataplants, organization members or even change the subscription plan of an organization. They will also de-facto have access to all the services of the Dataplants deployed in the organization i.e. the DPE, Data Manager, etc. - **User**: Users have by default **no access or control rights**. By default, users will not even see Dataplants contained in the organization. They will only be able to access the organization and its details such as its users, plan or quotas. You can assign specific rights to users using [access control rules](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-user-permissions-in-your-organization). ![users](/images/legacy/product/account-setup/org-add-users_email2.png) *** ## Accept or deny requests to join your ForePaaS organization It is possible for people with the **same email domain as any existing member** in an organization to request to join this organization when they first sign up. _Admins_ of the organization will have to manually accept the person into the organization after they requested to join. > This feature can be deactivated in your [organization's settings](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-settings.md) if your [pricing plan](https://docs.dataplatform.ovh.net/manage-pricing.md) is Premium or above. To manage requests, click on the _Members_ tab. At the top of the list of members in your organization, you will see all the people that have requested to join your organization. ![users](/images/legacy/product/account-setup/org-users-requests.png) You can accept or deny their request from here. If you accept, they will be added in your organization as simple _users_ with no permission. You can then assign specific rights to them using [access control rules](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#manage-user-permissions-in-your-organization). *** ## Manage member permissions in your organization By default, _Admins_ have full access to the organization settings as well as its projects. For simple _Users_, there are 3 main categories of rules that you can manage at the organizational level: - [Dataplants access rights](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#dataplants) - Allow users to get specific control rights to a [Dataplant](https://docs.dataplatform.ovh.net/manage-projects.md) or its infrastructure. - **Storage config. rights** - Allow users to update the default configuration of your [storage engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md) - [Storage Engines rights](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-invite-user.md#storage-engines) - Allow users to get specific control rights to [storage engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md) in your organization ### Creating rules To create a rule, simply navigate to the category of interest and click _+ Add new rules_. Inside the rule editor window, follow the instructions. For instance in the example below, the rule is granting all access & control (Action set to \*\*\*\*\*, i.e. all) to the Dataplant _demonstrator_ (Attribute set to _demonstrator_) to the user. ![Add user](/images/legacy/product/account-setup/org-add-users_9.png) :::warning Rules are additive. In other words, they "stack" on top of each other. To give access to 2 Dataplants, you can create 2 separate rules which individually grant access to these Dataplants. ::: :::warning The order of rules matters. If two rules overlap (at least one service is affected by both rules), the rule that is processed last wins.\ ::: _Example:_ If a rule grants access to all Dataplants (say rule 1) and one blocks access to one of them (say rule 2): - If rule 1 is listed after rule 2, then rule 1 will be processed last and the user will have access to all Dataplants. - If rule 1 is listed before rule 2, then rule 2 will be processed last and the user will have access to all Dataplants but the one restricted by rule 2. ### Dataplants These permissions are the most important and allow you to define the rights of your user to access your [Dataplants](https://docs.dataplatform.ovh.net/manage-projects.md) and your different Custom Domains (if you have any). It is possible to modify these rights per Dataplant.   - **Read**: See the Dataplant(s) of the organization   - **Create**: Create a Dataplant   - **Update**: Change the amount of DPU allocated to the Dataplant(s)   - **Delete**: Delete the Dataplant(s)   - **Deploy**: Deploy an application or a worker on the Dataplant(s)   - **Logs**: Access to the monitoring and logs of the different components (Data Processing Engine, Query Builder, etc.) present in the Dataplant(s). > These permissions are high-level read/write access to Dataplants and their infrastructure. To manage access control to the applications or the components inside a specific Dataplant, such as data processing pipelines or buckets, you need to use this Dataplant's [Identity Access Manager (IAM)](https://docs.dataplatform.ovh.net/landing-page-iam.md). ### Storage Engines These permissions allow you to define the rights of your user to edit your [storage engines](https://docs.dataplatform.ovh.net/legacy/project-storage-engine.md).   - **Create**: Create a storage engine   - **Read**: See the storage engine(s) of the organization   - **Update**: Change the amount of DPU allocated to the storage engine(s)   - **Delete**: Delete the storage engine(s) ### Validation Once you're satisfied, simply click on **Save** and the user(s) will receive an email invitation to join the organization. It might happen the user does not receive the email or forgets to join, if that's the case you have the option to resent the invitation at any time by clicking on the paper plane icon: ![Resend email](/images/legacy/product/account-setup/org-add-users_11.png) > Note that members who have not accepted your invitation to join an organization will be marked with a **status** ❌. All members who have successfully accepted your invitation and joined will be marked as ✅. *** Check out the following article to learn how to manage the other aspects of your organization such as its subscription plan, billing information, or quotas. [Set up your organization](https://docs.dataplatform.ovh.net/legacy/account-setup-organization-settings.md) --- url: https://docs.dataplatform.ovh.net/legacy/ml.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Machine Learning Manager :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The Machine Learning Manager lets you **train and deploy AI models into production**. It offers different ways to get started with machine learning. You can either start by experimenting on [notebooks](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md), train prediction models from scratch in [pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md), or even deploy an externally trained [model](https://docs.dataplatform.ovh.net/legacy/ml-models.md) file. ![Machine Learning Logo](/images/legacy/product/ml/homepage-ml.png) *** ## Component overview The Machine Learning Manager enables you to **put models into production for AI-powered applications**. Like all other components on ForePaaS, it is based on the containers and micro-services technology. This means that individual ML jobs including training, scoring and predictions can be scaled to adapt to a large volume of processed data and high-frequency data throughput. Once it is created, any model can either be used: - in the **Data Processing Engine (DPE)** to write predictions in your ForePaaS data model. - as an **external API**. ![Machine Learning Logique](/images/legacy/product/ml/diagram-ml.png) Inside the Machine Learning Manager you will be able to perform the following actions: - [Create notebooks](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md) and use them to explore your data - [Set up pipelines to train new ML models](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md) from scratch - [Compare & deploy models](https://docs.dataplatform.ovh.net/legacy/ml-models.md) as well as uploading and sharing existing models leveraging a public/private marketplace *** ## Quickstart tutorial Getting started with machine learning can be a little tedious for first-timers. Fortunately, we have prepared a simple step-by-step tutorial with sample data to learn how to use our ML Manager! [Check-out the ML 🤖 tutorial!](https://docs.dataplatform.ovh.net/legacy/getting-started-ml.md) *** ## Three ways to get started in the Machine Learning Manager ### Notebooks Discover our integration of Jupyter notebooks which lets you deep-dive in your data without having to bother for the computing performances. [Create Jupyter notebooks on ForePaaS](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md) ### Pipelines Use pipelines to design and deploy a machine learning model from scratch. From the data preparation to the validation, everything is made simple for you to focus on the business results! [Train models with pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md) ### Models If you already have trained models on hand 🦾 and want to use ForePaaS' technology to maintain them in a versioned production environment, check out the link below: [Deploy 🚀 trained models with ForePaaS](https://docs.dataplatform.ovh.net/legacy/ml-models.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Notebooks :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Notebooks are a built-in integration of [Jupyter Notebooks](https://jupyter.org/) on ForePaaS. Coming with pre-loaded packages for data science, they allow you to perform non-real-time interactive statistical analysis and data visualization. Notebooks are highly connected to the rest of your Project, making it possible to read/write data in the Data Manager thanks to [our SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md) or convert your notebook code into a [Data Processing Engine action](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) or a [Machine Learning Manager pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md). ![notebooks](/images/legacy/product/ml/notebooks/jupyterlab.png) - [Create and delete notebooks](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#create-and-delete-notebooks) - [Open a notebook](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#open-a-notebook) - [Edit the settings of a notebook](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#edit-the-settings-of-a-notebook) - [Export a notebook into ForePaaS](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#export-a-notebook-into-forepaas) *** ## Create and delete notebooks You can manage your **notebook instances** in the corresponding tab in the Machine Learning Manager. A notebook instance is a Jupyter environment with specific resources and dependencies. ![notebooks](/images/legacy/product/ml/notebooks/main-page.png) A notebook instance can contain several notebook documents, i.e. _.ipynb_ files, which you can manage directly from the JupyterLab interface. ![notebooks](/images/legacy/product/ml/notebooks/jupyterlab-ipynb.png) From the Notebooks home page, you can **create, work on, delete and edit the settings** of all your notebooks. :::info On the ForePaaS Platform, the word _notebook_ is used to talk about notebook instances. ::: [Learn how to create a notebook](https://docs.dataplatform.ovh.net/legacy/ml-notebooks-create.md) You can delete a notebook by clicking on the 🗑️ icon. Deleted notebooks cannot be recovered. ![notebooks](/images/legacy/product/ml/notebooks/delete.png) *** ## Open a notebook Notebook instances are **automatically turned on** when you open them. The notebook instance will consume [all assigned DPU](https://docs.dataplatform.ovh.net/manage-pricing.md) for the duration it is turned on. ![notebooks](/images/legacy/product/ml/notebooks/turn-on.png) You can manually turn off a notebook by clicking on the _Stop_ button when it is active. ![notebooks](/images/legacy/product/ml/notebooks/turn-off.png) To open a notebook, **double click** on it, or press the button shown below. This will open the notebook in a new JupyterLab window. ![notebooks](/images/legacy/product/ml/notebooks/open.png) The [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) interface allows you to work on your notebooks with all the features provided by Jupyter, such as having multiple _.ipynb_ files open at the same time, keyboard shortcuts, download and export options, and much more. > Use the [ForePaaS SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md) to easily interact with the rest of your Project, typically to **import/process/export data** from and to your [Data Manager tables](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md). ![notebooks](/images/legacy/product/ml/notebooks/jupyterlab.png) *** ## Edit the settings of a notebook To edit the settings of a notebook, click on the **gears** icon. ![notebooks](/images/legacy/product/ml/notebooks/edit.png) You can edit the following options: - [Edit dependencies](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#edit-dependencies) - [Edit resources](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#edit-resources) ### Edit dependencies You can edit the packages and dependencies of your notebook environment, including the Python version. The notebook will have to be restarted for any modification to be applied. All notebooks have an [instance image](https://docs.dataplatform.ovh.net/legacy/ml-notebooks-create.md), which comes with some default packages and **Python 3.9**. You can specify additional dependencies by clicking on the **Add** button in the _Dependencies_ panel. ![notebooks](/images/legacy/product/ml/notebooks/add-dep1.png) Simply choose the type of dependency and enter the name of the package to install in the server, then press Enter. ![notebooks](/images/legacy/product/ml/notebooks/add-dep2.png) You can add several packages at once by pressing _Enter_ every time, like tags. ![notebooks](/images/legacy/product/ml/notebooks/add-dep3.png) ### Edit resources This is where you can edit the [resources](https://docs.dataplatform.ovh.net/manage-pricing.md) you want your notebook to use. The notebook will have to be restarted for any modification to be applied. ![notebooks](/images/legacy/product/ml/notebooks/resources.png) *** ## Export a notebook into ForePaaS You can also export the entirety of the notebook's content to an object in ForePaaS. This will export all the code in your cells as it is and will turn any markdown cells into comments. :::info Notebook exporting is only available with Python version 3.9.7. Please select that version on the notebook's settings, otherwise you won't be able to export your notebook. ::: There are three options regarding where to export your notebook to: - [Custom Action](https://docs.dataplatform.ovh.net/dpe-actions-custom.md), in the Data Processing Engine. - [Custom Estimator](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md), in the Machine Learning Manager. - [Custom Scoring Function](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#custom-scoring-function), in the Machine Learning Manager. To export your notebook, open it and click on _File_ and then on _ForePaaS export_. ![export](/images/legacy/product/ml/notebooks/notebook_export.png) This will open an export widget allowing you to choose between the three export options. Choose your preferred option and click on Next. ![export2](/images/legacy/product/ml/notebooks/notebook_export_options.png) Choose the repository and the repository version where to export the notebook. If are not familiar with repositories, simply leave it at the _Default_ repository with version _v1_. ![export3](/images/legacy/product/ml/notebooks/notebook_export4.png) Then, you will be required to decide if you want to export to an existing object or create a new one. If you create a new one, you also have to choose the name and the framework to be used. ![export4](/images/legacy/product/ml/notebooks/notebook_export2.png) Finally, click on confirm to export the notebook. ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-notebooks-create.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create a notebook :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: To create a notebook instance, head to the **Notebook** section of the Machine Learning Manager. ![notebooks](/images/legacy/product/ml/notebooks/main-page.png) Click on **New notebook** in the top-right. ![notebooks](/images/legacy/product/ml/notebooks/create1.png) You have to choose a [container image](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html) for your Jupyter environment, i.e. the set of packages and dependencies you want to have for your new notebook. ForePaaS features several ready-to-run images which contain the most popular libraries for data analysis and data science. > If you are new at creating notebooks, we recommend starting off with a _Data Science notebook_. It contains all the basic Python libraries for data exploration such as pandas, scipy, scikit-learn, matplotlib and much more! ![notebooks](/images/legacy/product/ml/notebooks/create2.png) You can then configure your notebook further before it is created (and it is still possible to change those settings later on). Once you press **Create**, the server for the notebook will be initialized - with its specific environment and dedicated computing resources. ![notebooks](/images/legacy/product/ml/notebooks/create3.png) The two main aspects to configure are: - [Additional dependencies](https://docs.dataplatform.ovh.net/legacy/ml-notebooks-create.md#notebook-dependencies) - [Resources](https://docs.dataplatform.ovh.net/legacy/ml-notebooks-create.md#notebook-resources) *** ## Notebook dependencies Your notebook's image already comes with some default packages, which you can individually check in the image description in the marketplace. ![notebooks](/images/legacy/product/ml/notebooks/scipy-notebook.png) You can specify additional dependencies by clicking on the **Add** button in the _Dependencies_ panel. ![notebooks](/images/legacy/product/ml/notebooks/add-dep1.png) Simply choose the type of dependency and enter the name of the package to install in the server. ![notebooks](/images/legacy/product/ml/notebooks/add-dep2.png) You can add several packages at once by pressing _Enter_ every time, like tags. ![notebooks](/images/legacy/product/ml/notebooks/add-dep3.png) *** ## Notebook resources Check out the dedicated sections to learn how to configure your new notebook's resources. It is suggested to configure them before confirming the creation of the notebook. [Configure a notebook's resources](https://docs.dataplatform.ovh.net/legacy/ml-notebooks.md#edit-resources) --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Pipelines :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Pipelines are the feature that enables you to **create a machine learning model from scratch and deploy it to make predictions**. It is a production-grade end-to-end environment in which a model evolves through its [life-cycle](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure.md#manage-execution-options) in a traceable way. ![machinelearning](/images/legacy/product/ml/pipelines/pipeline-main-page.png) > Pipelines can store several trained models and their versions, but only one can be deployed to make predictions. - [Create a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md#create-a-pipeline) - [Manage pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md#manage-pipelines) - [Configure a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure.md) - [Execute a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md) *** ## Create a pipeline To create a pipeline, head to **Pipelines** in the ML component. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-list.png) If you haven't already started a _machine learning Project_, start by [initializing a repository](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md#pipeline-repositories). Else simply click on **New Pipeline** at the top-right. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-new-pipeline.png) Wait a few seconds for your pipeline to be built. After being built for the first time, pipelines are in auto-save mode. You can exit and come back to the configuration at any time. [Configure a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure.md) *** ## Manage pipelines ### Pipeline repositories Pipelines are stored in ForePaaS repositories. You can initialize a new repository by pressing the ➕ sign in the Pipelines tab. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-new-repo.png) You can edit the name and description of the pipeline, as well as connect it to an existing Git repository. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-new-repo2.png) ### Edit pipelines Pipelines can be configured from the repository list by clicking on the **pen 🖊️ icon**, or by double-clicking the pipeline. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-configure.png) Pipelines can be renamed when configuring them, by double-clicking on their name at the top-right. ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-rename.png) Pipelines can be deleted from the repository list by clicking on the **trash 🗑️ icon**. :::warning Deleting a pipeline does not delete its saved models. Models that were generated by a deleted pipeline are still accessible on [the Models tab](https://docs.dataplatform.ovh.net/legacy/ml-models.md). ::: ![machinelearning](/images/legacy/product/ml/pipelines/pipelines-delete.png) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Configure a pipeline :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Each pipeline can be configured from the data input to the deployment options in order to create accurate production-grade prediction models. ![machinelearning](/images/legacy/product/ml/pipelines/configure/pipeline-main-page-zoomed.png) *** ## The five configuration steps There are five core steps to setting up a pipeline on ForePaaS. 1 [![Dataset](/images/legacy/product/ml/dataset-icon.png)## Dataset preparation Specify everything related to the train and test datasets of your model. ](/legacy/ml-pipelines-configure-dataset) 2 [![Training](/images/legacy/product/ml/training-icon.png)## Training procedure Set up the estimator at the basis of your model as well as the scoring and validation options needed to fine-tune it. ](/legacy/ml-pipelines-configure-training) 3 [![Tuning](/images/legacy/product/ml/tuning-icon.png)## Hyper-parameter tuning Fine-tune the hyper-parameters of your estimator using our intuitive and insightful studio. ](/legacy/ml-pipelines-configure-tuning) 4 [![Validation](/images/legacy/product/ml/validation-icon.png)## Model selection Compare models that have been trained since the creation of your pipeline and decide which to deploy. ](/legacy/ml-pipelines-configure-validation) 5 [![Deployment](/images/legacy/product/ml/deployment-icon.png)## Deployment settings Specify the various settings for your production-grade inference service ](/legacy/ml-pipelines-configure-deployment) *** ## Manage execution options Once a pipeline is set up, you can manage various execution options to ensure a reliable life-cycle of your models in a production environment. Learn more about the execution of a pipeline and the life-cycle of a model below: [Manage a pipeline's execution](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Data preparation :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Data preparation is the first step to any machine learning process. It is the step during which you will **specify your data source and the rules according to which it is turned into ML datasets**.\ ML datasets are modeled and stored as [tables that are automatically created in the Data Manager](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md) and fed with data from the source specified at the entry of your pipeline. Specifying the rows and columns of these tables is the gist of the data preparation step. :::warning In order to better orchestrate data versioning, data can only be added to an ML dataset. You have the option to manually reset your ML datasets in your [pipeline preferences](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#reset-datasets). ::: ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/pipeline-dataset.png) Data preparation is usually the first step you need to parametrize since the rest of the pipeline should be designed according to this choice. To enter data preparation, click on **Dataset** on your pipeline's main page. *** ## Dataset generation You can connect data from multiple sources - either within or outside of ForePaaS - at the entry point of your pipeline. This data must then be split into a train and a test dataset for the model to be fitted and evaluated. [Manage source and train-test split](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md) *** ## Feature engineering Good data preparation means selecting the correct features for your model. Learn how to add variables to your X and Y sets, and how to execute basic checks on the data content. [Manage your features](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-features.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Dataset generation :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The dataset generation consists in **choosing an data input** and then **splitting that data into a train and a test dataset**. When doing production-level AI, this split occurs continually over time as new [Dataset Generation jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#dataset-generation-jobs) are launched (manually or through triggers). *** ## Choose a data input ForePaaS supports several input types: - [Data Manager Tables](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#tables) - [Buckets](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#pictures-from-buckets) > We are working hard to add more integrations to ML pipelines. If we are missing something critical for your Project, please reach out and drop us a line on [our Roadmap Portal](https://hq.forepaas.io/#/features)! 💡 ### Tables The _Tables_ input type lets you choose from the **tables in your Data Manager**. You can choose from raw, prim and mart tables. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/input-tables.png) ### Pictures from buckets The _Pictures from buckets_ input type lets you choose from the [buckets in your Data Manager](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md). This makes it the perfect choice to work with unstructured data, especially pictures. :::info This input type currently only accepts files with EXIF data and files that are considered as an image by [the pillow library](https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html). ::: To enable unstructured data training, the images must first be uploaded to the [Data Manager's buckets](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md) in **a folder named after each class**. Using the [Cats and Dogs](https://www.tensorflow.org/datasets/catalog/cats_vs_dogs) image classification dataset as an example, the images will be uploaded into two folders in a bucket. One named `cats` (so that the path is _cats/my\_images.jpg_) the other `dogs` (so that the path is _dogs/my\_images.jpg_). ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/custom-keras-classes2.png) ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/custom-keras-classes.png) *** ## Train-test split After choosing an origin for your data, you need to make it usable by machine learning algorithms by splitting it into a training and a testing set. The nature of the sets depends on whether you are working with structured _(in which case it will be tables of data)_ or unstructured data _(in which case it will be filepaths)_. :::info **Training set**: Sample of data used to fit (i.e. train) the model.\ **Testing set**: Independent sample of data used to provide an unbiased assessment of a fully trained model. Training and testing sets must remain disjoint over time. ::: > On ForePaaS, training and testing sets are modeled and stored as [ML tables in the Data Manager](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md). In a pipeline, you can choose to use either [the same source](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#use-the-same-source) or [two separate sources](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#use-different-sources) for your training and testing datasets. ### Use the same source Under Training, select the desired data source. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set.png) Then activate the **link 🔗 icon** in between Training and Testing to use the same source for your training and testing sets. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set2.png) The next step is to decide how to split the data between Training and Testing. Use the slider to choose the share of data points amount (rows for Tables, files for Buckets, etc.) that each set should have **at the end** of the [Dataset Generation job](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#dataset-generation-jobs). ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set3.png) You can also control the method used to execute the split in the Data Set panel with the **Split Type** option. _Random_ will assign each entering data point randomly in either the training or testing set so that the desired train-test ratio is respected. Specifying a **seed** for the pseudo-randomization will enable you to reproduce randomness. :::warning Remember that data points cannot be individually removed from a testing ML dataset even if they are removed from your source. You have the option to manually reset your ML datasets in your [pipeline preferences](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#reset-datasets). ::: ### Use different sources Under Training, select the desired data source. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set.png) Make sure to turn off the **link 🔗 icon** in between Training and Testing to use the same source for your training and testing sets. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set4.png) Under Testing, select the desired data source. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/training-set5.png) > With different sources you don't need to specify a train-test-split method since the split is already done! Each entering data point will be assigned accordingly either to the training or the testing set. :::warning Remember that data points cannot be individually removed from a testing ML dataset even if they are removed from your input. You have the option to manually reset your ML datasets in your [pipeline preferences](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#reset-datasets). ::: After specifying the rows of your datasets, you need to specify their columns. [Select your model's features](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-features.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-features.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Feature engineering :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: ForePaaS enables you to fully specify which variables to select for your model. *** ## Add a value-to-predict The value you want to predict (i.e. the label) is saved in the _Y dataset_. To add a value-to-predict, click on **Add a source** next to Y. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/add-Y.png) Choose the source based on the **input type** you specified when [generating your dataset](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#choose-a-data-input) and save. #### When the input type is _Tables_ You will be able to select one attribute from the training table. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/add-Y-tables.png) #### When the input type is _Pictures from buckets_ You will be able to select [one or several folders](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#pictures-from-buckets) from the training bucket. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/add-Y-buckets.png) *** ## Add features The features, or variables, that are used to make a prediction are saved in the _X dataset_. To add features to your structured data model, click on **Add a source** next to X. ![machinelearning](/images/legacy/product/ml/pipelines/configure/dataset/add-X.png) Choose as many variables as you want from the source based on the input type you specified when [generating your dataset](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#choose-a-data-input) and save. > Shortcut tip: you have the option to _add all variables_ in one go: this will add all the variables from the source **except** the one you chose as the value-to-predict. *** ## Pre-processing Advanced feature engineering should be carried out in the [Data Processing Engine (DPE)](https://docs.dataplatform.ovh.net/landing-page-dpe.md) on your source itself. ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Training procedure :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The training procedure is at the core of every machine learning model. It defines the mathematical algorithm (i.e. estimator) at its basis as well as the set of rules used to **fit and evaluate it**. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/pipeline-training.png) Training is usually the second step in configuring a pipeline. Coupled with the third step, [hyper-parameters tuning](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md), your pipeline will be able to produce trained models for you to compare and deploy. Training jobs [can be accelerated by a lot using GPUs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing). *** ## Train with a standard estimator Give your pipeline configuration a quick start by using one of the standard estimators from a curated list from the most popular ML libraries! [Use a standard estimator](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-standard-estimator.md) *** ## Train with a custom estimator Can't find what you want on the ForePaaS Store? Carry out your training procedure exactly the way you want it by importing your own custom estimator. [Use a custom estimator](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md) *** ## Scoring and validation Scoring and validation are necessary aspects of the training step in order to evaluate models in an unbiased way. Learn how to configure it right. [Configure scoring and validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-standard-estimator.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Standard estimators :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Pipelines let you choose from the most popular machine learning algorithms in the industry. ForePaaS currently supports the following frameworks: - [Scikit Learn](https://scikit-learn.org/stable/index.html) - Keras _(coming soon!)_ ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-estimator.png) > If you cannot find the algorithm of your choice among the standard estimators, you can also upload your own script using the **custom estimator** option.\ > [Learn more about custom estimators.](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md) *** ## Add a standard estimator Selecting _Standard estimator_ will open the store catalog where you can choose the algorithm you want to use for your model. ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-store.png) Depending on your use case, you need to choose between a [classifier](https://en.wikipedia.org/wiki/Statistical_classification) and a [regressor](https://en.wikipedia.org/wiki/Regression_analysis). You can know what category is each algorithm by looking at their tags. *** ## Change your pipeline's estimator You can change the estimator at the core of your pipeline by clicking the **Change** button on the Training page. ![ml](/images/legacy/product/ml/pipelines/configure/training/change-estimator.png) :::warning Changing the estimator of your pipeline will completely erase the configuration for the [Training](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training.md) and [Tuning](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md) steps, including all previous hyper-parameter combinations generated in the studio. It will **not** delete saved models generated by the previous estimator. ::: *** ## Manage libraries and dependencies The Dependencies panel lets you manage all packages requirements for the execution of your pipeline. [Libraries and dependencies](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md) *** ## Configure scoring and validation After choosing the base algorithm at the core of your model, you need to be able to evaluate it in an unbiased fashion. Learn how to set validation and scoring functions: [Configure scoring and validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Custom estimators :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: If you cannot find what you want among the standard estimators, or if you already have a training script on hand, ForePaaS allows you to upload your own estimator to be fitted on your pipeline's data. This can be done either by opening the Training configuration page for the first time, or by [changing the algorithm](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-standard-estimator.md#change-your-pipeline39s-estimator) if there is already one. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-estimator.png) It is necessary to choose a framework for your pipeline. ForePaaS currently supports the following frameworks, details of which can be found on their respective pages: - [Scikit Learn](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md) - [Keras](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-keras.md) - [PyTorch](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-pytorch.md) *** ## Common features from SDK Some features provided by the Machine Learning Manager have a common behavior for any custom estimator written in Python, and require you to **input additional elements of code in your training script**. The following configurations can be integrated: - [Use a validation configuration from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-configuration) - [Use a validation score function from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-score-function) - [Use hyper-parameters specified in the Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-hyper-parameters) ### Use a validation configuration You can connect the [validation settings](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md) configured during the Training step. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-validation.png) If using simple validation, you can get the share allocated to the validation set by including: ```py from forepaas.core.settings import ML_CONFIG # Get ratio of the % size of the validation set ratio = ML_CONFIG["train"]["ratio"] ``` If using cross-validation, you can get the number of folds chosen by including: ```py from forepaas.core.settings import ML_CONFIG # Get cv as either the number of folds, or False if cross-validation is turned off. cv = ML_CONFIG["train"]["execution_options"]["cross_validation"] ``` An example for Scikit Learn can be found [here](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md#sample-code). ### Use a validation score function You can connect the [scoring functions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md) added during the Training step in order to use them for the validation score. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-scoring.png) You can get the default ⭐ scoring function and turn it into an sklearn scorer by including: ```py from forepaas.ml import get_train_scoring_function from sklearn.metrics import make_scorer scoring_function = get_train_scoring_function() ``` An example for Scikit Learn can be found [here](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md#sample-code). ### Use hyper-parameters You can connect the [hyper-parameter list](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md) specified in the Tuning step. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-hp.png) To get the dictionary of hyper-parameters and their lists of values, include: ```py from forepaas.ml import get_hyper_parameters hyper_parameters = get_hyper_parameters() ``` An example for Scikit Learn can be found [here](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md#sample-code). [Import a custom Scikit Learn script](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md) [Import a custom Keras script](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-keras.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-scikit-learn.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Import a custom Scikit Learn script :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The Scikit Learn framework allows you to upload a Python _.py_ file containing an estimator **compatible with the Scikit Learn library**. The supported libraries typically include (but aren't restricted to): [Scikit Learn](https://scikit-learn.org/), [XGBoost](https://xgboost.readthedocs.io/en/latest/), [lightgbm](https://lightgbm.readthedocs.io/en/latest/), ... When you select this framework, some packages are imported by default in the pipeline's environment: - scikit-learn - the libraries [that come out of the box with ForePaaS' SDK](https://forepaas-sdk.readthedocs.io/en/latest/index.html) Any other library used by your custom script has to be specified in the **Python libraries** field of the [Dependencies panel](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md) (along with its version, if you wish to not use the latest one). ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-libraries.png) > 💡 You have the possibility to load a _requirements.txt_ file in order to [add all necessary libraries in one go](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md#import-a-requirementstxt-file). By default, new pipelines will be using **Python 3.9.9**. ### Upload a custom estimator To upload a custom estimator, either drag your _.py_ file into the Training Script box or click the box to open the file explorer. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-training.png) When a [Training job is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), this _.py_ file is the file that will be executed. It must contain a function that has the following two requirements: - It must have `event` as its first argument - It must return a fitted estimator based on the training dataset This function's name must be written down in the _function name_ box. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-func-name.png) Below is a sample code of a basic custom Scikit Learn estimator: ```py from sklearn.ensemble import RandomForestClassifier from forepaas.ml import get_train_dataset def my_random_forest(event): # Retrieve train dataset. x, y = get_train_dataset() # Fit estimator. clf = RandomForestClassifier(n_estimators=200, max_depth=9) clf.fit(x, y) # Return fitted estimator. return clf ``` > With the above code, you would have to specify _my\_random\_forest_ as the **function name**. While the previous code will not be able to use any of the configurations made in the Training and Tuning steps, you have the possibility to connect to other parts of your pipeline configuration from your estimator thanks to the [ForePaaS SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md). This allows you to use all the features provided by ForePaaS pipelines with your custom estimator. The following configurations can be integrated: - [Use a validation configuration from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-configuration) - [Use a validation score function from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-score-function) - [Use hyper-parameters specified in the Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-hyper-parameters) !> Since only the custom _.py_ script is executed during Training jobs, failing to integrate the aforementioned configurations into the Python script will result in any respective interface-originated modification to be ignored by the pipeline. ### Sample code This example combines all three aforementioned connectors: ```py from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV from sklearn.metrics import make_scorer from forepaas.core.settings import ML_CONFIG from forepaas.ml import get_train_dataset, get_hyper_parameters, get_train_scoring_function def my_random_forest(event): # Retrieve train dataset. No need to split it since it will be done by cross validation x, y = get_train_dataset() # Retrieve validation settings. cv = ML_CONFIG["train"]["execution_options"]["cross_validation"] if not cv: cv = get_shuffle_split(x, y) # Retrieve scoring function used for the validation score, and make it compatible with scikit's gridSearchCV scoring_function = get_train_scoring_function() scoring = make_scorer(scoring_function["func"]) # Retrieve hyper parameters. hyper_parameters = get_hyper_parameters() # Start grid search with cross validation clf = RandomForestClassifier() grid_search = GridSearchCV(clf, hyper_parameters, scoring=scoring, cv=cv, return_train_score=True) grid_search.fit(x, y) return grid_search def get_shuffle_split(x, y): from sklearn.model_selection import ShuffleSplit ratio = ML_CONFIG["train"]["ratio"] rs = ShuffleSplit(n_splits=1, test_size=ratio) return rs.split(x) ``` > With the above code, you would have to specify _my\_random\_forest_ as the **function name**. --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-keras.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Import a custom Keras script :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The Keras framework allows you to upload a Python _.py_ file containing a Keras sequential model **compatible with the Keras library**. When you select this framework, some packages are imported by default in the pipeline's environment: - Keras - Tensorflow - the libraries [that come out of the box with ForePaaS' SDK](https://forepaas-sdk.readthedocs.io/en/latest/index.html) Any other library used by your custom script has to be specified in the **Python libraries** field of the [Dependencies panel](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md) (along with its version, if you wish to not use the latest one). ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-libraries.png) > 💡 You have the possibility to load a _requirements.txt_ file in order to [add all necessary libraries in one go](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md#import-a-requirementstxt-file). By default, new pipelines will be using **Python 3.9.9**. - [Upload a custom Keras model](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-keras.md#upload-a-custom-model) - [Use Keras for unstructured data training](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-keras.md#use-keras-for-unstructured-data-training) *** ## Upload a custom model To upload a custom model, either drag your _.py_ file into the Training Script box or click the box to open the file explorer. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-training.png) When a [Training job is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), this _.py_ file is the file that will be executed. It must contain a function that has the following two requirements: - It must have `event` as its first argument - It must return a fitted and compiled sequential model based on the training dataset This function's name must be written down in the _function name_ box. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-func-name.png) Below is a sample code of a basic custom Keras model using _my\_keras\_model_ as the **function name**: ```py from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from forepaas.ml import get_train_dataset def my_keras_model(event): # Retrieve train dataset. x, y = get_train_dataset() model = Sequential() model.add(Dense(60,input_dim=60,activation="relu")) model.add(Dense(1,activation="sigmoid")) model.compile(loss="binary_crossentropy", optimizer='rmsprop', metrics=["accuracy"]) model.fit(x, y, batch_size=5, epochs=1, verbose=1) return model ``` :::warning Due to the way the imports of libraries is handled by the platform, it is required to prefix imports from the `keras` library by `tensorflow`. ::: While the previous code will not be able to use any of the configurations made in the Training and Tuning steps, you have the possibility to connect to other parts of your pipeline configuration from your model thanks to the [ForePaaS SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md). This allows you to use all the features provided by ForePaaS pipelines with your custom estimator. The following configurations can be integrated: - [Use a validation configuration from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-configuration) - [Use a validation score function from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-score-function) - [Use hyper-parameters specified in the Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-hyper-parameters) !> Since only the custom _.py_ script is executed during Training jobs, failing to integrate the aforementioned configurations into the Python script will result in any respective interface-originated modification to be ignored by the pipeline. *** ## Use Keras for unstructured data training The Machine Learning Manager supports images for classification in training and predictions of Keras models. ### Data preparation To enable unstructured data training, the images must first be uploaded to the Data Store **in a folder named after each class**. [Learn how to carry out unstructured data preparation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#pictures-from-buckets) ### Training During training, the SDK methods `get_train_dataset` and `get_test_dataset` **behave differently than with structured data**. They both return two one-column DataFrames containing paths to the training images and associated labels (as .txt files). The column names for the images and labels are `input` and `output` respectively. :::warning Labels are returned as integers based on the order they appear in the bucket starting from 0. For most cases, this will be alphabetical. ::: As such it is necessary to load and process the images and labels, as shown below in the sample code: ```py def example_process_data(): x_df, y_df = get_train_dataset() x, y = list(),list() for f, l in zip(x_df["input"], y_df["output"]): img = load_img(f, target_size=(28, 28)) img = img_to_array(img) / 255 x.append(img) with open(l, "r") as f: _label = f.read() y.append(int(_label)) x = np.array(x) y = np.array(y) return x, y ``` :::warning When an unstructured-data model is [used for predictions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-consumer-to-make-predictions) later on, you are supposed to feed it the actual unstructured objects (images, etc.). The platform automatically 'numpyfies' them and applies standardization/normalization on them. As such, **you must normalize the data entering the input layer of your neural network script too**. ::: The rest of the Keras model can then be added with `event` as the only argument to the method: ```py def my_model(event): # Retrieve train dataset from earlier defined function. x,y = example_process_data() model = Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 3))) model.add(Dense(1,activation="sigmoid")) model.compile(loss="binary_crossentropy", optimizer=optimizers.RMSprop(lr=1e-5), metrics=["acc"]) model.fit(x, y, batch_size=5, epochs=1, verbose=1) return model ``` > 💡 Multiple methods can be included in the custom _.py_, only the one specified in the `function name` field via the UI will be executed. Neural network training can be **accelerated by using GPUs** in your ForePaaS pipeline. Check out the link below to learn more. [Use GPU for your ML processing](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing) --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-pytorch.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Import a custom PyTorch script :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The PyTorch framework allows you to upload a Python _.py_ file containing a PyTorch model **compatible with the PyTorch library**. When you select this framework, some packages are imported by default in the pipeline's environment: - Torch and Torchvision - Pillow - the libraries [that come out of the box with ForePaaS' SDK](https://forepaas-sdk.readthedocs.io/en/latest/index.html) Any other library used by your custom script has to be specified in the **Python libraries** field of the [Dependencies panel](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md) (along with its version, if you wish to not use the latest one). ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-libraries.png) > 💡 You have the possibility to load a _requirements.txt_ file in order to [add all necessary libraries in one go](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md#import-a-requirementstxt-file). By default, new pipelines will be using **Python 3.9.9**. - [Upload a custom PyTorch model](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-pytorch.md#upload-a-custom-model) - [Use PyTorch for unstructured data training](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-pytorch.md#use-PyTorch-for-unstructured-data-training) *** ## Upload a custom model To upload a custom model, either drag your _.py_ file into the Training Script box or click the box to open the file explorer. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-training.png) When a [Training job is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), this _.py_ file is the file that will be executed. It must contain a function that has the following two requirements: - It must have `event` as its first argument - It must return a fitted and pytorch model based on the training dataset This function's name must be written down in the _function name_ box. ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-func-name.png) Additionally, and unique to the ForePaaS PyTorch framework, the PyTorch **base classes for models and dataset have to be included in the script**, and cannot be nested within other functions or classes: - `torch.utils.data.Dataset` - `nn.Module` The names of the child class have limitations, the only restrictions are that the parent class must be those previously mentioned. Both should be included to avoid failures. Finally, the expected dimensions of the input layer must be provided alongside the function name to run, in the overview page: ![machinelearning](/images/legacy/product/ml/pipelines/configure/training/custom-pytorch-input-layer.png) Below is sample code of a custom PyTorch model used with the [Getting Started tutorial dataset](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md), an important note is the structure of the code: ```py import numpy as np import pandas as pd import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from logging import getLogger logger = getLogger(__name__) device = 'cuda' if torch.cuda.is_available() else 'cpu' batch_size = 64 epochs = 5 # define structured dataset class class TabularDataset(Dataset): def __init__(self, data, input_cols=None, output_col=None): self.n = data.shape[0] if output_col: self.y = data[output_col].astype(np.float32).values.reshape(-1, 1) else: self.y = np.zeros((self.n, 1)) if input_cols: self.x = data[input_cols].astype(np.float32).values else: input_cols = [col for col in data.columns if col != output_col] self.x = data[input_cols].astype(np.float32).values def __len__(self): return self.n def __getitem__(self, idx): return [self.y[idx], self.x[idx]] # define model class class Model(nn.Module): def __init__(self, in_features=13, h1=32, h2=8, out_features=1): # how many layers? super().__init__() self.fc1 = nn.Linear(in_features, h1) self.fc2 = nn.Linear(h1, h2) self.out = nn.Linear(h2, out_features) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.out(x) return x def pytorch_model_train(event): # forepaas get data x_df, y_df = get_train_dataset() data = pd.concat([x_df,y_df], axis=1) output_feature = "is_overcrowded" # get data train_data = TabularDataset(data=data,input_cols=None,output_col=output_feature) train_loader = DataLoader(dataset = train_data, batch_size=batch_size, shuffle=True ) logger.info(len(train_data)) model = Model().to(device) model.train() # some additional params criterion = nn.BCEWithLogitsLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.1) for epoch in range(epochs): epoch_loss = 0 epoch_accuracy = 0 for y, x in train_loader: x = x.to(device) y = y.to(device) # Forward Pass preds = model(x) loss = criterion(preds, y) # Backward Pass and Optimization optimizer.zero_grad() loss.backward() optimizer.step() acc = ((preds.argmax(dim=1) == y).float().mean()) epoch_accuracy += acc/len(train_loader) epoch_loss += loss/len(train_loader) logger.info('Epoch : {}, train accuracy : {}, train loss : {}'.format(epoch+1, epoch_accuracy,epoch_loss)) return model ``` > With the above code, you would have to specify _pytorch\_model\_train_ as the **function name** and _13,1_ as the **input\_shape**. While the previous code will not be able to use any of the configurations made in the Training and Tuning steps, you have the possibility to connect to other parts of your pipeline configuration from your model thanks to the [ForePaaS SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md). This allows you to use all the features provided by ForePaaS pipelines with your custom estimator. The following configurations can be integrated: - [Use a validation configuration from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-configuration) - [Use a validation score function from the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-a-validation-score-function) - [Use hyper-parameters specified in the Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#use-hyper-parameters) !> Since only the custom _.py_ script is executed during Training jobs, failing to integrate the aforementioned configurations into the Python script will result in any respective interface-originated modification to be ignored by the pipeline. *** ## Use PyTorch for unstructured data training The Machine Learning Manager supports images for classification in training and predictions of PyTorch models. ### Data preparation To enable unstructured data training, the images must first be uploaded to the Data Store **in a folder named after each class**. [Learn how to carry out unstructured data preparation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#pictures-from-buckets) ### Training During training, the SDK methods `get_train_dataset` and `get_test_dataset` **behave differently than with structured data**. They both return two one-column DataFrames containing paths to the training images and associated labels (as .txt files). The column names for the images and labels are `input` and `output` respectively. :::warning Labels are returned as integers based on the order they appear in the bucket starting from 0. For most cases, this will be alphabetical. ::: As such it is necessary to load and process the images and labels within the pytorch dataset class, as shown below in the sample code: ```py train_transforms = transforms.Compose([ transforms.Resize(150), transforms.RandomResizedCrop(150), transforms.ToTensor(), ]) class dataset(torch.utils.data.Dataset): def __init__(self,image_list,label_list,transform=None): self.file_list_df = image_list self.label_list_df = label_list self.transform = transform def __len__(self): self.filelength = len(self.file_list_df) return self.filelength def __getitem__(self,idx): file_list = self.file_list_df["input"].values.tolist() img_path = file_list[idx] img = Image.open(img_path) resized_img = img.resize((vertical_px, horizontal_px)) img = resized_img.convert(mode='L') image_2_npArray_2_tensor = transforms.ToTensor()(img) label_list = self.label_list_df["output"].values.tolist() with open(label_list[idx],'r') as file: label = int(file.read()) return image_2_npArray_2_tensor,torch.tensor(label) ... def pytorch_train(event): # forepaas get data x_df, y_df = get_train_dataset() train_feature,val_feature,train_label,val_label= train_test_split(x_df, y_df, test_size=0.2) # get data train_data = dataset(train_feature,train_label) val_data = dataset(val_feature,val_label, transform=test_transforms) ... ``` :::warning When an unstructured-data model is [used for predictions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-consumer-to-make-predictions) later on, you are supposed to feed it the actual unstructured objects (images, etc.). The platform automatically 'numpyfies' them and applies standardization/normalization on them. As such, **you must normalize the data entering the input layer of your neural network script too**. ::: The rest of the PyTorch model can then be added with `event` as the only argument to the method: > 💡 Multiple methods can be included in the custom _.py_, only the one specified in the `function name` field via the UI will be executed. Neural network training can be **accelerated by using GPUs** in your ForePaaS pipeline. Check out the link below to learn more. [Use GPU for your ML processing](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing) --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Manage libraries and dependencies :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The Dependencies panel lets you manage the language version and all the packages requirements for the execution of your pipeline. There are two kinds of dependencies: - **ForePaaS modules**: they are prepared by ForePaaS and already contain all the libraries required to run a standard estimator. - **Python libraries**: they are the libraries used in your estimator script that aren't already contained in a ForePaaS module. They only need to be added when you are using a [custom estimator](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md). ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-dependencies.png) When using a standard estimator, **all dependencies are automatically configured to reflect your choice**. No need to scratch your head handling the library requirements, we are taking care of this for you! On top of that, if you are using a [custom estimator](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md), you can also choose the Python version with which to run the pipeline. You can choose amongst the following: - Python 3.11 - Python 3.9 _(default option)_ :::info We are regularly updating the available versions to provide you with a best-practice development framework. Your existing work is not migrated to a new version as long as its language version is still supported. ::: *** ## Import libraries You can either specify your libraries [one by one](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md#import-a-single-library), or import them [all in one go](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-dependencies.md#import-a-requirementstxt-file) using a _requirements.txt_ file. ### Import a single library To specify a single library, spell the package name in the **Python libraries** field. ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-library.png) You can also specify the version as such: _library:version_. ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-library-version.png) ### Import a requirements.txt file You can bulk-import all the libraries needed for your Project using a text file formatted like the output of a `pip freeze`[command](https://pip.pypa.io/en/stable/reference/pip_freeze/). Click on _Load .txt_ to upload the text file. ![ml](/images/legacy/product/ml/pipelines/configure/training/standard-requirements-txt.png) Here is the expected requirements format: ```txt docutils==0.11 Jinja2==2.7.2 MarkupSafe==0.19 Pygments==1.6 Sphinx==1.2.2 ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Scoring and validation :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: To evaluate the performances of the models you train in your pipelines, it is advised to **score them in an unbiased fashion**. The score result is always dependent on the dataset on which the model is scored. :::info Scoring a model on a given dataset consists of using the model to make predictions for each data point in the set, and then quantifying the discrepancy between the predictions and the true values using a basis scoring function. ::: You can score a model on the dataset of your choice. However it is usually not advisable to do it on data that was used to train the model because you want to evaluate the ability of your model to generalize to new data. **ForePaaS pipelines let you score models on two different datasets**: the [testing dataset](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#train-test-split) and the [validation dataset](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#validation). - [Specify a validation set](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#validation) - [Simple validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#simple-validation) - [Cross-validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#cross-validation) - [Choose one or several scoring functions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#scoring) - [Standard scoring function](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#standard-scoring-function) - [Custom scoring function](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#custom-scoring-function) *** ## Validation :::info Validation is a method in machine learning where a subset is extracted from the initial training set and is used to score all trained models in order to [select the best one](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md). The extracted subset is called the _validation set_. This set provides an unbiased evaluation of models which are trained on the remainder of the initial training set. It also ensures that the testing dataset remains isolated in order to perform the final model assessment, i.e. quantifying the generalization error.\ [Learn more about validation.](https://en.wikipedia.org/wiki/Training,_validation,_and_test_sets) ::: In a pipeline, you can either perform: - [Simple validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#simple-validation) - [Cross-validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#cross-validation) ### Simple validation Simple validation consists of extracting a subset of the initial training set to be used as the validation set. To use it, select _Simple validation_ as the validation type: ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-normal.png) Select the size of the validation set as a **share of the initial training set**, either by moving the slider around or entering the desired percentage in the validation field: ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-normal-share.png) > Choosing _0_ as the validation size will disable validation in your pipeline. When a training job [is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), the pipeline will **automatically score the produced model on the validation set**. The resulting score is called the _validation score_ in the rest of the pipeline. There is only one scoring function used to compute the validation score per training job: it is the scoring function entered in the Visual Options panel of the [Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md). ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-function.png) ### Cross-validation [Cross-validation](https://en.wikipedia.org/wiki/Cross-validation_\(statistics\)) consists of splitting the initial training set in a given number of subsets, called the _number of folds_. A [simple validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#simple-validation) is then performed that many times, successively using each subset as a simple validation set. This method ensures that no data point in the initial training set is left unused. :::warning Because training a model is repeated as many times as the chosen number of folds, **using cross-validation can be very resource-consuming**. ::: To use it, select _k-fold cross validation_ as the validation type: ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-cross.png) Enter the chosen number of folds in **Fold**: ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-cross2.png) When a training job [is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), the pipeline will **automatically score the produced model on each successive fold**. The resulting scores are then **averaged** to produce the _validation score_ displayed in the rest of the pipeline. There is only one scoring function used to compute the validation score per training job: it is the scoring function entered in the Visual Options panel of the [Tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md). ![ml](/images/legacy/product/ml/pipelines/configure/training/validation-function.png) *** ## Scoring Whenever you choose an estimator at the beginning of the Training step, a default scoring function is automatically added to the list. This default score depends on whether the estimator is a [classifier](https://en.wikipedia.org/wiki/Statistical_classification) or a [regressor](https://en.wikipedia.org/wiki/Regression_analysis). ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-list.png) When a testing job [is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#testing-jobs), **all scores in the list are computed on the _testing set_ simultaneously**. Each scoring function is associated with a **threshold**: it is the minimum score that models have to reach on both the validation and the testing set in order to be saved. - During a training job: if the chosen score doesn't reach its threshold on the validation set, the model will not be saved. - During a testing job: if **any** score doesn't reach its respective threshold, the model will not be saved. A scoring function can be set as primary by clicking on the **star** ⭐ icon next to it, meaning it will be the score displayed by default in the rest of the pipeline. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-star.png) When adding a new scoring function, you can either choose a [standard scoring function](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#standard-scoring-function) among a curated catalog of the most popular scores, or upload your own [custom scoring script](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#custom-scoring-function). ### Standard scoring function To add a standard scoring function, click on **Add**. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-add.png) Choose the desired standard estimator in the store and press **Select**. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-select-standard.png) A default threshold is automatically configured for your new score. To change it, click on the **edit** ✏️ icon on the row of the new score. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-edit.png) You can then enter the new chosen threshold as a percentage. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-edit2.png) ### Custom scoring function To add your own custom scoring script, click on **Add**. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-add.png) Choose _Custom score_ in the store and press **Select**. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-select-custom.png) Enter the name and threshold, then upload your custom Python scoring script in the dedicated box. This _.py_ script must contain a function that takes in two arrays - representing respectively the predictions and true values - and return a numeric value representing the score. ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-select-custom2.png) Write the name of the aforementioned function in **Code function name**: ![ml](/images/legacy/product/ml/pipelines/configure/training/scoring-select-custom3.png) #### Custom script template Here is a template of a custom scoring script: ```py import logging logger = logging.getLogger(__name__) def customfunc(y, y_pred, **kwargs): logger.info("BEGIN function customfunc") # Function goes in here print(y, y_pred) logger.info("END function customfunc") return 0.8 ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Hyper-parameter tuning :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Hyper-parameter tuning is a pipeline configuration step closely linked to the [training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training.md) where you can fine-tune the estimator implemented in a pipeline. ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/pipeline-tuning.png) :::info Hyper-parameters are the core variables of any machine learning estimator that are not learned using the training data. They have to be hard-coded while configuring a model and are needed for the training jobs. For more details about hyper-parameters, check out the associated [Wikipedia page](). ::: *** ## Set specific hyper-parameter values The tuning studio lists all the hyper-parameters associated to the estimator chosen during the [training configuration](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training.md). ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/studio.png) Each of them has a default value already entered. To modify the value set for a specific hyper-parameter, edit it in the _Value_ column. ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/studio-edit1.png) When your pipeline [is executed](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md), training jobs will use the resulting hyper-parameter configuration for the ML estimator. The scoring function used for the validation method can be set in the Visual Options panel. ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/studio-edit2.png) *** ## Explore different values If you don't know how to configure it, ForePaaS also lets you explore the impact of different hyper-parameters values on the score of the resulting model in the studio. Select the _Multiple_ value for the **Mode** column and enter all the values that you want to explore for any hyper-parameter. ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/studio-explore1.png) This will create a grid of combinations that will all be trained and scored (using the function specified in the Visual Options panel) on the validation set every time the pipeline [is executed](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#Training_jobs). :::warning Exploring a grid of hyper-parameters can quickly be **very time and resource-consuming** since all generated model combinations need to be trained and evaluated - especially when you have [cross-validation](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md) activated. ::: ![machinelearning](/images/legacy/product/ml/pipelines/configure/tuning/studio-explore1.png) When a pipeline [is executed](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#Training-jobs) with multiple hyper-parameter combinations, while all resulting validation scores are displayed in the studio **only the model with the highest validation score is saved for deployment**. This saved model will then be listed in the [model selection step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md). [Select a model to deploy](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md) --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Model selection :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Model selection is the step in which you can **compare all trained models in the pipeline, especially over time**, and choose which one you want to deploy to production. The word **_model_** always refers to the combo of two elements: an _estimator and its parameters_ fitted on _training data_. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/pipeline-validation.png) Think of this step as a control center where you can come back at any time to monitor how well your deployed model is doing over time. If needed, you can switch it for another more accurate or efficient model. :::warning A pipeline can store several trained models (they are all displayed on the Model Selection page) but only one can be deployed for predictions. ::: Here, you can: - [Manage model versions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md#manage-versions) - [Deploy a model](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md#deploy-model) - [Compare scores](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md#scores) - [Set up automatic deployment of models](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation.md#set-up-automatic-deployment-of-models) *** ## Manage trained models The main focus of this page is the **Generated models board**. It lists all models that have been fitted since the creation of the pipeline. > Remember that not all combinations from the [hyper-parameter tuning step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-tuning.md) are saved but only the one with the best validation score. ### Manage versions For the moment, models' versions are identical to the version of the pipeline whose configuration was used to generate it. This ensures you have traceability over how every one of your predictions was made. All model versions that were saved over time are listed in the table. You can choose to download a specific model version by clicking the 📥 icon. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-download.png) ### Deploy model The model at the top with the green atom ⚛️ icon is the model that is currently deployed in your pipeline. This means that it is the model used to make inferences, using the specifications (i.e. consumers) listed in the [Deployment options step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md). ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-deployed-model.png) You can choose to manually deploy another model of your choice by clicking on the **Play ▶️ button** at the end of its line. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-manually-deploy.png) ### Scores The Generated models list also display both the **validation score** (evaluated on the [Validation set](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md)) and the **testing score** (evaluated on the [Testing set](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#train-test-split)). By default, the testing score isn't calculated in order to minimize the resources used. You can choose to compute it manually by clicking on the **Refresh 🔄 button** in the _Testing Score_ column. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-manually-score.png) > There is a cup 🏆 symbol next to the model with the best validation score to help you spot it more easily! The default **scoring function** used in both columns is the _Highlight score_: it is the scoring function [you highlighted ⭐ in the Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md). To display the results with another scoring function, click on the dropdown menu at the top-right of the table and select a function among those you added in the Training step. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-highlight-score.png) Finally, you can also compare the scores of several functions side by side for a specific model on its **details page**. Simply click on the **Stats 📊 icon** at the end of the model's row to open it. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-model-stats.png) *** ## Set up automatic deployment of models A key feature of the Model Selection step is the ability to configure the auto-deployment of models based on certain criteria. [Learn how to auto-deploy models](#en/product/ml/pipelines/configure/validation/auto-deploy.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation-auto-deploy.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Automatic deployment of models :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: This feature automates everything you can manually do at the Model Selection step: deploying your favorite model among all versions, based on scores and runtimes. It is activated in the Deployment Option panel, by turning on **Automatic Deployment**. ![machinelearning](/images/legacy/product/ml/pipelines/configure/validation/validation-autodeploy.png) Once this is activated, the pipeline will check against the _Preferred Deployment Criteria_ every time a model is generated or scored, and automatically deploy a new model if applicable. > If Automatic Deployment isn't activated, the preferred deployment criteria is used when [manually playing a pipeline, for the Deployment job](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#deployment-jobs). You need to specify the _Preferred Deployment Criteria_ used to select the model to deploy. ForePaaS has a curated list of criteria from which to choose: - [Best score over period of time](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation-auto-deploy.md#best-score-over-period-of-time) - [Best prediction time over period of time](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation-auto-deploy.md#best-prediction-time-over-period-of-time) ### Best score over period of time **Parameter**: _Time period_ The model with the best **testing score** over the past \[_time period_] will be automatically deployed. ### Best prediction time over period of time 🚧 Coming soon! **Parameter**: _Time period_ The model with the best **prediction time** over the past \[_time period_] will be automatically deployed. *** ## Need more options? ForePaaS is actively adding & updating automation options. If we are missing something critical for your Project, please reach out and drop us a line on [our Roadmap Portal](https://hq.forepaas.io/#/features) 💡! You can also ask for help via the [OVHcloud Help Centre](https://help.ovhcloud.com/csm/fr-home?id=csm_index) or the [support guide](https://docs.dataplatform.ovh.net/index.md). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Deployment settings :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Setting up the deployment is the last step needed to configure a pipeline: this is where you decide how to operationally use the models it produces. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/pipeline-deployment.png) All the configuration is done through what is called **consumers**. They are entities plugged into the output of your pipeline in order to access its deployed model. They can then be fed with data in order to produce predictions. A single pipeline can have several consumers which makes it possible to use its deployed model in multiple ways at once. Thanks to consumers, you can call your deployed model both **externally** and **internally** to your Project. - External calls use an endpoint from one of your Project's APIs, requiring an authentication - Internal calls use the Data Processing Engine (DPE) to load and write data in your Data Manager ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/diagram-ml.png) - [Create a consumer](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#create-a-consumer) - [Use a consumer to make predictions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-consumer-to-make-predictions) *** ## Create a consumer To create a new consumer, click on _Add_ in the consumers panel. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/add-consumer.png) You then need to choose an **input** and an **output**. The input represents the way to pass on data to the consumer while the output represents the way predictions are returned. ### **Input options** ForePaaS lets you choose from the following options for the input of the consumer: | Input Type | Description | | :--------------: | --------------------------------------------------- | | **API Endpoint** | The endpoint to send data points to. | | **Table** | The Data Manager table used to provide data points. | | **Bucket** | The Data Store bucket used to provide data files. | #### API Endpoint input You must have a deployed [Project API](https://docs.dataplatform.ovh.net/landing-page-app-services-apis.md) to be able to create a prediction endpoint. When creating the consumer, specify the Project API you want to use. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/input-endpoint.png) Then, specify the name of the endpoint to create. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/input-endpoint2.png) :::warning You cannot use an endpoint that already exists, even in another pipeline ::: #### Table input When creating the consumer, specify one of your Data Manager tables. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/input-table.png) > The attributes of your Data Manager table don't need to have the same names as your model's features: the mapping can be customized in the [generated Predict Action](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-dpe-predict-action). However, all of your model's features need to exist in one form or another in the input table. #### Bucket input When creating the consumer, specify one of your Data Store buckets. The consequently [generated Predict Action](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-dpe-predict-action) will try to make a prediction for **all** the files that are stored in the bucket, provided your model has been trained on unstructured data. ### **Output options** ForePaaS lets you choose from the following options for the output of the consumer: | Input Type | Description | | :--------------: | -------------------------------------------------------- | | **API Endpoint** | The endpoint to receive predictions from. | | **Table** | The Data Manager table in which predictions are written. | #### API Endpoint output This option is automatically selected when you choose an _API endpoint_ as the input. The endpoint is the same as the input. #### Table output This option is automatically selected when you choose either _Bucket_ or _Table_ as the input. You can choose either the same table as the input or another one. > The attribute of your Data Manager table doesn't need to have the same name as your model's value-to-predict: the mapping can be customized in the [generated Predict Action](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-dpe-predict-action). *** ## Use a consumer to make predictions Once a consumer has been created, it can be used to make predictions. - Using _API Endpoint_ as either the input or the output of a consumer creates an [API endpoint which can be called](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-an-api-endpoint) - Using _Table_ as either the input or the output of a consumer automatically generates a Data Processing Engine [Predict Action which can be executed](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-dpe-predict-action) - Using _Bucket_ as the input of a consumer automatically generates a [DPE Predict Action which can be executed](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md#use-a-dpe-predict-action) ### Use an API endpoint #### For structured data Open the API control panel by clicking the **eye 👁️ icon**. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/api-control-panel.png) To make a prediction from an API endpoint, you have to [generate an authentication token](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md#generating-authentication-token) first. You can easily generate this token by entering your [API & secret keys](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md) and running the command specified in the API control panel. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/api-auth.png) To launch a prediction job, you can run the sample command provided in the API control panel. You will need to enter two parameters in the request: the **authentication token** you just generated, as well as the **data on which to make predictions**. Each data point is represented by a dictionary containing the model's features and their values. Multiple data points can be predicted at once by including several dictionaries in the array. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/api-predict.png) > The control panel is pre-populated with a template data payload to show you how variable names and values must be entered. #### For unstructured data When an unstructured-data model is used for predictions, you are supposed to feed it the actual unstructured objects (images, etc.). The platform automatically 'numpyfies', standardizes and normalizes them. To get predictions on an [unstructured data model](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#pictures-from-buckets), make a POST request to the endpoint containing the files with the content-type set to `multipart/form-data`. ### Use a DPE Predict action The Predict action associated with a consumer is by default generated in the Data Processing Engine, in the _Machine Learning_ repository of the Actions menu. ![machinelearning](/images/legacy/product/ml/pipelines/configure/deployment/predict-action-list.png) [Learn how to configure and run Predict actions](https://docs.dataplatform.ovh.net/index.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Execute a pipeline :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: After a pipeline is configured, it can be executed in order to realize different tasks called **jobs**. These jobs are ran using ForePaaS technology to ensure scalability to large volume or frequency of processed data. The execution of a pipeline is the backbone of having a model evolve through its natural life-cycle. Following the configuration you specified, this is how you can incorporate additional data over time, re-train models, deploy new ones and make predictions. *** ## Pipeline jobs There are **four** kind of jobs that can be executed either manually or through [triggers](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md). - [Dataset generation jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#dataset-generation-jobs) - [Training jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs) - [Testing jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#testing-jobs) - [Deployment jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#deployment-jobs) To manually execute pipeline jobs, simply press the **Play ▶️ button** at the top-right. ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-play.png) You can then specify which jobs you want to run and how. ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-play2.png) ### Dataset generation jobs Dataset generation jobs are used to create (or add to) the training, testing and validation datasets using your data inputs. Training and testing sets are modeled and stored as [ML tables in the Data Manager](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md). When a dataset generation job is launched, the training and validation sets are flushed of their previous data. Then any data point in the data input that **isn't already in the testing set** is split between the training and testing sets following the rules you set in the [Dataset step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-dataset-input.md#train-test-split). The validation set is generated following the rules you set in the [Training step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-validation.md#validation). > The testing set is never erased naturally, unless you manually reset your datasets from the [pipeline preferences](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#reset-datasets). ### Training jobs Training jobs are used to train models based on an algorithm and a combination of hyper-parameters, and score them on the validation set. Training jobs can be accelerated with graphics processing units (GPU) using [FPU-G](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing). ### Testing jobs Testing jobs are used to evaluate models on the testing set using all added scoring functions. Testing jobs can be accelerated with graphics processing units (GPU) by using [FPU-G](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing). ### Deployment jobs Deployment jobs are used to deploy inference APIs which are a model's interface to make predictions. The model deployed is based on the criteria specified in the [Model Selection step](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation-auto-deploy.md). *** ## Set up triggers Instead of having to manually press the Play ▶️ button, you can choose to configure triggers to **execute pipelines at specific moments or events**. [Pipeline triggers](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md) *** ## Manage pipeline preferences In the Preferences tab, you can set up fundamental options for the execution of your pipelines such as **allocated resources, timeout and logs settings and even reset datasets** if needed. [Pipeline preferences](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md) *** ## Scale your pipelines Each pipeline can be scaled independently in the Preferences, for you to specify the resources allocated to training, scoring and dataset generation jobs. [How to scale pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Pipeline Preferences :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Each ForePaaS pipeline possesses several execution settings which can be managed via the Preferences tab of the pipeline edition menu. ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences.png) Here are the main settings: - [Pipeline information](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#pipeline-information) - [Timeout options](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#timeout-options) - [Environment options](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#environment-options) - [Resources](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#resources) - [Reset datasets](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-preferences.md#reset-datasets) *** ## Pipeline information In the Informations box, you can set the name, description and tags for your pipeline. ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences-info.png) *** ## Timeout options The Execution Parameters box lets you set timeout and failure options. **Timeout** is the runtime after which a job is interrupted if it hasn't finished. You can set a different runtime for all four possible jobs. :::warning If a job fails while running a pipeline (i.e. several consecutive jobs), **the whole pipeline is interrupted and the next jobs will not be run**. ::: ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences-timeout.png) *** ## Environment options ### Set an environment The boxes on the right of the screen are the ones that relate to an environment, just like in a [DPE action](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md). By default, there is no environment applied and you can customize all settings within the Preferences page.\ If you want to harmonize the set of settings to all the pipelines you build, you can **specify them at the environment-level**. Go to Environment in the sidebar to create an environment, and apply it to each pipeline by specifying it in the Related Environment box in the pipeline's Preferences page. ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences-env.png) ### Resources You can specify the resources dedicated to each kind of [machine learning jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#pipeline-jobs) in the Resources panel. [How to scale pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md) ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences-resources2.png) *** ## Reset datasets By default, pipelines are engineered so that the training and testing datasets never spill into each other over time, as ForePaaS manages the life-cycle of the data for you. However, you might want to occasionally reset your ML datasets, if corrupt or incorrect data leaked into your Testing set or if the structure of the training data changes radically. You can decide to manually reset training, testing and validation datasets of a specific pipeline in its Preferences page by pressing this button: ![machinelearning](/images/legacy/product/ml/pipelines/execute/pipeline-preferences-reset.png) > This **will not** reset the rest of your pipeline configuration such as the features choice, estimator and hyper-parameter tuning, or the generated models. ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Scale pipelines :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The ForePaaS Platform is designed to scale easily as the requirements of your data Project evolve. In the Machine Learning Manager, each individual pipeline can be **scaled vertically**, meaning you can add more computing power to each job indefinitely. _Dataset generation_ jobs can also be **scaled horizontally**, by splitting the workload on multiple parallel instances. :::info For the moment, it is not possible to scale _training_/_testing_ jobs horizontally, i.e. to do distributed training. Our engineering team is working hard to implement this feature soon. If you have a particular need for this, please drop us a note on our [roadmap portal](https://hq.forepaas.io/#/features)! ::: - [Scale your jobs vertically](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#scale-your-jobs-vertically) - [Use GPU for your processing](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-resources.md#use-gpu-for-your-processing) *** ## Scale your jobs vertically You can allocate **more computing power** to each kind of [machine learning jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#pipeline-jobs) independently in the Resources panel of the Preferences tab, by increasing the number of [ForePaaS Units](https://docs.dataplatform.ovh.net/manage-pricing.md) (FPU) of each computing instance. The FPU is a unit of processing capability, representing access to a certain amount of CPU and memory, as such: - **FPU-S**: general processing - corresponds to approximately _0.5 CPU_ and _2 GB of RAM_, based on hardware availability. - **FPU-G**: GPU-accelerated - represents approximately _1 GPU_ with at least _5 vCPU_ and _40 GB of RAM_, based on hardware availability. :::info By default, newly created pipelines are allocated 4 FPU-S for each type of job. ::: To change the amount of FPU allocated to a pipeline job, go to its **Preferences** tab. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/pipeline-preferences.png) Use the corresponding slider to set the desired FPU size allocated for the execution. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/pipeline-size.png) *** ## Use GPU for your processing You can configure your pipeline to use graphics processing units (GPU) when they are executed in order to accelerate the machine learning and data processing scripts by a lot. To do this, change the allocated resource type to _FPU-G_ in the pipeline's **preferences**. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/pipeline-gpu.png) :::info Note that jobs using FPU-G will usually have a longer build phase, up to a few minutes. ::: Currently, FPU-G are available for [training](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs) and [testing](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#testing-jobs) jobs. > FPU-G are not available on all cloud providers at the moment. If you are unable to find them in your Machine Learning Manager, please reach out to the support team to get more information on the roadmap. [Learn more about FPU-G consumption](https://docs.dataplatform.ovh.net/manage-pricing.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Triggers :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Triggers allow you to schedule the automatic execution of your pipelines, such as generating the datasets or training models. ![ml](/images/legacy/product/ml/pipelines/execute/triggers.png) - [Add a trigger to a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md#add-a-trigger-to-a-pipeline) - [Trigger on a time schedule](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md#trigger-on-a-time-schedule) *** ## Add a trigger to a pipeline To create a trigger on a pipeline, go to the home page of the pipeline and press **Add**. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/add-trigger1.png) You can choose a name and description for your trigger in the **Info** section. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/add-trigger2.png) In the **Jobs** section, select the [pipeline jobs](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#pipeline-jobs) that you want to trigger. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/add-trigger3.png) Finally, in the **Trigger** section, select the condition for the trigger. When that condition is true, the jobs that you have previously selected will automatically be launched. ### Trigger on a time schedule You can execute your pipeline on a time schedule by selecting _Cron_ as the trigger type. ![ml-fpu](/images/legacy/product/ml/pipelines/execute/add-trigger4.png) :::info Our engineering team is working hard to implement more trigger options soon. If you have a particular need, please drop us a note on our [roadmap portal](https://hq.forepaas.io/#/features)! ::: --- url: https://docs.dataplatform.ovh.net/legacy/ml-models.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Models :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The **Models page** is where you will find the full list of models that exist in all the ML Projects (i.e. repositories) of your Project. It is by default filtered on _deployed models only_ but you can also choose to display _all models_. ![machinelearning](/images/legacy/product/ml/models/models-list.png) On the ForePaaS Platform, we call **_model_** the combo of two elements: an _estimator and its parameters_ fitted on _training data_. There are two types of models you can find on ForePaaS: - Models created through a ForePaaS pipeline: **ForePaaS models** - Models either imported externally or that belonged to an erased pipeline: **standalone models** *** ## Import an external model If you already have a model that you trained outside of ForePaaS but you'd like to use our deployment technology to use it in production, you have the possibility to do so. Check out the link below to learn how. [Import 📥 a trained model](https://docs.dataplatform.ovh.net/legacy/ml-models-import.md) > To design and train your own model on ForePaaS, you need to [go through a pipeline](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md). Either go to the **Pipelines tab** in the sidebar or use the shortcut '**Create pipeline**' at the top-right of the Models page. *** ## Manage your models The Models page is a control center from where you can pilot all your models. If you want to modify your model, simply click the **Edit 🖋 icon**. If your model was made through a ForePaaS pipeline, this will let you edit the pipeline. If your model is a standalone model, this will open its configuration page. ![machinelearning](/images/legacy/product/ml/models/models-edit.png) You can also download a model file onto your computer by clicking the **Download 📥 icon**. ![machinelearning](/images/legacy/product/ml/models/models-download.png) Finally, you can erase a model by clicking the **Trash 🗑 icon**. :::warning Erasing a **ForePaaS model** does not erase its mother pipeline. This means you can still run the pipeline to generate a new version of the model.\ An erased **standalone model** cannot be recovered unless you import it again. ::: ![machinelearning](/images/legacy/product/ml/models/models-erase.png) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-models-import.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Import a model :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: You can very easily import a trained model to ForePaaS by clicking on **Upload Model** on the Models page. ![machinelearning](/images/legacy/product/ml/models/import/models-import.png) You can either **upload a private model** from your computer or a git repository, or **import a shared community model** that has been posted to the Store by another user. To use a shared community model, simply search for the desired model within the Store and import it. If you want to use your own private model instead, simply select one of the _Custom_ options in the store. > If you can't find your model language among the Custom options in the Store, it is not supported on ForePaaS yet.\ > We are working hard to regularly add more integrations to the platform! Drop us a message on [the Roadmap page](https://hq.forepaas.io/#/features) so we know how to prioritize your needs for future releases 😀. ![machinelearning](/images/legacy/product/ml/models/import/models-store2.png) Specify the name and file for your model, and click on **Import**. ![machinelearning](/images/legacy/product/ml/models/import/models-store3.png) Now you need to configure your model deployment. This is done through several steps: - [Configuration](https://docs.dataplatform.ovh.net/legacy/ml-models-import.md#configuration) - [Manage versions](https://docs.dataplatform.ovh.net/legacy/ml-models-import.md#manage-versions) - [Specify variables](https://docs.dataplatform.ovh.net/legacy/ml-models-import.md#specify-variables) - [Deployment settings](https://docs.dataplatform.ovh.net/legacy/ml-models-import.md#deployment-settings) > Shared models are already configured by the author: you can deploy them in one click of a button! *** ## Configuration Setting up your model is done in the **Configuration tab**. ![machinelearning](/images/legacy/product/ml/models/import/model-configuration.png) ### Manage versions All model versions are listed in the table so you can track changes and compare them instantly. > For the moment, it is not possible to get scoring on imported models - please [drop us a note on the roadmap portal](https://hq.forepaas.io/#/features) if you would like to see this in the future. To update the model version, simply press the **Refresh** button at the top of the table. ![machinelearning](/images/legacy/product/ml/models/import/model-update.png) You will then be prompted to select the newest version of your model from your files. ### Specify variables Depending on the language/software you have used to build your model, you might need to specify its features. This step is required for the **inference API to correctly map input data** when you will be making predictions. First, specify the name of your value-to-predict by clicking on **Add a variable** next to Y. ![machinelearning](/images/legacy/product/ml/models/import/model-addY.png) ![machinelearning](/images/legacy/product/ml/models/import/model-addY2.png) Then, specify the variables in your X dataset by clicking on the same button next to X. ![machinelearning](/images/legacy/product/ml/models/import/model-addX.png) You have two options to specify your X variables: - enter them manually one-by-one - add them all in one go by uploading a text file. [Click here](https://docs.dataplatform.ovh.net/legacy/ml-models-import-bulk-add-x.md) to see code boilerplates. ![machinelearning](/images/legacy/product/ml/models/import/model-addX2.png) :::warning The variables' names must be the same as the names you will use when requesting a prediction. ::: *** ## Deployment settings ![machinelearning](/images/legacy/product/ml/models/import/model-deployment.png) This is where you decide how to use your deployed models to make predictions. All the configuration is done through what is called **consumers**. They are entities plugged into your deployed model which are fed data in order to make predictions. Deployment settings are identical for standalone models and for pipelines: check out the article below for a detailed documentation. [Manage deployment settings](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md) ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/ml-models-import-bulk-add-x.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Code boilerplates to specify multiple variables in a model :::warning This page describes the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: Supported file formats: - [.txt](https://docs.dataplatform.ovh.net/legacy/ml-models-import-bulk-add-x.md#txt-file) - [.json](https://docs.dataplatform.ovh.net/legacy/ml-models-import-bulk-add-x.md#json-file) *** ## .txt file ```txt variable_name_1 variable_name_2 variable_name_3 ``` >  You can obtain such a _.txt_ file from your pandas DataFrame by running the NumPy command:\ > **np.savetxt("file\_name.txt", `your_X_dataframe.columns.values`, fmt="%s")** *** ## .json file ```json { "columns": [ "variable_name_1", "variable_name_2", "variable_name_3" ] } ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Build your AI model from scratch on ForePaaS :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: If you’ve been hearing about how Artificial Intelligence (AI) can help you make better business decisions and want to add more intelligence and machine learning to the data you have on hand, you're in the right place! In this tutorial, you'll learn the basics about the ForePaas Platform Artificial Intelligence features. You'll create, train and deploy your own AI model **in less than 30 minutes**. ⛳️ The goal is to get you up to speed on how to use the AI features of the ForePaas Platform so that you can start operationalizing AI asap. 📥 No need to bring your own data or model, we provide them throughout the tutorial to accelerate the process. :::info If you have never used the ForePaaS Platform before, we suggest you have a look at the first 3 parts of our Getting Started guide to learn how your [Connectors](https://docs.dataplatform.ovh.net/getting-started-connect-sources.md), [Lakehouse Manager](https://docs.dataplatform.ovh.net/getting-started-organize-data.md) and [Data Processing Engine](https://docs.dataplatform.ovh.net/getting-started-prepare-data.md) work. ::: *** ## AI in production in five easy steps Generally speaking, the creation and deployment of your machine learning model will be completed in 5 major steps: 1 [![Dataset](/images/legacy/product/ml/dataset-icon.png)## Data preparation Specify your train and test datasets. ](/legacy/getting-started-ml-dataset) 2 [![Training](/images/legacy/product/ml/training-icon.png)## Training procedure Choose the algorithm at the core of your model. ](/legacy/getting-started-ml-training) 3 [![Tuning](/images/legacy/product/ml/tuning-icon.png)## Hyper-parameter tuning Fine-tune the hyper-parameters of your estimator using our insightful studio. ](/legacy/getting-started-ml-tuning) 4 [![Validation](/images/legacy/product/ml/validation-icon.png)## Model selection Compare trained models and pick the one that suits your needs. ](/legacy/getting-started-ml-validation) 5 [![Deployment](/images/legacy/product/ml/deployment-icon.png)## Deployment settings Specify the settings for your production-grade inference service ](/legacy/getting-started-ml-deployment) ?>💡 **Good news!**\ The Machine Learning Manager, as in the rest of the platform, does a lot of the work for you automatically, from the configuration to the deployment and scalability. This will help you focus on the logic of your AI model rather than the technical administration. ⭐ --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Prepare your data for Machine Learning :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: You work for the [Chicago Transit Authority](https://www.transitchicago.com/about/) and want to set up an AI system to **predict whether your metro stations are going to be overcrowded** based on temporal and environmental factors in the city. ![machinelearning](/images/legacy/getting-started/ml/cta2.jpg) _Photo by Skyler Gerald on Unsplash_ You will go through the following steps, to prepare the data for your AI model: - [Build your first pipeline](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#build-your-first-pipeline) - [Prepare your datasets](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#prepare-your-datasets) - [Define the source tables](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#define-the-source-tables) - [Define the features](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#define-the-features) - [Pre-processing](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#pre-processing) *** ## Pre-requisites Before going through this tutorial: - Download [this zip](https://hq.forepaas.io/getting-started/ml-data-csv.zip) containing the two data files necessary for this guide: _ml\_dataset.csv_ and _ml\_sample.csv_. - Load the files into your [Connectors](https://docs.dataplatform.ovh.net/landing-page-connectors.md): - Load them into the **Sources tab** of your Connectors. - Extract their metadata in the **Analyzer**. - Build the data models in the [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) - Add both tables (respectively naming them _ml\_dataset_ and _ml\_sample_) to your **Tables tab**. - Don't forget to enable the corresponding Load actions. - Make sure _date_ and _station\_id_ are set as primary keys for both. - Save and Build your model by clicking on the **Play** icon - Process the physical data in your [Data Processing Engine](https://docs.dataplatform.ovh.net/landing-page-dpe.md) (DPE): - Open your DPE and head to the **Workflows tab**. - Create a workflow containing both newly created Load actions. - Run the workflow and wait a few minutes for the job to be completed. - Head back to the Lakehouse Manager, in the list view of the **Tables tab**, and make sure that both tables are filled with data (# of rows is greater than 0). You're all set! The sample data model you just created will be used by the machine learning model you are about to build. Ready? Go! 🏃 *** ## Build your first pipeline From your project's home page, open the **Machine Learning Manager**. ![machinelearning](/images/legacy/getting-started/ml/homepage-ml.png) Feel free to read through the welcome page, and when you are ready click on **New Project**. ![machinelearning](/images/legacy/getting-started/ml/welcome-page.png) All your AI files will be stored within a ForePaaS repository (called _Default_) to ensure production-grade version control. You have the option to connect your own Git repository. For more details on how to do this, please check out our [Product Guide](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md#pipeline-repositories). The ForePaas Platform gives you the option to import your own trained ML model and even use Jupyter Notebooks. Since you’re going to build your own model, click on **Pipeline**, then **Get Started**. ![machinelearning](/images/legacy/getting-started/ml/start-your-project.png) You just created your first ML pipeline on the ForePaaS Platform. Now it's time to configure it! 🔩 Double-click on the pipeline's name in the header to rename it to _Chicago ML Pipeline_. ![machinelearning](/images/legacy/getting-started/ml/rename.png) As you can see, a ForePaaS pipeline is made of **five configuration steps** from the data preprocessing to the deployment options. Each guide in this **Getting Started for Machine Learning** series will tackle one of them. You'll be ready to go live in no time! *** ## Prepare your datasets ### Define the source tables Open the **Dataset** panel. ![machinelearning](/images/legacy/getting-started/ml/dataset-open.png) Choose **Tables** as the Input Type, to use the data from the data model you just created in the Lakehouse Manager. ![machinelearning](/images/legacy/getting-started/ml/dataset-input-type.png) The data used in an AI Project is typically segregated into two subsets: one to train your model, the other to test it. To select your training data, under **Training**, select _ml\_dataset_. Since you want this table to be the source for your testing data too, simply make sure the **link 🔗** icon between Training and Testing is active. You can toggle this on and off by clicking the link icon. ![machinelearning](/images/legacy/getting-started/ml/dataset-train-test-split.png) To select how much training vs. testing data to use, move the slide bar to _85%_ of the data for **Training** and _15%_ of the data for **Testing**. ![machinelearning](/images/legacy/getting-started/ml/dataset-train-test-split2.png) As you can see in the initial panel under _Tables_, the split is made randomly on the rows of the input table. You can control the reproducibility of the split with the **Seed** in order to get the exact same results as this tutorial. Write _27062020_ as the seed. ![machinelearning](/images/legacy/getting-started/ml/dataset-train-test-split3.png) > Note that pipelines autosave 💾! You can exit and come back at any time. ### Define the features The next step in AI modeling is to choose the X and Y variables. Y is the value to predict, and X is the set of features that influence this prediction. In this case, you want to use the available data to predict whether subway stations in the Chicago metropolitan area will be overcrowded. Let’s start by adding the Y value, the “overcrowded” outcome. Click on **Add a source** next to Y. ![machinelearning](/images/legacy/getting-started/ml/dataset-add-y.png) Then select _is\_overcrowded from ml\_dataset_. The possible values of Y will be 1 if the stations are overcrowded or 0 if they’re not. Add a description to reflect these outcomes then press **Save**. ![machinelearning](/images/legacy/getting-started/ml/dataset-add-y2.png) Now let's add the X features. Click on **Add a source** next to X. ![machinelearning](/images/legacy/getting-started/ml/dataset-add-x.png) Click on _Add all variables_. Don't worry about duplicates: this option does not add the Y value-to-predict to your X! ✨ ![machinelearning](/images/legacy/getting-started/ml/dataset-add-x2.png) ### Pre-processing In the steps above, you added the X variables in bulk. This is great because you don't have to add each variable one by one, manually. However, since all of the variables were added you should go through each variable and verify if you really need all of them or not. 👀 For example, some of the X variables in your _ml\_dataset_ are redundant and could thus negatively impact your prediction. To remove a variable, click on the **trash 🗑 icon** on the right-hand side of the variable row. Remove the following variables from your X set: | variable | Reason to remove | | :---------------: | --------------------------------- | | **date** | Redundant with holidays variables | | **latitude** | Redundant with _station\_id_ | | **longitude** | Redundant with _station\_id_ | | **station\_name** | Redundant with _station\_id_ | ![machinelearning](/images/legacy/getting-started/ml/dataset-preprocessing.png) Your datasets are successfully configured and ready to be used for some cool 🤖 machine learning.\ Let's move on to the next step: choosing and configuring a training procedure. ![machinelearning](/images/legacy/getting-started/ml/next-step.png) [Step no 2: Training](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-training.md) --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml-training.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Pick a training procedure :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: Moving on to the next step of building your own pipeline, it is now time to configure the training procedure at the core of your model. Here's what you'll learn during this tutorial: - [Choose an algorithm](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-training.md#choose-an-algorithm) - [Configure scoring and validation](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-training.md#configure-scoring-and-validation) *** ## Choose an algorithm The ForePaaS Platform makes it easy for you to choose industry-standard AI algorithms, or to use your own. The ForePaaS Platform comes with a long list of AI algorithms. The goal is to save you the trouble of learning about technical algorithms and instead focus on your business needs. On the following screen, select **Standard Estimators**. ![machinelearning](/images/legacy/getting-started/ml/training-landingpage.png) Let's use a [random forest of decision trees](https://en.wikipedia.org/wiki/Random_forest) for this problem. [Decision trees](https://en.wikipedia.org/wiki/Decision_tree_learning) are one of the most mainstream algorithms used to predict a categorical label (such as True/False or 1/0) based on a set of numerical variables. They are also simple to understand, implement and interpret. This makes them a good fit for your Chicago traffic example. Start by **filtering on the Classifier category** in the store, then choose **Random Forest** (the **classifier** version - not Random Forest Regressor) by Scikit Learn, and press **Select**. ![machinelearning](/images/legacy/getting-started/ml/training-store-rf2.png) The **Algorithm** and **Dependencies** panels have been automatically configured to reflect the choice you just made: no need to scratch your head handling the library requirements, we are taking care of this for you! :::warning Be careful not to erase pre-imported libraries and modules in the Dependencies box, else your pipeline will not run. ::: *** ## Configure scoring and validation Let’s go through a few concepts before we continue. These are important 💡 to help you build the perfect predictive model. You chose the base algorithm but it still requires fine-tuning. For this, you'll eventually need to be able to measure the performance of your model. Since you are still in the training phase, you cannot touch the testing set. Best practices say you should instead define a **validation set** 🕵️‍♂️.\ The validation set is a subset of the previously-defined training set that is used to score models while you are fine-tuning them. Conversely, the testing set is used to measure how well your final model is doing on new, real-world data. > In other words, your pipeline will split your initial real-world data into three datasets as follows:\ > **Training set**: used to train (or 'fit') the model.\ > **Validation set**: used to provide an unbiased evaluation of a model fit during the training phase.\ > **Testing set**: used to provide an unbiased evaluation of a fully trained model. But, again, nothing to worry about! The ForePaaS Platform makes it easy to create your validation dataset and to score your predictive model. The ForePaaS Platform gives you the choice of 2 validation types to score your model: cross-validation or simple validation - let's stick to the latter for now. Use the slide bar to make sure the Validation set represents **20%** of the original Training Set: ![machinelearning](/images/legacy/getting-started/ml/training-validation-set.png) > Note that the size of the testing set cannot be edited any longer as this should be done in [the first step](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#define-the-source-tables). There are many ways to score your validation dataset, and the ForePaaS Platform allows you to pick as many scoring functions as you want. To keep things simple, the ForePaaS Platform has picked by default the [_accuracy_](https://en.wikipedia.org/wiki/Accuracy_and_precision). ![machinelearning](/images/legacy/getting-started/ml/training-scoring-function.png) The platform also automatically configured a **threshold** at 0%. This value represents the minimum score that any model in the pipeline needs to reach (on both the validation and testing set) in order to be saved. Models for which any of the added scores doesn't reach its respective threshold will be discarded. Make sure your screen eventually looks like this before moving on to the next step: ![machinelearning](/images/legacy/getting-started/ml/training-final.png) Everything is almost ready for your pipeline to run! The next step will be to fine-tune 🕹 the hyper-parameters of the random forest algorithm you just selected. [Step no. 3: Hyper-parameters tuning](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-tuning.md) --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml-tuning.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Fine tune the hyperparameters of your model :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: In this tutorial, you will set the hyperparameters for your Random Forest algorithm and finally launch your first training and scoring jobs. :::info Hyperparameters are core variables of a machine learning algorithm that are set by the data scientist prior to the learning process. Think of it as setting the temperature and cooking time in an oven before baking. In a similar way, setting hyperparameters refers to a specific configuration of the underlying mathematical model with which the training is done.\ [Learn more about hyper-parameters on Wikipedia.](https://en.wikipedia.org/wiki/Hyperparameter_optimization) ::: You'll go through the following: - [Make a first search of parameters](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-tuning.md#make-a-first-search-of-parameters) *** ## Make a first search of parameters You just arrived in the hyperparameter tuning studio. It looks empty for the moment 🙇‍♂️ but you are going to fill it with precious insights very soon! The two upper panels, Estimator and Options, give you a recap of the training algorithm and the scoring function you chose on the previous step. You can configure the color code for the scores in your pipeline by changing the score gradient. ![machinelearning](/images/legacy/getting-started/ml/tuning-estimator.png) Let's focus on the hyperparameters list. It has been populated with all the parameters that constitute a random forest algorithm. ![machinelearning](/images/legacy/getting-started/ml/tuning-hps.png) The hyperparameter tuning studio lets you generate multiple configurations that are trained and scored. This gives you insight about the optimal combination of hyperparameters so you can either settle down with one of the combinations, or be more accurate in a second iteration of the search. By default, **each iteration saves only the best model in terms of score, for you to use it in the next steps**. The first two parameters in the list are **bootstrap** and **criterion**: leave them to _Single_ mode with the default values _True_ and _Gini_. > 💡 All parameters have a default value defined by the algorithm. ![machinelearning](/images/legacy/getting-started/ml/tuning-hps1.png) The third parameter in the list is **max\_depth**. It represents the maximum possible [depth of each decision tree](https://en.wikipedia.org/wiki/Tree-depth) in the forest. > 💡 You can get a description of each hyperparameter by hovering over its name. Let's explore a couple of values for this parameter. Set the **Mode** to _Multiple_, and in the **Value** field remove the _None_ value tag and enter _5_, _7_, _9_, _11_ and _13_ instead. ![machinelearning](/images/legacy/getting-started/ml/tuning-hps4.png) Now find the parameter **n\_estimators** in the list. It defines the number of decision trees to be used.\ The score usually increases with the number of trees, but so does the training time and risk of overfitting. Set the **Mode** to _Multiple_, and in the **Value** field remove the _100_ value tag and instead enter _50_, _200_, and _400_. ![machinelearning](/images/legacy/getting-started/ml/tuning-hps2.png) Finally, make sure the configuration for all other parameters is as follows: | Hyperparameter | Mode | Value | | :-----------------------------: | ------ | ------ | | **max\_features** | Single | 'Auto' | | **max\_leaf\_node** | Single | None | | **max\_samples**. | Single | None | | **min\_impurity\_decrease** | Single | 0 | | **min\_samples\_leaf** | Single | 1 | | **min\_samples\_split** | Single | 2 | | **min\_weight\_fraction\_leaf** | Single | 0 | | **random\_state** | Single | None | ![machinelearning](/images/legacy/getting-started/ml/tuning-hps5.png) As you can see on the top-right just above the parameters list, you will generate 15 combinations. You are now ready to run your pipeline for the first time. Press **Play**. Activate only _Dataset Generation_ and _Training_, and run it. ![machinelearning](/images/legacy/getting-started/ml/tuning-play.png) You deserved a hot drink. ☕️ In the meantime, the ForePaaS Platform is deploying cloud instances to generate datasets, train your models and score your combinations on the validation set. After 5 minutes, all jobs should be done and you can move on to the next step: deploying your winner model. [Step no. 4: Model selection](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md) --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Confirm your choice of model and deploy it :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: The Model Selection step is the **watchtower where you'll be able to control all models created by your pipeline over time**. Pipelines in the ForePaaS Platform are designed to live and evolve as new data is fed into your models, and as your models are trained, validated and tested. Keeping track of the model versions and score drift is essential for a production AI application. You'll go through the following: - [Manually deploy a model](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md#manually-deploy-a-model) - [Set automatic management options](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md#set-automatic-management-options) - [Configure auto-deployment](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md#configure-auto-deployment) - [Configure triggers](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-validation.md#configure-triggers) *** ## Manually deploy a model The _Generated Models_ table lists **all the models that have been trained and saved** since the pipeline was created. For the moment, you can only see one model. It is the best model that was returned by the hyper-parameter exploration in the previous step! In order to limit the amount of resources used, the ForePaaS Platform doesn't automatically test your models with the testing dataset. You need to choose when to test your model. To do so, you can either press the pipeline's Play button and select the third option _'Testing'_, or manually click on the **refresh 🔄icon** for a specific model. ![machinelearning](/images/legacy/getting-started/ml/validation-score-manually.png) Now, it is time to deploy a model 🚀. To do this, click on the **Play ▶️ icon** which is located on the right-hand side of the line of the model you wish to deploy. ![machinelearning](/images/legacy/getting-started/ml/validation-deploy-manually.png) It's that simple! Your model has been deployed, as indicated by the green atom icon next to its name, and is now available for predictions. *** ## Set automatic management options ### Configure auto-deployment As you have seen above, it is really easy to deploy a model. But, it’s still manual work! So, the ForePaaS Platform makes it even easier, by allowing you to auto-deploy your models. Once in production, if you are regularly gathering new data, this will save you the task of having to open the pipeline and manually launch the deployment. The default [criterion for deployment](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-validation-auto-deploy.md) is the _best score over a period of time_. Leave it as it is. Simply note that you might also want to optimize the training or prediction time rather than only the score - this tab lets you do that too. Set the time period to **14 days**. ![machinelearning](/images/legacy/getting-started/ml/validation-autodeploy2.png) Turn on **Automatic deployment**. ![machinelearning](/images/legacy/getting-started/ml/validation-autodeploy.png) Your pipeline will now automatically deploy the best model every 14 days. Naturally, this feature should be combined with an automatic re-train / re-score of the model, else the deployed model cannot possibly change. ### Configure triggers The remaining automation options, such as re-training, can be set through **triggers**. To do so you’ll need to go back to your pipeline main page. Click on the **X** button at the top-left. > Note that pipelines autosave 💾! You can always exit and come back at any time. ![machinelearning](/images/legacy/getting-started/ml/validation-exit.png) As you can see, there are no triggered events yet. Click on **Add**. ![machinelearning](/images/legacy/getting-started/ml/validation-add-trigger.png) Name your trigger _Auto re-train_, give the description of your choice and click on **Jobs**. ![machinelearning](/images/legacy/getting-started/ml/validation-add-trigger2.png) You will now need to set up your pipeline so that it refreshes the training and the testing datasets with the latest gathered new data, and that it builds a new model to be trained. To do so, turn on the _Dataset Generation_ and _Training_ sliders. Then click on **Trigger**. ![machinelearning](/images/legacy/getting-started/ml/validation-add-trigger3.png) Let’s have the pipeline do this every 14 days. Select _Daily_ and choose _Every 14 days_. Click on **Create** to close the window. ![machinelearning](/images/legacy/getting-started/ml/validation-add-trigger4.png) Your pipeline will now not only incorporate all new data for training and scoring every 14 days but it will also train a new model and automatically deploy the one with the best score. Great job setting up an automated AI pipeline! Let's conclude this series and configure a few deployment options to make some predictions. [Step no. 5: Deployment options](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-deployment.md) --- url: https://docs.dataplatform.ovh.net/legacy/getting-started-ml-deployment.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Set model deployment options :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: In the Deployment step, you can configure all output options for your pipeline. In other words, this is the step where you truly put your model into production in order to operationalize the flow of predictions. First, open the Deployment page. ![machinelearning](/images/legacy/getting-started/ml/deployment-open.png) In this last machine learning tutorial, you'll go through the following: - [Manage consumers for your model](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-deployment.md#manage-consumers) - [Make your first prediction](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-deployment.md#make-your-first-prediction) *** ## Manage consumers The ForePaaS Platform gives you multiple options on how to use your model to make predictions: write in your Lakehouse Manager, make API calls, etc. For the moment let's keep it simple 😌 and fill a ForePaaS table. In the Consumers panel, click on **Add**. ![machinelearning](/images/legacy/getting-started/ml/deployment-add-consumer.png) Name it _Internal consumer_ and select _Table_ as the input (_Table_ is automatically chosen as the output too). ![machinelearning](/images/legacy/getting-started/ml/deployment-add-consumer2.png) Select _ml\_sample_ as the table for both the input and the output, then click on **Create**. ![machinelearning](/images/legacy/getting-started/ml/deployment-add-consumer3.png) *** ## Make your first prediction Finally the time has come! Let’s go over the business context from the beginning of this tutorial: You’ve built an AI system to predict whether subway stations will be overcrowded and on which day. In other words, your model will make a prediction for each station id and date combination. The best way to represent this is with an output table. Each row of the output table will feature a station id and a date combination, and show the value of 1 if the station is overcrowded, and 0 if it's not. You will keep other information from your dataset in that table, such as holidays, weather conditions and station coordinates in case you want to do other analyses or correlations. You will also keep the true outcome value for each row, in order to compare it with your predictions and evaluate how well your predictive model is working. Your ML model has been incorporated in your Data Processing Engine when you created the consumer, in the form of a new Predict Action. Exit the Machine Learning Manager and head to the Data Processing Engine, in the Actions tab. Select the **Machine Learning** repository: there is a new Predict Action there. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict.png) Open the action. The lower panel is where you select the input and output for your model: edit the output on the right by clicking on _Select an attribute_. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict2.png) The _predictions_ column in the table _ml\_sample_ is currently empty and ready to be filled with predictions. To do this, select the attribute _predictions_. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict3.png) You also need to specify which primary keys the action should use to write predictions. To do this, turn on **Direct Loading**. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict4.png) Direct loading is used to copy your input data straight into your output table where the predictions will be, without going through your model. typically row indexes. This is where you can specify the primary keys to copy from the input table: select _date_ in the left column. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict5.png) Select _date_ in the right column. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict6.png) Repeat with _station\_id_, which is the second primary key of _ml\_sample_. ![machinelearning](/images/legacy/getting-started/ml/deployment-predict7.png) You're all set! The Predict action will automatically write the prediction in the correct row identified by the _date_ and _station\_id_ primary keys. Run your prediction by pressing the **Play** button. ![machinelearning](/images/legacy/getting-started/ml/deployment-run.png) Wait a couple of minutes for the sample data to call your deployed ML instance and gather predictions. You'll know it's finished when the _Jobs_ tab in your DPE is clear. Run a [query in the Analytics Manager](https://docs.dataplatform.ovh.net/analytics-manager-queries.md) on the table _ml\_sample_ to check the values that have been predicted by your model! *** ** Congrats! 🎉🎊 ** **You've completed the ForePaaS Getting Started Machine Learning 🤖 tutorial**. Impressive work! You have successfully trained and deployed to production a first machine learning model. You also ran some quick predictions. >  We know you might have faced some difficulties 🧐 during the tutorials. We're committed to improving the product and do better... but for that we need your feedback! Please take 3 min ⌛to fill in [this short survey](https://forms.office.com/Pages/ResponsePage.aspx?id=nDWzgpGTfE2g8oFnUal2QQ9d-P8xWc5AgNsykYKKK71UOVpZT1RUMFBRUk5BWjNLSzBCNVhDSVgyNSQlQCN0PWcu). ![congrats](/images/legacy/getting-started/ml/congrats.gif) Obviously, you can come back to this tutorial at any time! We encourage you to check out the rest of the documentation to dive deeper into a specific component of the product when needed. *** ** More! ** The ForePaaS Platform is a very powerful and complete tool. Do you want to know more about its advanced capabilities? 🥊 We have prepared multiple tutorials on the more advanced use-cases in our _Getting Further_ guide series. Click below to check it out! [Check out the ForePaaS Platform training guides 🤩](https://docs.dataplatform.ovh.net/landing-page-tutorials.md) Also, don't hesitate to **get in touch** if you need anything, our support & product team is dedicated to helping you deliver faster any AI applications you have in mind. [Give your opinion on the roadmap 🚀](https://hq.forepaas.io/#/features) --- url: https://docs.dataplatform.ovh.net/legacy/getting-further-ml-custom-sklearn.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Create a machine learning pipeline using a custom Scikit Learn script :::warning This tutorial uses the **Machine Learning Manager**, a service of the ForePaaS Legacy Platform that is not available on OVHcloud Data Platform. See [the current tutorials](https://docs.dataplatform.ovh.net/landing-page-tutorials.md). ::: This tutorial will show you how to use [custom estimators](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md) in your machine learning [pipelines](https://docs.dataplatform.ovh.net/legacy/ml-pipelines.md). Contrary to [standard estimators](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-standard-estimator.md), custom estimators let you upload any piece of Python 3+ code to be executed as a training script in your pipelines. The following tutorial will show examples of an estimator from the [Scikit Learn](https://scikit-learn.org/) framework. :::info This tutorial also makes use of functions from the [ForePaaS' SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md), which empower you with the tools to connect to the rest of your data Project on ForePaaS. ::: *** ## Pre-requisites !> If you haven't been through our [Getting Started tutorial for the Machine Learning Manager](https://docs.dataplatform.ovh.net/legacy/getting-started-ml.md), please go through the following pre-requisites. Before going through this tutorial: - Download [this zip](https://www.dropbox.com/s/ebiforzq20tjos0/ml-data-csv.zip?dl=1) containing the two data files necessary for this guide: _ml\_dataset.csv_ and _ml\_sample.csv_. - Load the files into your [Connectors](https://docs.dataplatform.ovh.net/landing-page-connectors.md): - Load them into the **Sources tab** of your Connectors. - Extract their metadata in the **Analyzer**. - Build the data models in the [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) - Add both tables (respectively naming them _ml\_dataset_ and _ml\_sample_) to your **Tables tab**. - Don't forget to enable the corresponding Load actions. - Make sure _date_ and _station\_id_ are set as primary keys for both. - Save and Build your model by clicking on the **Play** icon - Process the physical data in your [Data Processing Engine](https://docs.dataplatform.ovh.net/landing-page-dpe.md) (DPE): - Open your DPE and head to the **Workflows tab**. - Create a workflow containing both newly created Load actions. - Run the workflow and wait a few minutes for the job to be completed. - Head back to the Lakehouse Manager, in the list view of the **Tables tab**, and make sure that both tables are filled with data (# of rows is greater than 0). You're all set! The sample data model you just created will be used by the machine learning model you are about to build. Ready? Go! 🏃 - [Create a new pipeline](https://docs.dataplatform.ovh.net/legacy/getting-further-ml-custom-sklearn.md#create-a-new-pipeline) - [Upload a custom training script](https://docs.dataplatform.ovh.net/legacy/getting-further-ml-custom-sklearn.md#upload-a-custom-training-script) - [Enter custom hyper-parameters](https://docs.dataplatform.ovh.net/legacy/getting-further-ml-custom-sklearn.md#enter-custom-hyper-parameters) *** ## Create a new pipeline Open the **Machine Learning Manager**. On the welcome page, click on **New Project** and select _Pipeline_. ![machinelearning](/images/legacy/getting-further/ml/start-your-project.png) You just created a new ML pipeline on ForePaaS. Open the **Dataset** panel. ![machinelearning](/images/legacy/getting-further/ml/dataset-open.png) Configure the Data Preparation step of the pipeline [as shown in the Getting Started tutorial **here**](https://docs.dataplatform.ovh.net/legacy/getting-started-ml-dataset.md#prepare-your-datasets), using _ml\_dataset_ as your input table. Don't forget to remove redundant variables. Once your screen looks like the screenshot below, click on **Training** to move on to the training procedure. ![machinelearning](/images/legacy/getting-further/ml/next-step.png) *** ## Upload a custom training script Select **Custom Estimator**. This will let you customize the training procedure for your pipeline. ![machinelearning](/images/legacy/getting-further/ml/custom-estimator.png) You then need to specify the framework for your pipeline. Select _Custom Scikit Learn_. ![machinelearning](/images/legacy/getting-further/ml/custom-estimator-scikit.png) This framework allows you to upload a Python _.py_ file containing an estimator compatible with the Scikit Learn library. The supported libraries typically include (but aren't restricted to): Scikit Learn, XGBoost, lightgbm, ... :::info When you select this framework, some packages are imported by default in the pipeline's environment: scikit-learn and the libraries that come out of the box with [ForePaaS' SDK](https://docs.dataplatform.ovh.net/landing-page-developers-python-sdk.md). ::: You must now upload a training script in the box below: ![machinelearning](/images/legacy/getting-further/ml/custom-training.png) Below is a sample custom estimator, including feature engineering that was tailor-made for the _ml\_dataset_ example. Following a [scikit-learn example](https://scikit-learn.org/stable/auto_examples/compose/plot_column_transformer_mixed_types.html) and using `sklearn.pipeline`, the script includes: - use [ForePaaS' SDK functions](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md#common-features-from-sdk) to retrieve: - your train and test datasets (configured previously) - your validation configuration (left to the default 80%/20% in the interface) - and the hyper-parameters grid (that you will register later on) - scaling of numerical variables - basic processing (one-hot encoding) of some categorical variables - fitting a _RandomForestClassifier_ estimator with hyper-parameter tuning and validation ```py import numpy as np from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV from sklearn.metrics import make_scorer from forepaas.core.settings import ML_CONFIG from forepaas.ml import get_train_dataset, get_hyper_parameters, get_train_scoring_function def my_random_forest(event): # Retrieve train dataset. No need to split it since it will be done by cross validation x, y = get_train_dataset() # Retrieve validation settings. cv = ML_CONFIG["train"]["execution_options"]["cross_validation"] if not cv: cv = get_shuffle_split(x, y) # Retrieve scoring function used for the validation score, and make it compatible with scikit's gridSearchCV scoring_function = get_train_scoring_function() scoring = make_scorer(scoring_function["func"]) # Retrieve hyper parameters. hyper_parameters = get_hyper_parameters() # Set Column Transformers numeric_features = ['cloud_cover','humidity','temperature','wind_speed'] numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]) categorical_features = ['station_id','month','week_day'] categorical_transformer = OneHotEncoder(handle_unknown='ignore') preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features)]) # Append classifier to preprocessing pipeline. # Now we have a full prediction pipeline. clf = Pipeline(steps=[('preprocessor', preprocessor), ('classifier', RandomForestClassifier())]) # Start grid search with cross validation grid_search = GridSearchCV(clf, hyper_parameters, scoring=scoring, cv=cv, return_train_score=True) grid_search.fit(x, y) return grid_search def get_shuffle_split(x, y): from sklearn.model_selection import ShuffleSplit ratio = ML_CONFIG["train"]["ratio"] rs = ShuffleSplit(n_splits=1, test_size=ratio) return rs.split(x) ``` Save the above snippet as a _.py_ file and upload it in your ForePaaS pipeline. ![machinelearning](/images/legacy/getting-further/ml/custom-training.png) When a [Training job is launched](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md#training-jobs), this _.py_ file is the file that will be executed. It contains a function that has `event` as its first argument and returns a fitted estimator based on the training dataset. This function's name, here `my_random_forest`, must be written down in the _function name_ box. ![machinelearning](/images/legacy/getting-further/ml/custom-func-name.png) Leave the validation configuration as it is by default: the validation set is a random extract of 20% of the training set. ![machinelearning](/images/legacy/getting-further/ml/custom-validation.png) Now the last step is for you to specify a grid of hyper-parameters to optimize on. *** ## Enter custom hyper-parameters Move on to the **tuning** step of the pipeline. ![machinelearning](/images/legacy/getting-further/ml/custom-tuning.png) If you were using a **standard** Scikit Learn estimator, this page would be pre-populated with all the hyper-parameters for the estimator and their default value. However, since you are using a custom script, this hyper-parameter tuning studio **turns into a registry of key-value objects that you can pass on to your training script**. ?> If you don't change anything here, running the pipeline will train the Scikit Learn model using the default value for all its hyper-parameters. Create a new hyper-parameter by clicking on **Add**. ![machinelearning](/images/legacy/getting-further/ml/custom-add-hp.png) The code snippet previously used for the training script encapsulates the `RandomForestClassifier()` inside of a `Pipeline` object, in the _classifier_ step. For this reason, all the parameters that you want to pass on to the RandomForestClassifier should start with _nameOfTheStepInSklearnPipeline\_\__ (double underscore). In this case, if you want to add a grid search on the hyper-parameter `n_estimators`, name it _classifier\_\_n\_estimators_. ![machinelearning](/images/legacy/getting-further/ml/custom-add-hp2.png) Make sure to switch its type to _Number_. ![machinelearning](/images/legacy/getting-further/ml/custom-add-hp3.png) Now, switch the mode to **Multiple**. Remove the empty option, and add a few values, pressing Enter between each: _5_, _10_, _50_, _100_, _500_, _1000_. ![machinelearning](/images/legacy/getting-further/ml/custom-hp-multiple.png) Now, it is time to run your ForePaaS pipeline. Press **Play** at the top-right, and [play all steps](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute.md). ![machinelearning](/images/legacy/getting-further/ml/custom-play.png) Your ForePaaS pipeline is going to train 6 different combinations, keep the model with the best score on the validation set, score it on the testing set, then deploy it (served by a model API). This can take up to 10 minutes. Move to the model selection step to view your deployed model when your pipeline execution is finished. ![machinelearning](/images/legacy/getting-further/ml/custom-selection.png) That's it! Your custom ML model is live and accessible by your users. You can add [consumers](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-deployment.md) on the model API to use the model for live or batch predictions. You can also add [triggers](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-execute-triggers.md) to automatically retrain/redeploy. *** ** Congrats! 🎉🎊 ** **You've completed this ForePaaS Getting Further tutorial!** You're now ready to build your own custom machine learning pipelines. > Please take 3 min ⌛to fill in [this short survey](https://forms.office.com/Pages/ResponsePage.aspx?id=nDWzgpGTfE2g8oFnUal2QTTUCIkDw9dBkuMh8LM8xBBUOVpZT1RUMFBRUk5BWjNLSzBCNVhDSVgyNS4u). It will help us understand 🧐 what worked well and what didn't in your experience, in order to make this tutorial even better. ![congrats](/images/legacy/getting-further/ml/congrats.gif) Obviously, you can come back to this tutorial at any time! We encourage you to check out the rest of the documentation to dive deeper into a specific component of the product when needed. *** ** More! ** Did you like this tutorial? Want more? Don't worry we got you covered, you can deep dive into the customization capabilities of the Machine Learning Manager in our documentation! [Learn more about custom estimators](https://docs.dataplatform.ovh.net/legacy/ml-pipelines-configure-training-custom-estimator.md) Also, don't hesitate to **get in touch** if you need anything, our support & product team is dedicated to helping you deliver faster any AI applications you have in mind. [Give your opinion on the roadmap 🚀](https://hq.forepaas.io/#/features) --- url: https://docs.dataplatform.ovh.net/legacy/api-reference.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # ForePaaS APIs :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Data Platform APIs](https://docs.dataplatform.ovh.net/landing-page-developers-apis.md). ::: In addition to the graphical user interface (GUI), you can also interact with your [ForePaaS Project](https://docs.dataplatform.ovh.net/manage-projects.md) through the **endpoints in the ForePaaS APIs**. It provides a developer alternative to the GUI for building and managing ForePaaS Projects. Below are the API references for each component. | API reference for | Main context of use | | :--------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | | [Buckets](https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md) | Interact with the [buckets of your Lakehouse Manager](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md). | | [Query Builder](https://docs.dataplatform.ovh.net/legacy/api-reference-qb.md) | Interact with your [Query Builder](https://docs.dataplatform.ovh.net/legacy/index.md) and its metadata. | | [Identity Access Manager](https://docs.dataplatform.ovh.net/legacy/api-reference-iam.md) | Interact with your [Identity Access Manager (IAM)](https://docs.dataplatform.ovh.net/landing-page-iam.md), typically to manage authentication. | | [ForePaaS Store](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md) | Interact with the ForePaaS Store, typically to manage your application's modules or application's templates. | *** ## General formats ### Response format - Data format: JSON see [http://www.json.org](http://www.json.org) - Character set: UTF-8 - All non-empty responses are sent with the header: `Content-Type: application/json; charset=utf-8` ### HTTP response codes | Code | Message | Signification | | :--- | :-------------: | :-------------------------------------------------------------------------- | | 200 | OK | Default response for successful GET or POST requests with non-empty content | | 400 | Bad Request | Invalid value for GET or POST parameters | | 401 | Unauthorized | Invalid Credentials or Rights | | 403 | Forbidden | Authentication error | | 404 | Not Found | Action or request not found | | 500 | Internal Server | A server-side error occurred | ### Error handling In case of client-side (HTTP status code 4xx) or server-side (HTTP status code 5xx) error, the response body may contain a JSON object describing the error: ```json { "error": "Invalid parameter", // code 400, 403, 500 "warning": "Action not found" // code 404 } ``` ### Timestamp All data endpoints return the timestamp associated with the data provided. ```json { "timestamp": 1435929960 } ``` ### Duration All data endpoints return the duration attribute. It represents the effective time taken by the system to execute a request in seconds. ```json { "duration": 0.056 } ``` --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # API Reference: Query Builder / Analytics Manager :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: This page contains the API reference for the [Query Builder](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md), now replaced by the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). - [Query endpoint](https://docs.dataplatform.ovh.net/legacy/api-reference-qb.md#query-endpoint) - [Dataset endpoint](https://docs.dataplatform.ovh.net/legacy/api-reference-qb.md#dataset-endpoint) ?> Like all other ForePaaS endpoints, these endpoints requires you to have an authentication token from the IAM of the Project you are trying to access. To obtain an authentication token, [please follow this subsection](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md#generate-an-authentication-token).\ Make sure you also have corresponding permissions in service _Query Builder Legacy_ (in IAM). *** ## Query endpoint **Description** - Executes the given query, using the [ForePaaS JSON query format](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-json-format.md) **Endpoint** - POST /qb/query **Query Parameters** | Parameter name | required | example | description | | -------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | data.fields | yes | \{ "income":\["sum"],"expense":\["sum"]} | Fields to return and their compute mode(s) (can be: select, select\_distinct, sum, min, max, avg, count, count\_distinct) | | data.skip | no | 10 | Number of rows to skip | | data.limit | no | 100 | Number of rows returned | | data.hints | no | true/false | Total number of lines corresponding to the query (omitting data.limit) | | filter | no | \{ "date": \{ "between": \["1420066800", "1428962399"] }, "client\_code": \{ "in": \["08KD", "09CC"] }, "creation\_date": \{ "eq": \["2018-01-01"] }} | Apply filter(s) on the data to query. Filters can be: in, not\_in, between, not\_between, eq, not\_equal, like, not\_like, is\_null, is\_not\_null, gt (\>), gte (\>=), lt (\<), lte (\<=) | | scale.fields | no | \["date",\["client\_code", "employee\_id"]] | Apply scale (group by) to the query. It can be a computed scale, or more than 1 scale. | | evol.scale | no | "year" | scale to apply for evolution (weekday;week; month; quarter; semester; year) | | evol.mode | no | "date""weekday" | date : comparison with same dateweekday : comparison with respecting the same weekday. | | evol.depth | no | 5 | How much evolutions you want to get back | | total.all | no | \[]\["client\_code"] | total queries per distinct scales (optional) | | total.x | no | \["client\_code"] | Total queries for a specific attribute | | order | no | \{ "date":"asc"} | order query output (asc or desc, asc by default) | | table\_name | no | "prim\_vehicles" | Force to query in a specific table | | database\_name | no | "data\_prim""data\_mart" | Force to query in a specific layer | **Sample query, request body** ```json { "data": { "fields": { "a": ["sum"], "b": ["sum", "avg"] }, "skip": 10, "limit": 10 }, "filter": { "h": { "between": ["1420066800,1428962399"] }, "c": { "in": [1, 2, 3] }, "g": { "eq": [1] }, "x": { "is_null": [] } }, "scale": { "fields": ["d", ["e", "f"]] }, "evol": { "scale": "year", "mode": "date", "depth": 5 }, "total": { "all": [], "x": ["d"] }, "order": { //order module to order query output (asc or desc, asc by default) "c": "asc" }, "table_name": "TABLE_NAME" //force table_name for the query } ``` **Sample query, response** | Code | Description | | ---- | :---------- | | 200 | JSON object | ```json { "success": true, "timestamp": 1435936140, "duration": 0.09, "error": null, "warning": null, "query_params": {…}, //recap of the executed query "results": [ //results of the query { "data": { "a": { "sum": [ { "month": 1, "team": "Team Rocket", "value": 10300 }, { "month ": null, "team": null, "value": null } ] }1 }, "scales": { "month_date_fact": 1, "team": "Team Rocket" } } ], "total": { //results for each total provided by the query "all": [{…}] } } ``` *** ## Dataset endpoint :::warning This feature is from the legacy Query Builder and will soon be deprecated. Please check out the [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md) and [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) instead. ::: **Description** - Returns the dataset from the Query Builder. **Endpoint** - GET /qb/dataset **Responses** | Code | Description | | ---- | :---------- | | 200 | JSON object | ```json { "success": true, "timestamp": 1435934914, "duration": 0.002, "data": { //list of available data and the compute mode "a": { "computes": ["sum"], "default": "sum" } }, "compute_mods": [ //list of available compute mode … ], "orders": [ //list of available fields for sorting queries … ], "filters": [ //list of available fields for filtering queries … ], "scales": [ //list of available fields for grouping queries … ], "evol": [ //list of available evolution mode … ], "dictionnary": { //The data dictionary for reporting … } } ``` --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb-data.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # 'Data' query parameter :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: This parameter is used to select and display the desired data. It is possible to apply on each attribute simlple functions such as the average, the count, the distinct count, the max, the min, the select, the distinct select and the sum. *** ## Select The _select_ function simply displays the value of the selected attribute. It will select the first value of the list if several values are returned. Let's assume we first want to display the date and amount attributes. In the interface click on the right fields and choose the function _select_. The corresponding JSON is: ```json ... "data": { "fields": { "date": [ "select" ], "amount": [ "select" ] } } ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-select.png) You can add as many fields as you want as long as they exist in the same table, otherwise the query builder (QB) returns an error. The list of field available in the interface is automatically filtered to only display the other available attributes. > For more fine grain control, note that you have the possibility to hardcode the table from to recover the data using the attribute "table\_name". This can come in handy when certain attribute names (such as "date") are common to a large number of tables. However, this is not a good practice as the Query Builder is designed to fetch the data with the optimal path in order to reduce runtime. *** ## Avg The _average_ function is used to calculate the average of an attribute. For instance in our case, let's assume we are trying to return the average reported revenue amount overtime: ```json ... "data": { "fields": { "amount": [ "avg" ] } }, ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-avg.png) :::warning Beware, depending on the granularity of your table, the average operation can have different meanings, because it operates an average of the "amount" attribute by giving each line the same weight. We therefore recommend using averages, ratios, etc. via virtual attributes so that you can control the weight (average per order, per customer, per day, per month, etc.). ::: *** ## Count The _count_ function is used to count the number of occurrences returned by the query. For instance, in our case, let's assume we try to count the number of lines present in our table. The corresponding JSON is: ```json ... "data": { "fields": { "date": [ "count" ] } } ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-count.png) *** ## Count Distinct The _count distinct_ function is used to count the unique different values of an attribute. For instance, in our case, let's assume we try to count the unique number of month present in our table. The corresponding JSON is: ```json ... "data": { "fields": { "month": [ "count_distinct" ] } } ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-count-distinct.png) *** ## Min and Max The _min and max_ functions are used to display the minimum and maximum values of an attribute. For instance, in our case, let's assume we are looking for the minimum and maximum date in the table. The corresponding JSON is: ```json ... "data": { "fields": { "date": [ "min", "max" ] } } ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-min-max.png) *** ## Select Distinct The _select\_distinct_ functions are used to display the unique different values of an attribute. For instance, in our case, let's assume we are trying to display every month that recorded revenue for the company. The corresponding JSON is: ```json ... "data": { "fields": { "month": [ "select_distinct" ] } } ... ``` :::warning We recommend to use the _scale_ parameter (GROUP BY equivalent in SQL) that we will see in another article to perform similar requests. ::: *** ## Sum The _sum_ function is used to calculate the total value of an attribute. For instance, in our case, let's assume we are trying to get the total turnover. The corresponding JSON is: ```json ... "data": { "fields": { "amount": [ "sum" ] } } ... ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-data-sum.png) *** [Learn more about the 'scale' parameter](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-scale.md) --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb-scale.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # 'Scale' query parameter :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: Many **query parameters can be fine tuned using sub-parameters**. In this article we will see the main usage of the _scale_ parameter and then explore how to leverage the 'scales' using the _axis_ sub-parameter. *** ## Using the 'scale' parameter This parameter is used to regroup the values of an attribute ("measure") according to another attribute ("dimension"). For instance displaying the revenue amount per month or the revenue amount per store. You can simply add as much scale as possible by adding attributes in the scale parameters. Let's assume that we are trying to calculate the total revenue per month. The corresponding JSON is: ```json { "data": { "fields": { "amount": [ "sum" ] } }, "scale": { "fields": [ "month" ] }, "filter": {}, "order": {} } ``` > Note that the query will display one line per combination of unique values of the attributes used as scale, and therefore can rapidly increase the weight of the query's output value. Using 5 scales with each 5 different values, will yield 3125 combinations. *** ## Using the 'axis' sub-parameter When you make a query split on different dimensions, some graphics will not have the desired rendering. Let's take for example this query: ```json { "data": { "fields": { "ca": [ "sum" ] } }, "scale": { "fields": [ "date", "city" ] } } ``` From the "Editor" screen of your Query Builder, you'll get different renderings: ![editor](/images/legacy/technical/api-reference/qb/axis-editor-qb.png) The "Table" one looks good, but when you go to "Area": ![area](/images/legacy/technical/api-reference/qb/axis-area-qb.png) The chart creates a bar for each "city - date" combination, which is the default mode. This graph, and most of the default graphs provided by ForePaaS, offer a cutout via an "axis" system, allowing to cut out this rendering differently. Take the query again and add the field "scale.axis": ```json { "data": { "fields": { "ca": [ "sum" ] } }, "scale": { "fields": [ "date", "city" ], "axis":{ "x":["date"], "y":["city"] } } } ``` The "x" axis will always correspond to the default field. The "y" axis differs according to the type of graph and the library used, in the most common case, it will cut the data into separate series. This gives you a new rendering: ![axis](/images/legacy/technical/api-reference/qb/axis-qb.png) *** [Discover the 'filter' parameter](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-filter.md) --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb-filter.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # 'Filter' query parameter :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: This parameter is used to apply filters to the selected values that the query is expected to return. Filters are particularly useful to prevent nulls or unlabeled values to be displayed or taken into account. *** ## List of filter options Below is the list of all filter options available: - _in_ - Value contained in reference list. - _not\_in_ - Value not contained in reference list. - _between_ - Value is between 2 extrema. - _not\_between_ - Value is not between 2 extrema. - _equal_ - Value is equal to reference. - _not\_equal_ - Value is not equal to reference. - _like_ - Substring of value is contained in another reference value. - _not\_like_ - Substring of value is not contained in another reference value. - _is\_null_ - Value is null. - _is\_not\_null_ - Value is not null. - _gt_ (>) - Value is greater than a reference. - _gte_ (> =) - Value is greater than & equal to a reference value. - _lt_ (>) - Value is lower than a reference value. - _lte_ (\<=) - Value is lower than & equal to a reference value. *** ## Simple example Let's assume that we are now looking to display the turnover only on the month of January of the year 2018. ```json { "data": { "fields": { "amount": [ "sum" ] } }, "scale": { "fields": [] }, "filter": { "month": [ 1 ], "year": [ 2018 ] }, "order": {} } ``` > To apply filters on numerical values, just fill the JSON without the quotes. For non-numeric values, you will need to use "" around the value. For instance, "filter": \{"date": \["2018-01-01"]}. If we were looking to display the total revenue between 2 dates say February 1st and February 28th, we would simply use a between filter: ```json { "data": { "fields": { "amount": [ "sum" ], "month": [ "select" ], "year": [ "select" ] } }, "scale": { "fields": [] }, "filter": { "date": { "between": [ "2018-02-01", "2018-02-28" ] } }, "order": {} } ``` ![filter-preview](/images/legacy/technical/api-reference/qb/param-filter.png) *** [Discover all the other query parameters](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-others.md) --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb-others.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Discover all other query parameters :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: In this article we will review the remaining less used parameters used to build queries on ForePaaS. In particular we will cover: - _limit_ - Ability to limit the number of outputs of a query - _order_ - Ability to order the output of a query based on other attributes - _table\_name_ - Ability to set from which table is the data retrieved - _skip_ - Ability to skip a certain number of the first outputs of a query - _hints_ - Allows to display more metadata in the raw JSON query response - _total_ - Allows to compute subtotals when a sum is computed with several scales *** ## Limit Displaying large amount of information at once can freeze the browser as it uses all its live memory. We therefore often want to limit the number of rows that we returned by the query, you can do so by setting the _limit_ sub-parameter to the desired number. By default, the limit is set to 5000 in order to prevent any risks of overloading the web page that leverages the query. Note that this is not a maximum, you can override that condition with a higher number when setting the "limit" parameter to another value. Let's assume, we try to display 2 lines of the month of January. The corresponding JSON would be: ```json { "data": { "fields": { "date": [ "select" ], "amount": [ "select" ] }, "limit" : 2 }, "scale": { "fields": [] }, "filter": { "month": [ 1 ], "year": [ 2018 ] }, "order": {} } ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-limit.png) *** ## Order The results returned by the query may be ordered based on the order of values of one or more fields in ascending or descending order. To do that you need to add an _order_ parameter to the JSON configuration with the list of fields & their corresponding direction of which to order to the output. Assuming we are trying to order in ascending order the data of January. The corresponding JSON would be: ```json { "data": { "fields": { "amount": [ "select" ], "date": [ "select" ] , "month": [ "select" ] , "year": [ "select" ] } }, "scale": { "fields": [] }, "filter": { "month": [ 1 ], "year": [ 2018 ] }, "order": { "date" : "asc" } } ``` This will yield the following result: ![data-select](/images/legacy/technical/api-reference/qb/param-order.png) *** ## Table Name As mentioned in the _data_ parameter article, setting the _table\_name_ parameter will enforce the Query Builder to retrieve data from a specific table in the data model. For instance, assuming we were looking to confirm that the data requested by the Query Builder came from the "prim\_revenue" table, we would use the following JSON configuration: ```json { "data": { "fields": { "amount": [ "sum" ], "month": [ "select" ], "year": [ "select" ] } }, "scale": { "fields": [ "month" , "year" ] }, "filter": {}, "order": {}, "table_name":"prim_ca" } ``` *** ## Skip The _skip_ sub-parameter allows you to skip certain lines from the final outputted ones. For instance when the output is ordered in a certain manner, you want to remove the first 5 or the first 10 outputs. In this case, your JSON configuration would look like the following: ```json { "data": { "fields": { "date": [ "select" ], "amount": [ "select" ] }, "skip": 10 }, "scale": { "fields": [] }, "filter": {}, "order": {} } ``` *** ## Hints The _hints_ sub-parameter allows to have additional meta data in the JSON response from the Query Builder which provides the total number of lines that the request generates without taking into account the _skip_ and _limit_ parameters. You can add the _hints_ parameter as follow in the JSON configuration: ```json { "data": { "fields": { "date": [ "select" ], "amount": [ "select" ] }, "limit": 2, "skip": 5, "hints": true }, "scale": { "fields": [] }, "filter": {}, "order": {} } ``` To see the effect on the query output, you need to visualize directly the raw JSON format. To do saw, in the editing view of the query select the option "JSON" in the output display window: ![data-select](/images/legacy/technical/api-reference/qb/display-json.png) It will display the following result (we've collapsed the actual query output in the _results_ key which outputs the values as a table of JSON objects): ```json { "success": true, "cache": false, "timestamp": 1559896936, "duration": 0.11, "error": null, "warning": null, "hints": 13, "query_params": { "data": { "fields": { "date": [ "select" ], "amount": [ "select" ] }, "limit": 2, "skip": 5, "hints": true }, "scale": { "fields": [] }, "filter": {}, "order": {} }, "table_name": "prim_income", "results": [...] } ``` *** ## Total Let's assume we are calculating the sum of a measure called "mydata" with respect to 2 scales called "my\_scale1" and "my\_scale2". The query would look like the following: ``` ... "data": { "fields": { "mydata": ["SUM"] } }, "scale": { "fields": ["my_scale1","mys_cale2"] } ... ``` This query will generate the equivalent of the following SQL query: ``` SELECT SUM(mydata) FROM .... GROUP BY my_scale1, my_scale2 ``` And you will be able to easily use the output data to create a table such as below: | | my\_scale1 1 | my\_scale1 2 | | ------------ | ------------ | ------------ | | my\_scale2 1 | sum 1x1 | sum 1x2 | | my\_scale2 2 | sum 2x1 | sum 2x2 | Adding the total attribute in your query: ``` ... "data": { }, "scale": { }, "total": { "all": [], "x": [myscale1], "y": [myscale2] } ... ``` Will allow the following rendering: | X | my\_scale1 1 | my\_scale1 2 | total | | ------------ | ------------ | ------------ | ------- | | my\_scale2 1 | sum 1x1 | sum 1x2 | total.x | | my\_scale2 2 | sum 2x1 | sum 2x2 | total.x | | total | total.y | total.y | total | Which would actually require 4 distinct SQL queries: ``` SELECT SUM(mydata) FROM ... GROUP BY my_scale1, my_scale2 SELECT SUM(mydata) FROM ... SELECT SUM(mydata) FROM .... GROUP BY my_scale1 SELECT SUM(mydata) FROM .... GROUP BY my_scale2 ``` *** [You can even send your questions directly by clicking here 👨🏻‍💻](https://help.ovhcloud.com/csm/fr-home?id=csm_index) --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-qb-json-format.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # ForePaaS JSON query format :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: The ForePaaS JSON query format uses multiple parameters as input and output to describe a query and its results. The following articles document each individual query parameters, and illustrate their impact using a simple example of the revenue of a company. The available dataset is given as follows: ![problematique](/images/legacy/technical/api-reference/qb/dataset.png) [Reference: 'data' parameter](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-data.md) [Reference: 'scale' parameter](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-scale.md) [Reference: 'filter' parameter](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-filter.md) [Reference: other parameters](https://docs.dataplatform.ovh.net/legacy/api-reference-qb-others.md) *** ## Complete reference of parameters The JSON configuration for a query takes in the following parameters. | Parameter name | required | example | description | | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | data.fields | yes | \{ "income":\["sum"],"expense":\["sum"]} | Fields to return and their compute mode(s) (can be: select, select\_distinct, sum, min, max, avg, count, count\_distinct) | | data.skip | no | 10 | Number of rows to skip | | data.limit | no | 100 | Number of rows returned | | data.hints | no | true/false | Total number of lines corresponding to the query (omitting data.limit) | | filter | no | \{ "date": \{ "between": \["1420066800,1428962399"] }, "client\_code": \{ "in": \["08KD", "09CC"] }, "creation\_date": \{ "eq": \["2018-01-01"] }} | Apply filter(s) on the data to query. Filters can be: in, not\_in, between, not\_between, eq, not\_equal, like, not\_like, is\_null, is\_not\_null, gt (\>), gte (\>=), lt (\<), lte (\<=) | | scale.fields | no | \["date",\["client\_code", "employee\_id"]] | Apply scale (group by) to the query. It can be a computed scale, or more than 1 scale. | | evol.scale | no | "year" | scale to apply for evolution (weekday;week; month; quarter; semester; year) | | evol.mode | no | "date""weekday" | date : comparison with same dateweekday : comparison with respecting the same weekday. | | evol.depth | no | 5 | How much evolutions you want to get back | | total.all | no | \[]\["client\_code"] | total queries per distinct scales (optional) | | total.x | no | \["client\_code"] | Total queries for a specific attribute | | order | no | \{ "date":"asc"} | order query output (asc or desc, asc by default) | | table\_name | no | "prim\_vehicles" | Force to query in a specific table | | database\_name | no | "data\_prim""data\_mart" | Force to query in a specific layer | --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # API reference: Data Manager :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md). ::: When interacting with the Data Manager through the ForePaaS API, you have to use different endpoint patterns for different purposes. Below, you will find the reference for these patterns. - [Create a source](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#create-a-source) - [Add tables to a source](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#add-tables-to-a-source) - [Metas extraction](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#metas-extraction) - [Add virtual attributes](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#add-virtual-attributes) - [Save your table schema](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#save-your-table-schema) - [Build tables](https://docs.dataplatform.ovh.net/legacy/api-reference-data-manager.md#build-tables) *** ## Create a source Endpoint pattern: - **POST /datastores/db?token=xxxxx:** JSON Body example for a Dropbox source: ```json { "dbms": "dropbox", "parameters": { "path": "/folder/path", "token": "xxxxxxxxxx" }, "database_name": "dropbox_source", "dwhName": "your_dwh_name", "level_name": "source } ``` *** ## Add tables to a source Endpoint pattern: - **POST /metas/tables?dwh\_name=your\_dwh\_name\&token=xxxxx** JSON Body example to add a table to a Dropbox source: ````json { "table_name": "your_file.csv", "database_name": "dropbox_source" } ``` You can also add several tables in one shot: ```json [{ table_name": "file1.csv", "database_name": "dropbox_source" }, { "table_name": "file2.csv", "database_name": "dropbox_source" }] ```` *** ## Metas extraction Endpoint pattern: - **PUT /metas/sources/extract/source\_name/table/table\_name?dwhName=dwh\_name\&token=xxxxxxx** If you need to extract metas from a file1.csv file from a Dropbox source, you need to search: _/metas/sources/extract/dropbox\_source/file1.csv_ This _call_ accepts settings like: - sample: to extract metas on a data sample, not all (set it up on "true") - sample\_max\_lines: if the sample is set up on "true", use it to set up the max number of lines you want for the sample - flashzone: set up the option as "true" to have an overview of the file / table data on your DataPlant *** ## Add virtual attributes Endpoint pattern: - **POST /attributes/\?token=xxxxxxx** Here is an example of a JSON Body: ```json { "attribute_name": "my_attribute", "parameters": {}, "is_dimension": false, "is_virtual": true, "is_summable": true, "sql": "SELECT COUNT(id) FROM clients.csv", "is_measure": true } ``` *** ## Save your table schema Endpoint pattern: - **POST /logical/object?dwhName=dwh\_name\&token=xxxxxx** Here is an example of a JSON Body: ```json [ { "attributes":[ { "attribute_name":"conso_id", "is_dimension":true, "sources":[ { "rules":[ ], "attributes":[ "dropbox/consomations.csv/conso_id" ] } ], "is_summable":false, "attribute_path":null, "fpui":{ "operation":"mapping" }, "type":{ "main":"num", "sub":"smallint" }, "is_measure":false }, { "attribute_name":"ca", "database_name":"data_prim", "is_dimension":false, "sources":[ { "rules":[ ], "attributes":[ "dropbox /consomations.csv/ca" ] } ], "is_summable":false, "table_name":"consomations", "fpui":{ "operation":"mapping" }, "type":{ "max":999.99, "main":"num", "precision":2, "min":0.02 }, "attribute_path":null, "is_measure":true } ], "object_name":"consomations", "display_name":"consomations", "object_type":"measure", "to_materialize":true, "measure_date_field":"date", "key":[ "conso_id" ], "date_type":false, "relations":[ ], "indexes":[ ] } ] ``` *** ## Build tables Below, are the endpoints that have to be executed to build your tables. Build logical structure of a Data Prim: - **PUT /logical/build/prim?dwhName=dwh\_name\&token=xxxxxx** Build logical structure of a Data Mart: - **PUT /logical/build/prim?dwhName=dwh\_name\&token=xxxxxx** Build physical structure: - **PUT /datastores/db/physical?token=xxxxx** Here is a JSON Body example: ```json { "levelsToBuild": "["data_prim"]", "dwhName": "plw1uzhy_jm224kp5" } ``` --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # API Reference: Buckets :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Data Platform APIs](https://docs.dataplatform.ovh.net/landing-page-developers-apis.md). ::: The ForePaaS Buckets are fully compatible with **AWS S3** client. To interact with them, you will need to [generate an API key and Secret key in your Identity Access Manager](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md) from a **ForePaaS Directory** account. - [Using AWS CLI](https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md#using-aws-cli) - [Using Rclone](https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md#using-rclone) - [Using NodeJS](https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md#using-nodejs) - [Using Python](https://docs.dataplatform.ovh.net/legacy/api-reference-datastore.md#using-python) *** ## Using AWS CLI > In the base URLs in the code snippets below, you will need to replace `my-dataplant` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain). 1. Install the AWS CLI client from [https://aws.amazon.com/cli/](https://aws.amazon.com/cli/) 2. Configure the AWS CLI, it is suggested to use [named profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html). ```bash $ aws configure --profile mydataplant AWS Access Key ID [None]: your_access_key AWS Secret Access Key [None]: your_secret_key Default region name [None]: forepaas Default output format [None]: ``` 1. Enable _AWS Signature Version 4_ for MinIO server. ```bash aws configure set s3.signature_version s3v4 --profile mydataplant ``` 1. A few command examples (replacing `my-dataplant` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain)): ```bash # list your buckets aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 ls # list contents inside bucket aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 ls s3://mybucket # make a bucket aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 mb s3://mybucket # add an object to a bucket aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 cp my-file.csv s3://mybucket # delete an object from a bucket aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 rm s3://mybucket/my-file.csv # remove a bucket aws --profile mydataplant --endpoint-url https://my-dataplant.forepaas.io/datastore s3 rb s3://mybucket ``` > To manage entrypoint URL inside a named profile, you may look at this documentation page: [configure entry point URL per profile](https://github.com/wbingli/awscli-plugin-endpoint). *** ## Using Rclone > In the base URLs in the code snippets below, you will need to replace `my-dataplant` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain). 1. Install [rclone](https://rclone.org/) from [https://rclone.org/downloads/](https://rclone.org/downloads/) 2. Configure rclone (replacing `my-dataplant` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain)). ```bash rclone config create my-dataplant s3 provider Minio region forepaas env_auth false rclone config update my-dataplant endpoint https://my-dataplant.forepaas.io/datastore rclone config update my-dataplant access_key_id YOUR_ACCESS_KEY rclone config update my-dataplant secret_access_key YOUR_SECRET_KEY ``` 1. Check rclone's config file location if needed ```bash rclone config file ``` 1. Check your configuration ```bash rclone config show my-dataplant [my-dataplant] type = s3 provider = Minio region = forepaas env_auth = false endpoint = https://my-datplant.forepaas.io/datastore access_key_id = YOUR_ACCESS_KEY secret_access_key = YOUR_SECRET_KEY ``` 1. Some simple commands (please refer to rclone documentation for more details): ```bash # listing buckets rclone lsd my-dataplant: # create a bucket rclone mkdir my-dataplant:test-rclone # generate a local docs for test purpuse rclone gendocs docs # copy ./docs/ to test-rclone rclone copy docs my-dataplant:test-rclone/docs # what is the size of a bucket or a path ? rclone size my-dataplant:test-rclone Total objects: 69 Total size: 239.570 kBytes (245320 Bytes) # displays a tree rclone tree my-dataplant:test-rclone # move files in bucket rclone move my-dataplant:test-rclone/docs/commands my-dataplant:test-rclone/commands # syncing source to destination rclone sync --dry-run docs my-dataplant:test-rclone/docs # listing files in a human redable way rclone lsl my-dataplant:test-rclone # listing files with format options rclone lsf --format "tsp" --recursive my-dataplant:test-rclone # deleting files greater than 1k rclone --min-size 1k lsl my-dataplant:test-rclone/commands rclone --dry-run --min-size 1k delete my-dataplant:test-rclone/commands rclone --min-size 1k delete my-dataplant:test-rclone/commands # copy files in ./commands rclone copy my-dataplant:test-rclone/commands commands # delete an entire path rclone delete my-dataplant:test-rclone/commands/ ``` *** ## Using NodeJS > In the base URLs in the code snippets below, you will need to replace `[DATAPLANT_NAME]` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain). ```sh # Add aws-sdk to your application with the following command yarn add aws-sdk # Or npm i -s aws-sdk ``` ```js const AWS = require('aws-sdk') const fs = require('fs') // Modify those values for your environment let accessKey = '[ACCESS_KEY]' let secretKey = '[SECRET_KEY]' let endpoint = 'https://[DATAPLANT_NAME].eu.dataplatform.ovh.net' let bucket = '[BUCKET_NAME]' let region = 'forepaas' // Constructs a service object. This object has one method for each API operation. const dataStoreClient = new AWS.S3({ accessKeyId: accessKey, secretAccessKey: secretKey, endpoint: `${endpoint}/datastore`, region: region, signatureVersion: 'v4', s3ForcePathStyle: true }) //////////////////////////////// // Adds an object to a bucket // //////////////////////////////// let uploadStream = fs.createReadStream('./file.csv') dataStoreClient.putObject({ Bucket: bucket, Key: 'file.csv', Body: uploadStream }, (err) => { if (err) console.error(err) else console.info('File uploaded') }) ///////////////////////////////////// // Retrieves objects from a bucket // ///////////////////////////////////// let downloadStream = fs.createWriteStream('./file_downloaded.csv') dataStoreClient.getObject({ Bucket: bucket, Key: 'file.csv' }) .createReadStream() .on('error', (err) => { console.error(err) }) .pipe(downloadStream) .on('close', () => { console.info('File downloaded') }) ///////////////////////////////////// // Returns some or all (up to 1000) of the objects in a bucket. ///////////////////////////////////// dataStoreClient.listObjects({ Bucket: bucket }, (err, data) => { if (data && data.Contents) { data.Contents.forEach(file => { console.info(`${file.Key} (${file.Size} bytes)`) }) } }) ``` *** ## Using Python > In the base URLs in the code snippets below, you will need to replace `[DATAPLANT_NAME]` with your [Project's subdomain](https://docs.dataplatform.ovh.net/manage-projects-config-variables.md#project-subdomain). ```sh # Install boto3 with the following command: pip install boto3 ``` ```python import boto3 from botocore.client import Config # Modify those values for your environment dataplant_url = 'https://[DATAPLANT_NAME].eu.dataplatform.ovh.net' access_key = '[ACCESS_KEY]' secret_key = '[SECRET_KEY]' bucket = '[BUCKET_NAME]' region = 'forepaas' # Constructs a service object. This object has one method for each API operation. datastore = boto3.client( 's3', endpoint_url='{dataplant}/datastore'.format(dataplant=dataplant_url), aws_access_key_id=access_key, aws_secret_access_key=secret_key, config=Config(signature_version='s3v4'), region_name=region ) # Adds an object to a bucket datastore.upload_file( Bucket=bucket, Filename='./file.csv', Key='file.csv') # Retrieves objects from a bucket datastore.download_file( Bucket=bucket, Filename='./file_downloaded.csv', Key='file.csv') # Returns some or all (up to 1000) of the objects in a bucket. # You can use the request parameters as selection criteria to return a subset of the objects in a bucket. if datastore.list_objects(Bucket=bucket): for file in datastore.list_objects(Bucket=bucket)['Contents']: print('{name} ({size} bytes)'.format(name=file['Key'], size=file['Size'])) ``` --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-iam.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # API Reference: Identity Access Manager :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the current IAM API reference](https://docs.dataplatform.ovh.net/developers-api-authentication.md). ::: This page contains the API reference for the [Identity Access Manager (IAM)](https://docs.dataplatform.ovh.net/landing-page-iam.md). IAM APIs will always look like this: ``` https://`%dataplant_url%/iam ``` - [Login endpoint](https://docs.dataplatform.ovh.net/legacy/api-reference-iam.md#login-endpoint) - [Logout endpoint](https://docs.dataplatform.ovh.net/legacy/api-reference-iam.md#logout-endpoint) *** ## Login endpoint ### Using a login/password method This authentication mode allows you to [connect with a login and password](https://docs.dataplatform.ovh.net/iam-auth-providers.md#project) defined in your [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md). Example request : ``` curl -X POST \ https://mydataplant.eu.dataplatform.ovh.net/iam/login \ -H 'Content-Type: application/json' \ -d '{ "login":"LOGIN", "password":"****", "app_id":"APPID", "auth_mode":"forepaas_id_resource_owner" }' ``` Example response : ```json { "uid": "John Doe", // The unique id of the logged-in user "user": "M. John Doe", // The full name of the logged-in user "firstname": "John", // The first name of the logged-in user "lastname": "Doe", // The last name of the logged-in user "civility": "M. ", // The civility of the logged-in user "login": "john.doe", // The login of the logged-in user "password_renew": false, // flag to know if the has to change his password "password_expiration": "2020-02-28T17:17:10.274Z ", // password expiration date "token": "f54e34a56b897" } ``` | | | | | :--------- | :----: | ----------------------------------------------------------------------------------------: | | login | String | The login of the user, as received in the registration email. | | password | String | The password of the user, as received in the registration email. | | app\_id | String | The application identifier (set to 'forepaas' to login to the project's IAM in general) | | auth\_mode | String | The authentication mode to used. The value must be set to “forepaas\_id\_resource\_owner” | ### API Key Credentials This authentication mode allows you to [connect with an API and secret key](https://docs.dataplatform.ovh.net/tutorials-generate-api-keys.md) defined in your [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md). Example request: ``` curl -X POST \ https://mydataplant.eu.dataplatform.ovh.net/iam/login \ -H 'Content-Type: application/json' \ -d '{ "apikey":"APIKEY", "secretkey":"****", "app_id":"APPID", "auth_mode":"apikey" }' ``` Example response: ```json { "uid": "John Doe", // The unique id of the logged-in user "user": "M. John Doe", // The full name of the logged-in user "firstname": "John", // The first name of the logged-in user "lastname": "Doe", // The last name of the logged-in user "civility": "M. ", // The civility of the logged-in user "login": "john.doe", // The login of the logged-in user "password_renew": false, // flag to know if the has to change his password "password_expiration": "2020-02-28T17:17:10.274Z ", // password expiration date "token": "f54e34a56b897" } ``` | | | | | :--------- | :-------------------: | --------------------------------------------------------------------------------------: | | apikey | String \[A-Za-z0- 9-] | The api key provided by the new device registration. | | secretkey | String \[A-Za-z0- 9-] | The secret key provided by the new device registration. | | app\_id | String | The application identifier (set to 'forepaas' to login to the project's IAM in general) | | auth\_mode | String | The authentication mode to used. The value must be set to “apikey” | *** ## Logout endpoint In order to delete a token, you can call the logout endpoint. Example request: ``` curl -X DELETE \ https://mydataplant.eu.dataplatform.ovh.net/iam/logout?app_id=*****&token=***** \ -H 'Content-Type: application/json' ``` Example response: ```json { "success": true, "status": 200, "duration": 0.02 } ``` --- url: https://docs.dataplatform.ovh.net/legacy/api-reference-store.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # ForePaaS Store API Reference :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the current documentation](https://docs.dataplatform.ovh.net/landing-page-services.md). ::: The [ForePaaS Store](https://docs.dataplatform.ovh.net/legacy/project-marketplace.md) is the collaborative space on the platform where each organization's member can create, share, and/or access code templates and packages. Each marketplace (application templates, API extensions, etc..) has [its own endpoints](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#list-of-all-store-apis). They all start with: ``` https://store.forepaas.io/ ``` After getting an authorization token, **creating a package in the store is done in 2 steps**: 1. create the package in the correct marketplace 2. upload a ZIP file containing the code for the first version The same API endpoints are used to update package information and version. - [Getting an authorization token](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#getting-an-authorization-token) - [Create or update a package](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#create-or-update-a-package) - [Add a version to your package](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#add-a-version-to-your-package) - [Get package information](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#get-package-information) - [Get package version](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#get-package-version) - [List of all store APIs](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#list-of-all-store-apis) - [Application templates](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#application-templates) - [API templates](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#api-templates) - [Tips and Troubleshooting](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#tips-and-troubleshooting) :::warning Currently, only **Application templates** and **API Templates** are fully supported. ::: *** ## Getting an authorization token For each call referenced below, you will need an **authorization token**. !> You must have a [ForePaaS account](https://docs.dataplatform.ovh.net/manage-organizations-profile.md), and be part of at least one [organization](https://docs.dataplatform.ovh.net/manage-organizations.md) to be able to upload packages and version. To get an authorization token, 1. Open the ForePaaS Platform and open a Project 2. Open the **browser console** (_Ctrl + Shift + C_ on Google Chrome) 3. From the App's panel, choose **+** to open the new application dialog box 4. In the browser's console, go to **Network tab** and filter for _store.forepaas.io_ 5. There should be one GET for `https://store.forepaas.io/v1` 6. Right click and **Copy as cURL**, that contains Authorization token and will serve as basis for next Store API calls. ![token](/images/legacy/technical/api-reference/store/p-store-token.png) *** ## Create or update a package Create/update a package in your **private store**, meaning only the members of your [organization](https://docs.dataplatform.ovh.net/manage-organizations.md) will be able to see it. > It is currently impossible to upload a package to the public store. The following reference shows how to upload a package for the _App templates_. See [below](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#list-of-all-store-apis) the list of all APIs for other marketplaces. **Example request** ```bash curl 'https://store.forepaas.io/v1/packages/app/templates/my-app' \ -X 'PUT' \ -H 'authority: store.forepaas.io' \ -H 'accept: application/json, text/plain, */*' \ -H 'content-type: application/json;charset=UTF-8' \ -H 'origin: https://store.forepaas.io' \ -H 'Authorization: Bearer ' \ --data-raw '{ "name":"My App", "owner":"", "category":"My package", "i18n":{ "fr":{ "name": "name fr", "description": "desc fr", "long_description": "long desc fr" }, "en":{ "name": "name en", "description": "desc en", "long_description": "long desc en" }, "jp":{ "name": "name jp", "description": "desc jp", "long_description": "long desc jp" } }, "image":"", "preview":[, , ...] }' \ --compressed ``` **Example response** ```json { "status": 200, "message": "Package updated with success", "id": ":my-app", "package": { "image": "", "preview": [], "name": "My App", "i18n": { "fr": { "name": "name fr", "description": "desc fr", "long_description": "long desc fr" }, "en": { "name": "name en", "description": "desc en", "long_description": "long desc en" }, "jp": { "name": "name jp", "description": "desc jp", "long_description": "long desc jp" } }, "owner": "", "category": [ "My package" ], "type": "modules", "id": ":my-package", "versions": [], "downloaded": 0 } } ``` :::warning Make sure to update _YOUR\_AUTH\_TOKEN_ with the [token value retrieved above](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#getting-authorization-token). ::: | | | | | ---------: | :------: | :------------------------------------------------------------------------------------------------------------------------------------------------- | | _name_ | `String` | Technical name of your package | | _owner_ | `String` | ID of your organization. This package will only be available by Project of that organization | | _category_ | `String` | Category of the package | | _i18n_ | `Object` | Display and translations for your package. You can add 3 fields (_name_, _description_ and _long\_description_) in French, English and/or Japanese | | _image_ | `String` | Image of your package. It has to be in base 64 | | _preview_ | `Array` | Preview images of your package. It has to be in base 64 | *** ## Add a version to your package Add a version of your package with a _.zip_ file **Example request** ```bash curl 'https://store.forepaas.io/v1/packages/app/templates/:my-app/' \ -X 'PUT' \ -H 'authority: store.forepaas.io' \ -H 'accept: application/json, text/plain, */*' \ -H 'content-type: application/zip' \ -H 'origin: https://store.forepaas.io' \ -H 'Authorization: Bearer ' \ --compressed --data-binary "@" ``` **Example response** ```json { "success": true, "status": 200, "duration": 0.02 } ``` :::warning Make sure to update _YOUR\_AUTH\_TOKEN_ with the [token value retrieved above](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md#getting-authorization-token). ::: *** ## Get package information This endpoint allows to check current information for a given package. ```bash curl 'https://store.forepaas.io/v1/packages/app/templates/:my-app' \ -X 'GET' \ -H 'authority: store.forepaas.io' \ -H 'accept: application/json, text/plain, */*' \ -H 'origin: https://store.forepaas.io' \ -H 'Authorization: Bearer ' ``` *** ## Get package version This endpoint allows to download a given package version. ```bash curl 'https://store.forepaas.io/v1/packages/app/templates/:my-app/' \ -X 'GET' \ -H 'authority: store.forepaas.io' \ -H 'origin: https://store.forepaas.io' \ -H 'Authorization: Bearer ' \ --output my-app_1.0.0.zip ``` *** ## List of all store APIs ### Application templates The API for [application templates](https://docs.dataplatform.ovh.net/landing-page-app-services-apps.md#create-an-application) is: ``` https://store.forepaas.io/v1/packages/app/templates/ ``` ### API templates The API for [API templates](https://docs.dataplatform.ovh.net/app-services-apis-deploy.md) is: ``` https://store.forepaas.io/v1/packages/api/templates/ ``` *** *** ## Tips and Troubleshooting - when package is hosted in a Git repository, keep the JSON describing the package as a dedicated source file. - make sure the `` is a usual version number such as `1.0.0` for instance.\ By default, ForePaaS Store will deliver latest version based on version ordering. - make sure that ZIP file contains only source files and not intermediate code or Git folders (such as `.git` or `node_modules` for instance) - make sure the ZIP file meets package expectation.\ For instance, in App's template, a common mistake is to have a _root folder_ inside the ZIP file rather than the contents at the root of the ZIP archive. **Good ZIP archive** ``` . |-- config |-- forepaas |-- public |-- scripts `-- src ``` **Baz ZIP archive** ``` my-app |-- config |-- forepaas |-- node_modules |-- public |-- scripts `-- src ``` ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/project-marketplace.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # ForePaaS Store :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the connector catalog](https://docs.dataplatform.ovh.net/landing-page-connectors.md). ::: The platform has been designed so that each user can create, share, and/or access pieces of work through the ForePaaS Store, at each step of the data production chain: - **[Collect](#connectors-marketplace)** : to easily connect your data sources - **[Transform](#dpe-marketplace)** : to work on pre-built ETL actions - **[Data Science](#machine-learning-marketplace)** : to leverage artificial intelligence algorithms - **[Expose](#api-and-app-marketplace)** : to integrate widgets and dashboards templates The ForePaaS Store gathers dozens of tools, models, templates, etc. allowing you to save time when creating analytics and AI applications. *** ## Connectors Marketplace Within the Connectors, the ForePaaS Store lets you collect in a few clicks any type of data, from any source. ![Marketplace\_Data Manager](/images/legacy/product/project/marketplace_dc.jpg) [Learn more about connectors](https://docs.dataplatform.ovh.net/landing-page-connectors.md) *** ## DPE Marketplace Inside the Data Processing Engine, the ForePaaS Store grants you access to 10+ pre-configured actions to let you transform your data in the most efficient way. Pick the action you need (aggregate, load, delete...) or create a custom action. ![Marketplace\_ETL](/images/legacy/product/project/marketplace_dpe.jpg) [Learn more about Data Processing Engine actions](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md) *** ## Machine Learning Marketplace ForePaaS lets you integrate all components of an AI solution, whether it is entirely pre-trained models or specific parts of an ML pipeline such as an estimator or a score. ![Marketplace\_ETL](/images/legacy/product/project/marketplace_ml.jpg) [Learn more about the Machine Learning Manager](https://docs.dataplatform.ovh.net/legacy/ml.md) *** ## API and APP Marketplace You can create your own templates and share them within an organization or with other ForePaaS users. Easily build your API with our standard NodeJS API template. ![Marketplace\_API](/images/legacy/product/project/marketplace_api.jpg) [Learn more about API creation](https://docs.dataplatform.ovh.net/app-services-apis-deploy.md) In the App Manager, create an analytical dashboard from scratch with our React templates. ![Marketplace\_APP](/images/legacy/product/project/marketplace_app.jpg) Finally, the extensions Marketplace allow you to enrich your apps and APIs with new features. [Learn more about APP creation](https://docs.dataplatform.ovh.net/landing-page-app-services-apps.md) --- url: https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Version 3.0 Changes (2022-01-11) :::warning This page describes the **ForePaaS Legacy Platform**, which no longer accepts new signups. If you are using OVHcloud Data Platform, see [the Analytics Manager documentation](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md). ::: The [Analytics Manager](https://docs.dataplatform.ovh.net/landing-page-analytics-manager.md) is the name of version 3 of the Query Builder on the Platform. This page lists all significant changes. - [1. Dataset tab](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md#_1-dataset-tab) - [2. New queries](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md#_2-new-queries) - [3. What happens to my existing queries?](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md#_3-what-happens-to-my-existing-queries) - [4. Versioning of queries](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md#_4-versioning-of-queries) - [5. Query engines](https://docs.dataplatform.ovh.net/legacy/am-v3-changes.md#_5-query-engines) *** ## 1. Dataset tab The dataset tab from the classic Query Builder no longer exists in the Analytics Manager. All the information about tables names and number of rows are now found in the **[tables](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md) page of the [Data Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md)**. *** ## 2. New queries In the Analytics Manager, it is possible to create and run queries in any of two ways: - Using a [visual point-and-click builder](https://docs.dataplatform.ovh.net/analytics-manager-queries-visual-builder.md): the interface has been revamped for a much more comfortable use, namely the addition of an Order section to sort your results! - Using [SQL](https://docs.dataplatform.ovh.net/analytics-manager-queries-sql-editor.md): new, directly query your tables in SQL! *** ## 3. What happens to my existing queries? Queries that were created in the classic Query Builder will be migrated to the new Analytics Manager, into the [queries](https://docs.dataplatform.ovh.net/analytics-manager-queries.md) tab. If applicable, they will still be linked to your [apps](https://docs.dataplatform.ovh.net/landing-page-app-services-apps.md) through the same _request\_id_, without needing to change anything. Please note that the new Analytics Manager interface **doesn’t allow** for editing advanced JSON parameters anymore. As such, [such advanced options](https://docs.dataplatform.ovh.net/analytics-manager-queries.md) that were added in your queries in the classic Query Builder will not be editable in the new Analytics Manager. However, the migrated queries will still be saved with them and as such will **return the same result** as in the classic Query Builder upon execution. *** ## 4. Versioning of queries Queries are now versioned at the [repository](https://docs.dataplatform.ovh.net/analytics-manager-queries.md#versioning-queries) level, instead of at the query level like in the classic Query Builder. Use the **the platform versioning system** to manage production and development frameworks, and work on your analytics without breaking your deployed applications. *** ## 5. Query engines It is now possible to activate a [query engine](https://docs.dataplatform.ovh.net/analytics-manager-resources.md) in the Analytics Manager. Query engines allow you to **scale your queries both vertically and horizontally**, especially for Big Data analytics, and give you access to unique new features: SQL querying, query history, query execution metrics, fine-grained data access control (_coming soon!_), and more. ## Go further If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/en-gb/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/legacy/release-notes-before-ga.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Release notes before GA :::warning Releases from before general availability, kept for reference and no longer maintained. Every release since GA is on the [current release notes](https://docs.dataplatform.ovh.net/release-notes.md). ::: ## Feb 29th 2024 ### Platform - Several bug fixes and improvements *** ## Feb 22nd 2024 ### Platform - Several bug fixes and improvements *** ## Feb 15th 2024 ### Platform - Several bug fixes and improvements *** ## Feb 8th 2024 ### Platform - Several bug fixes and improvements *** ## Feb 1st 2024 ### Platform - Updated ForePaaS logos to OVHcloud logo ### Analytics Manager - Fixed history metrics not being returned correctly *** ## Jan 25th 2024 ### Data Processing Engine - Removed logs that are not formatted correctly *** ## Jan 18th 2024 ### Analytics Manager - Fixed queries, APIs and applications returning an error when trying to query data from standard Lakehouse Manager datasets. ### AI App Builder - Removed repeated column in Knowledge Bases list - Visual fixes and improvements ### Storage Engines - Sorted storage engines list in alphabetical order - Added a 'Location' filter for interface - Updated 'Engine' filter to filter the interface on the type of engine ### Platform - Updated Profile & Profile > Security pages to be in auto-save mode *** ## Jan 11th 2024 ### Lakehouse Manager - Removed check on last dataset preventing to delete it - Added warning message when trying to delete a dataset used in Machine Learning Manager ### Support Portal - Fixed 'Open in a new tab' option not being available for support cases - Fixed direct URL opening of a support case redirecting to the portal home *** ## Dec 28th 2023 ### Platform - Several bug fixes and improvements *** ## Dec 21th 2023 ### Lakehouse Manager - Fixed query estimator still appearing when failed - Fixed display of type in datasets list - Fixed bugs on the import and export of configurations ### AI App Builder - Added redirection link to linked app from assistant interface - Updated possible options from the home of the project ### Identity Access Manager - Fixed appearance of MFA feature *** ## Dec 14th 2023 ### Lakehouse Manager - Updated 'Associated resources' table in policy tag page to show attributes' table - Added sections in sidebar of Lakehouse ### Platform - Added template for AI App Builder *** ## Dec 8th 2023 ### Lakehouse Manager - Fixed name and type of datasets sometimes not displaying correctly ### Platform - Added confirmation modal before stopping a running job - Fixed tile sometimes being blank after adding service in project *** ## Nov 30th 2023 ### Platform - Fixed sidebar links not working when there is no project in organization ### Data Processing Engine - Improved Aggregate action to support manual adding of GROUP BY *** ## Nov 23rd 2023 ### Identity Access Manager - Added OVH logo for emails. - Bugfixed login without authentication provider except ovh. ### Data Processing Engine - Added message block when creating pyspark action from action. ### Lakehouse Manager - Fixed search in groups/users when adding policy tags. - Fixed display of policy tags in table / tree view. *** ## Nov 16nd 2023 ### Lakehouse Manager - Added interface to grant access to policy tags directly from Lakehouse Manager - Fixed queries running automatically when opening Explorer - Fixed attributes being duplicated twice when duplicating a table - Multiple bug fixes and improvements related to the build status of tables ### Data Processing Engine - Python 3.6 is now decommissioned. All actions and workflows have been migrated to the next available version. - Added option to create a PySpark action when a Python Load/Aggregate action is detected to insert data in a Lakehouse Manager dataset. *** ## Nov 9nd 2023 ### Lakehouse Manager - Multiple bug fixes and performance improvements ### Analytics Manager - Fixed a bug where it was impossible for a new user to login to the deployed-live dashboard URL - Added a confirmation modal before deactivating a query engine ### Platform - Updated password validation rules in the profile *** ## Nov 2nd 2023 ### Storage Engines - Reworked pages for _Storage Engines_ service in the interface: _Storage Engines_ can now be opened as a standalone service from either the main sidebar or the services list. ### Lakehouse Manager - Fixed file size ordering not working in Buckets - Multiple bug fixes and improvements to Datasets and Tables ### Analytics Manager - Added a link to the query when an error occurred in a dashboard ### Identity Access Manager - Fixed a bug when logging-in using login/password would not not work *** ## Oct 26th 2023 ### Platform - Added link to projects' templates' store in the services list - Added locked visual in sidebar and header if no permission to header - Removed some unused permissions in organization IAM - Improved error message when reseting password ### Data Manager - Data Manager service has been split in **Data Catalog** and **Lakehouse Manager**. - Data Manager graphical interface is depreciated ### Lakehouse Manager - Introducing Lakehouse Manager! - Lakehouse Manager is a serverless data warehouse to store and organize any dataset - You can now create custom datasets - You can now create policy tags for Advanced Data Access Control ### Data Catalog - Introducing Data Catalog! - Data Catalog allows you to define connections and data assets across your organization ### Data Processing Engine - Added a new action: _CSV to PostgreSQL_ ### Identity Access Manager - Removed incorrect display of 'Log History' feature for DataplantID and API key authentication methods *** ## Oct 19th 2023 ### Platform - Multiple bug fixes and improvements ### Applications - Fixed metric of FPU in APIs/apps not displaying correct value *** ## Oct 12th 2023 ### Platform - "Organization not found" page will be showed for invalid link. - Increased text area size on Support portal page. - Fixed default configuration of storage engine when create new project. ### Data Manager - Fixed secret+key label missing for 'S3-compatible storage' source ### Data Processing Engine - Changed source icon size. - Time format updated. ### Machine Learning Manager - Time format updated. ### Analytics Manager - Analytics Manager is now generally available *** ## Oct 5th 2023 ### Analytics Manager - Analytics Manager Dashboards are now in Beta release - Fixed access to live deployed dashboard ### Data Processing Engine - Fixed duration not showing when it is under 1 second ### Application Services - Fixed certificate management for apps - Fixed configuration for login screens disappearing *** ## Sep 28th 2023 ### Platform - Fixed long projects/organizations names being shortened with ellipsis ### Data Processing Engine - Fixed bug for repo version override - Removed app\_id & type query strings from the code snippet to launch an action/workflow ### App Manager - Fixed a bug where it was impossible to remove a tag *** ## Sep 21st 2023 ### Platform - Fixed a bug where the Storage Engines page would be accessible but empty if user has no permission on storage engine instances. The page is now un-accessible in this case - Fixed bug where the list of invites (to organizations) on the profile page would be inaccurate - Fixed support page layout ### Data Processing Engine - Fixed default version in actions being Python 3.11 *** ## Sep 14th 2023 ### Platform - We are rolling out a major update to the backend of the organization's IAM! Performances and stability are much improved on all of the platform pages. - Updated sign-in screen when session is timed out inside a project *** ## Sep 7th 2023 ### Platform - Add option to sign in / sign up to ForePaaS using OVHcloud account ### Application Services - Fixed automatic deployment when creating app/api *** ## Aug 31th 2023 ### Data Processing Engine - Added possibility to order/limit when listing objects by API ### Data Manager - Added possibility to order/limit when listing objects by API ### Machine Learning Manager - Added possibility to order/limit when listing objects by API *** ## Aug 24th 2023 ### Data Processing Engine - The version of PySpark is now displayed in Custom PySpark actions - The minor version number for Python is no longer displayed in the interface ### Machine Learning Manager - The minor version number for Python is no longer displayed in the interface ### Analytics Manager - Fixed displaying of paywall based on query engine activation ### Control Center - Added support for quotas. You can manage Control Center quotas in the Settings of the CC - Fixed redirection to Control Center in the header which sometimes opened the wrong organization *** ## Aug 17th 2023 ### Platform - Various bug fixes and improvements *** ## Aug 10th 2023 ### Data Manager - Various bug fixes and improvements *** ## Aug 3rd 2023 ### Data Manager - Added two new connectors: **Shadow Drive**, and **Google Cloud Storage**. - Fixed verify\_ssl option for OpenSearch connector to be false by default - Added a data type for virtual attributes on creation - Fixed a bug when creating an index with 2 attributes on a PostgreSQL table ### Data Processing Engine - Fixed a bug where the service would be softlocked if Control Center is unresponsive *** ## Jul 27th 2023 ### Platform - Fixed status member pending till he creates his account - Fixed access to project being available if creation aborted ### Analytics Manager - Added support to `eq` and `ne` operators for JSON queries *** ## Jul 20th 2023 ### Platform - Bug fixes and performances improvements *** ## Jul 13th 2023 ### Storage Engines - Introducing a new engine in Alpha release: Polar Data. Polar Data is a modern lakehouse engine built by ForePaaS. ### Data Manager - Explorer can now be used without activating a query engine _(currently only available on projects deployed on OVHcloud provider)_ *** ## Jul 6th 2023 ### Platform - Multiple improvements to the display performances of home page - Added tooltips on kpis of project home - Make editing message on project home always visible - Fixed status of project when adding a service - Fixed sidebar projects sometimes not up to date - Fixed free fpu included in organization overview *** ## Jun 29th 2023 ### Platform - Performance improvements and multiple bug fixes to the new home pages and navigation ### Analytics Manager - Added new option to export query result to ForePaaS Buckets, and receive the download link by email. Use this option if your query results are bigger than 10 MB and you cannot use the local download. *** ## Jun 22th 2023 ### Platform - Introducing ForePaaS Home v2! - Dataplants are now called Projects! They can be made of any number of services bundled together - A new header allowing to navigate between services, projects and organizations - A new sidebar allowing to navigate between services - A new organization home page introducing widgets and a 'recently opened' section - A new project home page where you can edit the layout and get detailed metrics - Projects can now be created from templates, allowing to get started with only some services before expanding to others *** ## Jun 15th 2023 ### Control Center - Fixed bug on logs streaming endpoint *** ## Jun 9th 2023 ### Platform - Fixed opening of versioning panel in Data Processing Engine, Analytics Manager and Machine Learning Manager ### Analytics Manager - Migrated all queries from Query Builder Legacy to Analytics Manager, in a new repository "QB Queries" - Query Builder Legacy is now removed from the console and decommissioned from the ForePaaS Platform ### Data Processing Engine - Added possibility for Custom actions and Load actions using a streaming-type connector to have no timeout, if the job's execution mode is Always-up - Fixed an issue on MQTT connector related to the acknowledgement of message consumption that would sometimes cause a timeout of the connection *** ## Jun 1st 2023 ### Platform - Fixed buttons sometimes disappearing on lists if a column was enlarged a lot ### Analytics Manager - Fixed attributes from MART Tables not appearing in the choice of the query editor - History loading is now better handled in Analytics Manager & Data Mnaager Explorer ### Data Processing Engine - Statistics about insert/update are now disabled by default in order to optimize performances - Parameter `statistics` is now false by default in the _bulk\_insert_ SDK function - Statistics about insert/update are now computed only if the log level of a job is set to _DEBUG_ *** ## May 25th 2023 ### Data Manager - Fixed preview table button sometimes previewing wrong attributes ### Analytics Manager - Fixed regrouped attributes which sometimes would appear in wrong order on a bar chart *** ## May 11th 2023 ### Data Manager - Added a warning when linking a storage engine that is not in the same location as the Dataplant - Fixed translation issues in some modals - Fixed arguments not being correctly required on MongoDB connector ### Analytics Manager - Fixed queries not running if Japanese characters were in the title - Fixed virtual attributes sometimes not appearing in the options for the visual query builder - Fixed gauge chart not taking the dashboard's chart into account *** ## May 4th 2023 ### Analytics Manager - Added a new chart type: **gauge chart**. Make sure your projects are on-track and monitor how far KPIs are from reaching targets with this new visualization type! - Added new option to break the X-axis down into multiple attributes, in order to regroup bar charts, line charts and area charts by specific Scale attributes - Added more fine-grained _origin_ types for the query history, with hyperlinks to the relevant object ### Data Processing Engine - Increased the size of a workflow's visual interface, in order to make the name of its actions more visible - Fixed a bug on the workflow version override which would sometimes not take effect ### Identity Access Manager - Fixed a bug on the service selection in the role condition builder *** ## Apr 27th 2023 ### Data Manager - Added a _type_ parameter for virtual attributes - Fixed "port" parameter in MQTT connector ### Analytics Manager - Added a more fine-grained origin for queries in History - Added a more fine-grained status for queries in History - Tiles/filters are now automatically removed from dashboards if the related query is deleted ### Data Processing Engine - Added a new action: _MySQL to Parquet_ - Fixed a bug where the status of a workflow would sometimes not reflect the status of stages *** ## Apr 20th 2023 ### Data Manager - Bug fixed on MQTT connector ### Analytics Manager - Small cosmetic improvements to dashboards *** ## Apr 13th 2023 ### Data Processing Engine - Python 3.6.5 is now depreciated. Please migrate all your actions to the next stable version of Python: 3.9.9 - Python 3.6.5 will be fully decommissioned on **October 19th 2023** - Fixed multiple git conflicts ### Data Manager - Added Location column when binding a new storage engine, and 'recommended' tag if the storage engine is in the same location as dataplant - Fixed logs in console being swapped when launching another job ### Machine Learning Manager - Python 3.6.5 is now depreciated. Please migrate all your pipelines to the next stable version of Python: 3.9.9 - Python 3.6.5 will be fully decommissioned on **October 19th 2023** *** ## Apr 6th 2023 ### Data Processing Engine - Added support for **Python 3.11** - Added merge conflict user warning for Git versioning ### Analytics Manager - Keep attributes sorted in the same order when previewing a table from the Data Manager ### Application Services - Multiple bug fixes on timeout after building - Better handle when build finish job *** ## Mar 30th 2023 ### Data Processing Engine - Alerts integration in DPE Workflow UI. - Confirm popin if creating a workflow with actions that use different Python versions. ### Analytics Manager - Improved animation to display edit chart settings panel in dashboard. - For Pie charts group data together if more than 20. - Fixed reload jobs and logs in logs explorer ### Control Center - Reload of jobs in Logs Explorer has been fixed. *** ## Mar 23rd 2023 ### Analytics Manager - Added inversion evolution colors and displaying dimension. - Bug fixed where offset percentiles labels so that they don't overlap. ### Data Processing Engine - Alerts tab in Actions to create Control Center Alerts. - Actions/workflows names can be clicked in Jobs tab to redirect to the action/workflow. ### Machine Learning Manager - Pipeline names can be clicked in Jobs tab to redirect to the pipeline. *** ## Mar 16th 2023 ### Analytics Manager - Added _trend line_ option in the settings of scatterplot - Fixed red error message if user has no access to IAM - Fixed duplicate attributes appearing in query creation choices if both virtual and physical attribute have the same name ### Applications - Multiple bug fixes ### Platform - Fixed Azure storage engine creation - Added new filters to the Jobs page statuses *** ## Mar 9th 2023 ### Analytics Manager - Added a new chart type: [_Scatterplot_](https://docs.dataplatform.ovh.net/analytics-manager-queries-charts.md#use-a-scatterplot), to represent the correlation between two metrics as colored bubbles - Added possibility to edit all chart settings directly from a dashboard - Added info in query history that the query has been launched from a deployed dashboard - Fixed a bug when drilling down on a chart which already had an Order set at query level ### Data Processing Engine - Added a new action: _PostgreSQL to Parquet_ - Renamed action _table-to-files_ in interface and improved its visual aspect, to add an option to choose the output format - Added ability to disable stats calculation on `bulk_insert` function from SDK, in order to reduce the computing time - Disabled Always-up option for PySpark actions *** ## Mar 2nd 2023 ### Analytics Manager - Introducing the possibility to [drill-down](https://docs.dataplatform.ovh.net/analytics-manager-dashboards-edit.md#drill-down-on-the-dashboard) on dashboards' charts! Click on a part of any chart in order to filter everything on related values, or to further explore relevant data. - Added option to download the content of a dashboard's tile as a CSV - Fixed timepicker's display reseting when opening it from a dashboard - Fixed timepicker's WTD option not starting on Monday in some countries ### Control Center - Updated interface for Logs Explorer in streaming mode in order to stick to the bottom of page when new logs appear *** ## Feb 23th 2023 ### Analytics Manager - Added _Download as a CSV_ option to export the result of query as a tab-separated .CSV local file (limited to 10 MB) ### Data Processing Engine - Disabled possibility in GUI to mix standard and PySpark actions in the same workflow - Fixed environement variables automatically opening in preferences - Fixed language version override on workflows sometimes not displaying ### Control Center - Fixed logs sometimes being displayed on same line when streaming - Redirecting to the logs explorer from another component now switches Streaming mode on if it is a currently running job ### Platform - Fixed drag and dropping repositories which would sometimes randomize their order - Renamed job status from Pending to Running - Fixed search if category selected *** ## Feb 20th 2023 ### Data Processing Engine - Added a parameter _apply\_rules_ (default value = _false_) in function `extract` of the SDK in order to apply blueprint of rules. ### Analytics Manager - Added _Copy to clipboard_ option to copy the result of query to the clipboard (limited to 1 MB) - Replaced the dashboard subtitle by the dashboard's description - Improved the default visual aspect of some charts - Updated the options for the size of query engine. 4 FPU-S is now XS, and added a new coming soon option: XL (64 PFU-S). - Fixed visual display bugs on dashboard tiles (tooltip or options that would sometimes go behind the tile) ### Data Manager - Fixed a bug in Trino connector where it would return an error `'Trino' object has no attribute '_read_sql'` ### Control Center - In Logs Explorer, clicking on refresh now refreshes the list of executions for jobs ### Platform - Added repository\_id in url of following pages: DPE Actions, MLM Pipelines, AM Queries - Fixed a bug where double clicking on folder would create subfolder with same name *** ## Feb 9th 2023 ### Platform - Fixed drag and drop of files into folder which was sometimes failing - Fixed display of delete confirmation modal when too many objects are in it - Increased size of description ticket in Support portal ### Analytics Manager - Added option to compare to previous period in [Metric](https://docs.dataplatform.ovh.net/analytics-manager-queries-charts.md#use-a-metric) chart! - Improved visual aspect of big number - Improved drag and drop of tiles to include an auto-scroll at the top and bottom of dashboard - Fixed filter dropdown that would sometimes go behind a tile - Fixed "Filter on" option at the bottom of the filter - Updated text if no deployed dashboard in the dashboards portal ### Data Processing Engine - Updated PySpark version from 3.1.1 to **3.2.1** - Fixed bug when committing changes in repo connected to git - Fixed the display Building status when simply saving action ### Machine Learning Manager - Made the pipeline ID in a job clickable ### Control Center - Added icons to show status of execution id's in Log Explorer - Removed delete icon for ForePaaS monitoring panels (in multi-select) *** ## Feb 2nd 2023 ### Platform - Updated label color and button's grey. - Fixed table width. ### Analytics Manager - Added dashboards portal. - Optimized dashboards render. - Fixed redirection to logs in the Control Center from a resource. ### Data Manager - Fixed loader in Table load. *** ## Jan 26th 2023 ### Analytics Manager - Added a new chart type: [Metric](https://docs.dataplatform.ovh.net/analytics-manager-queries-charts.md#use-a-metric), to display a query result as a single big number! - Greatly improved vertical resizing of dashboard tiles to be pixel perfect instead of by steps - You can now choose to add a time to your date filter in a dashboard if the filter is set on [_Date & Time_](https://docs.dataplatform.ovh.net/analytics-manager-dashboards-edit.md#edit-advanced-filter-options) - Increased the limit of tiles per row from 4 to 8 (tiles can now be smaller) - Switched icon for successful autosave in dashboard to green - Fixed scroll in query preview if error - Fixed message when query does not exist in a dashboard - Fixed labels being hidden in a pie chart in dashboards with no reason ### Control Center - The Control Center is now in General Availability! - Infrastructure Monitoring Legacy interface has been decommissioned - Added possibility to notify subscribers when an alert is resolved ### Data Processing Engine - Fixed a bug where a workflow would be stuck at a stage (despite all its actions successfully finishing) and would timeout ### Application Services - Fixed creation of app using custom template ### Platform - Improvements of the linking of storage engines with Dataplants - Added a tutorial on [how to upload custom app templates to the ForePaaS Store](https://docs.dataplatform.ovh.net/legacy/api-reference-store.md) *** ## Jan 19th 2023 ### Analytics Manager - You can now filter absolute and relative dates in your dashboards using the **Date** and **Date & Time** filter types! - Added Boolean filter type - Added possibility to change filter type in the advanced filter options - Fixed sql query not executed in dashboards if configuration empty - Fixed display button back to dashboard if no dashboard ### Data Processing Engine - Add log for operator elected - Fixed watch\_jobs ignore not initialised or stopped job - Fixed skip instead of stop if error happens *** ## Jan 16th 2023 ### Platform - Improved performances for support interface *** ## Jan 12th 2023 ### Analytics Manager - Introducing [Dashboards](https://docs.dataplatform.ovh.net/analytics-manager-dashboards.md)! A modern and simple BI tool for super fast dataviz and reporting. Using the next-gen Analytics Manager query engines, your data visualisation and querying can easily scale up to Big Data and beyond. - Dashboards are currently in Alpha release in Analytics Manager. ### Identity Access Manager - Added compatibility for CEL conditions on _Analytics Manager_ service. *** ## Jan 6th 2023 Happy New Year! ForePaaS and OVHcloud wish you the most successful data projects for 2023! 🎉🎉 ### Platform - Performances improvements *** ## Week 52 **Date:** 29/12/2022 ### Platform - Bug fixes and performances improvements *** ## Week 51 **Date:** 22/12/2022 ### Platform - Bug fixes and performances improvements *** ## Week 50 **Date:** 15/12/2022 ### Platform - Bug fixes and performances improvements *** ## Week 49 **Date:** 08/12/2022 ### Data Processing Engine - Added option to override repository version of actions inside workflow ### Analytics Manager - Fixed chart Runtime Percentile on Overview page ### Control Center - Removed storage engine overtime chart in storage engine monitoring - Added OAuth2 support for Custom Webhook alert consumers in the interface ### Identity Access Manager - Advanced CEL conditions (technical name, etc.) are now available for services _Data Manager_ and _Control Center_. *** ## Week 48 **Date:** 01/12/2022 ### Data Manager - Added a new connector in general availability: **InfluxDB** ### Control Center - Added OAuth2 support for Custom Webhook alert consumers in the API *** ## Week 47 **Date:** 24/11/2022 Happy Thanksgiving! 🎉 ### Data Manager - Added a new connector in general availability: **CockroachDB** - Fixed translation when creating a new storage engine - Fixed responsive on Buckets files list ### Identity Access Manager - Advanced CEL conditions (technical name, etc.) are now available for service _Data Processing Engine_. ### Control Center - Fixed URL when redirecting from other services to the Logs Explorer - Fixed format date of storage engines *** ## Week 46 **Date:** 17/11/2022 ### Platform - Implemented a major backend update to dramatically improve the performance and availability of the ForePaaS console. Among other things, this update significantly increases the stability and speed of access to your Dataplants and other organization-level services. ### Data Processing Engine - Logs window now prompts to redirect to the Control Center Logs Explorer ### Identity Access Manager - Advanced CEL conditions (technical name, etc.) are now available for service _Machine Learning Manager_. ### Control Center - Fixed display of tooltip for RPS and Latency charts in monitoring panels - Added automatic default values on triggers when creating an alert - Replaced 0 by 'Terminated' in column 'Age' of service in monitoring panels if status of pod is terminated ### Machine Learning Manager - Logs window now prompts to redirect to the Control Center Logs Explorer - Fixed bug on dataset generation for unstructured data ### Data Manager - Logs window now prompts to redirect to the Control Center Logs Explorer *** ## Week 45 **Date:** 10/11/2022 ### Control Center - Added all query filters in URL of Logs Explorer - Fixed a bug when logs would not match chosen timeframe after editing the datepicker to a smaller date ### Data Processing Engine - Added a new tutorial: [how to load streaming data from Apache Kafka](https://docs.dataplatform.ovh.net/tutorials-kafka.md) ### Machine Learning Manager - Fixed download model link ### Identity Access Manager - Added compatibility for CEL conditions on _Analytics Manager_ and _Control Center_ services *** ## Week 44 **Date:** 03/11/2022 ### Control Center - You can now search logs using a regex match (as well as doesn't regex match, contains, or doesn't contain) in the Logs Explorer. - Log search can now be done using Control Center API - Navigation in the header no longer blocked if user has rights on service. ### Identity Access Manager - Added compatibility for CEL conditions on _Data Processing Engine_, _Data Manager_ and _Machine Learning Manager_ services - Updated date format for creation date of api key in users and service account. ### Data Manager - Fixed opening of advanced panel when update table in Data Manager. ### App Service - Updated return status when user is unauthorized (403 instead of 401). - Updated to return 403 if users has no rights on applications instead of 200 and empty list. ### Data Processing Engine - Fixed concurrent job execution amongst other bugs. *** ## Week 43 **Date:** 27/10/2022 ### Control Center - Added storage engine charts in monitoring. ### Identity Access Manager - Fixed disabled when edit legacy role condition. - Updated user name with civility translated. - Translated civility (in english) in mails. - Fixed bug about group duplicate in backend. ### Machine Learning Manager - Fixed autosave when edit preferences of model. - Fixed getters prim and mart table from store. ### Data Manager - Added most queried tables chart in overview. ### Data Processing Engine - Changed settings to not ask to update environment on first launch if version deployed. ### Platform - Added loader when switch organization. *** ## Week 42 **Date:** 20/10/2022 ### Control Center - Replaced FPU consumption KPI with Dataplant count KPI ### Identity Access Manager - Bug fixes and improvements to CEL role conditions editor - Added a new tutorial: [How to set a role condition on a specific bucket](https://docs.dataplatform.ovh.net/tutorials-bucket-role-conditions.md) ### Data Manager - Fixed reseting search filter when selecting a bucket ### Analytics Manager - Fixed count of queries in overview ### Data Processing Engine - Fixed use of databases and tables in Actions - Added visual display of when job fails because oomkill - Added tooltip on disabled options for perimeter and segmentation - Updated trigger translations ### Platform - Prevented accidentally closing the modal when adding/editing storage engine - Fixed empty size when creating new storage engine *** ## Week 41 **Date:** 13/10/2022 ### Identity Access Manager - Added compatibility for CEL conditions on _Data Store_ and _App Service_ services ### Data Manager - Fixed 'magnifying glass' button for a table to open a preview of the table - Fixed button switch table views - Added horizontal scrolling on the metadata analysis page ### Data Processing Engine - Fixed perimeter option not being in the correct place in the UI - Fixed missing English translation in quotas - Fixed buttons in the versioning panel - Fixed database\_name in tables *** ## Week 40 **Date:** 06/10/2022 ### Control Center - Added refresh button next to the date picker - Fixed alert's metrics page to filter table only on the alert - Added all authentication modes (Azure AD, etc.) in Total Logins KPI in overview ### Data Processing Engine - Improved stability and performance of the execution of jobs - Increased default limit of maximum jobs that can be launched at the same time to 42 - Jobs can no longer be put to the queue, an error will be returned if the maximum limit is reached - Added new "Automatic segmentation" mode ### Data Manager - On a Kafka source, added possibility to choose between watching from the earliest or the latest offset for each topic - Fixed error in chart in Overview page when storage engine is missing - Moved toggle near to text in wide screen when configuring sources - Added message if trying to analyze table of source in Analyzer but no tables in source ### Analytics Manager - Fixed list of attributes in table details - Removed counting Explorer queries in some charts and KPIs in overview ### Machine Learning Manager - Fixed display success rate heatmap in metrics notebook and pipeline - Fixed adding modules in notebook by type of notebooks (PySpark vs Python) *** ## Week 39 **Date:** 03/10/2022 ### Control Center - Fixed organization-level view not available despite being authenticated in IAM *** ## Week 38 **Date:** 22/09/2022 ### Identity Access Manager - Introducing new [CEL role conditions](https://docs.dataplatform.ovh.net/iam-roles-conditions.md)! Use the new visual condition builder to give fine-grained permissions on resources, or write your role conditions using Common Expression Language (CEL) - Currently, CEL conditions are only available for roles containing permissions on IAM service solely. ### Control Center - Automatically add author of the alert to the subscribers - Added alert categories - Added alert status next to the title in UI ### Data Processing Engine - Removed segmentation options not available depending on the connector type - Improved job execution time by improving the build system ### Data Manager - Added historical values of storage size in Overview - Improved job execution time by improving the build system *** ## Week 37 **Date:** 15/09/2022 ### Control Center - We revamped the log exploration interface! Now, you can scroll down to progressively load logs as they go - Added two new alert consumers: Amazon SNS and Opsgenie - Updated email text content ### Data Processing Engine - Multiple bug fixes and performance improvements ### Data Manager - Warning: `/metas` API endpoint is now deprecated. Please make sure to stop using it when calling your ForePaaS Dataplants from outside. - Multiple bug fixes and performance improvements *** ## Week 36 **Date:** 08/09/2022 ### Control Center - Fixed external consumers unexpected coercion on configuration field - Fixed slack config (remove not working fields Channel, username, user icon) ### Data Processing Engine - Stability and performances improvements - UI changes to environments to force user to click on confirm before saving ### Data Manager - Stability and performances improvements ### Analytics Manager - Fixed autosave right after opening a query ### Identity Access Manager - Several interface bug fixes and improvements - Prevented access to service interface from header and url if no rights - Updated title and message in authentication page for Dataplant application - Added default message in authentication page when creating new application *** ## Week 35 **Date:** 01/09/2022 ### Platform - Updated title in tabs of browser when being on the Overview page of a component ### Control Center - We added tooltips on each KPI on the overview! Learn how a specific metric was obtained by hovering over it for a couple of seconds. - Overview: Added ability to filter panel Consumption by providers or dataplants - Fixed chart consumption in organization level that wouldn't stack - Fixed jobs heatmap in overview when filtering by timeframe, and to only display only CRON-based - Updated Y-axis for cpu / ram charts to adjust to the value - Optimized display of items for DPE and ML dashboards ### Data Manager - Added shortcut file upload when create new source from overview - Updated selectbox style in Explorer ### Data Processing Engine - Disabled create action button on the onboarding welcome page if no rights ### Analytics Manager - Updated selectbox style in queries - Added origin explorer in filter of history - Fixed fields not showing all attributes in visual builder when adding first filter ### Identity Access Manager - Added button to copy application’s url to clipboard *** ## Week 34 **Date:** 25/08/2022 ### Control Center - The Control Center is now in Beta release! - Fixed display of days in the date picker - Metric "Login per hour" is now "Total logins", and metric "RPS" is now "Current RPS" ### Data Processing Engine - Fixed behavior of [environment variables](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#environment-variables) ### Data Manager - The "Directly Queryable" feature has been renamed to [Direct Query](https://docs.dataplatform.ovh.net/landing-page-connectors-sources.md#make-your-data-source-directly-queryable). Use the Analytics Manager to run queries on remote sources without having to import the data! - Added endpoint _health_ ### Identity Access Manager - Fixed sessionExpired when calling IAM after login with APIkey/secret key *** ## Week 33 **Date:** 18/08/2022 ### Control Center - Fixed scroll bar in alert editor, monitoring and job’s triggers pages. - Number of failed execution now includes timed out executions. - Added full time in tooltip of network charts. ### Data Processing Engine - Added retry when retrieving DPE action/workflow configuration. *** ## Week 32 **Date:** 11/08/2022 ### Platform - Fixed size tooltip in charts. ### Control Center - Fixed overview chart storage when organisation view. - Improved chart consumption in overview. - Forced display tooltip for charts event if no value. - Updated tracker front. - Fixed logout. - Updated auto generate name for new alert. - Fixed update FPU for items from old infra monitoring. ### Data Manager - Fixed delete file when buckets not loaded. ### Machine Learning Manager - Allowed adding link for notebook dependencies. ### Identity Access Manager - Added permission DM for DM & QB Editor. - Added role Control Center Editor. - Created Infrastructure Managers group. - Updated name of Identity Access Managers group. *** ## Week 31 **Date:** 04/08/2022 ### Control Center - Prevented second click when create alert + Autogeneration of name. - Removed info from selectbox to select existing consumer + prevented adding it if required field is not filled. - Showed preview of instances when toggle HA in storage engine dashboard. - Added tracking UI. - Refreshed time when click on refresh button in logs explorer. - Jobs: Fixed long loader. - Jobs: Added missing filter "Execution method". - Jobs: Added more options for filter "Status". - Jobs: Fixed failed case in graphs. - Jobs: Added hyperlink for Object name of job. - Jobs: Fixed wrong icon. - Jobs: Fixed duplicate objects in table. - Jobs: Fixed numbers of executions column. - Jobs: Fixed edit ml trigger. - Logs: Fixed wrong icon. - Logs: Sorted the list of object by numbers of executions - Logs: Fixed toggle streaming button - Logs: Added show numbers of search result - Logs: Fixed filter cleared after refreshing logs - Logs: Sorted and filter execution\_id in the filter options ### Data Manager - Fixed related items in attributes pages ### Machine Learning Manager - Update select box for depencies if pyspark notebook. - Update icon when notebook starting or stopping. ### Data Processing Engine - Removed stopped deployments from active deployments table. *** ## Week 30 **Date:** 28/07/2022 ### Control Center - Removed not necessary actions in top of treeview in alerts. - Optimized call in dashboarding default (call was send on all data plant instead of one). - Added style to redirect on name in table (like in DPE). - Added name of dataplant in tooltip of charts. - Displayed first row of charts in one third for panel in overview. - Updated chart of alerts active over time (fix xAxis and add 0 in green). - Removed warning when edit fpu from API / APP / AM dashboarding. - Fixed alignment in input-fpu. ### Data Processing Engine - Fixed size and add tooltip on tags in treeview. ### Query Builder - Fixed size and add tooltip on tags in treeview. ### Machine Learning Manager - Fixed size and add tooltip on tags in treeview. *** ## Week 29 **Date:** 21/07/2022 ### Control Center - Update title in tabs browser - Add some tooltips - Update xAxis on charts - Overview: Update current alert triggerings table - Overview: Fix xaxis for active alert over time chart - Monitoring: Fix chart network not reloaded when update datepicker - Monitoring: Fix redirect to item when click on name from table - Monitoring: Fix update FPU of item - Monitoring: Add search by tags in tree view - Monitoring: Fix UI in storage engine dashboard - Alerts: Add "Only watch CRON-triggered" feature - Alerts: Fixed target saving conditionals - Alerts: Added a Metrics shortcut from the treeview - Alerts: Fixed alert duplicate - Alerts: Added alert status in alert title - Alerts: Health check ability to select all resources - Alerts: Trigger - Default value by default - Alerts: Subscribers pagination fix - Alerts: Ability to search for subscribers from the added list - Settings: Ability to edit an external consumer ### Analytics Manager - Fixed scroll in query fields when vertical view ### Data Manager - Fixed scroll in query fields when vertical view *** ## Week 28 **Date:** 13/07/2022 ### Control Center - The [Control Center](https://docs.dataplatform.ovh.net/landing-page-control-center.md) is now available in Alpha release! Get full observability on each service and component in your data project. - Monitor metrics across your data pipelines, applications, and deployed instances - Drill-down on logs to troubleshoot errors - Set up alerts when issues arise - Ensure scalability by adding more resources on any service as needed ### Identity Access Manager - Bug fixes and improvements to session management *** ## Week 27 **Date:** 07/07/2022 ### Platform - Updated CSV file connector. ### Data Processing Engine - Enabled concurrent execution button for serverless environments. *** ## Week 26 **Date:** 30/06/2022 ### Platform - Support of multi factor authentication (MFA). ### Data Manager - Connectors (Druid, OpenSearch, Prometheus) - New Explorer tab released in Alpha. - Optimized query execution to be able to use virtual attributes in SQL mode ### Data Processing Engine - Point-and-click PySpark Load and Aggregate actions are now available in Alpha release - Optimized provisioning time with ForePaaS actions. - Multiple concurrent executions in Serverless mode. *** ## Week 25 **Date:** 23/06/2022 ### Platform - Fixed version api on serviceaccounts that can be on error while sent to kubernetes. ### Data Processing Engine - Disabled concurrent execution button for serverless environment. - Uniformized Information panel when editing an element. *** ## Week 24 **Date:** 16/06/2022 ### Platform - Updated Japanese translations. ### Machine Learning Manager - Update open Notebook CTA. *** ## Week 23 **Date:** 09/06/2022 ### Platform - Bug fixing and improvements. *** ## Week 22 **Date:** 02/06/2022 ### Platform - Fixed Japanese some translations. - Updated list of restricted words for tables/attributes names. - Bug fixing and improvements. *** ## Week 21 **Date:** 26/05/2022 ### Platform - Bug fixing and improvements. *** ## Week 20 **Date:** 19/05/2022 ### Platform - Removed big shadow on white buttons. - Improved tooltip display. ### Data Processing Engine - Fixed folder on some treeviews. - Added advised bucket size. ### Data Manager - API: created a v4/metrics endpoint to aggregate metrics from DM, storage volume. - Hotfixed metrics endpoint. - API metrics extract: added possibility to update table parameters depending of connector func *** ## Week 19 **Date:** 12/05/2022 ### Data Processing Engine - Actions treeview bug fixed. - Actions folder treeview bug fixed. *** ## Week 18 **Date:** 05/05/2022 ### App Manager - Fixed copy and remove with new Minio gateway. ### Identity Access Manager - Fixed populate of undefined when getRolesAcls for users. - Fixed generate password too long. - Update format date generated password ### Data Processing Engine - Introducing [Always-up execution mode](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#execution-modes)! 🎉 Execute your jobs faster with the new Always-up execution mode in Data Processing Engine - In addition to the standard _Serverless_ execution mode, now you can also keep dedicated resources always up and ready to run your jobs instantly. - Added placeholder for empty table in metrics. ### Machine Learning Manager - Added placeholder for empty table in metrics. ### Analytics Manager _This component is currently released under open beta._ - Added limit in query configuration. - Put select be default when select data. - Added a shortcut to preview a table directly from a table. *** ## Week 17 **Date:** 29/04/2022 ### Platform - Added link to have info on OVH acquisition in no new account page. - Added modal confirm when delete member from editor. - Added status of job in job detail. - Fixed condition to display provider logo in dataplant block. - Added link to documentation on how to manage members in request to join organisation email. ### Data Manager - Added column in sources. - Added tooltip for generate action in table list. ### Data Processing Engine and Machine Learning Manager - Fixed message in FPU settings for environment. *** ## Week 16 **Date:** 22/04/2022 ### Data Manager - Removed virtual attributes from Tables page - Added info on system bucket - Fixed bug to attach sandbox in DM + can unlink sandbox ### Analytics Manager _This component is currently released under open beta._ - Display more attributes in selectbox data and scale - Updated function to set sum or select by default - Added placeholder in filters - Hiden ML tables in table details in query editor - Added shift + Enter to run query And wait after saving to run it - Added loader when run from SQL editor from keyboard - Added download as a json - Fixed size of SQL in history table - Fixed switch in filter from between to in - Added created\_at and updated\_at column in queries list ### Data Processing Engine - Ability to view workflow from action lineage page - Bug fixed: workflows list of actions was wrong when using repo versioning ### Identity Access Manager - Updated icon in active users table. - Formated the result of cron with UTC ### Platform - Added option to resize columns in many tables - Fixed active lang in header. *** ## Week 15 **Date:** 14/04/2022 ### Data Manager - Fixed edition of attribute name after creating it. ### Analytics Manager _This component is currently released under open beta._ - You can now run query by pressing cmd/ctrl + Enter in SQL mode. ### Data Processing Engine - Fixed display error when start action/workflow. ### Machine Learning Manager - You can now export your notebooks as DPE Custom Actions, MLM Estimators or MLM Scoring Functions. ### Identity Access Manager - Fixed generate pwd when the username is empty. ### Platform - New header. *** ## Week 14 **Date:** 07/04/2022 ### Data Manager - You can now activate _Directly Queryable_ mode for supported sources: run SQL queries from the Analytics Manager on those sources without having to load their data into ForePaaS. ### Analytics Manager _This component is currently released under open beta._ - Added free-trial paywall for resources. ### Data Processing Engine - Fixed display error when start action/workflow. - Added max length to filenames. ### Platform - Added in trial paywall when trying to update FPU in monitoring when free-trial mode. *** ## Week 13 **Date:** 29/03/2022 and 31/03/2022 ### Platform - Updated the home page of Dataplants: the Data Processing Engine is now located below the Data Manager instead of being to its left. - Added new cookies management solution ### Data Manager - Added a shortcut to create or upload a source. - Updated style of storage engine status. - Fixed long naming when table is created by drag and drop. - Improved handling of small error from sentry report. ### Data Processing Engine - Added a shortcut to create or upload a custom action. - Updated the maximum value of the FPU slider for actions and workflows. ### Machine Learning Manager - Updated the maximum value of the FPU slider for pipeline steps. ### Identity Access Manager - Fixed the positions of the permissions modal filter *** ## Week 12 **Date:** 25/03/2022 ### Platform - FP Store - Added Japanese translations - Fixed search ### Analytics Manager _This component is currently available under open beta release._ - Fixed reactivity when activating Trino. - Added API endpoints for exporting and importing AM configuration. - Bug about updating chart configuration in Query fixed. ### Data Manager - Fixed reactivity when changing default storage engine. - Updated Clickhouse connector. - Renamed MemSQL to Singlestore. ### App Manager - Removed Owned and Not owned from categories --- url: https://docs.dataplatform.ovh.net/landing-page-data-platform.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Data Platform ## What is Data Platform? Data Platform is a managed platform for building data products, with the infrastructure decisions already made: there is no cluster to size, no orchestrator to run and no deployment pipeline to build. Connecting sources, storing and modelling data, processing it, analyzing it and exposing the result as an API or an application are all provisioned and operated by the platform, behind four levels of automation, so effort goes into business logic rather than logistics. ![The four levels of automation](/images/public-cloud/data-platform/product/picts/automation_levels.png) A [project](https://docs.dataplatform.ovh.net/manage-projects.md) is the unit of work and the unit of isolation. It holds the sources, tables, buckets, pipelines, queries, dashboards, APIs and apps that make up one data system, together with the access rules over them. Creating a project deploys more than 60 microservices and provisions machines in the selected cloud region in under eight minutes, with no further input. :::info Access to a project is usually shared collaboratively along role lines: one group works on ingestion and transformation, another on analytics, another on the application layer. The [Identity Access Manager](https://docs.dataplatform.ovh.net/landing-page-iam.md) decides who can read and change what, down to individual table attributes. ::: If Data Platform is new to you, the fastest way in is the six-step guide that builds a working application on sample data. From there, the [services](https://docs.dataplatform.ovh.net/landing-page-services.md) documentation covers each component in the order data moves through it. [### Getting started→ Build a first end-to-end application in six steps. ](/landing-page-getting-started)[### Tutorials→ Complete worked use cases, from Kafka to Superset. ](/landing-page-tutorials)[### Services→ The seven services a project is made of, in data order. ](/landing-page-services)[### Developers→ Public APIs and the SDKs behind them. ](/landing-page-developers)[### Manage your platform→ Organizations, projects, pricing and finding your way around. ](/landing-page-manage) ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). --- url: https://docs.dataplatform.ovh.net/release-notes.md --- > For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/llms-full.txt. # Release notes ## October 19, 2026 **General** - **New guide:** [Analyse online store sales with Apache Superset](https://docs.dataplatform.ovh.net/tutorials-ecommerce-sales.md), from Shopify and Stripe orders to a sales dashboard. - **[User creation](https://docs.dataplatform.ovh.net/iam-users.md#application-end-users):** new users receive an email with a single-use link to set their password. - **Password reset:** a single-use reset or activation link is sent by email after you confirm, and it returns you to the application you came from. - A link that is no longer valid now says so. - Changing a password signs out every other session. - **Organizations:** an organization that still contains active projects can no longer be deleted. - **Fixes:** - the code editor shows the file you switch to, instead of the previous file of the same type. **Lakehouse Manager** - **[Buckets](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md):** new buckets are encrypted at creation (SSE-S3). **Data Processing Engine** - **[Spark resources](https://docs.dataplatform.ovh.net/dpe-jobs-resources.md#pyspark-actions):** set the driver size independently of the executors, see the total DPU of the execution, and choose the library and Spark [log levels](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#logs-level). - **[Always-up execution mode](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#execution-modes):** now labelled beta for PySpark actions. - **Job status:** an action or workflow that reaches its own time limit is reported as `TIMEOUT` instead of a generic failure, and a start refused because the organization DPU quota is exceeded now says so. - **Build failures:** the reason now appears in the execution log. - **Fixes:** - running jobs are no longer interrupted by cluster scale-down. - downloading the files of a segmented job works again. **Control Center** - **[Audit trail](https://docs.dataplatform.ovh.net/control-center-auditing.md#export) export:** download the audit and security events of an organization or project as a file, with clearer errors when an export fails. - **[Security events](https://docs.dataplatform.ovh.net/control-center-auditing.md#security-events):** a new tab on the auditing pages lists security events, with a detail panel for each one. - **[Resources consumption chart](https://docs.dataplatform.ovh.net/landing-page-control-center.md):** usage is read one day at a time, so long date ranges no longer miss data. - **Application DPU:** each application's DPU in the resources panel links to its configuration page. - **Fixes:** - the audit trail filter works again. **Apps and API** - **App Service pages:** the overview and the other App Service pages have an improved layout and experience. ## October 5, 2026 **Lakehouse Manager** - **Fixes:** - updating a table that carries table-level policy tags no longer fails. - copying a partitioned table works again. - dropping or renaming an attribute used by a current or previous partition key is now refused. **Data Processing Engine** - **Job logs:** execution logs now show only what concerns your job. - Platform internals and duplicate errors are filtered out. - A failed action reports its error once. - **[Always-up deployments](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#always-up):** PySpark deployments can be kept always up again. - **Fixes:** - stopping and redeploying a deployment is more reliable. - opening a notebook whose server is already running no longer reports a start failure. - the Python 3.13 Data Science notebook image keeps numpy 2. **Apps and API** - **Fixes:** - a build whose builder image cannot be pulled now fails. - a build stopped for exceeding its deadline now reports `FAILURE` instead of `ABORTED`. - build duration is now always bounded, even when the deadline is misconfigured. ## September 22, 2026 **General** - **Fixes:** - the cookie preferences control now stays at the bottom of the page. - project tiles now show a rounded DPU total instead of a long decimal value. - the message shown when a new quota value is below current usage now explains the problem clearly. - sign-in and permission checks are more stable and faster under load. **Data Processing Engine** - **Logs from your own packages:** the logs emitted by the Python packages you install are no longer dropped in Spark jobs, notebooks and Python jobs alike. - Warnings and errors from your packages now reach the job logs, while the platform's own libraries stay quiet. - For more detail, set `lib_log_level` to `info` or `debug` in the action's parameters, in advanced mode. - **Faster environments:** the Python packages of an environment now install in parallel, so it is ready sooner. - **Fixes:** - loading data into a partitioned table with a [Load action](https://docs.dataplatform.ovh.net/dpe-actions-load.md) no longer fails. ## September 14, 2026 **General** - **Cookie consent:** cookie preferences now use the standard OVHcloud consent manager, reachable at any time from the cookie icon in the header. - **Fixes:** - permission checks for project creation are corrected. - a clearer error page is shown when your session cannot be verified. **Lakehouse Manager** - **[Row filters](https://docs.dataplatform.ovh.net/lakehouse-manager-row-filters.md):** restrict which rows of a table a user or group can see, without duplicating the table. The table keeps one copy of its data, and each person queries it through their own filters. - Write the condition in the default builder mode (column, operator, value, combined with _Match ALL (AND)_ or _Match ANY (OR)_), or switch to SQL mode for conditions the builder cannot express. - The impact panel reports how many rows the filter would keep and how many it would hide, before anyone is assigned to it. - Filters are enforced on Trino queries, so they cover Analytics Manager queries and dashboards and Trino consumers. A notebook reading through PySpark or PyIceberg, and direct storage access, are not filtered. - A filter can be saved inactive, switched on and off from the list, duplicated onto another table, and travels with a project configuration export. - **Fixes:** - deleting a project now also removes the dataset shares it granted, so a consumer project no longer lists a shared dataset whose source project is gone. **Data Processing Engine** - **Spark job memory:** Spark jobs now receive their full allotted memory, overhead included, which reduces out-of-memory failures. - **[Custom action](https://docs.dataplatform.ovh.net/dpe-actions-custom.md) logs:** `print()` and standard error output from action code now show up in the job logs, and a missing action produces a clearer error message. - **[Spark UI and History](https://docs.dataplatform.ovh.net/dpe-spark-history-server.md):** Spark applications now carry the job's name instead of a generic one. - **Fixes:** - stopping a job now terminates its Spark application. - a job whose pod crashes is detected and reported instead of hanging. - running jobs are no longer archived out of the job history. - jobs that finish while you watch them now appear correctly in executed jobs, and pipeline stages display reliably. - Iceberg table procedures such as `expire_snapshots` and `remove_orphan_files` work again in PySpark jobs. **Analytics Manager** - **[SQL editor](https://docs.dataplatform.ovh.net/analytics-manager-queries-sql-editor.md) autocomplete:** the editor now suggests SQL keywords, ready-made snippets, and every available Trino function with its description. - **Fixes:** - the runtime shown in the [query history](https://docs.dataplatform.ovh.net/analytics-manager-history.md) is now formatted correctly. **Control Center** - **[Audit trail](https://docs.dataplatform.ovh.net/control-center-auditing.md) search:** a new full-text search finds an event quickly, and the layout is clearer. **Apps and API** - **App resources:** each DPU allocated to an app now gives it 1 vCPU and 4 GB of RAM, matching the [DPU definition](https://docs.dataplatform.ovh.net/manage-pricing.md#billing-units). Apps previously received half of that. The change applies on the app's next restart. - **Fixes:** - a build that gets stuck now reports why, with a status message and an event log. - two builds of the same app can no longer run at the same time. - an application again has exactly one active version. ## August 31, 2026 **Lakehouse Manager** - **[Views](https://docs.dataplatform.ovh.net/lakehouse-manager-views.md):** save a SQL `SELECT` query as a named virtual table inside a dataset and query it like a table, with results always computed live from the source tables. - Columns are derived automatically from the SQL, which is validated on every create and edit with human-readable errors. - Views track their own **Valid** or **Broken** status: they are re-checked automatically when a source table changes and recover on their own once the source is restored. - Policy tags, dataset permissions, and the audit trail apply to views just like to tables, and views created by external tools are discovered automatically. - **[Filtered tabs](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md#filtered-tabs):** filtered views in the Tables section are renamed to filtered tabs, to avoid confusion with the new views. **Data Processing Engine** - **[Deduplicate action](https://docs.dataplatform.ovh.net/dpe-actions-deduplicate.md):** new ready-to-use action to remove duplicate rows from a lakehouse or PostgreSQL table, keeping exactly one row per deduplication key. - The key is pre-filled from the table's identifier fields, a read-only scan previews how many rows a run would remove, and you choose which row survives (any, most recent, or oldest). - An optional backup table protects the run; on lakehouse tables a run can also be undone with Time Travel. - **Parallel job runs:** launching the same job several times in parallel is now safe: each run keeps its own data and results. - **[Spark History](https://docs.dataplatform.ovh.net/dpe-spark-history-server.md):** the Spark application history is now reachable from older jobs too, not only the most recent ones. - **Fixes:** - when a job fails because a secret cannot be read, the actual cause is now shown instead of an opaque error. - the Rebuild action confirmation now shows the name of the table being rebuilt. ## August 24, 2026 **Lakehouse Manager** - **[Lineage](https://docs.dataplatform.ovh.net/lakehouse-manager-lineage.md):** a new built-in lineage view maps how data flows through your project, from the pipelines that feed each table down to the tables built from it. - Open it from the new **Lineage** section or straight from a table's details page, and drill down to column-level lineage. - Lineage now covers PySpark too: automatic for Load and Aggregate PySpark actions, opt-in through the [SDK](https://docs.dataplatform.ovh.net/developers-python-sdk-lineage.md) for Custom PySpark actions and PySpark notebooks. - **Fixes:** - checkboxes in the Tables list view are now correctly aligned. - sharing a dataset with a consumer project that does not exist now returns a clear error instead of a storage engine failure. **Data Processing Engine** - **[Notebook export as a custom action](https://docs.dataplatform.ovh.net/dpe-notebooks-data-platform-extension.md#export-a-notebook-as-a-custom-action):** the Data Platform extension can now turn a notebook into a custom action directly from JupyterLab, with the notebook's pip installs automatically converted into action dependencies. - **Fixes:** - environment variables already defined on a job are no longer overridden when the job starts. **Control Center** - **Fixes:** - job metric charts now display over any time range: the measurement precision adapts to the selected window instead of failing on wide ranges. ## August 3, 2026 **General** - **New guide:** [Trino data types and casts](https://docs.dataplatform.ovh.net/tutorials-trino-types-and-casts.md), covering the mapping between Lakehouse types and Trino types and how to fix `TYPE_MISMATCH` errors when writing through Trino. - **Expanded docs:** deeper Lakehouse Manager pages on data types, naming rules, the storage model, and cross-project sharing, plus new Data Processing Engine docs on code sharing between actions, triggering notebooks from workflows, and CI/CD. **Lakehouse Manager** - **Fixes:** - sharing a dataset in read-only no longer downgrades the owner's own read-write access to that dataset. - the API now returns a 404 error instead of a 500 when a resource is missing or was deleted. **Data Processing Engine** - **[Data Platform Extension](https://docs.dataplatform.ovh.net/dpe-notebooks-data-platform-extension.md):** a new JupyterLab extension adds a side panel to browse your project's datasets and storage buckets, run quick read-only SQL queries, and start from a gallery of ready-to-use notebooks wired to your own data. - **marimo extension:** the marimo notebook extension is now preinstalled in all notebook images. - Both extensions are new: try them out and share your feedback. - **[Custom action helpers](https://docs.dataplatform.ovh.net/dpe-actions-custom.md#use-the-helper-panel):** the helper panel in the Custom action and [Custom PySpark](https://docs.dataplatform.ovh.net/dpe-actions-custom-pyspark.md#use-the-helper-panel) editors now offers ready-to-use scenarios organized by category, SDK guides, a tab to browse your data, and a FAQ. **Control Center** - **[Audit trail](https://docs.dataplatform.ovh.net/control-center-auditing.md):** new event types record configuration export and import operations. - **Fixes:** - job logs in the [Logs Explorer](https://docs.dataplatform.ovh.net/control-center-logs-explorer.md) now display in the correct order without gaps or duplicated lines, streaming resumes after an interruption, and a loading error is shown instead of an empty log view. - the **Open logs** button now opens the Logs Explorer with the correct parameters instead of doing nothing. **Apps and API** - **Application scheduling (beta):** automatically start and stop an application (apps, APIs, Superset) during weekly activity windows, to avoid paying for idle time. - Pick a timezone and add one or more windows with days and start and stop times; outside these windows the application is stopped. - Transitions are evaluated about every 5 minutes, so a start or stop can be delayed by up to 5 minutes. - **In-memory caching (beta):** deploy a Valkey or Redis cache alongside an application service. - Choose the cache engine version and the share of DPU allocated to it (10 to 50%); the change takes effect after restarting the deployed version. - **SQLite backups (beta):** applications that store data in SQLite can now enable automatic backups. - Set the daily retention in days and how many weekly and monthly backups to keep, and open stored backups directly in the Lakehouse. ## July 20, 2026 **Lakehouse Manager** - **[Iceberg bucket](https://docs.dataplatform.ovh.net/lakehouse-manager-buckets.md#iceberg-bucket):** the Buckets screen now lists your project's Iceberg bucket, the storage behind your Lakehouse tables, in read-only mode. **Data Processing Engine** - **[Overview](https://docs.dataplatform.ovh.net/landing-page-dpe.md) heatmap:** job activity is now grouped by day and 4-hour slot, with run counts shown per cell and only finished jobs counted. - **Build logs:** logs from the build phase of a job are now available, so errors during a build are visible and easier to debug. - **Notebook import and export:** notebooks are now imported and exported as ZIP archives. - **[Workflows](https://docs.dataplatform.ovh.net/dpe-workflows.md):** a workflow must now contain at least one action to be started; empty workflows can no longer be run. ## July 6, 2026 **General** - **Configuration export and import:** each service module can now be imported directly from the UI, without calling an endpoint to import a configuration. **Lakehouse Manager** - **Fixes:** - **Explore snapshot** from Time Travel now redirects to the [Explorer](https://docs.dataplatform.ovh.net/lakehouse-manager-explorer.md) with the snapshot loaded. - searching a dataset by its full name (for example `default_dataset`) now returns the dataset instead of "You have no dataset". - deleting a shared dataset from a receiving project no longer leaves the Explorer without a dataset name. **Data Processing Engine** - **[Overview](https://docs.dataplatform.ovh.net/landing-page-dpe.md) metrics:** new **Resource consumption**, **Top consumers**, and **Spark History Server** metrics, with a selectable last 7, 30, or 90 day range and faster loading. - **Fixes:** the [Rebuild action](https://docs.dataplatform.ovh.net/dpe-actions-rebuild.md) now mirrors an attribute's state when it is marked **Required + Identifier**. **Control Center** - **[Overview](https://docs.dataplatform.ovh.net/landing-page-control-center.md) metrics:** new **Total resource consumption**, **Data scanned over time**, **DB storage (tables)**, and **Object storage (buckets)** metrics, shown both as current values and over time. - Metrics on the Overview and [Jobs Central](https://docs.dataplatform.ovh.net/control-center-jobs-central.md) now load faster. - **Fixes:** - the [Alerts](https://docs.dataplatform.ovh.net/landing-page-control-center-alerting.md) page now shows an error notification when alerts fail to load, instead of an empty "No alerts" state. - the [Audit trail](https://docs.dataplatform.ovh.net/control-center-auditing.md) now loads further entries when paging past the cached results, at both project and organization level. ## June 22, 2026 **General** - **App Service component count:** the organization home now shows the number of deployed App Service components on each project box. - **New tutorial:** [Build an IoT fleet-monitoring pipeline](https://docs.dataplatform.ovh.net/tutorials-iot-fleet-monitoring.md), an end-to-end guide streaming simulated sensor data from a Custom action through Kafka into a live Superset dashboard. **Connectors** - **Database connector pagination:** the database connector list is now paginated, making large lists easier to browse. - **Fixes:** sorting by column header now works on the Trino consumers table. **Lakehouse Manager** - **[Required and Identifier fields](https://docs.dataplatform.ovh.net/lakehouse-manager-manage-tables.md#attribute-constraints):** attributes can now be marked **Required** (never NULL) or **Required + Identifier** (part of the row's uniqueness key for upserts). - Required fields cannot be added once a table is built; use the new [Rebuild action](https://docs.dataplatform.ovh.net/dpe-actions-rebuild.md) to add them. Identifier fields cannot be `double` or `decimal`. - **Table metrics:** tables now have a **Metrics** section surfacing key statistics about the table. - **Fixes:** in the [Explorer](https://docs.dataplatform.ovh.net/lakehouse-manager-explorer.md), the **Export as CSV** button is disabled with an explanatory message when no query engine is active. **Data Processing Engine** - **[Write strategy](https://docs.dataplatform.ovh.net/dpe-jobs-preferences.md#write-strategy):** Load and Aggregate actions (Python and PySpark) can now upsert using a table's identifier fields. - Choose **Upsert**, **Insert when not matched**, or **Insert all** in the action preferences. - Actions default to **Insert all**; select **Upsert** manually to enable matching behavior. - **[Rebuild action](https://docs.dataplatform.ovh.net/dpe-actions-rebuild.md):** rebuild a table from scratch to change field constraints, restructure partitioned data, and clean its metadata. - Set a default value when promoting a field to Required/Identifier; optionally keep a backup of the previous table. - Removes all table history; Time Travel is no longer available after a rebuild. - **[SQL action](https://docs.dataplatform.ovh.net/dpe-actions-sql.md):** write and run a SQL query against your datasets and tables on the Trino engine, as a schedulable, workflow-ready action. - Supports reads, metadata, DML, DDL, and `CREATE TABLE AS SELECT`, which also builds the new table in the Lakehouse Manager. - Validate before creating, with destructive-query confirmation and a re-validation check on every run. - **[Spark History Server](https://docs.dataplatform.ovh.net/dpe-spark-history-server.md):** inspect the execution history of your PySpark actions and workflows from a new DPE page. - Start the server on demand to browse recent runs; it auto-stops when idle and is billed per DPU only while running. - Open each run's **Spark UI**, or analyze it with **DataFlint** performance insights, live or after completion. **Analytics Manager** - **Fixes:** in [Queries](https://docs.dataplatform.ovh.net/analytics-manager-queries.md), the **Export as CSV** button is disabled with an explanatory message when no query engine is active. **Control Center** - **[Logs Explorer](https://docs.dataplatform.ovh.net/control-center-logs-explorer.md) performance:** the Logs Explorer now issues a single metrics and jobs request instead of one per project, speeding up loading. - **[Alerting](https://docs.dataplatform.ovh.net/landing-page-control-center-alerting.md):** the **Create alert** action is available again from the project homepage. - **Fixes:** - logs no longer display "Invalid date". - refreshing the [Auditing](https://docs.dataplatform.ovh.net/control-center-auditing.md) trail no longer duplicates rows. **Apps and API** - **App Service UI (beta):** a redesigned, more unified interface for the App Service is now available as a beta, bringing it in line with the rest of the platform. - We will ship improvements and updates continuously over the coming weeks and months. Your feedback is welcome. - **Fixes:** creating an environment variable no longer fails with a 400 error. ## June 2, 2026 **Connectors** - **[Trino consumers](https://docs.dataplatform.ovh.net/connectors-consumers-trino.md):** create a Trino connection string in a few clicks from the **Consumers** tab, instead of setting up a service account, API keys, and the connection string by hand. - Pick a **READ** or **READ & WRITE** access level per consumer. - The connection string appears only once, at creation; each consumer has a dedicated service account. ## May 25, 2026 **General** - **Contact Support:** the **Contact Support** link now opens an in-platform support form instead of redirecting to the external OVHcloud Help Centre. **Lakehouse Manager** - **[Cross-project dataset sharing](https://docs.dataplatform.ovh.net/lakehouse-manager-datasets.md#cross-project-sharing-beta) (beta):** datasets can now be shared read-only with other projects in the same organization. - Admins share from the source project via the dataset's **Configuration** tab → **Manage share settings** → pick one or more target projects. - Receiving projects see the dataset in their Lakehouse Manager **Datasets** menu with a shared icon and the type **Lakehouse Manager (shared)**. Tables can be previewed but not modified. - In the [Explorer](https://docs.dataplatform.ovh.net/lakehouse-manager-explorer.md), shared tables appear under a new **Shared Datasets** category in the _list by dataset_ view. SQL editor only. **Data Processing Engine** - **Fixes:** importing a DPE configuration into another project now correctly rewrites repository references in workflows. Previously, workflows imported into the destination project still pointed to the source project's `repository_id` for the **Default** repository, breaking action references. **Control Center** - **[Auditing](https://docs.dataplatform.ovh.net/control-center-auditing.md):** notebooks are now covered by the audit trail. ## May 5, 2026 **Connectors** - **New connectors:** - [HubSpot](https://docs.dataplatform.ovh.net/connectors-sources-hubspot.md): extract contacts, companies, deals, tickets, pipelines, forms, marketing emails, and more. - [Odoo](https://docs.dataplatform.ovh.net/connectors-sources-odoo.md): extract contacts, CRM leads, sales orders, invoices, products, inventory, HR, and projects from your Odoo ERP instance. Compatible with Odoo 14–19. - [Salesforce](https://docs.dataplatform.ovh.net/connectors-sources-salesforce.md): extract standard and custom sObjects, run SOQL and SOSL queries, list reports, and inspect org limits. - [Shopify](https://docs.dataplatform.ovh.net/connectors-sources-shopify.md): extract products, customers, orders, inventory, marketing, B2B, payments, and content via the Shopify GraphQL Admin API. - [Stripe](https://docs.dataplatform.ovh.net/connectors-sources-stripe.md): extract customers, charges, payment intents, subscriptions, invoices, balance transactions, and events. - Each new connector ships with a companion **Technical Reference** page covering authentication, the full endpoint catalogue, pagination, rate limits, output format, and limitations. **Data Processing Engine** - **Fixes:** - selecting resource allocation when creating an action or workflow no longer freezes the screen. - updating the environment on an existing action no longer freezes the screen. **Control Center** - **Fixes:** the [Auditing](https://docs.dataplatform.ovh.net/control-center-auditing.md) refresh icon now preserves the selected time range instead of resetting to the last 6 hours. ## April 20, 2026 **General** - **Maintenance banner:** a banner is now shown in the [header](https://docs.dataplatform.ovh.net/manage-navigation.md#maintenance-banner) for the duration of any scheduled platform maintenance. While active, the platform is read-only; run operations remain allowed. **Connectors** - **OpenLineage consumer:** - auth token is now optional. - new **Disable Trino events** toggle - skip Trino-generated lineage (Explorer, Analytics Manager) and forward only DPE batch lineage. - **Fixes:** schemas no longer displayed incorrectly in Marquez for forwarded lineage events. **Lakehouse Manager** - **Explorer:** - **Export to CSV:** scale fields now come before data fields in visual-query CSV exports (download and bucket export). - all non-numeric values are now quoted in CSV exports, which avoids parsing issues with commas, quotes and line breaks. - **Fixes:** **Preview table** now opens the Explorer with the selected table loaded. **Data Processing Engine** - **Git dependency auto-update:** [Custom](https://docs.dataplatform.ovh.net/dpe-actions-custom.md) and [Custom PySpark](https://docs.dataplatform.ovh.net/dpe-actions-custom-pyspark.md) actions now support `@latest` in Git-hosted Python dependencies: - Append `@latest` to any `git+` dependency URL to automatically resolve the most recent published release at build time. - Click **Force Build** to pick up a new version. No more manual tag or commit hash updates across actions. - Note: the latest release is not detected automatically at runtime, a manual **Force Build** is required to pull the update. - **Custom action lineage SDK:** new `lineage_run` context manager, auto-emits `START` / `COMPLETE` / `FAIL` and generates `run_id`. - **Custom action lineage helpers:** new `schema_facet` (declare schemas) and `column_lineage_facet` (column-to-column mappings). - **Auto schema detection:** pass `connector=` to `lineage_run` to extract schemas automatically. - Updated docs: [Track data lineage in a Custom action](https://docs.dataplatform.ovh.net/developers-python-sdk-lineage.md). **Analytics Manager** - **Queries:** - **Export to CSV:** scale fields now come before data fields in visual-query CSV exports (download and bucket export). - all non-numeric values are now quoted in CSV exports, which avoids parsing issues with commas, quotes and line breaks. **Control Center** - **New: [Auditing](https://docs.dataplatform.ovh.net/control-center-auditing.md) (initial release):** logs significant create / update / delete activity on the platform. Coverage will expand in upcoming releases. - Project-level view in Control Center; filter by service (Connectors, Lakehouse Manager, DPE, Analytics Manager, IAM), resource and time window. - Organization-level view in Organization Settings. Currently covers organization IAM and member management; billing, quotas and similar are coming soon. - Two new roles at each level: **Audit Trail Admin** and **Audit Trail Viewer**. - **Alerting (beta):** [alerting](https://docs.dataplatform.ovh.net/landing-page-control-center-alerting.md) has been reworked and re-enabled. Please report any issues you run into. - **Fixes:** Logs Explorer now displays execution logs for DPE actions and workflows correctly. ## April 7, 2026 **Lakehouse Manager** - **OpenLineage compliance:** Data Platform now tracks and exposes data lineage events using the [OpenLineage](https://openlineage.io/) standard. Lineage events are recorded automatically for Load and Aggregate actions, and opt-in for Custom actions. - **Fixes:** Query Gateway now correctly auto-infers `catalog.schema` for Direct Query catalogs. This only affected tables with Direct Query enabled. **Connectors** - **New Consumer:** Added the [OpenLineage consumer](https://docs.dataplatform.ovh.net/connectors-consumers-openlineage.md), connect your own OpenLineage-compatible lineage solution (e.g. Marquez) by providing an endpoint URL and auth token. **Data Processing Engine** - **New Action:** Added [Send OpenLineage Events](https://docs.dataplatform.ovh.net/dpe-actions-send-openlineage-events.md), forward data lineage events from Data Platform to your external lineage backend. Supports cron scheduling or always-up continuous mode. - **SDK:** Added documentation for [tracking data lineage in Custom actions](https://docs.dataplatform.ovh.net/developers-python-sdk-lineage.md) using the `emit_lineage` function. Lineage is opt-in for Custom actions, declare inputs/outputs and emit `START`, `COMPLETE`, and `FAIL` events to integrate with the platform's OpenLineage graph. - **Fixes:** - Cron jobs are now active by default upon creation. - Execution logs for newly created actions and workflows are now displayed correctly. ## March 23, 2026 **Data Processing Engine** - Improved **Spark** job launch and workflow stability. - **Actions & workflows:** Added option to deactivate and reactivate **cron** jobs instead of deleting them. - **Fixes:** Environment variables field no longer overflows the layout for long values. **Lakehouse Manager** - **Attributes:** Attribute naming rules are now displayed. - **Explorer:** - Fixed export of **CSV** results to bucket for visual queries. - Fixed incorrect alert icon for direct-query sources after metadata extraction. ## March 9, 2026 **Connectors** - **New Connector:** Added support for the **FHIR** connector. - **Updates:** - Updated **ClickHouse** connector. - Fixed SSL issues in the **MySQL** connector. - **Kafka** connector certificates are now encrypted at creation time. - Updated: **Kafka** nested JSON fields extraction; metadata extraction may need to be re-run if your Kafka source contains nested fields. **Data Processing Engine** - Improved `SparkSession` acquisition for Custom PySpark Actions. - **⚠️ PySpark 3.3.2 Deprecation:** Creating new actions with **PySpark 3.3.2** is no longer possible. This version is being deprecated, please migrate to a newer PySpark version. **Lakehouse Manager** - **Trino:** Updated Trino version to **479**. - **Direct Query in Explorer:** Added direct query support in the Lakehouse Explorer. If your source is direct-query enabled, its tables and extracted attributes are now visible directly in the Explorer. - **Fixes:** Fixed encryption of nested parameters (particularly for Kafka databases). **Analytics Manager** - **Fixes:** - Resolved an issue with the `dashboard/deployed` endpoint. - Ensured resource groups are created during seed even when no JSON body is provided. **Control Center** - **Fixes:** Fixed `endDate` handling in the Control Center Logs Explorer. ## February 23, 2026 **General** - **Fixes:** - Environment selected in workflow preferences now properly retained. - Clicking metrics icon now redirects directly to the metrics page. - Deployment `start_date` now properly taken into account in Control Center Logs Explorer. - IAM auth provider `active` button now correctly reflects state. **Lakehouse Manager** - **Updates:** Updated Trino version from **476** to **478**. - **Performance:** Improved catalog reload time by approximately 2-3×. - **Fixes:** Fixed 401 errors on queries immediately after project creation. ## February 9, 2026 **General** - **Fixes:** - Fixed infinite loading spinner issue in Consumers section. - Enhanced platform stability with backend improvements and dependency upgrades. **Connectors** - **API Connectors:** Improvements and fixes for API connectors to enhance reliability and user experience. **APPs & APIs** - **Superset Theming:** Introduced a new theming module for Superset, allowing for better customization and branding options. - **Updates:** Updated Superset Template to version 6. **Lakehouse Manager** - **Performance:** Minor improvements to query stability and monitoring capabilities. ## January 26, 2026 **General** - **UI Refresh:** Rename **Data Catalog** to **Connectors** across the entire platform for improved clarity and consistency. - Update all navigation menus, documentation links, and sidebar references to reflect this change. - The functionality remains the same - this is purely a naming update to better represent the service's purpose as your central repository for data source connections. - **Fixes:** - Fix issue where Current Project usage had multiple supersets being displayed. Now displays just one superset column with total consumption, similar to how it's shown for apps and APIs. - Fix issue where users were unable to grant write access on policy tags. - Added a visual indicator when sorting table columns. - Improved overall platform stability and performance. - Enhanced user interface responsiveness across various components. **Data Processing Engine** - **Fixes:** - Show more accurate last 24 hours view in DPE metrics. - Fix issue where environment variables section was missing on PySpark actions. **Documentation Updates** - Updated all documentation references from "Data Catalog" to "Connectors" - Refreshed navigation and sidebar structure to reflect the new naming convention - Use "Connectors" terminology consistently in all tutorials and guides ## January 12, 2026 **General** - **Fixes:** - Fix infinite redirect loop that occurred when navigating away from the MFA (Multi-Factor Authentication) validation flow, ensuring a smoother authentication experience. - Resolve issue where users at the organization level could not add specific services to favorites in the sidebar. - Improved API dashboard precision by truncating numeric values to two decimal places. This makes the data display clearer and more consistent. - Enhance error handling and user-facing messages for quota management. Provide more informative feedback when quota limits are reached or exceeded. **Lakehouse Manager** - **Time Travel:** Introduced retention period for time-travel feature, by default it's **14 days**. [Read more on the doc](https://docs.dataplatform.ovh.net/lakehouse-manager-time-travel.md). - **Trino Optimization:** Optimized Trino memory usage to prevent Out-of-Memory (OOM) errors, improving query stability and performance for large datasets. - **Table Maintenance:** Enabled the table maintenance job in production. This daily automated job removes old snapshots and orphan files, helping to optimize storage usage and maintain data lakehouse health. **Data Processing Engine** - **Reverse-ETL Actions:** Added support for protocol as a destination option in reverse-ETL actions. - **PySpark Load/Aggregate:** Fix issue with XLS file processing in classic PySpark load and aggregate actions. **APPs & APIs** - **Deployment Status:** Improved deployment status updates with more accurate real-time information during app and API deployment processes. - **View Logs:** Added a new "View Logs" button that appears when an app or API is deployed. - **Open Button:** Display "Open" button only once app or API is fully deployed, preventing proxy error messages that previously appeared when attempting to access services before deployment completion. :::details **2025 ** **December 17, 2025** **General** - **Fixes:** - Resolved an issue where boolean values were not displayed in query results when executing queries in Lakehouse Manager Explorer or Analytics Manager. - Fixed an issue where incorrect data was displayed when switching between 7 days and 24 hours views in job metrics. - Group names are now correctly shown in the UI after granting access to a group on a policy tag. **Data Catalog** - **Google Analytics Connector:** Updated the Google Analytics connector with enhanced functionality. [Learn more about the Google Analytics Connector](https://docs.dataplatform.ovh.net/connectors-sources-google-analytics.md). **Lakehouse Manager** - **Time Travel:** Introduced time travel feature for tables, enabling you to query historical versions of your data. [Learn more about Time Travel](https://docs.dataplatform.ovh.net/lakehouse-manager-time-travel.md). - **Explorer:** Enhanced SQL query capabilities to support Iceberg snapshot version syntax using `FOR VERSION AS OF SNAPSHOT_ID`. - Improved Trino stability for more reliable query execution. **Data Processing Engine** - **Metrics:** DPE Actions and Workflows job metrics now include timed-out executions alongside successful and failed ones, for more comprehensive monitoring. - **Fixes:** - Resolved an issue where loading multiple Parquet files from a bucket with segmentation would fail when running multiple instances in parallel. - Restored the missing Python code sample in the dialog box when viewing API examples under DPE Actions and Workflows **Preferences > Triggers**. **December 1, 2025** **General** - **Project-Level Search:** Introduced a new search functionality within the project level to quickly find menus and sections. Use **CMD+K** on Mac or **CTRL+K** on Windows to access this feature. - **Quotas:** New Quotas feature now available in the organization settings page, allowing administrators to manage resource allocation limits. [Learn more about Quotas](https://docs.dataplatform.ovh.net/manage-organizations-settings.md#quotas). - **Performance:** Improved job performance across the platform. **Lakehouse Manager** - **REST Catalog:** Deployed a new open-source REST catalog service (Polaris) for Apache Iceberg to prepare for future integrations, such as enhanced table metadata access and more granular RBAC. - Fixed ACLs issue with policy tags. **Data Processing Engine** - **Notebooks:** Python 3.9 notebooks can no longer be created; **Python 3.13** is now the default version. - **Fixes:** - Resolved an issue where `S3Store.bucket_exists()` encountered errors when saving status with multiple workers during `get_bucket` operations. - Fixed PySpark linked environment parameter handling to properly support number and boolean types (previously only string values worked correctly). **November 17, 2025** **General** - During project creation, hostnames no longer accept underscores to ensure better compatibility. **Data Catalog** - **Kafka Connector:** Improved performance with faster and more efficient batch loading into datasets. - Fixed timezone handling in metadata extraction for more accurate data processing. **Data Processing Engine** - **Workflows:** Added `Force Rebuild` option, matching the functionality previously available in actions (useful for troubleshooting and ensuring clean re-execution). - **Custom Actions:** Added support for **Python 3.13**. - **PySpark Actions:** Fixed environment variable handling to properly support number and boolean types when using linked environments (previously only string values worked correctly). - **Spark Custom Actions:** Enhanced boilerplate templates for improved developer experience. **November 3, 2025** **⚠️ Important Actions Required ⚠️** - **Front-end Applications with MFA:** Due to a security patch, applications using project-level authentication with Multi-Factor Authentication (MFA) require a manual update. Users must update the `client-authority-manager` dependency to version `1.5.0` in their `forepaas.json` file (located in the root folder of the Front App), then rebuild and redeploy the application. **General** - Platform-wide infrastructure improvements for enhanced stability. - **Security:** Improved token rotation when switching between organizations and increased authenticator secret length for better MFA compatibility. **Data Catalog** - **Kafka Connector:** Now returns flattened JSON by default for easier processing. - **Source Management:** Columns using [reserved keywords](https://docs.dataplatform.ovh.net/lakehouse-manager-tables.md#reserved-words) are now automatically renamed with an `_r` suffix to prevent SQL query and table build failures. **Data Processing Engine** - **Jupyter AI Extension:** Notebooks now include the Jupyter AI extension for conversational assistance. Setup is required with your OVHcloud AI endpoint key. - **Notebooks:** - Improved startup time with asynchronous post-start processes. - New resource usage metrics (CPU, Memory, Storage) are now displayed. - Fixed an issue preventing the override of existing dependencies. - Updated example notebooks and boilerplates. - Resolved compatibility issues with Spark versions 3.4.4 and 3.5.5. **Lakehouse Manager** - **SDK Update:** Added a new [`create_from_physical`](https://docs.dataplatform.ovh.net/developers-python-sdk-connect-dataset.md#create_from_physicaltable-datasetdefault_dataset-kwargs) method to create logical objects from existing physical tables. - Improved stability for configuration imports by correctly setting table statuses. **Analytics Manager** - Fixed out-of-memory issues in Trino to enhance query performance and stability. **APPs & APIs** - There are no specific updates for this section in this release beyond the security patch mentioned above. **Documentation Updates** - **Tutorials Hub:** Replaces the previous Tutorials section, organizing learning materials into clear categories such as project setup, data ingestion, transformation, export, analysis with Trino, and business intelligence. - **[Jupyter AI Extension](https://docs.dataplatform.ovh.net/dpe-notebooks-jupyter-ai-extension.md):** New guide for the built-in Jupyter AI extension, including setup with your OVHcloud AI endpoint key and using conversational assistance in notebooks. - **[SQL Transformation Guide](https://docs.dataplatform.ovh.net/tutorials-sql-transformation.md):** Step-by-step examples showing how to perform SQL-based data transformations within notebooks on the data platform. - **SDK Reference:** Updated with new [dataset connector methods](https://docs.dataplatform.ovh.net/developers-python-sdk-connect-dataset.md); more updates coming in future releases. - **Link Fixes:** Several broken links across the documentation have been corrected for better navigation. **October 20, 2025** **General** - Platform-wide dependency upgrades for enhanced stability and security. - Fixed an issue where the Power BI connector was returning the wrong subdomain when sharing Project URLs. **Data Processing Engine** - Default Spark version updated to **3.5.5** for load and aggregate actions - Updated SDK to latest versions of **Pandas 2.x** and **SQLAlchemy 2.x**, improving notebook compatibility. - Added support for **Python 3.13** with updated base, PySpark, TensorFlow, and DataScience notebook images - New example notebooks included with every notebook image. **Data Catalog** - Added **NDJSON** format support for JSON uploads. **October 6, 2025** **⚠️ Important Actions Required ⚠️** - **For Apache Superset (using the SQLite template) built before October 6th:** Clients must rebuild and redeploy the environment to ensure compatibility and support. - **For the Front Application built before October 6th:** Clients must update the SDK to version **1.3.0** in `forepaas.json`, then rebuild and redeploy the application. **General** - Improved SSO login flow to only display auto-provisioned options where applicable - Fixed navigation, loading, and multi-button hover issues in UI - Database connectors now display warnings and documentation links **Data Processing Engine** - Fixed issues with PySpark actions and aggregate action reliability - Updated Oracle and Polar connectors for improved compatibility - New warning when changing destinations with multiple sources **Lakehouse Manager** - Fixed missing access rights for job endpoints (users now need explicit rights) - Improve stability and performance - Added Metastore service to handle metadata more efficiently - Fixed logical attribute build issue with incremental updates. - Polaris catalog deployed for open-source REST compatibility **Analytics Manager** - Fixed ACL-related constraints for endpoints - Configuration service updated for improved Trino catalog compatibility **Apps & APIs** - Fixed automatic deployment issues - Optimized Superset builds. - Updated store templates and SDK modules **September 22, 2025** **General** - Minor bug fixes and improvements **September 8, 2025** **General** - Improved error handling and log sanitization to make troubleshooting smoother and more secure. - Fixed errors with invalid parameters in the Log Explorer. **Data Catalog** - Improved OVHAPI Connector with enhanced V2 compatibility **Data Processing Engine** - Updated Python environment to _v3.13.7_ for improved security and compatibility. - Enhanced logs for easier debugging. - Improved PySpark execution reliability, reducing warnings and errors during workload runs. - Fixed an issue with SQL Server installation dependencies to ensure smoother deployments **Lakehouse Manager** - Better error message handling when importing configurations to simplify troubleshooting - Stability improvements across Lakehouse query services. **August 25, 2025** **General** - [**Consumers**](https://docs.dataplatform.ovh.net/landing-page-connectors-consumers.md) have now been moved to the [Lakehouse Manager](https://docs.dataplatform.ovh.net/landing-page-lakehouse-manager.md) - Improved logs for the Lakehouse Manager "all-in-one" build action. - Fixed an issue where "all-in-one" action reports a successful metadata update (update metas successful) but returns a result of -1. **August 11, 2025** **General** - Trino version upgrade v461 to v476 - PowerBI consumer is now available for use. guide on how to use is available [here](https://docs.dataplatform.ovh.net/connectors-consumers-power-bi.md) - Fixed minor issue with the edit icon not appearing on DPE actions/workflows/environments. **July 28, 2025** **General** - Improved ACL for actions for Data Processing Engine - New tutorial available for a FinOps uses case with FOCUS and superset - [here](https://docs.dataplatform.ovh.net/tutorials-finops-focus-superset.md) **July 15, 2025** **General** - Apache Superset is now availalable in the App Service - Adjusted Spark log levels and optimized processing for better performance - Introduced the [NYC Taxi dataset tutorial](https://docs.dataplatform.ovh.net/tutorials-pyspark.md) with two practical examples and a [PySpark cheat sheet](https://docs.dataplatform.ovh.net/tutorials-pyspark-cheat-sheet.md) for enhanced learning and quick reference. **Data Processing Engine** - Added new metrics to monitor notebook usage and performance - Improved notebook import/export experience for better usability - Improved documentation for [PySpark modules](https://docs.dataplatform.ovh.net/developers-python-sdk-connect-spark.md) and PySpark [use cases](https://docs.dataplatform.ovh.net/developers-python-sdk-quick-start-spark.md), making it easier to leverage distributed processing. - Added comprehensive documentation for previously missing Data Processing Engine (DPE) [actions](https://docs.dataplatform.ovh.net/landing-page-dpe-actions.md), expanding available guides. **UI / Platform** - Fixed an issue where Log Explorer wouldn’t display the bottom of the window correctly - Resolved a WebSocket issue when multiple users accessed the same DPE - You can now add widgets directly without going through the edit menu - Updated DPE Notebooks interface for a smoother experience - S31-compatible storage now automatically lowercases the region field for consistency **June 30, 2025** **General** - Project's home: update "APPLICATION SERVICES" tile by merging "Apps" and "APIs" tiles - Improve OAuth integration with MFA **Data Processing Engine** - All Actions: Added a **Force Rebuild** option, useful for troubleshooting and ensuring a clean re-execution. - PySpark Actions: added selection of appropriate "Spark Log Level" - PySpark Custom Action: added selectition of PySpark version (currently 3.3.2, 3.4.4, 3.5.5) **Lakehouse manager** - various optimisation and bugfixes **Control Center** - Logs Explorer improvements - Jobs Central: fix Last 30 days display **June 9, 2025** **Data Processing Engine** - PySpark Load: allow multiple files loading from Bucket **Control Center** - Logs Explorer: fix when last second of logs were sometimes not displayed **May 26, 2025** **Data Catalog** - Added JSONPath support to OVH API sources for simpler data navigation. - Improved performance of OVH API sources for quicker data access. - Made it easier to manage multiple endpoints in OVH API sources. **Data Processing Engine** - New Action - Export Table to Source: Export selected tables from your lakehouse to an external data source. - Fixed the Time Breakdown view in job details for accurate insights into job performance. - Resolved an issue preventing users from leaving the editing page in certain actions without refreshing. - Improved notebook usability with a pending status display when stopping a notebook. - Enhanced metrics for better monitoring. - Optimized Spark processing for improved performance and reliability. - Adjusted Spark log levels for clearer debugging and monitoring. - Fixed an issue with incorrect start dates in Logs Explorer for accurate job tracking. - Fixed incomplete display of last 24 hours metrics for accurate monitoring. - Reworked notebook access controls to include read-only support for better collaboration. **Analytics Manager** - Improved query menu interface with a clear display of visual or SQL mode on the main page. - Enhanced handling of queries to support virtual attributes, ensuring reliable performance. **Lakehouse Manager** - Fixed an issue where copying tables with a large number of attributes caused errors. - Resolved errors during Physical Build stops for smoother operations. - Standardized metadata extraction for better data consistency. - Added physical build status checks by job type for improved monitoring. **May 12, 2025** **General** - New [tutorial](https://docs.dataplatform.ovh.net/tutorials-billing-analysis.md) to use OVH API Connector for billing analytics **Data Catalog** - Better handling of date time string with UTC time zone - Improved Analyzer for streaming sources - Improved OVH API connector - Improved handling of PostgreSQL source using Direct Query and integration with Trino **Data Processing Engine** - Python SDK: we have fixed package **boto3 \< 1.36.0.** - **⚠️ Note:** For compatibility reasons, please do not include the boto3 library in your custom dependencies **April 28, 2025** **General** - Improved login page text for a better experience. - Tutorials and documentation now open in a new tab from the homepage. - Updated text on the Analytics Manager and SQL Queries screens. - Simplified organization invitations by removing the "create an organization" option. - Fixed occasional issues when searching in the policy tag list. - Fixed action links in Notebooks to better reflect user's permissions. - Improved user list visibility when managing organization/project invites. - Improved display of logs in the Control Center. **Data Processing Engine** - Fixed toolbar icon display in Advanced Mode for better usability. - Improved stability after notebook crashes, with better disk restoration. **Lakehouse Manager** - Improved dataset status updates. - Improved performance of physical builds. **April 14, 2025** **General** - Several UI fixes in Organization's pages and Identity Access Manager **Data Proessing Engine** - Fix File Transfer Action - In logs, add Action's name when just Action's ID was visible - Fix some logs visibility in Action / Workflow / Job view. **Lakehouse Manager** - Improve dataset creation time - Better handling of Explorer when Trino is not available **Control Center** - Fix display of some Monitoring views **March 28, 2025** **General** - Enhanced dataset creation flow for a more user-friendly experience. - Fixed minor bugs related to policy tags. - Resolved an issue where Control Center logs were not displaying correctly. **Data Processing Engine** - Enhanced logging for PySpark actions to improve traceability and debugging. - Improved OVHcloud API connector for better handling of multiple endpoints. - Notebooks: - Added support for Python 3.11 - Introduced new Data Science and TensorFlow notebook types. **March 18, 2025** **General** - Documentation is now available at [https://docs.dataplatform.ovh.net/](https://docs.dataplatform.ovh.net/) - Improve handling of logins mixing upper and lower cases - Improve readability of some error messages - Update project is ready e-mail - Remove all UI references to BETA **Data Processing Engine** - Streamline events exchange with UI - Notebooks: update Data Platform Python SDK **Lakehouse Manager** - Improve all-in-one action to better handle attributes names ::: ## Go further For training or technical assistance implementing our solutions, contact your sales representative or visit our [Professional Services](https://www.ovhcloud.com/en-gb/professional-services/) page to request a quote and have your project analysed by our experts. Ask questions, give your feedback and interact directly with the team building the Data Platform on the dedicated [Discord channel](https://discord.gg/ovhcloud). If you need support with your OVHcloud services, create a request in our [Help Centre](https://help.ovhcloud.com/csm?id=csm_get_help). Join our [community of users](https://community.ovhcloud.com/). 1 : S3 is a trademark of Amazon Technologies, Inc. OVHcloud's service is not sponsored by, endorsed by, or otherwise affiliated with Amazon Technologies, Inc.