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-27Run user Spark code in a Spark context from the workflow
Jupyter Flowread 2026-09-27Run a Jupyter notebook in a managed Python environment as a workflow step
Pythonread 2026-09-27Run user Python in a Jupyter notebook against workflow data
Rread 2026-09-27Run user R code against workflow data
Apache DataFusion (1)
User Defined Window and Aggregate Functionsread 2026-09-27Register window and aggregate functions written in Rust and call them from SQL
Apache Hop (14)
Call DB procedureread 2026-09-27Call a database stored procedure or function per row and return its results
Cassandra Exec Cqlread 2026-09-27Run one or more CQL statements on a Cassandra cluster
Drools Rule Accumulatorread 2026-09-27Evaluate a Drools rule set against the whole set of rows collected
Drools Rule Executorread 2026-09-27Evaluate a Drools rule set against each row and add result fields
Execute SQL scriptread 2026-09-27Run a SQL script once or per row, with row values as parameters
Execute row SQL scriptread 2026-09-27Run a SQL script taken from a field for every input row
JavaScriptread 2026-09-27Run JavaScript over each row to compute or change fields
JavaScriptread 2026-09-27Run JavaScript that returns true or false to steer the workflow
MongoDB QLread 2026-09-27Run MongoDB query-language scripts against a MongoDB connection
Neo4j Cypher scriptread 2026-09-27Run a script of Cypher statements against Neo4j
SQLread 2026-09-27Run SQL statements from the action or from a file
Scriptread 2026-09-27Run a script in JavaScript, Groovy, Python or another JSR-223 language over rows
Shellread 2026-09-27Run a shell script or command on the host running the workflow
User Defined Java Classread 2026-09-27Write a Java class that implements the whole row-processing logic of a transform
Apache NiFi (7)
ExecuteGroovyScriptread 2026-09-27Run a user Groovy script against incoming FlowFiles
ExecuteScriptread 2026-09-27Run a user script with access to the FlowFile and the process session
InvokeScriptedProcessorread 2026-09-27Run a processor whose implementation is defined in a user script
ScriptedReaderread 2026-09-27Record reader whose implementation is supplied as a user script
ScriptedRecordSetWriterread 2026-09-27Record writer whose implementation is supplied as a user script
ScriptedRecordSinkread 2026-09-27Record sink whose implementation is supplied as a user script
ScriptedTransformRecordread 2026-09-27Run a user script against each record to transform it, drop it or fork more records
Apache SeaTunnel (4)
Calcite UDFread 2026-09-27Next docs, not in 2.3.13: user-defined scalar functions for the Calcite transform
DynamicCompileread 2026-09-27Process rows with user Java, Groovy or Scala source compiled at run time
Pythonread 2026-09-27Next docs, not in 2.3.13: run a user Python function per row and append the fields it returns
SQL UDFread 2026-09-27Extend the SQL transform's function library with user-defined Java functions
AWS Glue (2)
Custom transformread 2026-09-27Transform the data with user code; the output is a collection of frames
Mapread 2026-09-27Apply a user function to every record
Azure Data Factory (4)
Azure Data Explorer Command activityread 2026-09-27Run Azure Data Explorer management commands from a pipeline
Custom Activityread 2026-09-27Run user code on Azure Batch
Script activityread 2026-09-27Run SQL data manipulation and data definition statements in a database
Stored Procedureread 2026-09-27Invoke a stored procedure in Azure SQL, Azure Synapse Analytics or SQL Server
Bruin (6)
Python assetsread 2026-09-27Run a Python script in an isolated uv environment with its own version and dependencies
R assetsread 2026-09-27Run an R script with renv-managed dependencies
dataproc_serverless.pysparkread 2026-09-27Managed PySpark job: Bruin ships the script to GCS and runs it on Dataproc Serverless
emr_serverless.pysparkread 2026-09-27Managed PySpark job: Bruin ships the script and dependencies to EMR Serverless and runs it
hooksread 2026-09-27SQL snippets run before or after the main query of a SQL asset
queryread 2026-09-27Run a query on a connection and return the result as a table, JSON or CSV
dbt-utils (1)
Python materializationsread 2026-09-27Python models, materialized as table or incremental only
Duckle (6)
Inline SQLread 2026-09-25run a user SELECT with upstreams exposed as input CTEs
JavaScript UDFread 2026-09-25per-row user JavaScript transform function
Python UDFread 2026-09-25transform rows with a user Python function
SQL Templateread 2026-09-25parameterised user SQL with context variables
Shell Commandread 2026-09-25run a shell command and emit stdout, stderr and exit code as one row
WebAssembly UDFread 2026-09-25per-row transform by a user WebAssembly module
EasyMorph (3)
Call Pythonread 2026-09-27Run a Python script, passing it the dataset and receiving a dataset back
Database commandread 2026-09-27Create, delete or truncate a database table, or send a custom SQL command
PowerShellread 2026-09-27Run one or more PowerShell statements (paid editions only)
Ibis (6)
AggUDFread 2026-09-27User-defined aggregate function, with an optional filter
AnalyticVectorizedUDFread 2026-09-27Legacy pandas UDF evaluated over a window, returning a column
ElementWiseVectorizedUDFread 2026-09-27Legacy pandas UDF applied element-wise to whole columns
ReductionVectorizedUDFread 2026-09-27Legacy pandas UDF that reduces columns to one value
SQLQueryResultread 2026-09-27A table that is the result of a raw SQL SELECT sent to the backend
ScalarUDFread 2026-09-27User-defined scalar function: builtin, Python, pandas or PyArrow
KNIME Analytics Platform (11)
DB Row Manipulatorread 2026-09-27Run a user-written INSERT, UPDATE or DELETE once per input row with that row's values
DB SQL Executorread 2026-09-27Execute custom SQL statements in the database
Java Edit Variableread 2026-09-27Add or change flow variables with user-written Java
Java Edit Variable (simple)read 2026-09-27Change one flow variable with a short user-written Java expression
Java Snippetread 2026-09-27Run user-written Java per row to create or replace columns and flow variables
Java Snippet (simple)read 2026-09-27Run a short user-written Java expression per row into one new column
KNIME Interactive R Statistics Integration (extension)read 2026-09-27Extension outside the base install: 14 current nodes: Add Table to R; R Learner; R Model Reader; R Model Writer; R Predictor, …
KNIME Jython Scripting (Legacy) (extension)read 2026-09-27Extension outside the base install: 3 current nodes: JPython Function (Legacy); JPython Script 1:1 (Legacy); JPython Script 2:1 (Legacy)
KNIME Perl Integration (extension)read 2026-09-27Extension outside the base install: 1 current node: Perl Scripting
KNIME Python 2 Integration (legacy) (extension)read 2026-09-27Extension outside the base install: 8 current nodes: Python Edit Variable (legacy); Python Learner (legacy), …
KNIME Python Integration (extension)read 2026-09-27Extension outside the base install: 2 current nodes: Python Script; Python View
OpenRefine (2)
Pentaho Data Integration (10)
Call DB Procedureread 2026-09-27Call a database procedure and return its results
Execute Row SQL Scriptread 2026-09-27Run a SQL statement or file for every input row
Execute SQL Scriptread 2026-09-27Run a SQL script, optionally parameterised by input rows
Modified Java Script Valueread 2026-09-27Run JavaScript programs over rows
Python Executorread 2026-09-27Run a Python script over incoming rows or to generate data
R script executorread 2026-09-27Run an R script inside a transformation
Rule Accumulatorread 2026-09-27Evaluate a Drools rule against a collected set of rows
Rule Executorread 2026-09-27Evaluate a Drools rule against each row
Scriptread 2026-09-27Compute values with Ruby, Python, Groovy, JavaScript or other scripting languages
User Defined Java Classread 2026-09-27Program a whole step in Java code
Polars (12)
DataFrame.map_columnsread 2026-09-27Apply an eager user function to chosen columns
DataFrame.map_rowsread 2026-09-27Run a user function on every row passed as a tuple
Expr.map_batchesread 2026-09-27Run a user Python function on a whole column passed as a Series
Expr.map_elementsread 2026-09-27Run a user Python function on every element of a column
GroupBy.map_groupsread 2026-09-27Run a user function on every group as a sub-frame and stack the results
LazyFrame.map_batchesread 2026-09-27Run a user function on the materialised frame as one step of the lazy plan
LazyFrame.sink_batchesread 2026-09-27Run the query and hand every finished batch to a user function
SQL table operations (group)read 2026-09-277 statements: CREATE TABLE, DELETE FROM, DROP TABLES, EXPLAIN, SHOW TABLES and others; manage the tables registered in a SQL context
deferread 2026-09-27Wrap a user function that returns a frame so it runs only when the lazy plan is collected
map_batchesread 2026-09-27Run a user function over several columns passed as whole Series
map_groupsread 2026-09-27Run a user function over several columns within each group
sql_exprread 2026-09-27Parse SQL expression text into Polars expressions
Power Query M (4)
Expression functionsread 2026-09-273 functions: Expression.Evaluate, Expression.Constant, Expression.Identifier
ItemExpression.Fromread 2026-09-27Return the syntax tree of a one-argument function body, for translating it to a source query
RowExpression.Columnread 2026-09-27Return the syntax tree node for a column reference inside a row expression
RowExpression.Fromread 2026-09-27Return the syntax tree of a row function body, for translating it to a source query
RapidMiner Studio (10)
Custom Query (In Database)read 2026-09-27Insert a hand-written SQL query into an in-database chain
Execute CQLread 2026-09-27Run a CQL statement against a Cassandra or Astra database
Execute MongoDB Commandread 2026-09-27Run a user-specified command on a MongoDB instance
Execute Pythonread 2026-09-27Run a Python script on the input tables and objects
Execute Rread 2026-09-27Run an R script on the input tables and objects
Execute SQLread 2026-09-27Run a SQL statement such as CREATE on a database; not for loading data
Execute Scriptread 2026-09-27Run Java or Groovy code on the process objects
Python Forecasterread 2026-09-27Wrap Python code as a forecast learner whose model works with Apply Forecast
Python Learnerread 2026-09-27Wrap Python code as a learner whose model works with Apply Model
Python Transformerread 2026-09-27Wrap a custom Python script as an operator that transforms the input table
SQLMesh (4)
Custom materializationsread 2026-09-27A Python class that defines how a model is inserted, as a user-made model kind
Pre/post-statementsread 2026-09-27SQL statements run before or after the model query, optionally gated by @IF
Python macro functionsread 2026-09-27User Python functions with the @macro decorator that return SQL strings or SQLGlot expressions
Python modelsread 2026-09-27An execute function returning a Pandas, PySpark, Bigframe or Snowpark DataFrame
Tableau Prep (3)
Custom SQLread 2026-09-27Use a hand-written SQL query as the input table
Initial SQLread 2026-09-27Run a SQL command when the database connection opens, before data is loaded
Scriptread 2026-09-27Pass the flow's data to an R (Rserve) or Python (TabPy) function and take back a table
Talend (14)
Database row (SQL statement) components (family)read 2026-09-2743 components running a stated SQL query or command: tMysqlRow, tOracleRow, tSnowflakeRow, tMongoDBRow
Database stored procedure components (family)read 2026-09-279 components calling a stored procedure: tDBSP, tMysqlSP, tOracleSP, tMSSqlSP
tBRMSread 2026-09-27Apply Drools business rules from a rules repository to the rows and write the result as XML
tDotNETInstantiateread 2026-09-27Construct a .NET object for later components to reuse
tDotNETRowread 2026-09-27Pass rows to and from methods of .NET classes or custom DLL files
tGroovyread 2026-09-27Run Groovy code entered in the component, once
tGroovyFileread 2026-09-27Run an existing Groovy script file
tIcebergSQLread 2026-09-27Run SQL queries on Iceberg tables managed by Polaris or Snowflake Open Catalog
tJavaread 2026-09-27Run custom Java code once
tJavaFlexread 2026-09-27Run custom Java code in start, main and end sections of the component
tJavaRowread 2026-09-27Run custom Java code on each row of the flow
tRulesread 2026-09-27Apply Drools business rules from an .xls or .drl file to keep the relevant rows
tSQLTemplateread 2026-09-27Run standard or customised SQL statement templates, such as drop or create table, on a DBMS
tSqlRowread 2026-09-27Run SQL queries over input datasets registered as tables in Spark
Trifacta (1)
Invoke external functionread 2026-09-27Create a column from the result of an external user-defined function
VisiData (7)
addcol-shellread 2026-09-23Add columns with stdout and stderr of a shell command run per row, $column as variables
define-commandread 2026-09-23Define a new command from a longname and a Python exec string
exec-pythonread 2026-09-23Execute a Python statement in the sheet's scope
import-pythonread 2026-09-23Import a Python module into the global expression scope
open-replread 2026-09-23Open a Python REPL
pyobj-exprread 2026-09-23Evaluate a Python expression and open the result as an object sheet
pyobj-expr-rowread 2026-09-23Evaluate a Python expression on current row and open the result as an object sheet
Yggdrasil Decision Forests (3)
BinaryClassificationLossread 2026-09-27User-written loss, gradient and hessian functions for two-class boosting
MultiClassificationLossread 2026-09-27User-written loss, gradient and hessian functions for multi-class boosting
RegressionLossread 2026-09-27User-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]Scripting language - Wikipediasecondary source
- [2]Python Assets | Bruin CLIdocumentation
- [3]CALL PYTHON [EasyMorph Help]documentation
Used in
4 Protocols use this operation:
- NAICS — Industry Classification, step
stamp_descriptor - GLEIF — Legal Entity Identifiers, steps
fetch_gleif,stamp_version,stamp_descriptor - EDGAR ↔ GLEIF — Company-to-LEI Crosswalk, steps
derive_join_coverage,stamp_descriptor - SEC EDGAR — Company Tickers, step
stamp_descriptor