Search docs.molo17.com

    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 yes, no, on or off is a boolean. Write flags as true and false.

    • In snapshotOnly and skipDeletion, and in the flags a chain reads, yes, no, on and off are errors, quoted or not, because their meaning is unclear.

    • In a filter value they are a warning.

    • unlockedSchema and the isNullable of a column read them as the Automator does: unlockedSchema: yes turns it on, and isNullable: no makes the column NOT NULL.

    • targetIsNullable ignores them, with a warning.

    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

    schemas

    mapping of schema blocks

    Applied. Each key is a source schema.

    <schema name>

    schema block

    Applied, as a schema written at the root.

    groups

    mapping: <name>: {description, color, id}

    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. color is #RRGGBB or #AARRGGBB; with an alpha of 00, or without color, the group gets the next color of the Control Plane’s palette. A color in another format is skipped silently. A group named _default, or with id: _default, stands for the default group and is never created.

    exportMetadata

    mapping

    Silent.

    globalNotifications

    any

    Ignored, with a warning: the import does not configure Gluesync’s notifications. Set them in the Gluesync settings.

    pipeline_schedules, group_schedules

    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

    target

    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.

    tables.whitelist

    list of table names, or of {name: <table>} or {sourceName: <table>} mappings

    Applied: the tables to import. See How tables are selected.

    tables.blacklist

    list, as whitelist

    Applied: the tables to leave out, whatever the whitelist says. The tables of a chain are the exception: see How tables are selected.

    tables.custom

    mapping: <table key>: <table block>

    Applied: the configuration of each table. See Table keys.

    custom

    mapping, as tables.custom

    Applied. When the schema has both, the entries of tables.custom win.

    customProperties

    {source: {…​}, target: {…​}}

    Checked: settings for every table of the schema. A table’s own customProperties win, key by key and side by side. See Custom properties.

    sourceType, targetType

    text

    Replaced by the pipeline: the pipeline’s own connectors are used.

    schedules

    list

    Ignored, with a warning: the import does not create the pipeline’s schedules. Add them in Schedules and events.

    group_schedules

    list

    Ignored, with a warning: the import does not create the groups' schedules. Add them to each group in Schedules and events.

    transactionsAudit

    any

    Ignored, with a warning. Set it on the pipeline.

    How tables are selected

    • A non-empty whitelist is 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 entry ORDERS selects both Orders and orders when 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 whitelist imports every table of the source schema, except the tables whose names start with a lowercase sys and the blacklisted ones, with a warning that says how many tables were found.

    • A whitelist that is a single text or number, or a list of blank entries, selects no table.

    • custom configures tables; it does not select them. With a whitelist, a custom entry for a table the whitelist does not select gives the information Configured but not in the whitelist, so not imported. Without a whitelist, a custom entry for a blacklisted table, or for one whose name starts with sys, is skipped silently.

    • A table named in whitelist that 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 custom keys 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 in custom, matched as the whitelist matches table names.

    Anchors and merge keys

    YAML anchors, aliases and merge keys work as in the Automator. Keys written next to a merge win over the merged ones:

    custom:
      customers:
        customProperties: &cdc_settings
          source:
            pollingIntervalMilliseconds: 500
      orders:
        customProperties:
          <<: *cdc_settings

    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

    name

    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 name differs from the source table and its last dotted part is the key of the entry, the prefix is dropped, so name: FILELIB.SECMSTPM under the key SECMSTPM gives SECMSTPM.

    targetSchema

    text

    Applied: the target schema of this table. It wins over the schema’s target.

    entityName

    text

    Applied: the name of the entity. Absent, the entity is named <source schema>.<source table>. An entity name the pipeline already has makes the row Already exists. Two tables of the file that give one entity name are an error.

    sourceTableName

    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 <table>@@<n> such as orders@@2, configures another entity of it, named <target table> - <source schema>.<source table> unless entityName says otherwise. A @@ key without sourceTableName is an error. Under a key that is itself the name of a table, a sourceTableName that names another table is ignored, with a warning.

    keys

    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: keys may list some or all of its columns, and a column outside the primary key is an error. On a source table without a primary key, whose target table has one, the keys are the source columns that feed the target’s primary key, and keys that say otherwise are an error.

    targetKeys

    list of column names

    Applied on relational targets. On a target table with a primary key, targetKeys must name that key, or the row is an error that you can fix under it. On an existing target table without a primary key, they mark the key columns as logical keys: a name that is not a column of the table is an error that you can fix under the row, and a marked column fed by a single source column makes that source column a key too, with an information finding. On a table the import creates, they become its primary key. On a non-relational target they are not applied, with an information finding: the keys follow the source’s.

    columns

    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.

    targetOnlyColumns

    list of {name, type, dataLength, numericPrecision, numericScale, isNullable}

    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.

    whereClause

    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.

    filter

    {clauses: [{column, operation, value}]}

    Checked: the entity’s data filter. See Filters.

    snapshotDeleteFilter

    as filter

    Checked: the rows deleted from the target before a snapshot. See Filters and Snapshot delete filter by target.

    documentKey

    {prefix, suffix, separator, keys}, or one column name

    Checked. On a NoSQL target it becomes the entity’s custom document key: prefix and suffix default to empty text, separator to -, and documentKey: <column> means {keys: [<column>]}. A document key without key columns, or on a column the entity does not copy, is an error on the row. On other targets the key has no effect, with an information finding.

    groupId, group

    text

    Applied: the entity’s group. groupId is read first; when it is empty, group is read. See Groups and Chains.

    chainId

    text or number

    Applied: the table becomes a member of a chain, one chain per chainId value and schema. A chain reads its settings in its own way: see Settings of a chain and Chains.

    customProperties

    {source: {…​}, target: {…​}}

    Checked: the entity settings. See Custom properties.

    snapshotWriteMethod

    UPSERT or INSERT

    Checked. UPSERT is silent. Any other value is not applied, with a warning: choose how the snapshot writes when you start the entity.

    orderIndex

    number

    Ignored, with a warning: the entity keeps the default order.

    schedules

    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.

    unlockedSchema

    flag

    true blocks the row: the row is Unsupported. false is silent. See Unlock Schema.

    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]}
    • operation takes the names Core Hub uses, in any case: Equal, NotEqual, Greater, GreaterEqual, Lower, LowerEqual, In, NotIn, IsNull, IsNotNull and Regex.

    • Any other name, such as <, LessThan or eq, and a clause without operation, are errors that you can fix under the row. The import reads operation only, not operator.

    • A list value is joined with commas, which is the form In and NotIn take. 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: 00184 stays 00184.

    • A type key 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.

    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

    maxFetchItemsCountPerIteration, maxTransactionMessageKbSize, pollingIntervalMilliseconds, maxSnapshotPageKbSize

    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.

    unchangedDataFilterType

    Applied as written. Absent, it is DISABLED, Core Hub’s default.

    snapshotOnly

    Applied: the entity only copies the existing data, without streaming changes. Write true or false; yes, no, on and off are errors that you can fix under the row. See Start a snapshot and CDC replication from the Control Plane.

    partitions

    Applied: a column name, or {column, maxPartitionsNumber} (name and maxPartitions are also read). The partitions are computed when the entity is saved. The column must exist and be a number, date or time column, and the count a whole number from 1 to 10; a column alone means 10. A problem is a warning, and the entity is saved without partitions. See Logical partitioning for snapshot tasks.

    maxItemsCountPerIteration

    Not applied to a single table, with an information finding: it applies only to chains. Use maxFetchItemsCountPerIteration.

    resumableSnapshot

    true is silent. Any other value is not applied, with a warning: Core Hub’s default stays.

    Target settings

    Key What the import does

    allowedOperations

    Applied: a list of INSERT, UPDATE, DELETE and TRUNCATE, in any case. An empty list means every operation, with an information finding; skipDeletion: true still leaves out DELETE. An unknown name, or a value that is not a list, is an error that you can fix under the row. See Allowed Operations.

    skipDeletion

    Applied: true leaves out DELETE. A non-empty allowedOperations wins over it.

    snapshotWritingConcurrency

    Applied as written. Absent, it is 2. See Snapshot writing concurrency.

    useBulkOperationsDuringCDC, useBulkOperationsWhileSnapshot

    Applied as written. See Write strategies.

    insertConflictStrategy

    Applied as written. See On duplicate key.

    distinctCaseInsensitiveKeyData

    Applied as written.

    udf

    Applied: [{name, type}], with type Java or Kotlin in any case. Only the first entry is used. The code comes from the ZIP; see ZIP layout. A udf in the schema’s customProperties blocks every table of the schema that has no udf of its own: each entity links its own UDF, so move it under the table’s customProperties.target.

    changedColumnsPolicy, nullValuePolicy, absentFieldPolicy, columnWritePolicies

    Blocks the row, unless the value is Core Hub’s default (DISABLED, WRITE_NULL, WRITE_NULL and an empty list): the import cannot apply these write policies, and without them the target writes values differently. The row is Unsupported.

    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. Write whereClause on 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 customProperties of the chain’s last table are read. The schema’s customProperties are ignored, with a warning.

    • On the source side, maxItemsCountPerIteration sets the fetch size, and maxTransactionMessageKbSize and pollingIntervalMilliseconds are applied. On the target side, snapshotWritingConcurrency, useBulkOperationsDuringCDC, useBulkOperationsWhileSnapshot, allowedOperations, skipDeletion, ttlValue, preSnapshotCommand and postSnapshotCommand are applied. Any other key, maxFetchItemsCountPerIteration included, 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 unchangedDataFilterType of ENTIRE_ROW, and bulk operations off.

    • The chain’s group is the groupId of its last table; group is not read. Its name is the entityName of its first table, else <source schema>.<first table key>.

    • The filter, snapshotDeleteFilter, documentKey, udf and partitions of 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

    - id: customer_id

    Source id is written to target customer_id. One item may hold several pairs.

    Explicit

    - {source: email, target: email}

    The same, with room for more keys on the row. destination is another name for target; when a row has both, target wins.

    Produced

    - {target: synced_at, expression: {type: LocalTs}}

    A target column that no source column feeds. It needs an expression that produces the value; with only a type, the row is an error unless the entity has a UDF.

    Metadata

    - {name: id, type: integer, dataLength: 0}

    The form an Automator export writes: sourceName, else name, is the source column and name the target. Its sizes and nullability apply to a table the import creates.

    Bare name

    - id

    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 columns starts with a bare name, the Automator ignores the whole list and copies every column. The import copies only the listed columns and names the ones it leaves out. Write each row as - SOURCE: target, so the file means the same in both tools.

    Relations

    Relation How to write it Notes

    1:1

    - id: id, or {source: id, target: id}

    One source column, one target column.

    N:1

    {source: [first_name, last_name], target: full_name}

    Several source columns feed one target column. The row needs an expression with a Custom Field Function (CustomFn) that takes every source, or the entity’s UDF in the ZIP. Otherwise it is an error.

    1:N

    The same source on several rows, each with its own target

    Each target column gets a copy of the source value, with a warning.

    1:null

    {source: internal_note, target: []}

    The source column is read and never written.

    null:1

    {target: synced_at, type: timestamp, expression: {type: LocalTs}}

    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

    targetDataType

    The type of the target column, with its size: varchar(50), decimal(10,2), timestamp(6). Applied to a table the import creates and to a new column. A type the target does not declare is left empty, for you to pick in Field mapping.

    type

    The type of the target column, without a size. Applied as targetDataType is. On a row with a source, a type the target does not declare is ignored, and the column keeps the type proposed for the source column. On a column no source feeds, in a table the import creates, it becomes the target’s default text type, with a warning.

    charSet

    The character set of the source column; null clears it.

    targetPosition, targetIsNullable, targetDataLength, targetNumericPrecision, targetNumericScale

    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 type or targetDataType whose base type differs from the column’s gives a warning, and a position or a nullability gives an information finding; sizes are skipped silently.

    dataLength, numericPrecision, numericScale, isNullable

    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 source: row they are skipped silently: use the target… keys.

    isPK, id, ordinalPosition

    Silent: the Automator export writes them as metadata.

    Keys, missing columns and case

    • When columns is 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 columns names 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: id and ID are 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}
    • functionName is 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 in value is passed as text. A SourceColumnArg names 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 LiteralArg is 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, arguments that are not a list, an argument that is not a mapping or is of another type, or a SourceColumnArg without name blocks 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.

    • arguments is 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, TRUE or FALSE. YAML numbers, booleans and null become their SQL text. To pass text, put SQL quotes inside the YAML string: '''2026-01-31''' is the SQL text '2026-01-31'.

    • returnedType is a Gluesync data type, such as STRING or LOCAL_DATE_TIME, in any case; absent, it is STRING. 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. functionName has at most three dotted parts, each an unquoted identifier of at most 128 characters, and is not NULL, TRUE or FALSE. 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 targetOnlyColumns that nothing writes. When no row of columns has a source key, the table has the targetOnlyColumns only, and the source columns are mapped onto them by name.

    Types

    A row’s targetDataType or type. Without them, the type the New Entity page proposes for the source column, which keeps the source type when the target declares it. A targetDataType the 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 char and binary on MySQL, MariaDB, SingleStore and Db2 LUW, and 666 for nchar on Oracle. A length of -1 (MAX) stays MAX on a type of varying length, such as nvarchar(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’s isNullable, then the source column. A column that nothing writes is created nullable, even when the file says isNullable: 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. Regex and IsNotNull are errors that you can fix under the row: the database cannot run them, and the snapshot would fail before copying anything.

    SQL Server

    Applies the filter. Regex, IsNull, IsNotNull, In and NotIn are errors that you can fix under the row.

    Other relational targets, including CockroachDB, YugabyteDB, Supabase, CedarDB and Greenplum

    Apply the filter. Regex, IsNotNull, In and NotIn are errors that you can fix under the row.

    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 or function-collection/ folders is refused as holding several pipelines.

    • A UDF file is named after the UDF: UDF_ORDERS.java is the code of udf: [{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 .java or .kt file outside the udf- 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-config and global-config files 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

    snapshotWritingConcurrency absent

    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 keys with the column names ignoring case, and matches a field function’s target column ignoring case.

    Keeps id and ID apart everywhere. A name in another case matches only when a single column fits; otherwise the row reports it.

    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 varchar(max) as varchar(1024) when one table of the file feeds the target table.

    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 char or binary.

    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 isNullable: false, and by default for a targetOnlyColumns entry.

    Creates it nullable.

    columns starting with a bare name

    Ignores the list and copies every column.

    Copies only the listed columns, with a warning.

    keys with the primary key plus other columns

    Accepts the list, with a warning.

    Refuses it: Core Hub refuses it too.

    targetOnlyColumns with missing properties

    Creates the column of the new table with defaults: varchar, length 1024, NOT NULL.

    Blocks the row until every property is given.

    Unknown operations in allowedOperations

    Passes them on.

    Accepts any case, and blocks the row on an unknown name.

    partitions count

    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.

    udf in a schema’s customProperties

    Applies it to every table of the schema.

    Blocks every table of the schema without a udf of its own: an entity links its own UDF. The finding asks you to move udf under the table.

    Write policies (changedColumnsPolicy, nullValuePolicy, absentFieldPolicy, columnWritePolicies)

    Passes them on to the entity.

    The row is Unsupported unless the value is Core Hub’s default.

    Tables whose names start with sys

    Skips them, even when the whitelist names them.

    Skips them only when there is no whitelist.

    A schema’s custom next to tables.custom

    Reads tables.custom only.

    Reads both; tables.custom wins.

    CustomFn with no Custom Field Functions published

    Warns.

    Error on the row.

    Custom Field Functions in a ZIP

    Replace the pipeline’s.

    Never replace an installed collection.

    Filter clause type

    Uses it as the column type when the column is not found.

    Does not read it.

    Filter operation aliases (<, lt, LessThan, eq, >= and others) and an operator key

    Reads them as Core Hub’s operation names.

    Refuses them: write operation with Core Hub’s names. See Filters.

    partitions written on the table, outside customProperties

    Reads it, as it reads customProperties.source.partitions.

    Ignores it, with an unknown-key warning. Write it under customProperties.source.

    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.

    unlockedSchema: true

    Unlocks the target schema of the entity when the table has a udf; without one, it skips the table with an error.

    The row is Unsupported.

    snapshotWriteMethod

    Not applied when entities are created; the Bootstrapper uses it when it starts the snapshot.

    Not applied, with a warning when it is not UPSERT: choose how the snapshot writes when you start the entity.