Migrate Alteryx Workflows
PlaidCloud converts Alteryx workflows, analytic apps, and macros into Advanced workflows that can be reviewed, scheduled, parameterized, and run in PlaidCloud. The importer preserves the workflow graph, uploads referenced files to Document, creates macro workflows when needed, and maps tools to native workflow steps or managed job executors.
Use this guide when you are moving a single workflow, a group of related workflows, or a larger Alteryx portfolio into PlaidCloud.
What PlaidCloud Creates
Section titled “What PlaidCloud Creates”PlaidCloud creates a runnable Advanced workflow from the Alteryx design:
- Workflow tools become PlaidCloud workflow steps with the original upstream and downstream relationships preserved.
- Alteryx macros become PlaidCloud macro workflows with explicit macro inputs and macro outputs.
- Analytic app questions become controlled workflow variables that users can set before a run.
- Input files, output files, spatial sidecars, images, PDFs, and generated artifacts are stored in Document at the path selected during import.
- Assisted Modeling (machine learning) pipelines become native ML Train and ML Score workflow steps.
- Advanced operations such as fuzzy matching, spatial processing, PDF extraction, OCR, NLP, and reporting run through PlaidCloud’s managed job executors when a native SQL or workflow operation is not the best fit.
- Comment boxes and Tool Containers arrive on the workflow canvas as notes, highlight boxes, and groups. They explain the converted workflow exactly as they explained the original, and they add no runtime work.
- Browse and other viewer-only objects come across as part of the canvas rather than as steps, so they add no runtime work — every step’s output table is already there to look at.
Before You Start
Section titled “Before You Start”Collect the workflow files and dependencies together before importing:
- Include Alteryx workflow, app, and macro files:
.yxmd,.yxwz, and.yxmc. - Include input data files such as CSV, Excel, Access, YXDB, XML, JSON, and database extracts.
- Include spatial sidecar files together. For example, keep shapefile groups and MapInfo files in the same folder.
- Include report assets such as images, PDFs, map layers, and templates.
- Choose the PlaidCloud project where the converted workflows should be created.
- Choose the Document account and folder where PlaidCloud should upload imported files.
- Decide whether this migration requires structural validation only or output parity validation.
Import A Workflow
Section titled “Import A Workflow”- Open the target project in PlaidCloud.
- Open Tools → Import Alteryx Workflow.
- Choose the target project and select the
.yxmd,.yxwz, or.yxmcfile to import. - Optionally set workflow, step, and table name prefixes. Table names are already prefixed with the workflow’s own name — see Table Names in a Converted Workflow below.
- Choose the Document account and folder where imported files should be stored.
- Add any referenced files or folders that the workflow needs at runtime.
- Start the import.
- On a clean import, the window closes on its own and opens the generated Advanced workflow — you don’t need to close it by hand. Anything worth a second look surfaces afterward as a toast rather than holding up the import.
- If the workflow has a step that did not convert, the window stays open instead and shows the conversion report so you can review it before continuing.
When any step needs a look — a dropped or unconverted tool — the import window replaces its form with a conversion report: a summary of how many steps mapped with high confidence and how many need review, and a table of the lower-confidence or caveated steps listing each step’s name, operation, confidence, and notes. Use it to go straight to the steps worth checking before you run the workflow; each of those steps also carries the same confidence note in its step memo on the canvas.
PlaidCloud stores imported dependencies in the Document location selected during import. Converted steps then reference those Document paths, so the workflow can run repeatedly without relying on a desktop file system.
Table Names in a Converted Workflow
Section titled “Table Names in a Converted Workflow”Each converted step writes its own table, named after the Alteryx tool it came from — tool_4_out for Tool 4. Alteryx numbers tools per file, so those names repeat across workflows, and a PlaidCloud project is a single table namespace. Every import therefore prefixes its tables with the workflow’s own name, giving 03_measure_the_quality_of_data_tool_4_out. That is what lets a whole folder of Alteryx workflows go into one project without them writing over each other’s results.
Importing the same workflow twice, which is what happens when a first import needs correcting, works the same way: the second import gets its own set of tables rather than writing over the first. Delete the earlier import’s workflow and tables once you are happy with the new one.
Set your own table name prefix during import to override the default, or set it to nothing to get the bare tool_4_out names back. Nothing depends on these names other than the converted steps themselves, so renaming a table afterwards means repointing the steps that read it.
Comments and Tool Containers on the Canvas
Section titled “Comments and Tool Containers on the Canvas”The notes and groups an Alteryx author drew around their work come across with it:
- A comment box carrying text becomes a note on the canvas, at the position and size it was drawn at.
- A comment box drawn as an empty outline around a set of tools becomes a highlight box, which is what it was doing in Alteryx.
- A comment box that displays a linked document keeps the link as its text.
- A Tool Container becomes a group holding the steps that were drawn inside it, keeping its caption, whether it was folded shut, and whether it was switched off. Nested containers come across as nested groups, and a step inside both belongs to both.
Move, edit, recolor, or delete any of them the same way you would one you drew yourself.
Two things behave differently from the original:
- A switched-off Tool Container’s tools are not imported at all. Alteryx does not run them either, so importing them would put steps in the workflow that never do anything. The container itself still comes across, as a highlight box carrying its caption, so you can see what was there. To bring its tools in, switch the container on in Alteryx and import again. (Importing over the API or from an AI agent also accepts an option to import a disabled container’s tools as ordinary, runnable steps — useful for sample workflows that ship everything switched off.)
- Box colors are not carried across. The canvas offers a fixed set of six colors, and Alteryx boxes are almost always white or grey, so every one of them would arrive the same shade. They come in with the canvas default instead; set the color you want from the right-click menu.
A note’s text now renders in a neutral gray. It previously came in amber/orange against the dark canvas — a color that reads as a warning even on an unremarkable comment carried straight over from Alteryx.
A Tool Container that ends up holding no steps at all — because it was switched off, or because it only ever contained comments — still appears, as a highlight box carrying its caption, rather than disappearing from the canvas.
A workflow that is nothing but comments — a page of documentation with no tools on it — imports as a canvas carrying those comments, and says it converted to no runnable step. That is the honest result, not a failure: there was nothing to run.
Control Containers
Section titled “Control Containers”An Alteryx Control Container runs the tools inside it only when the stream wired to its Control input carries records. That gate comes across with the container, not just the container’s outline:
- The container becomes a group on the canvas like any other, keeping its caption and its contents.
- Every step that was inside it is imported already set to run only when the gated data has rows, and to be skipped when it does not. Steps in containers nested inside it are gated the same way. You do not have to wire the condition up yourself.
- A Control Container with nothing wired to its Control input was only ever a visual grouping, and converts exactly like a Tool Container.
- A Control Container drawn around nothing keeps its caption on the canvas as a highlight box.
The Browse Tool
Section titled “The Browse Tool”An Alteryx Browse is a viewer. It displays the records reaching it, changes nothing, and has no output connector. In PlaidCloud every step’s output table is already there to open, so what an author drew a Browse for is one click away from the step above it — select that step and look at its table.
A Browse therefore comes across as part of the canvas rather than as a step. It creates no step, claims no table, and is not counted among the tools the conversion could not handle:
- No table is created for it. Each Browse used to become a do-nothing step that the workflow then discarded, while still claiming a warehouse table of its own that nothing wrote and nothing read. Across our 179-workflow Alteryx reference set that was 152 tables.
- A broken branch is reported once, against the tool that broke. A Browse used to be listed in the conversion report as a tool that failed to convert whenever the tool feeding it failed, so the same problem appeared twice — once against the tool you actually have to fix, and once against a viewer that could never have run. Fourteen of that reference set’s reported failures were of that kind. Those entries are gone; the tool actually to blame is still reported.
This removes misleading entries from the conversion report rather than the failures behind them. The number of workflows that convert with every tool converted is the same as before.
Workflows you imported before this release keep the conversion they were given, tables and all. Import them again to pick this up.
Calgary Databases
Section titled “Calgary Databases”An Alteryx Calgary database (a .cydb file) is a proprietary indexed store. PlaidCloud has no way to read the file format, and there is no open specification for it. Rather than refuse every tool that touches one, conversion treats each .cydb path as standing for one ordinary PlaidCloud table, named calgary_<database name> under the table prefix the import applies. Once the database is an ordinary table, the tools built around it become ordinary operations: a saved query is a filter, cross-count buckets are conditional counts, and a loader’s field list is a set of columns.
- A converted Calgary Loader writes that table from its input. Its declared index types are dropped during conversion — a warehouse indexes for itself — but the field list carries over.
- A converted Calgary Input reads the table back, applying its saved query as the filter. The table’s own columns are resolved when the step runs, since nothing in the workflow file records what the database held.
- A converted Calgary Input (Count Only) or Calgary Cross Count reads the table as an aggregate: plain indexed fields group the rows, and each of a custom field’s named values becomes one counted column.
- A converted Calgary Join matches each incoming record against the table, keeping the records that matched and carrying the input’s own columns through. It converts when the incoming field is a plain, non-spatial value — see Calgary Join and Cross Count Append below for when it does not.
- A converted Calgary Cross Count Append matches each incoming record against the table the same way, then reports how many database records it matched, appended to the input — again when the incoming field is a plain, non-spatial value.
A workflow that reads a database it didn’t build itself gets a step that stops, naming the table. The demographic and reference .cydb files Alteryx ships are the usual case — nothing in your workflow wrote them, so there is no PlaidCloud table to read yet. Until that table exists, the converted step stops and names it rather than silently reading nothing and reporting success. Export the source data into the named table — from the original .cydb, if you have Alteryx available to read it, or from wherever the data actually lives — before running the workflow.
Or, And, and Not in a Calgary Query
Section titled “Or, And, and Not in a Calgary Query”A Calgary query is a tree of And, Or, and Not over the database’s indexed fields, and the tree now converts as written: an Or anywhere in it, and a Not wrapped around more than one condition, both convert. A contains or starts-with term converts too — to a SQL LIKE on the count path, and a substring match on the record read. This covers a Calgary Input’s record read, its count-only read, Calgary Cross Count, and the buckets inside a Cross Count’s custom fields.
A handful of query shapes still don’t convert, each naming itself in the conversion report and on the step:
- A query using a spatial lookup (or a negated contains/starts-with) instead of a column comparison — an index operation with no column-level equivalent.
- A read limited by Skip Records or Max Records — the stand-in table carries no record order to skip or cap against.
- A Cross Count grouped by more than one custom field. The counts are genuinely one aggregate over the database, but Alteryx doesn’t document what it names or how it orders the resulting columns, and there is no example on hand to check against.
- A count-only read that names no column to count over, since the database’s own columns are not readable from the workflow file.
- A Calgary Loader that stores no data field, which would write a table with no columns.
- A Calgary tool that names no database at all.
Calgary Join and Cross Count Append
Section titled “Calgary Join and Cross Count Append”Calgary Join and Calgary Cross Count Append match every incoming record against the database through one of its indexes, and the workflow file records the index’s name but not its kind. The same configuration means an equality join when the index holds ordinary values, and a “which points fall inside this shape” match when it holds spatial geometry — the file gives no way to tell which.
Conversion decides using the incoming field’s own declared type: a spatial index can only ever have been paired with a spatial field, so
- an incoming field typed as a spatial object stops, naming the field, the reading it produced, and the stand-in table to rebuild the match against as a Spatial Match step;
- an incoming field whose type couldn’t be determined stops, naming that as the reason — it is never guessed;
- an ordinary, non-spatial incoming field converts, matching against the stand-in table.
Whichever way it goes, the step records the reading it took and the field type it read it from, so a conversion you disagree with shows its working rather than leaving you to infer it.
Calgary Cross Count Append converts on a plain, non-spatial incoming field, the same as a Calgary Join. Where the Join keeps the matched records, the Append reports how many database records each input record matched: it counts, per input record, the matches, and appends that count to the input. An input record that matched nothing counts zero rather than dropping out, and two identical input records each keep their own row — the count is per record, not per distinct set of values. A single plain cross-count field converts this way; a grid of named custom values does not, because it would append one count column per value and Alteryx documents neither how many columns that is nor what it names them.
A Calgary Join in Count Only mode converts the same way — it counts, per input record, the database records matched, a record matching nothing counting zero — rather than keeping the matched records.
A Calgary Join or Cross Count Append also stops, naming itself, when it matches against a range of index values rather than a single one, when its unmatched-records output is wired to something downstream, when it names no field to match the database on, and when nothing is wired to its input for it to match records from.
A converted Loader and the readers of what it wrote are wired together, so a reader cannot run beside the write that fills its table.
A Calgary Input’s columns arrive as text: the stand-in table gives their names, not the database’s own types.
In-Database Tools
Section titled “In-Database Tools”An In-Database workflow pushes its work to the warehouse rather than the Alteryx engine, and a PlaidCloud step already is warehouse SQL — so the In-Database operation tools convert to exactly the same steps as their in-memory twins. Filter In-DB becomes a filter, Formula In-DB a formula, Summarize In-DB an aggregate, and Join, Select, Sample, Sort, Union and Browse likewise.
What does not convert is the pair of tools at either end of the chain. Connect In-DB and Write Data In-DB open a live warehouse connection that the tools between them hold and push SQL against, and PlaidCloud has no equivalent to that held-open connection. Each arrives as a step flagged for review, naming the tool and pointing at its replacement: an SQL import or export step bound to a PlaidCloud connection. Swap the two endpoints for those steps and the operation tools in between convert unchanged.
Data Stream In, Data Stream Out, Dynamic Input In-DB, Dynamic Output In-DB, and In-Database Macro Input/Output are refused by name for the same reason.
A Union Fed By A By-Position Join Or Multi-Row Formula
Section titled “A Union Fed By A By-Position Join Or Multi-Row Formula”A workflow with a Union reading from a Join matched by record position, or from a Multi-Row Formula, converted cleanly but could fail once you ran it — stopping partway through with a column it could not resolve. The conversion looked fine; only running the workflow turned up the problem.
This is fixed: such a workflow now runs to a correct result. If you hit this error on a workflow imported earlier, re-run it — no need to re-import.
Cross Tab Percent And Total Columns
Section titled “Cross Tab Percent And Total Columns”A Cross Tab carrying one of its derived methods — Percent Row, Percent Column, Total Column or Total Row — used to stop the conversion and take every step below it. All four now convert:
- Percent Row and Percent Column are the cell’s share of its row’s, or its column’s, total of the data field.
- Total Column is that row total, under the name the tool recorded for it.
- Total Row is an extra record carrying the totals, with no value in the grouping fields.
Every total is a sum of the data field, whichever methods the tool computes for each cell.
Two shapes are still flagged for review instead of converted: a Total Row on a Cross Tab with no grouping field, which would produce the same record twice with nothing to tell the copies apart, and a Total Column whose name the tool never recorded, which would otherwise be missing from the output entirely.
Macros In A Converted Workflow
Section titled “Macros In A Converted Workflow”Macros convert to native PlaidCloud constructs — not to an emulation of the Alteryx macro engine. Every macro flavour maps to a first-class workflow feature, so a converted macro runs the same logic with the same per-record or per-iteration behaviour as the original, at full fidelity:
- Standard macros are inlined into the calling workflow: the macro’s tools become ordinary steps on the canvas, so there is no black box to trust — every step stays visible, reviewable, and editable. Nested standard macros inline to any depth, and a macro that ends up calling itself is caught and named rather than looped forever.
- Batch macros become a macro workflow run once per record of the control parameter, with each pass’s output collected back into a single stream — the same per-group execution Alteryx performs. The control parameter is bound as a per-pass variable, exactly as it drives the batch in Alteryx.
- Iterative macros become a native workflow loop that carries state between passes and runs until the macro converges. The loop’s pass limit is the macro’s own Maximum Number of Iterations, the same setting Alteryx runs it under; where that is left at Alteryx’s runaway-guard default, or not set at all, conversion applies its own ceiling instead. If a macro has still not converged at that limit, the run stops and says so — naming the limit it reached — rather than reporting a partial result as a final answer. A macro that genuinely needs more passes than the ceiling allows can be re-imported with a higher one: the import’s
iteration_ceilingoption sets it. - Control parameters, Macro Input and Macro Output ports, Action tools, and Detour branching all convert to their native equivalents, so the machinery that wires a macro together is preserved — not approximated. A macro called from inside a Batch or Iterative macro resolves and converts along with its caller.
Two arrangements are refused by name rather than converted, so you know at import time: a looping macro nested inside another looping macro, and In-Database Macro Input/Output tools.
Reports In A Converted Workflow
Section titled “Reports In A Converted Workflow”An image a report layout refers to is now packaged with the workflow, so a converted report finds it in Document instead of failing on an asset that only ever existed on the Alteryx machine. This covers an image named by a fixed path — an image whose bytes are embedded in the workflow, or whose path is taken from a column per record, has no separate file to fetch.
A report piece whose source data could not be read is now reported as such. Where the columns of a table could not be read, a report snippet built from it used to be skipped and a report table section used to come out empty, both on runs that reported success. The step now stops and says the column information could not be read, and why. A report that previously came out with a section missing may now stop with an explanation instead — see the Fixed entry for it in August 2026.
Use The Converted Workflow
Section titled “Use The Converted Workflow”After import, use the workflow like any other PlaidCloud Advanced workflow:
- Open the converted workflow canvas.
- Review the generated steps and branches.
- Set workflow variables for any converted app questions or runtime parameters.
- Run the workflow.
- Review run history, step outputs, readiness notes, and generated artifacts.
- Schedule the workflow when it is ready for repeatable operation.
A converted Download tool becomes a REST Request step, which reaches an external endpoint through a REST connection rather than a URL baked into the step. Assign a REST connection to the step before you run it — the converter flags this at import time with a readiness note. See Create a Connection to set one up.
Converted macros are available as PlaidCloud macro workflows. A workflow that called an Alteryx macro will call the generated PlaidCloud macro through the macro step. Macro runs are isolated from one another, so concurrent workflow runs can safely use the same macro definition.
Validate The Conversion
Section titled “Validate The Conversion”PlaidCloud supports two practical validation levels.
Structural Validation
Section titled “Structural Validation”Structural validation confirms that the workflow was converted into a runnable PlaidCloud DAG:
- Every Alteryx tool has a PlaidCloud conversion route.
- Required macros were found or generated.
- Required input files were uploaded to Document.
- Macro inputs and macro outputs are connected.
- Workflow variables were created for user-controlled inputs.
- The generated workflow opens and can be run in PlaidCloud.
Structural validation is useful for migration readiness, inventory review, and early portfolio conversion.
Output Parity Validation
Section titled “Output Parity Validation”Output parity validation compares the PlaidCloud run against trusted Alteryx outputs:
- Output schemas match.
- Row counts match.
- Row values match.
- Row order is ignored unless the workflow explicitly depends on ordering.
For workflows that create reports, maps, PDFs, images, or model artifacts, validate the generated artifact or the data behind the artifact according to the way your team uses the output.
See Validate Converted Alteryx Workflows for a detailed validation checklist.
Random Sampling
Section titled “Random Sampling”Row values are the one place where a sampling tool is a deliberate exception. Create Samples and Random % Sample both draw at random, and Alteryx returns the same records every run when a seed is set. PlaidCloud draws with its own generator, so:
- Sample sizes, percentages, and the Estimation / Validation / Holdout split proportions carry over exactly.
- The records inside each sample are not the ones Alteryx picks, and a re-run picks a different set again.
Each converted step says so in the conversion report and on the step itself, and neither is reported as a tool that failed to convert. Validate these on row counts and proportions rather than row values.
Where which record lands in which sample actually matters — a model you need to reproduce exactly, or a holdout you have already published results against — decide the sample with a column instead: a Formula step that computes the sample assignment, and a Filter step per sample.
Machine Learning (Assisted Modeling) Conversions
Section titled “Machine Learning (Assisted Modeling) Conversions”Alteryx machine-learning pipelines built with the Machine Learning tool family convert to PlaidCloud’s native ML steps:
- A Classification or Regression tool, together with its upstream Assisted Modeling and Transformation stages and the downstream Fit tool, fuses into a single ML: Train Model step. The step carries the exact algorithm, target variable, feature columns, and hyperparameters from the Alteryx workflow, and writes the trained model as a one-row model table with the training metrics recorded in it.
- Each Predict tool becomes an ML: Score step reading the trained model table and its data input. The prediction column is named after the target variable with a
_predictedsuffix. - XGBoost classifiers convert with an approximation note: the model trains as a scikit-learn gradient-boosted classifier, and any XGBoost-specific tree parameters with no equivalent are listed in the step’s mapping notes. Validate model metrics against the Alteryx run before relying on parity.
- An Image Recognition tool trains an image classifier in the workflow and scores new images against it, entirely in place — no external account, and no image data leaves PlaidCloud. A downstream Predict pointed at the model scores against it. Two things carry over differently from the rest of the ML family, so validate them before relying on parity. First, the classifier is retrained from your labeled images rather than copied from Alteryx, and that training is non-deterministic — two conversions of the same workflow produce slightly different models, so predictions are a faithful approximation, not a bit-for-bit match. Second, training runs on CPU, so a set of hundreds to low thousands of images takes several minutes. Image Recognition is enabled per workspace; ask your administrator to turn it on if a converted workflow reports that it is not enabled.
- An AutoML tool fuses to an ML: Train Model step the same way Classification and Regression do. AutoML doesn’t record which of its candidate algorithms actually won at Alteryx run time, so conversion picks the first checked algorithm ML Train supports and notes the choice rather than reproducing an automated search. This mapping is validated against a reconstructed fixture, not a real Alteryx export — AutoML left Alteryx’s palette after 2023.1 — so confirm a converted AutoML step against a real workflow if one becomes available.
- An Assisted Modeling wizard whose model was chosen interactively (and never saved into the workflow file) cannot convert — the importer keeps a placeholder step whose notes record the recovered target variable so you can hand-build the ML Train step.
- A standalone one-hot-encoding stage is flagged in the conversion report. The fused ML Train step one-hot encodes categorical features internally, so the standalone stage usually needs no replacement.
Like every conversion, the fused steps carry their confidence and notes in the conversion report and on the canvas, so the pipelines worth double-checking are easy to find.
Review Conversion Coverage
Section titled “Review Conversion Coverage”The Alteryx Conversion Matrix lists each supported Alteryx object, its coverage level, and the PlaidCloud operation used during conversion.
Use the matrix to understand how the importer handles each tool family:
- Native DAG steps for common data preparation, joins, filters, formulas, sorting, unions, sampling, and reshaping.
- Macro steps for macro inputs, macro outputs, macro invocation, control parameters, and macro concurrency.
- Controlled workflow variables for analytic app questions such as check boxes, drop-downs, text boxes, radio buttons, folder pickers, and file pickers.
- Document-backed file operations for input, output, directory, and dynamic file behavior.
- Native ML Train and ML Score steps for Assisted Modeling machine-learning pipelines.
- A stand-in table for each Alteryx Calgary database, so Calgary Loader, Input, Cross Count, and Join tools convert against an ordinary table instead of refusing outright — see Calgary Databases.
- Managed job executors for specialized spatial, fuzzy matching, PDF, OCR, NLP, reporting, and artifact work.
- Cloud-native equivalents where PlaidCloud creates a durable, shareable artifact rather than reproducing an Alteryx-specific desktop renderer or proprietary file format.
Recommended Migration Practice
Section titled “Recommended Migration Practice”For a large portfolio, migrate in batches:
- Import the workflows and macros into a migration project.
- Complete dependency packages before reviewing individual formulas or business logic.
- Run structural validation across the batch.
- Prioritize output parity validation for production workflows, regulatory workflows, and workflows with downstream consumers.
- Promote validated workflows into the target production project.
- Schedule production runs and monitor run history.
Related Guides
Section titled “Related Guides”- Alteryx Migration Readiness Checklist
- Package Alteryx Dependencies
- Validate Converted Alteryx Workflows
- Use Converted Alteryx Apps
- Orchestrate Alteryx Migrations With MCP
- Tune Alteryx Imports
- Validate Alteryx Reports And Artifacts
- Migrate Spatial Alteryx Workflows
- Create A Macro
- Run A Workflow
- Manage Workflow Variables
- Alteryx Conversion Matrix
Migration Documentation Set
Section titled “Migration Documentation Set”For larger migrations, use these focused guides with this migration guide:
- Alteryx Migration Readiness Checklist for migration planning and package review.
- Package Alteryx Dependencies for files, folders, macros, spatial sidecars, and expected outputs.
- Use Converted Alteryx Apps for controlled workflow variables and app-style runs.
- Orchestrate Alteryx Migrations With MCP for using an AI agent to organize files, work from connected shared storage, and coordinate many conversions through PlaidCloud’s MCP server.
- Tune Alteryx Imports for dependency completion, macro resolution, variables, validation comparisons, and executor readiness notes.
- Validate Alteryx Reports And Artifacts for PDFs, images, maps, charts, dashboards, and model artifacts.
- Migrate Spatial Alteryx Workflows for spatial files, SQL geometry logic, managed spatial executors, and spatial validation.