Entity import file reference
The file you import on the New Entity page is the table-list YAML of the Gluesync Automator and of the Bootstrapper: the format of table-list-template.yaml and of the Automator’s pipeline export. This page lists each key of that format and what the Control Plane import does with it. To run an import, see Import entities from a file.
How keys are treated
The import reads the Automator format as it is and adds no syntax of its own. Where it applies a key differently from the Automator, or cannot apply it, it reports the key, except in the few cases the tables below say are skipped silently. The differences are listed in Differences from the Automator.
Each key falls into one of these groups. The tables on this page use the same words, and say more where the treatment depends on the value.
| Treatment | What the import does |
|---|---|
Applied |
Sets the entity setting from the value. |
Checked |
Applies the value when it can. A value the import cannot apply is reported: it blocks the row when leaving it out would change the replicated data, and is a warning otherwise. |
Ignored, with a warning |
Does not apply the key. The finding says where to set it after the import. |
Not applied, with an information finding |
Does not apply the key, which has no effect in this case, and says so with an information finding. |
Blocks the row |
The row cannot be added. Either the row is Unsupported and only a change to the file fixes it, or it is an Error that you can fix under the row. See Fix a row before adding it. |
Replaced by the pipeline |
Uses the pipeline’s own value instead, with an information finding. |
Silent |
Skips the key without a finding. These are keys the Automator export writes as metadata. |
A key the import does not know gives the warning Unknown key "<key>": it is ignored. Check its spelling and its level in the file.
|
The import reads the file as YAML 1.2, while the Automator reads YAML 1.1, where an unquoted
|
File structure
A file holds one or more source schemas. Write them under schemas:, or directly at the root of the file:
schemas: # optional wrapper
sales: # source schema
target: sales_copy
customProperties: { ... }
tables:
whitelist: [customers, orders]
blacklist: []
custom:
customers: { ... } # one block per table
At the root, a key counts as a schema when its value holds target, tables or custom. Any other root key that the format does not define gives an unknown-key warning.
Root keys
| Key | Type | What the import does |
|---|---|---|
|
mapping of schema blocks |
Applied. Each key is a source schema. |
|
schema block |
Applied, as a schema written at the root. |
|
mapping: |
Applied. The groups that the imported tables use are created when the entities are saved, with their description and color. A group the pipeline already has is reused; names are compared ignoring case and surrounding spaces. |
|
mapping |
Silent. |
|
any |
Ignored, with a warning: the import does not configure Gluesync’s notifications. Set them in the Gluesync settings. |
|
list |
Ignored, with a warning: the import does not create schedules. An Automator export of several schemas writes them at the root of the file, and the import reports each as an unknown key. Add the schedules in Schedules and events. |
Schema keys
| Key | Type | What the import does |
|---|---|---|
|
text |
Applied: the target schema of every table of the schema. Absent, the target schema has the source schema’s name. A target schema that does not exist is an error on each row. |
|
list of table names, or of |
Applied: the tables to import. See How tables are selected. |
|
list, as |
Applied: the tables to leave out, whatever the whitelist says. The tables of a chain are the exception: see How tables are selected. |
|
mapping: |
Applied: the configuration of each table. See Table keys. |
|
mapping, as |
Applied. When the schema has both, the entries of |
|
|
Checked: settings for every table of the schema. A table’s own |
|
text |
Replaced by the pipeline: the pipeline’s own connectors are used. |
|
list |
Ignored, with a warning: the import does not create the pipeline’s schedules. Add them in Schedules and events. |
|
list |
Ignored, with a warning: the import does not create the groups' schedules. Add them to each group in Schedules and events. |
|
any |
Ignored, with a warning. Set it on the pipeline. |
How tables are selected
-
A non-empty
whitelistis the exact list of the tables to import. A source table is selected by the entry spelled exactly as its name; failing that, by the only entry that differs from its name by case alone. So the entryORDERSselects bothOrdersandorderswhen the schema has both, and a table that no entry spells exactly, but several entries spell in other cases, is not selected. -
An absent or empty
whitelistimports every table of the source schema, except the tables whose names start with a lowercasesysand the blacklisted ones, with a warning that says how many tables were found. -
A
whitelistthat is a single text or number, or a list of blank entries, selects no table. -
customconfigures tables; it does not select them. With a whitelist, acustomentry for a table the whitelist does not select gives the informationConfigured but not in the whitelist, so not imported. Without a whitelist, acustomentry for a blacklisted table, or for one whose name starts withsys, is skipped silently. -
A table named in
whitelistthat the source schema does not have is an error on its row. You can point the row at another source table under it, or fix the name in the file. -
Several
customkeys that differ from a table’s name by case alone, none of them spelled as the table, configure nothing: the table is imported with defaults, with a warning. -
The tables of a chain are imported even when the blacklist names them or their names start with
sys. With a whitelist, a chain’s tables are selected by their keys incustom, matched as the whitelist matches table names.
Table keys
Each entry of tables.custom configures one table. The key of the entry is the source table name.
custom:
orders: # source table
name: customer_orders # target table
entityName: sales.orders
keys: [id]
groupId: sales
columns: [ ... ]
filter: { ... }
customProperties: { ... }
| Key | Type | What the import does |
|---|---|---|
|
text |
Applied: the target table or collection. Absent, it has the source table’s name. The name is kept as written, dots included, with one exception: when |
|
text |
Applied: the target schema of this table. It wins over the schema’s |
|
text |
Applied: the name of the entity. Absent, the entity is named |
|
text |
Applied: the source table that an entry whose key is not a table name configures. When no key names that table itself, the first such entry configures its entity, named as usual. Every further entry for the same table, typically a key of the form |
|
list of column names |
Applied: the source keys of the entity, as in Logical keys. Absent, the source table’s primary key is used. When the source table has a primary key, the entity uses all of it: |
|
list of column names |
Applied on relational targets. On a target table with a primary key, |
|
list of column rows |
Applied: the column mapping. Absent, every source column is mapped under its own name. Present, only the listed columns are copied. See Columns and relations. |
|
list of |
Applied to a table the import creates: extra columns that no source column feeds. Every entry needs all six properties; an entry without them blocks the row. On an existing target table the key is ignored, with a warning. |
|
text |
Applied as the source table’s WHERE clause, when the source connector supports one. Otherwise it is ignored, with a warning. See Apply SQL WHERE clauses at source database level. |
|
|
Checked: the entity’s data filter. See Filters. |
|
as |
Checked: the rows deleted from the target before a snapshot. See Filters and Snapshot delete filter by target. |
|
|
Checked. On a NoSQL target it becomes the entity’s custom document key: |
|
text |
Applied: the entity’s group. |
|
text or number |
Applied: the table becomes a member of a chain, one chain per |
|
|
Checked: the entity settings. See Custom properties. |
|
|
Checked. |
|
number |
Ignored, with a warning: the entity keeps the default order. |
|
list |
Ignored, with a warning: the import does not create the entity’s schedules. Add them to the entity in Schedules and events after the import. |
|
flag |
|
Filters
filter and snapshotDeleteFilter take the same shape. The clauses are combined with AND.
filter:
clauses:
- {column: country, operation: NotEqual, value: XX}
- {column: status, operation: In, value: [NEW, PAID]}
-
operationtakes the names Core Hub uses, in any case:Equal,NotEqual,Greater,GreaterEqual,Lower,LowerEqual,In,NotIn,IsNull,IsNotNullandRegex. -
Any other name, such as
<,LessThanoreq, and a clause withoutoperation, are errors that you can fix under the row. The import readsoperationonly, notoperator. -
A list
valueis joined with commas, which is the formInandNotIntake. A list on an operation that compares with one value is an error, and so is a list item that contains a comma. -
A number keeps the digits it is written with:
00184stays00184. -
A
typekey on a clause is not read. -
A filter on a column the entity does not copy cannot be saved, because Core Hub filters after the mapping. To filter the snapshot on such a column, use the source
whereClause.
For what each filter does, see Filter rows with a snapshot WHERE clause and target filters and Selective deletion ahead of snapshot.
Custom properties
customProperties holds the entity settings, under source and target. A schema’s block applies to each of its tables; a table’s block wins, key by key. Chains read their settings differently: see Settings of a chain.
customProperties:
source:
snapshotOnly: false
partitions: {column: id, maxPartitionsNumber: 4}
target:
allowedOperations: [INSERT, UPDATE]
snapshotWritingConcurrency: 4
Source settings
| Key | What the import does |
|---|---|
|
Applied as written. Core Hub checks the values when the file is checked; a value it cannot read makes the row Not validated, with Core Hub’s message. |
|
Applied as written. Absent, it is |
|
Applied: the entity only copies the existing data, without streaming changes. Write |
|
Applied: a column name, or |
|
Not applied to a single table, with an information finding: it applies only to chains. Use |
|
|
Target settings
| Key | What the import does |
|---|---|
|
Applied: a list of |
|
Applied: |
|
Applied as written. Absent, it is 2. See Snapshot writing concurrency. |
|
Applied as written. See Write strategies. |
|
Applied as written. See On duplicate key. |
|
Applied as written. |
|
Applied: |
|
Blocks the row, unless the value is Core Hub’s default ( |
Connector settings
Any other key is read as a setting of the pipeline’s source or target connector, such as ttlValue:
-
A key the connector declares is applied when its value fits the declared type; otherwise the connector’s default stays, with a warning that names the expected values.
-
A key that is a table setting of the connector, such as
whereClause, has no effect here, with a warning. WritewhereClauseon the table instead. -
A key the connector does not declare has no effect, with an information finding.
Settings of a chain
A chain reads its settings as the Automator does, not as a single table does:
-
Only the
customPropertiesof the chain’s last table are read. The schema’scustomPropertiesare ignored, with a warning. -
On the source side,
maxItemsCountPerIterationsets the fetch size, andmaxTransactionMessageKbSizeandpollingIntervalMillisecondsare applied. On the target side,snapshotWritingConcurrency,useBulkOperationsDuringCDC,useBulkOperationsWhileSnapshot,allowedOperations,skipDeletion,ttlValue,preSnapshotCommandandpostSnapshotCommandare applied. Any other key,maxFetchItemsCountPerIterationincluded, is left out, with a warning. -
An absent key takes the chain default: a fetch size of 1000, a transaction message size of 1024 KB, a polling interval of 100 ms, a snapshot writing concurrency of 1, an
unchangedDataFilterTypeofENTIRE_ROW, and bulk operations off. -
The chain’s group is the
groupIdof its last table;groupis not read. Its name is theentityNameof its first table, else<source schema>.<first table key>. -
The
filter,snapshotDeleteFilter,documentKey,udfandpartitionsof a chain’s tables are left out, with a warning.
Columns and relations
Row forms
Each item of columns maps source columns to target columns. These forms are read:
| Form | Example | Meaning |
|---|---|---|
Pair |
|
Source |
Explicit |
|
The same, with room for more keys on the row. |
Produced |
|
A target column that no source column feeds. It needs an |
Metadata |
|
The form an Automator export writes: |
Bare name |
|
Copies the column under its own name. When the list starts this way and leaves columns out, a warning names them. See the note below. |
|
When |
Relations
| Relation | How to write it | Notes |
|---|---|---|
1:1 |
|
One source column, one target column. |
N:1 |
|
Several source columns feed one target column. The row needs an |
1:N |
The same |
Each target column gets a copy of the source value, with a warning. |
1:null |
|
The source column is read and never written. |
null:1 |
|
No source column; the field function produces the value. |
These shapes are errors, each with a finding that says how to rewrite it. The import still draws the row, so you can fix the file, or review the mapping in Field mapping:
-
a row that lists several targets, such as
target: [a, b]: write one row per target; -
several sources with no
target; -
one target column written by several rows;
-
a source column that both feeds several targets and shares a target with other sources (M:N);
-
a column read without being written in one row and written in another;
-
the same row twice.
A {name, expression} row names no source, and makes the whole table Unsupported: write it with source and target, or as a produced row. A row that also has type or sourceName is read as a metadata row instead.
More keys on a row
| Key | What the import does |
|---|---|
|
The type of the target column, with its size: |
|
The type of the target column, without a size. Applied as |
|
The character set of the source column; |
|
Shape a column of a table the import creates. |
All of the above, on an existing relational table |
The database wins: an existing column keeps its type, size, position and nullability. A |
|
Metadata of the row’s column. On a metadata row or a produced row, they shape the column of a table the import creates. On a |
|
Silent: the Automator export writes them as metadata. |
Keys, missing columns and case
-
When
columnsis present, the source key columns are read even if the list leaves them out, and mapped by name. -
A source key that would be written to a column outside the key of a target table with its own primary key is read and not written, with an information finding. Written that way in the file, it is an error that names both fixes.
-
A target primary key column that nothing fills is an error, unless the entity has a UDF.
-
A row that names a column the source table does not have is an error. A metadata row for such a column is a warning instead: the entity leaves it out, and a table the import creates still gets the column, empty, when the row gives its type.
-
A source column that an existing target table does not have: when
columnsnames no source column, it is not replicated, with a warning; when a row names it, the row is an error. -
Column names are case-sensitive:
idandIDare two columns. A name in the file matches the column spelled the same way; failing that, the only column whose name differs from it by case alone. When several columns differ from it by case alone, nothing is guessed and the row reports it.
Field functions in the file
A row’s expression sets the field function of its target column. It takes three shapes.
Built-in field functions
type is the function’s technical name, and its parameters sit beside it:
- source: email
target: email
expression: {type: MaskEmail, char: '#'}
- target: loaded_at
expression: {type: LocalTs}
The technical names and their parameters are listed in YAML expression type reference. The function applies to the target column the row writes. An unknown function, a function that does not fit the column types, or an unknown parameter is an error until you review the column in Field mapping. When two rows give one column a function, the first one that applies is kept, and a later one is ignored, with a warning.
Custom Field Functions (CustomFn)
- source: [first_name, last_name]
target: full_name
expression:
type: CustomFn
functionName: concat
arguments:
- {type: SourceColumnArg, name: first_name}
- {type: SourceColumnArg, name: last_name}
-
functionNameis the exported name of a function in the pipeline’s Custom Field Functions, as written. -
Each argument is
{type: SourceColumnArg, name: <column>}or{type: LiteralArg, value: <text>}. A number or a boolean invalueis passed as text. ASourceColumnArgnames its column exactly as the column is spelled: another case is no match. -
Without
arguments, the arguments are filled from the row’s sources when the counts fit, with a warning. -
The row is an error, fixable in Field mapping, when the Custom Field Functions do not export the function, when the number of arguments does not fit, when an argument names no column, several columns or a column the entity does not read, when a source of the row is not passed as an argument, or when a
LiteralArgis empty or goes to a parameter that does not take text. -
When the pipeline has no Custom Field Functions installed, the row is an error until they are: publish them in Custom Field Functions, or from a ZIP.
-
A ZIP can bring the functions with it: see ZIP layout.
-
A nested function, a missing
functionName,argumentsthat are not a list, an argument that is not a mapping or is of another type, or aSourceColumnArgwithoutnameblocks the row: Core Hub could not read the entity.
Target scalar functions (ScalarFn)
- target: synced_at
expression:
type: ScalarFn
functionName: clock_timestamp
arguments: []
returnedType: LOCAL_DATE_TIME
-
A scalar function calls a function of the target database. It writes a column that no source feeds (null:1), on targets that support it, and not on a key column.
-
argumentsis a list of SQL constants: a quoted string with no'inside, a number written as digits with an optional leading-and decimal part (no+, no exponent),NULL,TRUEorFALSE. YAML numbers, booleans andnullbecome their SQL text. To pass text, put SQL quotes inside the YAML string:'''2026-01-31'''is the SQL text'2026-01-31'. -
returnedTypeis a Gluesync data type, such asSTRINGorLOCAL_DATE_TIME, in any case; absent, it isSTRING. An unknown type is an error that lists the supported ones. -
The call is checked as Core Hub checks it: at most 32 arguments of at most 256 characters each, and no
;,--,/*,*/, double quotes, backticks, backslashes,?, line breaks or tabs.functionNamehas at most three dotted parts, each an unquoted identifier of at most 128 characters, and is notNULL,TRUEorFALSE. A call Core Hub would refuse is not applied, with its reason. -
Bulk operations bypass the statement that calls the function, so a scalar function with bulk operations on is an error. You can turn bulk operations off for the entity under the row.
Target tables the import creates
On a relational target, the Create missing target tables (n) switch of the results lets the import create the target tables that do not exist. Rows that create a table show Will create table, and their CREATE statement sits under the row. For how creation works on each target, see Target table creation.
The table is built from the file and the source table:
- Primary key
-
The columns of
targetKeys. Without them, the entity’s keys:keys, else the source primary key. - Columns
-
The columns the rows write, then the
targetOnlyColumnsthat nothing writes. When no row ofcolumnshas asourcekey, the table has thetargetOnlyColumnsonly, and the source columns are mapped onto them by name. - Types
-
A row’s
targetDataTypeortype. Without them, the type the New Entity page proposes for the source column, which keeps the source type when the target declares it. AtargetDataTypethe target does not declare is left empty, for you to pick in Field mapping. A column that nothing feeds, left with no type the target knows, gets the target’s default text type, with a warning. - Lengths
-
A text or binary type with no length gets 1024, or the longest the target allows when that is less: 255 for
charandbinaryon MySQL, MariaDB, SingleStore and Db2 LUW, and 666 forncharon Oracle. A length of-1(MAX) stays MAX on a type of varying length, such asnvarchar(max). A length the file states is kept as written. - Nullability
-
Key columns are NOT NULL. Another column follows the row’s
targetIsNullable, then a metadata row’sisNullable, then the source column. A column that nothing writes is created nullable, even when the file saysisNullable: false, since NOT NULL would fail every insert. - Shared tables
-
When several tables of the file write one new target table, it is created once, with every column of every feeder (names compared ignoring case), the widest type that holds each feeder’s, and NOT NULL only where every feeder has it. Types that cannot be merged safely, such as a number and a text, keep the type of the entity that creates the table.
|
When two tables of the file write one target table, start their snapshots with Keep and merge: Empty the table first deletes what the other entity wrote, and Delete only some rows first deletes the rows its filter matches, whichever entity wrote them. See Start the entities. |
Snapshot delete filter by target
What a snapshotDeleteFilter does depends on the target. The import checks it against the pipeline’s target. The snapshotDeleteFilter of a chain’s tables is left out: see Settings of a chain.
| Target | What the import does |
|---|---|
PostgreSQL |
Applies the filter. |
SQL Server |
Applies the filter. |
Other relational targets, including CockroachDB, YugabyteDB, Supabase, CedarDB and Greenplum |
Apply the filter. |
Databricks, Elasticsearch, Redis Streams, Fabric Open Mirroring |
Error: these targets ignore the delete filter and empty the whole target before the snapshot. Remove the filter under the row; to keep the other rows, keep the existing rows when you start the snapshot. |
Snowflake, Amazon Redshift, Vertica, Informix, GridGain |
Apply the filter, as other relational targets do. When the pipeline’s source is NoSQL, they empty the whole target instead, and the filter is an error. |
BigQuery, DynamoDB, Couchbase, MongoDB, Cosmos DB, Aerospike, RavenDB, Redis, Kafka, Google Pub/Sub, Solace, Amazon S3, Azure Data Lake, Google Cloud Storage, Universal File Store |
Not applied, with an information finding: the connector does not run delete filters, so the rows the filter matches are not deleted before the snapshot. |
Other targets, such as CouchDB, HBase and Courier |
Not checked: the import gives no finding. |
ZIP layout
A ZIP carries the code a YAML file cannot: the source of the UDFs and the pipeline’s Custom Field Functions. The Automator exports one for a single pipeline: Export entities gives one when the pipeline has UDFs or Custom Field Functions, Pipeline backup always does. See Archive layout.
pipeline_<id>/ # optional folder (Pipeline backup)
backup_<pipeline>.yaml # exactly one YAML file (.yaml or .yml)
udf-<agentId>/ # at most one UDF folder
<UdfName>.java # or <UdfName>.kt
function-collection/ # at most one: the Custom Field Functions
...
-
The ZIP holds exactly one YAML file. A ZIP with none is refused. A ZIP with several YAML files,
udf-folders orfunction-collection/folders is refused as holding several pipelines. -
A UDF file is named after the UDF:
UDF_ORDERS.javais the code ofudf: [{name: UDF_ORDERS, type: Java}]. The file name must match exactly; the extension may be in any case. The Automator writes UDF file names with letters, digits,_and-only, so a UDF whose name has other characters is not found in its ZIP. A.javaor.ktfile outside theudf-folder is not read; when its name matches a UDF the file names, an information finding says so. A UDF file that no table names is not read either. -
The files must be UTF-8. A YAML file that is not UTF-8 refuses the whole ZIP. An empty UDF file, or one that is not UTF-8, is an error on its row. A Custom Field Functions file that is not UTF-8 gives a warning, and the functions cannot be published.
-
agents-configandglobal-configfiles of a pipeline backup are ignored, with a warning: the New Entity page does not create agents or notifications. macOS metadata (__MACOSX,._files) is skipped. -
A ZIP is at most 100 MB, packed or unpacked, and holds at most 1000 entries, folders included.
What happens to the UDFs and the Custom Field Functions when you save is described in Import a ZIP with UDFs and Custom Field Functions. In short:
-
A UDF named in the file but missing from the ZIP is not linked, even when the pipeline has a UDF with that name.
-
A UDF whose name is taken by another entity, by an earlier table of the file, or by an imported entity still on the page, is compiled as a copy under a new name. A UDF of the pipeline that no entity uses is replaced by the ZIP’s code, with a warning.
-
The ZIP’s Custom Field Functions can be published only when the pipeline has none installed. An installed collection is never replaced; a version compiled but never installed is replaced when it differs from the ZIP’s.
Differences from the Automator
The Control Plane import and the Automator read the same file. They differ on these points:
| Topic | The Automator | The Control Plane import |
|---|---|---|
|
Sends 1. |
Sends 2, the New Entity page’s default; 1 for a chain, as the Automator does. |
Column names that differ by case only |
Compares |
Keeps |
Types of a created table |
Maps the source type to the target’s default type for the same Gluesync data type; uses the default text type only for a source type it cannot map. |
Keeps the source type when the target declares it. |
MAX lengths on a created table |
Creates |
Keeps MAX on a type of varying length. |
Default length on a created table |
Gives 1024 to a text or binary column with no length, which some targets refuse for |
Gives 1024, capped at the longest the target allows. Both tools keep a length the file states. |
NOT NULL on a column nothing writes |
Creates it NOT NULL when the file says |
Creates it nullable. |
|
Ignores the list and copies every column. |
Copies only the listed columns, with a warning. |
|
Accepts the list, with a warning. |
Refuses it: Core Hub refuses it too. |
|
Creates the column of the new table with defaults: |
Blocks the row until every property is given. |
Unknown operations in |
Passes them on. |
Accepts any case, and blocks the row on an unknown name. |
|
Any whole number from 1 up; 10 when absent. |
1 to 10; a column alone means 10. A count above 10 is a warning, and the entity is saved without partitions. |
|
Applies it to every table of the schema. |
Blocks every table of the schema without a |
Write policies ( |
Passes them on to the entity. |
The row is Unsupported unless the value is Core Hub’s default. |
Tables whose names start with |
Skips them, even when the whitelist names them. |
Skips them only when there is no whitelist. |
A schema’s |
Reads |
Reads both; |
|
Warns. |
Error on the row. |
Custom Field Functions in a ZIP |
Replace the pipeline’s. |
Never replace an installed collection. |
Filter clause |
Uses it as the column type when the column is not found. |
Does not read it. |
Filter operation aliases ( |
Reads them as Core Hub’s operation names. |
Refuses them: write |
|
Reads it, as it reads |
Ignores it, with an unknown-key warning. Write it under |
Chains from a source without chain support |
Does not check the source. |
The chain is Unsupported. See Chains. |
Schedules |
Creates them while scheduling is on, which is the default. |
Not created: see Limitations. |
|
Unlocks the target schema of the entity when the table has a |
The row is Unsupported. |
|
Not applied when entities are created; the Bootstrapper uses it when it starts the snapshot. |
Not applied, with a warning when it is not |