Mapping
Naming conventions per target engine
How SQL Flow names schemas, tables, columns, topics and folders on each target engine, including case folding and long names.
When you don't set a name in Configure, SQL Flow chooses one. With the same engine on both sides it keeps the source name exactly. Across engines it adapts the name to the target's convention, so you can query the target without quoting every identifier.
Relational targets
| Target | Default schema | Names from another engine | Example |
|---|---|---|---|
| PostgreSQL | public | snake_case | dbo.OrderItems → public.order_items |
| Oracle | The target login's schema | UPPERCASE | dbo.Orders → ORDERS in the login's schema |
| SQL Server, Azure SQL, SQL database in Fabric | dbo | Unchanged | public.order_items → dbo.order_items |
| MySQL | The connection's database | Unchanged | dbo.Orders → Orders in the connection's database |
| Sybase ASE | dbo | Unchanged | public.orders → dbo.orders |
Schemas
- A table in the source's default schema goes to the target's default schema. The source defaults are
dbofor SQL Server and Sybase ASE,publicfor PostgreSQL, and the source login's schema for Oracle. - A table in any other schema keeps its schema name, recased like the table. For example, SQL Server
Sales.OrderItemsbecomessales.order_itemson PostgreSQL. - On a MySQL target, a schema is a database: a table in another schema goes to a database of that name.
Prepare target schema creates a missing schema on PostgreSQL, SQL Server, Azure SQL and SQL database in Fabric, and a missing database on MySQL. It never creates a schema on Oracle or Sybase ASE.
Columns
Columns follow the same rule as tables, with one exception. A source column whose name isn't in its engine's default case was created with quotes, and SQL Flow keeps it exactly:
| Source column | Target | Result |
|---|---|---|
SQL Server CustomerId | PostgreSQL | customer_id |
Oracle CUSTOMER_ID | PostgreSQL | customer_id |
Oracle "CustomerId" (quoted, mixed case) | PostgreSQL | "CustomerId", unchanged |
PostgreSQL customer_id | SQL Server | customer_id |
SQL Server, MySQL and Sybase ASE don't fold names, so every column name from them is recased for PostgreSQL and Oracle targets.
Quoting, reserved words and special characters
SQL Flow quotes every name part it writes, with the target's own delimiters. A column named order or Line Total works on every target without changes.
SQL database in Fabric is the exception: it refuses column names that contain a space or any of , ; { } ( ) =, a tab or a newline. Rename such columns in Configure.
Long names
SQL Flow shortens names only for an Oracle source and a PostgreSQL target. A name longer than PostgreSQL's 63-byte limit keeps its beginning and ends with _ plus a hash of the full name. If two shortened column names collide, the table is refused:
Oracle identifier shortening produced a PostgreSQL column collision: <names>.On every other route, names are written as they are, and the target engine's own identifier limit applies. Rename a table or column that is too long in Configure.
Name collisions
Automatic names can collide, for example Orders and orders from a case-sensitive source to PostgreSQL. SQL Flow doesn't detect this. Give one of the tables its own name in Configure.
Event and file targets
Unless you set a name in Configure, these targets name their output from the source table name as it was selected:
| Target | Name | Example for dbo.Orders with prefix cdc- |
|---|---|---|
| Kafka | With A topic per table: Topic prefix plus the source table name. With One topic for every table: the Fixed topic. | cdc-dbo.Orders |
| Google Pub/Sub | projects/<project>/topics/<prefix><table>, with each . in the table name replaced by - | cdc-dbo-Orders |
| Fabric Open Mirroring | A landing folder: <table> for tables in dbo or public, <schema>.schema/<table> for others | Orders |
SQL Flow doesn't create Kafka or Pub/Sub topics. Create them before the pipeline starts.
