From f237827914610afbbaf1cbc184a64e1e46c31410 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 19 Aug 2026 16:01:13 +0200 Subject: [PATCH] docs(variables): retire the dev Variables pages, redirect to help (PRDCT-554) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two /integrate/variables/ pages moved to help.keboola.com under Components, per Jordan's 08-05 placement call and Matyáš's 08-07 confirmation in #ask-component-factory ("Call it Variables and I don't mind wherever it is. Components as a page is fine."). - /integrate/variables/ -> https://help.keboola.com/components/variables/api/ - /integrate/variables/tutorial/ -> https://help.keboola.com/components/variables/api/tutorial/ - assets deleted; the help pages carry their own copies - both entries dropped from the Integrate nav Same stub shape as the merged /integrate/mcp/ retirement (#405). Co-Authored-By: Claude Opus 5 --- _data/navigation.yml | 6 - integrate/variables/countries.csv | 21 - integrate/variables/index.md | 727 +---------------------------- integrate/variables/tutorial-1.png | Bin 86901 -> 0 bytes integrate/variables/tutorial-2.png | Bin 18948 -> 0 bytes integrate/variables/tutorial.md | 198 +------- integrate/variables/variables.svg | 3 - 7 files changed, 2 insertions(+), 953 deletions(-) delete mode 100644 integrate/variables/countries.csv delete mode 100644 integrate/variables/tutorial-1.png delete mode 100644 integrate/variables/tutorial-2.png delete mode 100644 integrate/variables/variables.svg diff --git a/_data/navigation.yml b/_data/navigation.yml index 1b32ce09..62dc37a9 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -294,12 +294,6 @@ items: - url: /integrate/jobs/ title: Component Jobs - - url: /integrate/variables/ - title: Variables - items: - - url: /integrate/variables/tutorial/ - title: Tutorial - - url: /integrate/artifacts/ title: Artifacts items: diff --git a/integrate/variables/countries.csv b/integrate/variables/countries.csv deleted file mode 100644 index 3ff3dec7..00000000 --- a/integrate/variables/countries.csv +++ /dev/null @@ -1,21 +0,0 @@ -"COUNTRY","CARS" -"Belgium","6293781" -"Finland","3358232" -"Italy","41393877" -"Romania","6541260" -"Turkey","20193915" -"Bulgaria","2823705" -"France","38720798" -"Netherlands","8977994" -"Russia","42201083" -"Ukraine","8655700" -"Czech Republic","5116750" -"Germany","47418800" -"Poland","20671278" -"Spain","27528877" -"United Kingdom","33792233" -"Azerbaijan","1080912" -"Denmark","2723040" -"Hungary","3393075" -"Portugal","5650428" -"Sweden","5126572" diff --git a/integrate/variables/index.md b/integrate/variables/index.md index 1372217e..26545928 100644 --- a/integrate/variables/index.md +++ b/integrate/variables/index.md @@ -1,730 +1,5 @@ --- title: Variables permalink: /integrate/variables/ +redirect_to: https://help.keboola.com/components/variables/api/ --- - -* TOC -{:toc} - -*Note: This is a preview feature and as such may change considerably in the future.* - -**Variables** are placeholders used in [configurations](/integrate/storage/api/configurations/). Their value is -resolved at [job runtime](/integrate/jobs/). - -**Important:** Make sure you're familiar with the [Configuration API](/integrate/storage/api/configurations/) and -the [Job API](/integrate/jobs/) before reading on. - -See [Tutorial](/integrate/variables/tutorial) for step-by-step example. - -## Introduction -When using variables, the configuration is treated as a [Moustache template](https://mustache.github.io/mustache.5.html). -You can enter variables anywhere in the JSON of the configuration body. The configuration body is the contents of -the `configuration` node when you [retrieve a configuration](https://api.keboola.com/?service=storage#get-/v2/storage/branch/-branchId-/components/-componentId-/configs/-configurationId-). -This means that you can't use variables in a name or in a configuration description. - -Variables are entered using the [Moustache syntax](https://mustache.github.io/mustache.5.html), -i.e., `{{ "{{ variableName " }}}}`. To work with variables, three things are needed: - -- Main configuration -- the configuration in which variables are replaced (used); this can be a configuration of any component (e.g., a configuration of a transformation, extractor, writer, etc.). -- Variable configuration -- a configuration in which variables are defined; this is a configuration of a special `keboola.variables` component. -- Variable values -- actual values that will be placed in the main configuration. - -To enable replacement of variables, the *main configuration* has to reference the *variable configuration*. -If there is no *variable configuration* referenced, no replacement is made (the *main configuration* is completely -static). Variables can be used in any place of any configuration except legacy transformations (the component with -the ID `transformation`; it can still be used in a specific transformation -- e.g., `keboola.python-transformation-v2` -or `keboola.snowflake-transformation`, etc.), and an orchestrator (see [below](#orchestrator-integration)). - -## Variable Configuration -A *variable configuration* is a standard configuration tied to a special dedicated `keboola.variables` component. -The variable configuration defines names of variables to be replaced in the main configuration. You can create -the configuration using the -[Create Configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs). -This is an example of the contents of such a configuration: - -{% highlight json %} -{ - "variables": [ - { - "name": "firstVariable", - "type": "string" - }, - { - "name": "secondVariable", - "type": "string" - } - ] -} -{% endhighlight %} - -Note that `type` is always `string`. - -## Main Configuration -When you create a variable configuration, you'll obtain an ID of the configuration - e.g., `807940806`. -In the *main configuration*, you have to reference the *variable configuration* ID using the `variables_id` node. -Then you can use the variables in the configuration body: - -{% highlight json %} -{% raw %} -{ - "storage": { - "input": { - "tables": [ - { - "source": "in.c-application-testing.{{firstVariable}}", - "destination": "{{firstVariable}}.csv" - } - ] - }, - "output": { - "tables": [ - { - "source": "new-table.csv", - "destination": "out.c-transformation-test.cars" - } - ] - } - }, - "parameters": { - "script": [ - "print('{{firstVariable}}')" - ] - }, - "variables_id": "807940806" -} -{% endraw %} -{% endhighlight %} - -## Variable Values -You can either store the variable values as [configuration rows](/integrate/storage/api/configurations/#configuration-rows) of the -*variable configuration* and provide the row ID of the stored values at run time, or you can provide the variable values directly at run -time. There are three options how you can provide values to the variables: - -- Reference values using `variables_values_id` property in the *main configuration* (default values). -- Reference values using `variablesValuesId` property in job parameters. -- Provide values using `variableValuesData` property in job parameters. - -The structure of variable values, regardless of whether it is stored in configuration or provided at runtime, is as follows: - -{% highlight json %} -{ - "values": [ - { - "name": "firstVariable", - "value": "batman" - } - ] -} -{% endhighlight %} - -## Variable Delimiter -The default variable delimiter is `{{ "{{" }}` and `}}`. If the delimiter interferes with your code, it can -be changed as per the [Moustache docs](https://mustache.github.io/mustache.5.html). For example the -following piece of code - -{% highlight json %} -{ - "code": "SELECT \"COUNTRY\" || '{{ "{{ alias " }}}}' || '{{ "{{=<< >>=" }}}} {{ "{{ as-is " }}}} <<={{ "{{ " }}}}=>>' - AS \"COUNTRY\", \"CARS\" || '{{ "{{ size " }}}}' AS \"CARS\" FROM \"my-table\"" -} -{% endhighlight %} - -will be interpreted as (assuming the variables `alias=batman` and `size=big` are defined): - -{% highlight json %} -{ - "code": "SELECT \"COUNTRY\" || 'batman' || '{{ "{{ as-is " }}}}' - AS \"COUNTRY\", \"CARS\" || 'big' AS \"CARS\" FROM \"my-table\"" -} -{% endhighlight %} - - -## Example Using Python Transformations -In this example, we will configure a Python transformation using variables. - -### Step 1 -- Create Variable Configuration -Use the [Create Configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs) -for the `keboola.variables` component with the following content: - -{% highlight json %} -{ - "variables": [ - { - "name": "alias", - "type": "string" - }, - { - "name": "size", - "type": "string" - } - ] -} -{% endhighlight %} - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#16a5d721-b6a4-4daa-9196-8e90250ed16b). - -### Step 2 -- Create Default Values for Variables -Note that this step is optional -- you can use variables without default values. -In the previous step, you obtained an ID of the variable configuration. Use the -[Create Configuration Row API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs/-configurationId-/rows). -Use the ID of the variable configuration and `keboola.variables` as a component. Use the following body: - -{% highlight json %} -{ - "values": [ - { - "name": "alias", - "value": "batman" - }, - { - "name": "size", - "value": "42" - } - ] -} -{% endhighlight %} - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#72de2851-1853-4fe3-bec3-856fcc9e2270) - -### Step 3 -- Create Main Configuration -Now it is time to create the actual configuration which will contain a Python transformation. -Use the following configuration body. The `storage` section describes the standard [input](/extend/common-interface/config-file/#input-mapping--basic) -and [output](/extend/common-interface/config-file/#output-mapping--basic) mapping. - -{% highlight json %} -{% raw %} -{ - "storage": { - "input": { - "tables": [ - { - "source": "in.c-variable-testing.{{alias}}", - "destination": "{{alias}}.csv" - } - ] - }, - "output": { - "tables": [ - { - "source": "new-table.csv", - "destination": "out.c-variable-testing.cars" - } - ] - } - }, - "parameters": { - "blocks": [ - { - "name": "First Block", - "codes": [ - { - "name": "First Code", - "script": [ - "import csv\ncsvlt = '\\n'\ncsvdel = ','\ncsvquo = '\"'\nwith open('in/tables/{{alias}}.csv', mode='rt', encoding='utf-8') as in_file, open('out/tables/new-table.csv', mode='wt', encoding='utf-8') as out_file:\n writer = csv.DictWriter(out_file, fieldnames=['COUNTRY', 'CARS'], lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo)\n writer.writeheader()\n\n lazy_lines = (line.replace('\\0', '') for line in in_file)\n reader = csv.DictReader(lazy_lines, lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo)\n for row in reader:\n writer.writerow({'COUNTRY': row['COUNTRY'] + '{{ alias }}', 'CARS': row['CARS'] + '{{ size }}'})\nfrom pathlib import Path\nimport sys\ncontents = Path('/data/config.json').read_text()\nprint(contents, file=sys.stdout)" - ] - } - ] - } - ] - } - "variables_id": "807968875", - "variables_values_id": "807952812" -} -{% endraw %} -{% endhighlight %} - -The `variables_id` property contains the ID of the [variable configuration](/integrate/variables/#step-1--create-variables-configuration) - e.g., `807968875`. The -`variables_values_id` property is optional and contains the ID of the [row with default values](/integrate/variables/#step-2--create-default-values-for-variable) - e.g., `807952812`. -The `parameters` section contains a script with the following Python code: - -{% highlight python %} -{% raw %} -import csv -csvlt = '\n' -csvdel = ',' -csvquo = '"' -with open('in/tables/{{alias}}.csv', mode='rt', encoding='utf-8') as in_file, open('out/tables/new-table.csv', mode='wt', encoding='utf-8') as out_file: - writer = csv.DictWriter(out_file, fieldnames=['COUNTRY', 'CARS'], lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo) - writer.writeheader() - lazy_lines = (line.replace('\0', '') for line in in_file) - reader = csv.DictReader(lazy_lines, lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo) - for row in reader: - writer.writerow({'COUNTRY': row['COUNTRY'] + '{{ alias }}', 'CARS': row['CARS'] + '{{ size }}'}) - -from pathlib import Path -import sys -contents = Path('/data/config.json').read_text() -print(contents, file=sys.stdout) -{% endraw %} -{% endhighlight %} - -The script reads a file given by the alias, modifies the two columns **COUNTRY** and **CARS**, and -prints the contents of the configuration file to output. - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#732e4b66-4f2d-46ab-80ba-7a7d07ddb94b). - -### Step 4 -- Run Job -There are three options for providing variable values when running a job: - -- Relying on default variables -- Providing ID of values using the `variablesValuesId` property in job parameters -- Providing values using the `variableValuesData` property in job parameters - -Following the rules for running a job, you always **have to** provide values for the defined variables. -Note that it is important which variables are *defined* in the variable configuration, not which -variables you actually use in the main configuration. For example, the main configuration references a variable -configuration with *firstVar* and *secondVar* variables, but you're using `{{ "{{ firstVar " }}}}` and -`{{ "{{ thirdVar " }}}}` in the configuration code. Then you have to provide values at least for *firstVar* -and *secondVar* variables. If you provide values for all *firstVar*, *secondVar*, and *thirdVar*, all of them will -be replaced. If you omit *thirdVar*, it will be replaced by an empty string. If you omit one of *firstVar*, -*secondVar*, an error will be raised. - -The second rule is that the three options of passing values are mutually exclusive. If you provide values using -`variablesValuesId` or `variableValuesData`, it overrides the default values (if provided). You can't use -`variablesValuesId` and `variableValuesData` together in a single call. If you do that, an error will be raised. -If no default values are set and none of the `variablesValuesId` or `variableValuesData` is provided, an error -will be raised. - -#### Option 1 -- Rely on default variables -If you created the default values, you can now directly run the job. Use the [Create Job API call](https://api.keboola.com/?service=job-queue#job-queue/tag/jobs/POST/jobs) -with the following body: - -{% highlight json %} -{ - "component": "keboola.python-transformation-v2", - "config": "807943784", - "mode": "run" -} -{% endhighlight %} - -The `config` property contains the ID of the [main configuration](/integrate/variables/#step-3--create-main-configuration). -Before executing the API call, you have to create the source table. Unless you modified the mapping in the -[example](/integrate/variables/#step-3--create-main-configuration), you have to create a bucket named -**variable-testing** in the **in** stage. Then create a table called **batman** with columns **COUNTRY** -and **CARS**. You can use this [sample CSV file](/integrate/variables/countries.csv). - -After you create the input table, you can run the job. -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#31486ac2-ea52-4f19-a039-2ee1b1ae5863). -It will create a new table in Storage -- **out.c-variable-testing.cars**. The tables should contain the default -values, e.g.: - -|COUNTRY|CARS| -|---|---| -|Belgiumbatman|629378142| -|Finlandbatman|335823242| -|Italybatman|4139387742| -|Romaniabatman|654126042| - -The events of the job will contain the contents of the [configuration file](/extend/common-interface/config-file/) -where you can verify that the variables were replaced. - -
- Click to expand the configuration. -{% highlight json %} -{ - "storage": { - "input": { - "tables": [ - { - "source": "in.c-variable-testing.batman", - "destination": "batman.csv", - "columns": [], - "where_values": [], - "where_operator": "eq" - } - ], - "files": [] - }, - "output": { - "tables": [ - { - "source": "new-table.csv", - "destination": "out.c-variable-testing.cars", - "incremental": false, - "primary_key": [], - "columns": [], - "delete_where_values": [], - "delete_where_operator": "eq", - "delimiter": ",", - "enclosure": "\"", - "metadata": [], - "column_metadata": [] - } - ], - "files": [] - } - }, - "parameters": { - "blocks": [ - { - "name": "First Block", - "codes": [ - { - "name": "First Code", - "script": [ - "import csv\ncsvlt = '\\n'\ncsvdel = ','\ncsvquo = '\"'\nwith open('in/tables/{{alias}}.csv', mode='rt', encoding='utf-8') as in_file, open('out/tables/new-table.csv', mode='wt', encoding='utf-8') as out_file:\n writer = csv.DictWriter(out_file, fieldnames=['COUNTRY', 'CARS'], lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo)\n writer.writeheader()\n\n lazy_lines = (line.replace('\\0', '') for line in in_file)\n reader = csv.DictReader(lazy_lines, lineterminator=csvlt, delimiter=csvdel, quotechar=csvquo)\n for row in reader:\n writer.writerow({'COUNTRY': row['COUNTRY'] + '{{ alias }}', 'CARS': row['CARS'] + '{{ size }}'})\nfrom pathlib import Path\nimport sys\ncontents = Path('/data/config.json').read_text()\nprint(contents, file=sys.stdout)" - ] - } - ] - } - ] - }, - "variables_id": "807943784", - "variables_values_id": "807952812", - "image_parameters": {}, - "action": "run", - "authorization": {} -} -{% endhighlight %} -
- -#### Option 2 -- Run a job with stored values -Similarly to the [default values](http://localhost:4000/integrate/variables/#step-2--create-default-values-for-variable), -you can store another set of values. Let's add another configuration row to the *existing* variable configuration: - -{% highlight json %} -{ - "values": [ - { - "name": "alias", - "value": "WATMAN" - }, - { - "name": "size", - "value": "4200" - } - ] -} -{% endhighlight %} - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#fbe487b5-cd68-4318-8219-7c067ebef795). -You will obtain an ID of the row. Then create a table called **watman** with -columns **COUNTRY** and **CARS**. You can use this [sample CSV file](/integrate/variables/countries.csv). - -Run a job with parameters and provide the ID of the main configuration in the `config` property and -the ID of the value row in `variableValuesId`: - -{% highlight json %} -{ - "component": "keboola.python-transformation-v2", - "config": "807968875, - "mode": "run", - "variableValuesId": "807957572" -} -{% endhighlight %} - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#f883eb13-3f20-4e03-bf1b-36e9c889f773). -The output table now contains: - -|COUNTRY|CARS| -|---|---| -|BelgiumWATMAN|62937814200| -|FinlandWATMAN|33582324200| -|ItalyWATMAN|413938774200| - -#### Option 3 -- Run a job with inline values -The last option to provide the values for variables is to enter them directly when running a job. -Variable values are entered in the `variableValuesData` property: - -{% highlight json %} -{ - "component": "keboola.python-transformation-v2", - "config": "807968875", - "mode": "run", - "variableValuesData": { - "values": [ - { - "name": "alias", - "value": "batman" - }, - { - "name": "size", - "value": "scatman" - } - ] - } -} -{% endhighlight %} - -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#2c38d6ca-2eda-4c7e-9888-071fad3d31d8). - -The output table will contain: - -|COUNTRY|CARS| -|---|---| -|Belgiumbatman|6293781scatman| -|Finlandbatman|3358232scatman| -|Italybatman|41393877scatman| - -## Orchestrator Integration -Variables in a configuration interact with an orchestrator in two ways: - -- Variables can be entered in task configuration. -- Variables can be entered when running an orchestration. - -Entering variable values in task configurations allows the orchestration to run configurations with variables. -Variable values are entered in the `actionParameters` property. The parameters are identical to -[running a job](/integrate/variables/#step-4--run-job). - -When running an orchestration, you can also provide variable values for an entire orchestration. In that case, -the provided values will override those set in individual orchestration tasks. The parameters are identical -to [running a job](/integrate/variables/#step-4--run-job). - -### Step 5 -- Create Orchestration -You have to use the -[Create Configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs) -to create a configuration of the `keboola.orchestrator` component. -You can use the following data in the configuration: - -{% highlight json %} -{ - "phases": [ - { - "id": 2468, - "name": "Extractors", - "dependsOn": [] - } - ], - "tasks": [ - { - "id": 13579, - "name": "Example", - "phase": 2468, - "task": { - "componentId": "keboola.python-transformation-v2", - "configId": "807968875", - "mode": "run", - "variableValuesId": "807952812" - }, - "continueOnFailure": false, - "enabled": true - } - ] -} -{% endhighlight %} - -The contents of the `task` property are identical to the body -of the [run job API call](/integrate/variables/#step-4--run-job). Here, the value `807968875` refers to the ID -of the main configuration, and `807952812` refers to the ID of the configuration row with variable values. -You can use the `variableValuesData` field in the same manner. -Creating the above configuration will return a response containing the configuration ID, e.g., `807969959`. -See an [example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#9f2f9da0-59eb-4f33-a206-e5add24725d1). - -### Step 6 -- Run Orchestration -When running an orchestration which contains configurations referencing variables, you have to provide their -values. You can either rely on the stored values (either at the component configuration or in the orchestration task) -or you can provide the values at runtime. - -#### Option 1 -- Rely on stored values -Use the [Run Job API call](https://api.keboola.com/?service=job-queue#job-queue/tag/jobs/POST/jobs) -to run an orchestration. In its simplest form, the request body needs to contain just the ID of the orchestration -(obtained in the previous step): - -{% highlight json %} -{ - "component": "keboola.orchestrator", - "config": "807969959", - "mode": "run" -} -{% endhighlight %} - -As long as the variable values can be found somewhere, this is sufficient. See [an example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#3ebdc3f5-a940-4f0d-860b-ec311f704a7e). - -#### Option 2 -- Provide values -Use the [Run Job API call](https://api.keboola.com/?service=job-queue#job-queue/tag/jobs/POST/jobs) -to run an orchestration. Additionally, you can use the `variableValuesId` or `variableValuesData` property -to override variable values set to individual tasks. The calling convention is the same as shown in the -[basic job run](/integrate/variables/#step-4--run-job). The same rules also apply, notably that you can't -use `variableValuesId` and `variableValuesData` together. -A sample request body: - -{% highlight json %} -{ - "component": "keboola.orchestrator", - "config": "807969959", - "mode": "run", - "variableValuesData": { - "values": [ - { - "name": "alias", - "value": "batman" - }, - { - "name": "size", - "value": "scatman" - } - ] - } -} -{% endhighlight %} - -See [an example](https://documenter.getpostman.com/view/3086797/77h845D?version=latest#f4fcf7af-afbe-4c29-999e-0f4c50aa477b). - -## Variables Evaluation Sequence -There is a number of places where variable values can be provided (either as a reference to an existing row with -values or as an array of `values`): - -- Parameters in the orchestration -- Parameters in `task` setting of the orchestration -- Parameters in the component job itself -- Default values stored in configuration (`variables_values_id` property) - -The following diagram shows the parameters mentioned on this page and to what they refer to: - -{: .image-popup} -![Screenshot -- Properties references](/integrate/variables/variables.svg) - -In a nutshell, `variableValuesId` always refers to the row of the variable configuration associated with the -main configuration. The main configuration is referenced in the `config` parameter. From another point of view, -the `config` parameter represents the configuration (either a component or an orchestration) to be run. -Note that in stored configurations snake_case is used instead of camelCase. - -The following rules describe the evaluation sequence: - -- Values provided in job parameters (a component job or an orchestration job) override the stored values. -- Values provided in an orchestration job override the stored values in `task`. -- Values provided in `task` override values stored in the component configuration. -- `variableValuesData` and `variableValuesId` can't be used together, so neither of them takes precedence. A reference to stored values can't be mixed with providing the values inline. -- If no values are provided anywhere, the default values are used. If no default values are present, an error is raised. - -## Shared Code -Related to variables is the Shared Code feature. Shared code allows to share parts of configuration code. In a -configuration it is also replaced using the [Moustache syntax](https://mustache.github.io/mustache.5.html). Shared code -is referenced using `shared_code_id` and `shared_code_row_ids` configuration nodes. Unlike variables, shared code can't -be overridden at runtime (so there are no parameters to set when running a job or in orchestration). -Shared code can, however, contain its own variables which need to be merged to those of the main configuration. - -### Creating Shared Code -Shared code pieces is stored as configuration rows of a dedicated component `keboola.shared-code`. Before creating a -piece of a shared code, you first have to create a configuration. Notice that the UI uses certain configurations for -certain components so you might want to check the existing configurations of `keboola.shared-code` component before -crating a new configuration. - -To create a configuration, use the [create configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs). The configuration content is ignored, i.e all you need to provide is name: - -{% highlight bash %} -curl --location --request POST 'https://connection.keboola.com/v2/storage/components/keboola.shared-code/configs' \ ---header 'X-StorageAPI-Token: my-token' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'name=python-code' -{% endhighlight %} - -Let's assume that the created configuration ID is `618884794`. -Next step is to create the shared code piece itself. To do this create a configuration row of the above configuration -with the configuration row content containing a piece of share code, for example: - -{% highlight json %} -{ - "code_content": [ - "from os import listdir\nfrom os.path import isfile, join\n\nmypath = '\''/data/in/files'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)\nmypath = '\''/data/in/user'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)" - ] -} -{% endhighlight %} - -It is advisable to set a reasonable `rowId` of the row, because it will be used later to reference the shared code: - -{% highlight bash %} -curl --location --request POST 'https://connection.keboola.com/v2/storage/components/keboola.shared-code/configs/618884794/rows' \ ---header 'X-StorageApi-Token: my-token' \ ---header 'Content-Type: application/x-www-form-urlencoded' \ ---data-urlencode 'configuration={ - "code_content": ["from os import listdir\nfrom os.path import isfile, join\n\nmypath = '\''/data/in/files'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)\nmypath = '\''/data/in/user'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)"] -} -' \ ---data-urlencode 'rowId=dumpfiles' -{% endhighlight %} - -The above example creates a piece of shared python code named `dumpfiles` which contains the -following python code: - -{% highlight python %} -from os import listdir -from os.path import isfile, join - -mypath = '/data/in/files' -onlyfiles = [f for f in listdir(mypath)] -print(onlyfiles) -mypath = '/data/in/user' -onlyfiles = [f for f in listdir(mypath)] -print(onlyfiles) -{% endhighlight %} - -### Using Shared Code -To use a piece of shared code, you have to reference it in a configuration using `shared_code_id` which is the ID of the shared code configuration and `shared_code_row_ids` which is an array of IDS of shared code pieces. With the above example you need to add the following nodes to the configuration: - -{% highlight json %} -{ - "storage": {...}, - "parameters": {...}, - "shared_code_id": "618884794", - "shared_code_row_ids": ["dumpfiles"] -} -{% endhighlight %} - -With that all moustache references to `{{ "{{ dumpfiles " }}}}` will be replaced by the shared code piece. All other -moustache references will be kept untouched and be treated like variables. E.g: the following configuration: - -{% highlight json %} -{ - "storage": {}, - "parameters": { - "blocks": [ - { - "name": "Main block", - "codes": [ - { - "name": "Main code", - "script": ["{{ "{{ someOtherPlaceholder " }}}}"] - }, - { - "name": "Debug", - "script": ["{{ "{{ dumpfiles " }}}}"] - } - ] - } - ] - }, - "variables_id": "618878103", - "variables_values_id": "618878104", - "shared_code_id": "618884794", - "shared_code_row_ids": ["dumpfiles"] -} -{% endhighlight %} - -Will be modified to: - -{% highlight json %} -{ - "storage": {}, - "parameters": { - "blocks": [ - { - "name": "Main block", - "codes": [ - { - "name": "Main code", - "script": ["{{ "{{ someOtherPlaceholder "}}}}"] - }, - { - "name": "Debug", - "script": ["from os import listdir\nfrom os.path import isfile, join\n\nmypath = '\''/data/in/files'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)\nmypath = '\''/data/in/user'\''\nonlyfiles = [f for f in listdir(mypath)]\nprint(onlyfiles)"] - } - ] - } - ] - }, - "variables_id": "618878103", - "variables_values_id": "618878104", - "shared_code_id": "618884794", - "shared_code_row_ids": ["dumpfiles"] -} -{% endhighlight %} - - -The variables then need to contain `someOtherPlaceholder` variable in order to produce a fully functional configuration. -The same way if the shared code piece contains any variables, they have to be set when running the configuration. - -**Important:** The replacement of the shared code piece occurs only within an array of the configuration JSON. In the above code, the shared code reference is `"script": ["{{ "{{ someOtherPlaceholder "}}}}"]` which is the only valid form of a Shared Code reference. For example -`"script": ["some code {{ "{{ someOtherPlaceholder "}}}} some other code"]` or `"script": "{{ "{{ someOtherPlaceholder "}}}}"` are invalid Shared Code references which may not be replaced the way you intend. - -**Important:** The replacement of the shared code piece merges the `code_content` array containing the shared code definition with the array containing the shared code reference. With a shared code reference in form `"script": ["a", "{{ "{{ someOtherPlaceholder "}}}}", "b"]` and shared code definition in form `"code_content": ["c", "d"]` the resulting replacement would be `"script": ["a", "c", "d", "b"]`. diff --git a/integrate/variables/tutorial-1.png b/integrate/variables/tutorial-1.png deleted file mode 100644 index 736929496c8cc1a11cd874ffbfb4c478d76bf59d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86901 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 FlkOWwt9d&ypnDPhybJ;SM86sa?wJAh`y1(FZv> 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≠Bv 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Ã+ zE5EwCHYFg)o3!9`+&Z!^)760knS>TWCUaLObyrts@{b?%Hc7$3w?ipDmh&x}`xURI zN^YIjLMSOIOW7-~vM4t9yq_|@2c{K{e6h9NHaG0mH^ z+GLn=b%_v3utZJvb_?OWBSdqw81xJ7;P+RwTGj4#2B5 z7bcwN(L*AbiPG3SG(WF!C_eY|)BLER(QRV_s4ciwj@`*ZyA@pxjRpkZ)+U7`jgZ%)dN zR=u4N;572ar}Gu}tEX=WlvNFQ=t46S61qFTsejI7o-9?xZA;;Gfj#PLegQL7)42}Scbp|S^2$d@^Yt9=%hYK$@#D!J>36fM1)Q5no{Bn+MaC*sTyTEp<&xeEI|* z7qYvZI7Q@+rtJ6D3_E)KljV0Rf%@)e-3SYl)tkX4}6oaE1ceCW2>&O=YiPSef84w5}Osr2}tv~A!@6!YQ)8j zA!5f+n%dmhv9z*+LZLP}OQl*|Ws5o)ZVF&Zt55TBIyK%YQ2x%uG}PA?8b{B~cw@i4 z+#vx1hV64?^@J781wuThzYHby?Qsm7$q*7!_0|N-@7dXk#1!qYdP{5T+yz&JeC7G> zfdTdlsrL{eoU}XTY_%dkf35xd)%0gPVPqWHiPGv5V&Ki*EO$>Pb6PdJv8fUkyyjBR z3&83^*{(L9WPgD{N5>UM>;c){#xB*9zqUOYpi?%1i!#!P&Q9jC;joy>7xHhQ+;?xe zvsXx-`f`7B;R==f)GOcQ?bVtW|E8_0Yp%1Cn{L}ZBSR#Eh&`Xzp^FMqP6j{!C%Oubjs#s-dQ#K{&G6vM{hp@(E@ooByQ$4H<+xR5VnF za}K{pdv)X2z*+Rn&1}}bIf2~hSzIr4-3wBcHcNH<_|s}%GCjD5?@;eIjpVt6s3m*t zs0_?G@k&G<7^T`wmB8oO6kFL#?L7F?@;YHSIyf}gQd*C1+`p1IQ`tCw-SQ`iji5Sd zmbv-&EVK{jkV;xY%wb{3FY0kxFGw@6hZvPNxJK3PfTm$uSQaH;RJ$oWQDwsZca8Kr zJIu_)X#x>S)F`AG{?(}ciV8FotcUY+^-4IEvW;egZgQR!-Fi4)r=8-;%BV4)!x~;SiS6`#VZ&na`SvY5$sQ5laT#Ct%us^X#Z3z z!P07`FHYoJQ{PGo3aGLk`|SgJ5b?RQ+bSw+dHlR|R%4}wSB-*;EBm13s1Z*sIW#y~ z5GvOqA~G-c^GecF_%S0ToYHdvtaZv z@TzM}5o7Q)FU`~_=8czW)fTx|(+|S$;J40O>-eAX@IjQ>#uK-$_KLMvrNR7qoi|mg z&|WNz#MUk4jHa$EC$7D5=uW0Urt;+%>H2Pscg zNW|C3uMsvQe@6ZBK_)G1;c+%o|AT`sR^x3-3cc=ESso{z236_DJpA`}o7*0jWCN+U zxDd%`3}mw@6M?gByv(zWbftC{QmNnsK12?5PsIcy!|n1Fj0hbOQrekBN+!$-mrrK! z0tDJE{%P{d-WLY@39+Q8^sY1UYpKF=GBTmxq(K%rUA}CCf>LWao=fd3mokS2pDUY8 zN}OEoa@d|D?c;4_>H|sPtp%avPd*bxkoWA*Uk)U456^W;&3>0snJm_@TBsWZIbfsR zYJ5V1#BMr1F0Hry$y!ofUBF*fc7Io-RIl)8=T@oSbiGl&puKp4*9v)y%uYsj01j*G zQapwYzP-4U=4wSn7S+P{7tGV(cklU%0s^XlO9lfXA(>zoXlXCHFA$D8?>ZBhy4}^! z!@^~OF{nhWC=_J+`!^>g6~rj#NGF`o(0HB%X*`{4*$0M?Man<+@M+8TtfyC(uaW-# zDYPo^Y^|cae8jxE56WUge2ENhJ-HCe^yl~uFXdVOv) z3CugfVNyAL0`q}j5c~VzpYQheUAw#1@xD_5_KSjbSN*Bu5Oe1?oS4g8WJdn!)9)t3 z;&^&rKFcjEENJ5(?svEdU6woa#nj$+MJk)`q$G1G^A*$nZz-uuY{2=X7YCct6v{K z##J00wY$Fw`my2Bv$kfM_A|PW5!PfU0U;r=j3ei=S}J2vbUBzfDe$PNftJ_SR)8a4 ze`CwgM}Y6u>9R{UG1uWcH7EiO8Cm`Dw1mImH@|eX0(SFirIDp2amE|wmP&`tYzsFL zYw)&Eu&aReQ**C_X+DCKH;<9QU>VPqT~);j(_Q2tn4G9u^YIGuQ4EiSJ$+Tn=8TLF zy1Dh8&wrksg^i7n51I#LVo7sp>fa+7j_me<6p-swBZgN0Oy4z>83!c#r*H?RE66_T z>`wkk=(np;uFN)-O^*z?A5ncnkW1wsr%K1S=c^AVb1WWhS~R9EC)M!>(sGKq*x2qr z%_acR#buY@cB7bCJe-KtRDm24ACC`vlj5^6aLuH1^G3VMvFl7yHu-83wmd@V1vFUC zcW$|i{goy@Yr9$wYx&2`?#;PMMcomEx|-8FNcz^+oYo6H)Y9G!9$Y1fz8hD^A>pmo z&F<%OzXGLKR-Wl?FR?tzy??*RtQRp~Wp)cD{==}ep9PZ}JN9rGL=z^vQ#!<4*7e{A znPSq@Ww5o61xlMk`|RfDD7gGBj@+EAtc5Oz)3I)Zy8Gkz^V9-54J65_4}X$71)gip zU+nuwl71_PLfLD&E{`1bnvF#a4JW$7wOVeyJ7W-@PM?%iTwjuY|E|~_A;I|Zsssuh zVdG$7;dXrMxe>Y=x7xMJBY!HI&9vD(_ADnyTy>77*jJUbDTyDbLc%Ao}Q-4AYHp#*8TwKI!gBmfE z={8>!)0U3r7pb27Q(^Wdpzw5Z<JxK(-rILn_1=XCLKYv#G{CTWm^=X=SO}cLLTtpm6DE-6mc<)_Y zt2bX~H&>f0K2ktX&0tTDcGFe&fXqHp3g|!`JJm2UYK2zgQ z|Ej0GSAF#AJIF+94zDV~d{dTb0__>@>|8!d%Pad$larHkDB!A;P^6yQ7Se!2K;Tl6 zICnE~#^dwQ7r0ed<$*2tGfYaVL9sH3);E^8Rz9^!K}JYRi@_l5vzek04x)z#F_wXP zgDZ!$gtYvfD^WdsKybbPn1OKo(?3DW;TZ|(lR`GW7;8l7lb`evvW-@4Us4DxTzxvw zf4Q2Icka3~bG#lws>if52~-_5MrK1PzXm6Zvd8rbEoEh8FlT1@Jtx4+U1^Jhn5t2tbE41RdJy^H=!uM+g~6U^_#J56jaq#@nkHZV=VpEeA7O zS(U&sYSn;Ie$D5OQBhH`Gg-OYZ>0tIg46O(^)8*)O_Q~S#dwj)v~bbRno7Z^4tLC* zX_nHY``L+JWqwlDGg*OFO@l5B>?iZZGT5Kk%_l~#0)A79z>2kJb95RxSy&QI(ea&g zVV-P%nK7R`7AFS>Cc62nJY0xYx8l39s#v0YN$ui|0{vjzHd0gMkGQ__e07fKf|H)?bfFhttY><_Wg9 z`|C}bSAzDt9_lvek;1qga?$*7Kt*pcHu<#WYGbNoJ~j2=8@~6();iJH8*|vQ)6NwL=A)vu6B83Lh&hjdJITota6N3Ug*2Th#gw&bfanql z8~ZZwi7{OY2l|^Q`dcI3K;q@u?jUR}zJ(JM6*X+UXok$p&x8EH6zEmoxT~V&hJJGR zfLIQsG*Ucfme1hzx1w55upiEs*OCMnwN$nwUiz%_x>%R(RgPGE{-n5ERA%h+-f9R+ zt~OP6I9*lXlaXAab(x%0U=~jFlP5VOr0+W}Z6*ftc0&1L7YC^Jgt?tgHaHc*WTj!y zbA7ppq4EA|iv)`GNrUboi%KW~v)jbR1PoT|(4AN7j)S;7$-nOnv$ySy#>9``Amy#H zE!sm(4{daaB(uUM3!SNFSeWW6R1R*7zI<0+UA;3-Yq(i@bdMsZ=Ilf=Qs%FznyE;Y z%vEOd_JdXp*_e4{N(uwk7OZ^?3h(=b;B!eaV^i~DXkkg39!CkM#o>~{Ha6@2zLooh zWl^!bRD;`%qfC}~btwIZM|ePXY;J4aC(!LXQES9gX~Y}(Q_aS;w`Fg0zo;jqwSnjP z;MN_;*wIg>R~0NLe5HC;93HONGquX$Q~XubO5&Zy=M`)14}p*nVcj!|d_@?co|7+I zxBNYGGTUW;f5PX4H(F;+48qKQWPHI@Pt0`g5D6dC;@@bwZ5@3VW>Wxhe5O71|BH`o z|5Q4WD|j^9(^ceQWZzOHhGIqkw^QWFb z48b6&!13NKVq`WB_v!X^-nwIm29I`KAQ4{078bI#uW!>V0|fP@iaDZNMmQIHn19Gt ztNgaE5C~dC*YW>C3eauyeTAIX8C(JwTqp=Bp7>(Kp*AB{hoErRWr@|0aU=iEZ6Ad< ze+m&*B;;dd_Oh+)5)@FWp*P-hyRmueoJ@PO`R*tBU!cRi1dHQqS#P;tAwh{gh+M1` zl2JxIzEYy`SOVe{(~xFF#kSD#^0z|nOe!lKEiZiYg{hxl9Qn8Ip7LY<4JTxdwT)y< zpu)>cxYiS4uzJ7upYa$m+Qh`B>knzcgj4vcfcBvdMI%TP2@Xf}!!s2k*BO0NKF6~! zNywJ#VBGxmVTJ@@B-aBg}0?I(qR~$Kt%h`XdLOAIaE-mE=og>mx@e5%01u5iR}>%J&TT`g++}NgijFCgROcfH@pKeVhV~&0 zqRA``w!e9aEuxffu zJj*#K!{B+=GCnkPq4$pDFQ1z(&W42@LbeC5g>4PeJl6zzbni;bOtMXEXTadT15(7aMUEtKDh#~29Pfn-}7C5<2; zkdlo3$hJo;avBqy4tG7=N`+yj)UFOF1;z05}2ZAaxSZTUMPHmi;{gA<0; z@|LOIuQ^bsb{Zz{9vd4=`AP4LYIU%qbY$V6h!h@QHet8k+jJV9 zZSg9vufKNScI=%jQ`q{@>DdZ+e-xh!XHZ!8ue zdo$P5y&+GGb7|&^e+pw$Nscu*@iH`WI|0>Vt~z`j6CMc^niHQNEjlUY5toGMT$-U3^emL=VH(eJ>o#(rG{~J3}S11za=TBXh z7%J7MG#E&1$-R!yQW0831||5f@*g<4xV&mEze@QoGDvklyjw%ZS%Yu2h%z!<+t_9J zerV($5T^a%dI}YLUSbQ8M9Q@Wy{^6<8Krii!7B2^0O)T3@z81&DvB@R0gS|0-RyOK zqW8V{L=lXhz3Q?in3$N97k^ou%Xa$U9s=Oh9=*l8NATq$E*>zwnu{7hH4CY&^V?Uocs$MO6PJ9``FzDU5)zFJ2{Gug zaa0A$d2O}b7YyYOQzeZOk*WKO4B3(~JP{EW^8ER|liNSoOHY@sgyP6-dTcKi)*HMh zEv8SLZOg4L?c16?u&oyxw4&#L1PiUG!LS@nkM`FAHwT8cJ8ct}o&J(mz1HILsX(i_ zSS#h(C5R(Q^8iNFwi?MF_kOts{}M_m@RMH|nTik^hEo4w(DPkyXUBeA5~CrSiOqWl z(x&G3!0kZ{4Gpo#?sEM_Ix#;9$b(}4wo8AF%l0{mSiHyetXqly_z~ z1>+{+on_izeJln7YGGuvOxYa1UvUK_<>WLfHyT0m7Z`X?Rj35b!{qmrx9m-C@I<+j3@pwaaS;AUeQ=Z04%&ds9f>9jVtIAl&aD2L)ZI zLCHGfOB#hmJf>|%3iVo_0#z0QM4{^|9R(v5+8=%epgaG`fsS z*?)zA^8u99@|g+x{n+*v`;Ks=c=6^uS+izm0lY-{TpuQZyAr0eSiIg|E>BMcCcOw{ zZ|!QHVlPu>2q9sTvcOHTnc#<28msPBUJkx{p)ae>`<(jMCr*9#u2**CFo;q82==E8 zf>1CyJ>bH_-+?N73FEiSe5J4SiilA^er)WiC~6$;?LjEcFZleaoOYkBEpHbVtN&OD z{jXsl&tKq7@FV2(PY7w>U%9{FQvUk6R8BqJ(jS?>+Ot`#;*acl{i*sw(K`SE zGF9y#oCOBP#!C8LwWUHC`^m(^M85VTz{elVT&uHGPwrySJL!s8#z{RF6UrM$cxT6I z-aCfb`CMfW=JRWCu)=+kzEk`4&HP_L zRf+6oKS5m~fhofu`6A+LOLlCt!{$NA_d_7lkzU+DAk$@edvnc?mBajnip}N#qVz{; zZ7}MWGwS#D@~AQ+{g@-=mNvX*7Sewn_+@T0>)ndhJB)r&Mja3{FX$O)VAdWnX zdOlf&pE4;klA^}4p- z>x+YxYTWAx|C+o$B}iEFOAo>RB+2yruei&nP`5-%%!AnIdaM%>_2{G!g95-d*6}Wz z#s3wQV=rV()taEY!#xoWK z>7^@BQ^PNs-b>`QxsDXDVH(lQcmV*AYE2|To40%OKEEB1`-DyVjxAn>A15R}gT!Vdm&je)# z)&VIMb{QIew>zA2tE#5vtgY=ADeq+PtRU=3VoVHz{>A|FL2gbsDVwkx9nZ}(U*~;y zdV!sDWR&2hAo<539OTFUF_cq=QNdy>cnDY`OW@G=YssCY?QF|oI2Xz#njCOvhcJf+ zzs}8JiN?BjCAyUvBEbnB=R4?s?k`~tI9@DFOciY-ya*^4fSBj=74p|3<-5_5jIKGH zvH1L%^*-h+QFyMiRoZH|{QBD32J>e#v(Zeqae;?-pk54uDS3053E3Z4CdS72nkW!i zA}*4VR`oBq*p^RmMkZh#9i(mPU%Yf@*{>e%9f^r8APC53N^?D)JQh*_wv>oSMYVjY z&v&7m?{`w_5czQ*Bk zrA&GQ$;XCUSo(cy$Fj*c2wO8OqGowV6VfVeF$CAW&-F5t3P82T?2}>!Xuvwdl$eAb z2D-WK799#AJ8L|;6?v1@ZR%)Nkg=g*>N~rg`^zQxx8`dKyu4cL(7RX*LAVEYI?o54bQU(*3XOHg@O zqL57CK_n81%A4kX#lS+Dqw}FMUF~66;-z}Y62G&IUUfsZ$S<$jz3JH4dGolP>I|JY zX8mdl^*1dwKA`Z}g1~_hvA$=*R+yxWJm^EMw#ozlex` ztH#~x?P26B;3wy6gv_f8^Lf%k9D6%Ew}Z*mLEy5#F{si@0r%G0#`s49$^4vVqpEZL z#Z@l|20&%|>i&~QQgQL#ZZ8)+JQ1dcSDTgrO^x}vQjyx=e65XvV#co+6t6LmTGGng ztpUF*B=m;I3B%6W+0&kwfuSfkp+}}@5MCi#Iu;f~FgsCo^d(SKv8ueM2*8zYxtvA$ z%0qe}YvZ6rfUHMaW%1smeaaO;cZ_*dZ{!K_|D+ws{MLd%m0@ zokm12ej73EyK|yR={dIy`9qu%&fAHC#Oht=2(rcg8R%;7IM);>H?`AadrS%sazj10 zP909I+35p_8t6~mpX(hBBz>D3*h|nYRR7g53Txx-9a9`7sjZ}V&yOAWKhL?uZ+$&{ z_1^|vY~KGDpbHWCjP?IK<|4F>t2$)H4xm#t_^b2j5?+`6B8{w_j&pfzQ%3+me-h8i z{M;3p#_BTEU7}SxV#*FTC>-W-OI-Ofgg)-0Xr|$Fk_Gd=iQ!W1udv!j(B7DD1tN-S zrP{5|`(0%%KlfLa@1-m~L9X;(GUncRqYKw+Bp93se-%pH&vzPZKqY0@ zTc_@5o};MM!G#%mn5OvQ!!C{N-Q~W(SvPrb%gxR$^M@=%+EYAzepOF=fU@yZO6+i-g_Gr)@(F%py z-<)G|cz*@u@xi_!i;@Da7mn`DvmGAxDRQmWi={i0h3rrAweGANoiN9C&maING{{`7 ztR&-j1T{#`ewP@%3_p!PbmNG)y=SGlKf~%q>XrMsBrZ8yR3;wYykU5erk|8(T5QEg zmTeM$S8P@M1{}POrcX(6$#F?x>0cs`ssDE%D+{ANtWd{~cF5hO84wl{VyXcG>2y8|9g;?E)Qusm=;*=r<~Jg@Mupe z;N3S~DfQulMYwp@__kBMTSY`|t;B;frrv;_wm!x$VK?`>ZtW(^fuOS+Vd0lgzM%ue z)bo1MWpo7_AlSn8G#8~OmSe$c+;nMhVEdg`4%vFg|6?Np#Vqe?4o|1 z(9_Ye*q)II;1f&BUw|nnRIwxGse%C^th}OPsliG83%W(MrqS#>3Sn#OgC^#d-U;KD zvF33uyX-5;?Xla#DbiQ@?`G6XmMv&Zy1V>i+yx<|>vxlk=mr7wLFj`Tj z6f-h1p6KA-cNpNEP~Oe|ouJ5*2t36jC7mv_F?}c?Pa)ZlQC5muPv$y6_4W5JIa$pe zyyc+T8A{RQcN(5j!@s!T1P4Ce07=T;VV;R0|DCzZ>INx*r9f2uitFLV6oXL_XM#RX zyhIIsZhrpx>AUXP`p;w4P2Yc=xp(-ZXj&xu=>?!y^IHyA7;MHG88N<}TuosGwKgG} zp2s!$EVW(Cpy=oSpRgl7R7L;k*^x2jqKOtSTkFz;Rrw9=I@{xESPedh)Mr!EBal@1 z&sV8HH#2t>o@2{j0)i+Ym|Vd1t!Lka1|)30OcSrhVUrxhjXv+(;!vI_m>+P*$vfdDa`e1Mvzd21@?ZpwkXJ!*RjpOh{x zr|{IM6#Wjvuo4eaD;h*rD6b%BlM8Y9C@9!sR8+Z+J2;7PaV3^| zcSow?)^Vi!`^B|Z0zch(_s_Ny>*{vBy(i)7>UqV)I#a{yqMQ%g!J>dsmSd1lOMkrf zrSZ0_nEn+hx+En#-?BQ4jyKR0n%etPfPf&l!zZ=nS#oTAe9Pk>Nu5&NB=}c5!rEYE z-DmS%*ygjtXPwh+b=nj;2Q`S0ypy$jRX zUYTSheZzOWY6fIOvJEV$NHh&`U*aIHAYDH-lx8^AC<|Y;;4hd_@!=g`eeY~n0l@J! zEFpDjwZNb|f!EoyK3}~^^;EN>Da!6}cdDfMA%Xm)jD>?E{40MUP#jDdjSLL#uNNYp zJcrdSZ|12KEo@Cycl5>Ww%(mIMhc|9^|+8=GZ`f3Hh*teg>G(*VY)MM%;(JbdFZE@ zv9Ynkh77}qT{>8V0~YEe@|k@9`c?ArfzOF2g;iRt1KG($=J9CPCf@6=_orsH`NL61 zLQTyS9i4oV$mFlgU+Q{;53X}RQ+OXtiAM6TrDacCx;z|5IKKc&zN_m_Y%=4uO_=u^ z?&~fP$<@`p3xC1y+B=q}Y_nLfw*#Lp5jn)5c4vQZhh$?j%uL{=rvEztbdu2P^q}0XKD;U_M`?8mZ1BoA_=Ku%fUQ zzKa9C?Bd6bhvmmIp?jV#j!J=K z9=E(xO2#wc6an&P_rV}Qbi6UwmI1}(8z0*h z(b#s1`)4)tb-AC#l38q8z>?bYMzd{DY#8{bPVp?e$$f9e%}VWJg*uXm^XB%}`QYkI z4cm{RX)bT^Pz#Gm1KR#;tjQo4A6PV;ik-{BXx4ta$WvaI!1=k4PCGasPsmVeYSg@L z0`?a0S{~ba`${7Kg|8rB_3n+>>Bc!GvRVI>h^AEyp!wkLc|U5ZK>(Fh92XZ@TdSp5 zeSTV$J88VX=)rg|l-t}aJDh42cP=T(C7%{yHj%HUh_tOoVQ94e{*Wj3O^!|df9$o; z$oe9Yoe$*|*Xo+AAPU`KU6hgQ?CQ6R5lPh6(A4S*7W7&7rj1CB@A>2|HO2Q~WkQ2lCSV}mG%S`1TW*q#X&KMNgm6R^6?pQVa|}E_36gJ+3JyeWHW!%^iaw=DRrtX@^Mg_%(k4>m zxqjxa8tEAl%${=g&Xv`=1WaBB!Jy+WMT{cxBlXC8=;WyJ`L;mVOX0bkZ}xbsw&(?R z2Ufw)QdaGsmQFkp=>Cfj$n+rx`#E3<38vHXTzyt&#Hf#g>rp7Mjc*B_=9phNuL#SuIHq?~f?mD$24h4kOPy`|gfIJS!kzR7&Xg6cO0->QvCtsy6j(j#?=zOI9hD16{R^&>Y6*+khp@iglKNAg?@?6|YRhbD2otqB(!GXm$!Dwoe%=TCteWu*8Vu2(+_ zioqRCg%D*#=tt4N{>JqmV8}+4YAB?W)CL6TUBmElI{W9rE>p4T=4 zU@ITg51=UzUZ7=&mTV1VyRD zW{n8-?DBk1;C+1>+v5l6@nd}L#n9G*_fNN6zBk_oR2FVHuG$OU+XS}t*N%cM3vhmn z8{tIso0umQkaZgp#lM?J|E7-w&yUrxqoYnp&HHu2SA;&TEr`J*A>nlO%Vbu9_JBxtAz2P0&Br6IG#k h!Sj!!QcSucxA8aq0Fiw$40d;dNQ%jcmI~|p{Xe;*2!a3r diff --git a/integrate/variables/tutorial.md b/integrate/variables/tutorial.md index 4f580ece..791892c1 100644 --- a/integrate/variables/tutorial.md +++ b/integrate/variables/tutorial.md @@ -1,201 +1,5 @@ --- title: Variables Tutorial permalink: /integrate/variables/tutorial/ +redirect_to: https://help.keboola.com/components/variables/api/tutorial/ --- - -* TOC -{:toc} - -This tutorial will guide you through basic usage of [Variables](/integrate/variables/) in the component configuration. -The result will be the parametrized configuration of the [Generic Extractor](/extend/generic-extractor), -but this approach can be applied to any component. - -In the examples, we use the `curl` console tool to interact with our APIs. - -## Define API endpoints - -First, store the [API endpoints](/overview/api/) as environment variables, so we don't have to repeat ourselves. - -We will need: -- [Storage API](/integrate/storage/api/) to store the variable definitions and the extractor configuration - -- [Job Queue API](/extend/job-queue/) to run the extractor job from the configuration. - -The host names depend on your [stack](/overview/api/#stacks-and-endpoints): - -```shell -export STORAGE_API_HOST="https://connection.keboola.com" -export JOB_QUEUE_HOST="https://queue.keboola.com" -``` - -## Obtain Storage API Token - -A [Storage API Token](https://help.keboola.com/management/project/tokens/) is needed to interact with the [Keboola APIs](/overview/api/#list-of-keboola-apis). - -Obtain a Storage API token from the user interface of your project, see this [Guide](https://help.keboola.com/management/project/tokens). - -Then store the token to the environment variable. -```shell -export TOKEN="..." -``` - -## Define variables - -The next step is to define the variables in a [Variable Configuration](/integrate/variables/#variable-configuration). - -Define name and type of the variables. -```shell -export VARIABLE_CONFIG_NAME="Extractor variables" -export VARIABLE_CONFIG=' -{ - "variables": [ - { - "name": "outputBucket", - "type": "string" - }, - { - "name": "id", - "type": "int" - } - ] -} -' -``` - -Use [Create Configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs) to store *variable configuration*. -```shell -curl --include \ - --request POST \ - --header "Content-Type: application/x-www-form-urlencoded" \ - --header "X-StorageApi-Token: $TOKEN" \ - --data-urlencode "name=$VARIABLE_CONFIG_NAME" \ - --data-urlencode "configuration=$VARIABLE_CONFIG" \ -"$STORAGE_API_HOST/v2/storage/components/keboola.variables/configs" -``` - -Example API call result. -```json -{ - "id":"1234", - "name":"Extractor variables", - "description":"..." -} -``` - -Save *variable configuration* `id` from the the result to the environment variable. -```shell -export VARIABLE_CONFIG_ID="1234" -``` - -**The created *variable configuration* defines the names and types of variables.** - -You can create additional configurations that contain (default) [Variable Values](/integrate/variables/#variable-values). - -In this example, the values of the variables are entered directly to the [run API call](#run-extractor-configuration) (see bellow), -so configuration with the variable values is not used. - -## Create extractor configuration - -Define *extractor configuration* with variables {% raw %}`{{placeholders}}`{% endraw %}. - -```shell -{% raw %} -export COMPONENT_ID="ex-generic-v2" -export EXTRACTOR_CONFIG_NAME="Extractor configuration" -export EXTRACTOR_CONFIG=' -{ - "parameters": { - "api": { - "baseUrl": "https://jsonplaceholder.typicode.com/" - }, - "config": { - "debug": true, - "outputBucket": "{{outputBucket}}", - "jobs": [ - { - "endpoint": "posts/{{id}}/comments" - } - ] - } - }, - "variables_id": "'$VARIABLE_CONFIG_ID'" -} -' -{% endraw %} -``` - -Use [Create Configuration API call](https://api.keboola.com/?service=storage#post-/v2/storage/branch/-branchId-/components/-componentId-/configs) to store extractor configuration. -```shell -curl --include \ - --request POST \ - --header "Content-Type: application/x-www-form-urlencoded" \ - --header "X-StorageApi-Token: $TOKEN" \ - --data-urlencode "name=$EXTRACTOR_CONFIG_NAME" \ - --data-urlencode "configuration=$EXTRACTOR_CONFIG" \ -"$STORAGE_API_HOST/v2/storage/components/$COMPONENT_ID/configs" -``` - -Example API call result. -```json -{ - "id":"4567", - "name":"Extractor configuration", - "description":"..." -} -``` - -Save *extractor configuration* `id` from the result to the environment variable. -```shell -export EXTRACTOR_CONFIG_ID="4567" -``` - -## Run extractor configuration - -Define values of the variables. -```shell -export VARIABLES_VALUES=' -[ - {"name": "outputBucket", "value": "my-bucket"}, - {"name": "id", "value": 1} -] -' -``` - -In this example are values of the variables part of the run job request. - -For other ways to define values see the [Variables documentation](/integrate/variables/#variable-values). - -Use [Run Job API call](https://api.keboola.com/?service=job-queue#post-/jobs) to run *extractor configuration*. -```shell -curl --include \ - --request POST \ - --header "Content-Type: application/json" \ - --header "X-StorageApi-Token: $TOKEN" \ - --data-binary ' - { - "component": "'$COMPONENT_ID'", - "config": "'$EXTRACTOR_CONFIG_ID'", - "mode": "run", - "variableValuesData": { - "values": '$VARIABLES_VALUES' - } - } - ' \ -"$JOB_QUEUE_HOST/jobs" -``` - -## Check the job result - -The status of a running job can be seen via API or UI. - -In the picture we can see that the entered values of the variables were used. - -{: .image-popup} -![Screenshot -- Job](/integrate/variables/tutorial-1.png) - -A note about the replaced variables is in the job logs. - -{: .image-popup} -![Screenshot -- Job Logs](/integrate/variables/tutorial-2.png) - -See the [Variables documentation](/integrate/variables/#variable-values) for more information. - diff --git a/integrate/variables/variables.svg b/integrate/variables/variables.svg deleted file mode 100644 index 5433c2a1..00000000 --- a/integrate/variables/variables.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
variables_id
variables_id
variable_values_id
variable_values_id
Main Configuration
(vendor.component)
Main Configuration...
Variables Configuration
(keboola.variables)
Variables Configurat...
config
config
variableValuesId
variableValuesId
Orchestration
Orchestration
Variable Values Row
Variable Values...
config
config
variableValuesId
variableValuesId
Run Orchestration
Run O...
config
config
variableValuesId
variableValuesId
Run Configuration
Run C...
Viewer does not support full SVG 1.1
\ No newline at end of file