Control / script · All operations

Run a script

Run user code: Python, R, JavaScript, Java, shell.

Status

In arcform

A feature, not a step

It lives in how a Protocol runs. src/manifest.rs in arcform at fc62d6f

Shape of the result
not a data operation
Level
not a step

Variants

  • Write a custom component

    Supply code that the tool runs as one of its own building blocks, such as a reader, writer, learner, loss function or materialisation.

  • Transform each row with code

    Run a user function or snippet on every row, value or column to compute or change fields.

  • Apply business rules

    Evaluate a rule set from a rules engine against each row or the collected rows and act on the result.

  • Run SQL statements

    Send hand-written SQL or another database query language to a database, as a query, a command or a statement per row.

  • Call a stored procedure

    Invoke a procedure stored in the database, optionally once per row, and return its results.

  • Register a user-defined function

    Define a scalar, aggregate or window function in code so that SQL or expressions can call it by name.

Evaluate code given as text

Evaluate an expression or statement written as text, or its syntax tree, in the tool's own scope.

Run a script on the table

Hand the data, or the run, to a user script in Python, R, Java, Groovy, Spark or a shell, and take back what it returns.

What other tools call it

Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).

Alteryx Designer (4)
  • Apache Spark Coderead 2026-09-27

    Run user Spark code in a Spark context from the workflow

  • Jupyter Flowread 2026-09-27

    Run a Jupyter notebook in a managed Python environment as a workflow step

  • Pythonread 2026-09-27

    Run user Python in a Jupyter notebook against workflow data

  • Rread 2026-09-27

    Run user R code against workflow data

Apache DataFusion (1)
Apache Hop (14)
  • Call DB procedureread 2026-09-27

    Call a database stored procedure or function per row and return its results

  • Cassandra Exec Cqlread 2026-09-27

    Run one or more CQL statements on a Cassandra cluster

  • Evaluate a Drools rule set against the whole set of rows collected

  • Drools Rule Executorread 2026-09-27

    Evaluate a Drools rule set against each row and add result fields

  • Execute SQL scriptread 2026-09-27

    Run a SQL script once or per row, with row values as parameters

  • Execute row SQL scriptread 2026-09-27

    Run a SQL script taken from a field for every input row

  • JavaScriptread 2026-09-27

    Run JavaScript over each row to compute or change fields

  • JavaScriptread 2026-09-27

    Run JavaScript that returns true or false to steer the workflow

  • MongoDB QLread 2026-09-27

    Run MongoDB query-language scripts against a MongoDB connection

  • Neo4j Cypher scriptread 2026-09-27

    Run a script of Cypher statements against Neo4j

  • SQLread 2026-09-27

    Run SQL statements from the action or from a file

  • Scriptread 2026-09-27

    Run a script in JavaScript, Groovy, Python or another JSR-223 language over rows

  • Shellread 2026-09-27

    Run a shell script or command on the host running the workflow

  • Write a Java class that implements the whole row-processing logic of a transform

Apache NiFi (7)
  • ExecuteGroovyScriptread 2026-09-27

    Run a user Groovy script against incoming FlowFiles

  • ExecuteScriptread 2026-09-27

    Run a user script with access to the FlowFile and the process session

  • Run a processor whose implementation is defined in a user script

  • ScriptedReaderread 2026-09-27

    Record reader whose implementation is supplied as a user script

  • Record writer whose implementation is supplied as a user script

  • ScriptedRecordSinkread 2026-09-27

    Record sink whose implementation is supplied as a user script

  • Run a user script against each record to transform it, drop it or fork more records

Apache SeaTunnel (4)
  • Calcite UDFread 2026-09-27

    Next docs, not in 2.3.13: user-defined scalar functions for the Calcite transform

  • DynamicCompileread 2026-09-27

    Process rows with user Java, Groovy or Scala source compiled at run time

  • Pythonread 2026-09-27

    Next docs, not in 2.3.13: run a user Python function per row and append the fields it returns

  • SQL UDFread 2026-09-27

    Extend the SQL transform's function library with user-defined Java functions

AWS Glue (2)
  • Custom transformread 2026-09-27

    Transform the data with user code; the output is a collection of frames

  • Mapread 2026-09-27

    Apply a user function to every record

Azure Data Factory (4)
Bruin (6)
  • Python assetsread 2026-09-27

    Run a Python script in an isolated uv environment with its own version and dependencies

  • R assetsread 2026-09-27

    Run an R script with renv-managed dependencies

  • Managed PySpark job: Bruin ships the script to GCS and runs it on Dataproc Serverless

  • emr_serverless.pysparkread 2026-09-27

    Managed PySpark job: Bruin ships the script and dependencies to EMR Serverless and runs it

  • hooksread 2026-09-27

    SQL snippets run before or after the main query of a SQL asset

  • queryread 2026-09-27

    Run a query on a connection and return the result as a table, JSON or CSV

dbt-utils (1)
Duckle (6)
  • Inline SQLread 2026-09-25

    run a user SELECT with upstreams exposed as input CTEs

  • JavaScript UDFread 2026-09-25

    per-row user JavaScript transform function

  • Python UDFread 2026-09-25

    transform rows with a user Python function

  • SQL Templateread 2026-09-25

    parameterised user SQL with context variables

  • Shell Commandread 2026-09-25

    run a shell command and emit stdout, stderr and exit code as one row

  • WebAssembly UDFread 2026-09-25

    per-row transform by a user WebAssembly module

EasyMorph (3)
  • Call Pythonread 2026-09-27

    Run a Python script, passing it the dataset and receiving a dataset back

  • Database commandread 2026-09-27

    Create, delete or truncate a database table, or send a custom SQL command

  • PowerShellread 2026-09-27

    Run one or more PowerShell statements (paid editions only)

Ibis (6)
  • AggUDFread 2026-09-27

    User-defined aggregate function, with an optional filter

  • AnalyticVectorizedUDFread 2026-09-27

    Legacy pandas UDF evaluated over a window, returning a column

  • Legacy pandas UDF applied element-wise to whole columns

  • ReductionVectorizedUDFread 2026-09-27

    Legacy pandas UDF that reduces columns to one value

  • SQLQueryResultread 2026-09-27

    A table that is the result of a raw SQL SELECT sent to the backend

  • ScalarUDFread 2026-09-27

    User-defined scalar function: builtin, Python, pandas or PyArrow

KNIME Analytics Platform (11)
OpenRefine (2)
  • Clojureread 2026-09-27

    Write an expression as Clojure code; fewer variables are available than in GREL

  • Jythonread 2026-09-27

    Write an expression as Python code run on the bundled Jython, with Python and Java libraries

Pentaho Data Integration (10)
Polars (12)
  • DataFrame.map_columnsread 2026-09-27

    Apply an eager user function to chosen columns

  • DataFrame.map_rowsread 2026-09-27

    Run a user function on every row passed as a tuple

  • Expr.map_batchesread 2026-09-27

    Run a user Python function on a whole column passed as a Series

  • Expr.map_elementsread 2026-09-27

    Run a user Python function on every element of a column

  • GroupBy.map_groupsread 2026-09-27

    Run a user function on every group as a sub-frame and stack the results

  • LazyFrame.map_batchesread 2026-09-27

    Run a user function on the materialised frame as one step of the lazy plan

  • LazyFrame.sink_batchesread 2026-09-27

    Run the query and hand every finished batch to a user function

  • 7 statements: CREATE TABLE, DELETE FROM, DROP TABLES, EXPLAIN, SHOW TABLES and others; manage the tables registered in a SQL context

  • deferread 2026-09-27

    Wrap a user function that returns a frame so it runs only when the lazy plan is collected

  • map_batchesread 2026-09-27

    Run a user function over several columns passed as whole Series

  • map_groupsread 2026-09-27

    Run a user function over several columns within each group

  • sql_exprread 2026-09-27

    Parse SQL expression text into Polars expressions

Power Query M (4)
  • Expression functionsread 2026-09-27

    3 functions: Expression.Evaluate, Expression.Constant, Expression.Identifier

  • ItemExpression.Fromread 2026-09-27

    Return the syntax tree of a one-argument function body, for translating it to a source query

  • RowExpression.Columnread 2026-09-27

    Return the syntax tree node for a column reference inside a row expression

  • RowExpression.Fromread 2026-09-27

    Return the syntax tree of a row function body, for translating it to a source query

RapidMiner Studio (10)
  • Insert a hand-written SQL query into an in-database chain

  • Execute CQLread 2026-09-27

    Run a CQL statement against a Cassandra or Astra database

  • Run a user-specified command on a MongoDB instance

  • Execute Pythonread 2026-09-27

    Run a Python script on the input tables and objects

  • Execute Rread 2026-09-27

    Run an R script on the input tables and objects

  • Execute SQLread 2026-09-27

    Run a SQL statement such as CREATE on a database; not for loading data

  • Execute Scriptread 2026-09-27

    Run Java or Groovy code on the process objects

  • Python Forecasterread 2026-09-27

    Wrap Python code as a forecast learner whose model works with Apply Forecast

  • Python Learnerread 2026-09-27

    Wrap Python code as a learner whose model works with Apply Model

  • Python Transformerread 2026-09-27

    Wrap a custom Python script as an operator that transforms the input table

SQLMesh (4)
  • A Python class that defines how a model is inserted, as a user-made model kind

  • Pre/post-statementsread 2026-09-27

    SQL statements run before or after the model query, optionally gated by @IF

  • Python macro functionsread 2026-09-27

    User Python functions with the @macro decorator that return SQL strings or SQLGlot expressions

  • Python modelsread 2026-09-27

    An execute function returning a Pandas, PySpark, Bigframe or Snowpark DataFrame

Tableau Prep (3)
  • Custom SQLread 2026-09-27

    Use a hand-written SQL query as the input table

  • Initial SQLread 2026-09-27

    Run a SQL command when the database connection opens, before data is loaded

  • Scriptread 2026-09-27

    Pass the flow's data to an R (Rserve) or Python (TabPy) function and take back a table

Talend (14)
  • 43 components running a stated SQL query or command: tMysqlRow, tOracleRow, tSnowflakeRow, tMongoDBRow

  • 9 components calling a stored procedure: tDBSP, tMysqlSP, tOracleSP, tMSSqlSP

  • tBRMSread 2026-09-27

    Apply Drools business rules from a rules repository to the rows and write the result as XML

  • tDotNETInstantiateread 2026-09-27

    Construct a .NET object for later components to reuse

  • tDotNETRowread 2026-09-27

    Pass rows to and from methods of .NET classes or custom DLL files

  • tGroovyread 2026-09-27

    Run Groovy code entered in the component, once

  • tGroovyFileread 2026-09-27

    Run an existing Groovy script file

  • tIcebergSQLread 2026-09-27

    Run SQL queries on Iceberg tables managed by Polaris or Snowflake Open Catalog

  • tJavaread 2026-09-27

    Run custom Java code once

  • tJavaFlexread 2026-09-27

    Run custom Java code in start, main and end sections of the component

  • tJavaRowread 2026-09-27

    Run custom Java code on each row of the flow

  • tRulesread 2026-09-27

    Apply Drools business rules from an .xls or .drl file to keep the relevant rows

  • tSQLTemplateread 2026-09-27

    Run standard or customised SQL statement templates, such as drop or create table, on a DBMS

  • tSqlRowread 2026-09-27

    Run SQL queries over input datasets registered as tables in Spark

Trifacta (1)
VisiData (7)
  • addcol-shellread 2026-09-23

    Add columns with stdout and stderr of a shell command run per row, $column as variables

  • define-commandread 2026-09-23

    Define a new command from a longname and a Python exec string

  • exec-pythonread 2026-09-23

    Execute a Python statement in the sheet's scope

  • import-pythonread 2026-09-23

    Import a Python module into the global expression scope

  • open-replread 2026-09-23

    Open a Python REPL

  • pyobj-exprread 2026-09-23

    Evaluate a Python expression and open the result as an object sheet

  • pyobj-expr-rowread 2026-09-23

    Evaluate a Python expression on current row and open the result as an object sheet

Yggdrasil Decision Forests (3)
  • User-written loss, gradient and hessian functions for two-class boosting

  • User-written loss, gradient and hessian functions for multi-class boosting

  • RegressionLossread 2026-09-27

    User-written loss, gradient and hessian functions for boosted regression

Background

A script is a relatively short and simple set of instructions that typically automates an otherwise manual process.[1] A scripting language can be a general-purpose programming language or a domain-specific language for a given environment.[1] When a scripting language is embedded in an application, it may be called an extension language.[1]

When to use it

Reach for a script when the step the analysis needs is one the pipeline's own operations do not offer, and keep the script as small as the gap it fills. (Meridian's view) A script is generally relatively short and simple, though there is no limit on its size or complexity.[1]

Bruin runs Python assets through the uv tool, each in an isolated environment, so one pipeline can mix Python versions and dependencies.[2] In Bruin, a Python asset's dependencies can be locked for reproducible builds across environments, in a uv.lock file that should be committed to version control.[2] Pin a script's language version and libraries next to the pipeline, so the step reruns the same way on another machine. (Meridian's view)

EasyMorph's Call Python action can be set to run only manually, an option meant for a script that can affect external resources.[3] EasyMorph's Call Python action can return the script's output dataset, return nothing, or capture script errors and let the workflow continue.[3] Decide before the first run whether a failing script should stop the pipeline or be recorded and passed over. (Meridian's view)

The method

Scripts are generally interpreted directly from source code or from bytecode, or run as native code after just-in-time compilation.[1] A script typically starts executing at its first line of code, whereas an application typically starts at a special point in the code called the entry point.[1] Originally, scripting was limited to automating the shells of operating systems.[1] IBM's Job Control Language (JCL) is the archetype of the languages used to control batch processing on early mainframe computers.[1]

Languages such as Tcl and Lua were designed as general-purpose scripting languages that could be embedded in any application.[1] Embedding a general-purpose scripting language, instead of developing a new language for each application, spares the application's developer from writing a language translator and lets users apply skills learned elsewhere.[1]

EasyMorph's Call Python action can pass the current dataset to the script and make the dataset the script returns the new current dataset.[3] Bruin uploads a dataframe that a Python asset returns to the asset's destination.[2] Bruin can inject connections into a Python asset as environment variables, each holding a JSON representation of the connection.[2]

Sources

  1. [1]Scripting language - Wikipediasecondary source
  2. [2]Python Assets | Bruin CLIdocumentation
  3. [3]CALL PYTHON [EasyMorph Help]documentation

Used in

4 Protocols use this operation: