SQL Server programmer's reference
MSJet properties
Note
Before you can use this adapter, the tasks described in Configuring SQL Server to use MSJet must be completed.
Striim provides wizards for creating applications that read from SQL Server and write to various targets. SeeCreating an application using a wizard for details.
This adapter has the following properties:
property | type | default value | notes |
---|---|---|---|
Bidirectional Marker Table | String | When performing bidirectional replication, the fully qualified name of the marker table (see Bidirectional replication). This setting is case-sensitive. | |
CDDL Action | enum | Process | Visible in Flow Designer only when CDDL Capture is enabled. See Handling schema evolution. |
CDDL Capture | Boolean | False | See Handling schema evolution. Do not use Find and Replace DDL unless instructed to by Striim support. |
Committed Transactions | String | True | By default, only committed transactions are read. Set to False to read both committed and uncommitted transactions. |
Compression | Boolean | False | Set to True when the output of the source is the input of a DatabaseWriter target that writes to Cassandra {see Cassandra Writer). |
Connection Retry Policy | String | timeOut=30, retryInterval=30, maxRetries=3 | With the default setting:
Negative values are not supported. |
Connection URL | String | IP address and port of Microsoft SQL server, separated by a colon: for example, When connecting through an SSH tunnel (see Using an SSH tunnel to connect to a source or target), specify the IP address of the tunnel. MSJet supports TLS 1.2 (see Transport Layer Security (TLS)). No configuration is required on Striim's side. If the connection requires SSL, see Set up connection to MSSQLReader with SSL in Striim's knowledge base. Known issue DEV-46366: The connection URL does not support connecting to a specific instance. Striim will always connect to the default instance. | |
Database Name | String | the SQL Server database name | |
Excluded Tables | String | Data for any tables specified here will not be returned. For example, if | |
Filter Transaction Boundaries | Boolean | True | With the default value of True, begin and commit transactions are filtered out. Set to False to include begin and commit transactions. |
Integrated Security | Boolean | False | When set to the default value of False, the adapter will use SQL Server Authentication. Set to True to use Windows Authentication, in which case the adapter will authenticate as the user running the Forwarding Agent or Striim server on which it is deployed, and any settings in Username or Password will be ignored. See Choose an Authentication Mode for more information. |
Mode | String | Direct | Set to
If none of those is the case, leave set to Direct for maximum throughput. Known issue DEV-48052: Mine mode may significantly reduce throughput compared with Direct mode. |
Partial Record Policy | String | This property enables enable fetching column values from the database tables when the values are partially available or not available in the database transaction log. It allows the adapter to query and fetch supported/unsupported columns from the source database as needed. For example:
The LookupUsing parameter can be used to fetch the record from the flashback or from the latest snapshot of the table. The value should be SCN or PKEY for Oracle, or PKEY for MS SQL Server.
The PKEY should be used if you need to fetch the record based on the primary key. If you do not specify a See Using the Partial Record Policy to fetch unsupported columns for more information. | |
Password | encrypted password | The password specified for the username (see Encrypted passwords). | |
Quiesce Marker Table | String | QUIESCEMARKER | See Creating the QUIESCEMARKER table for MSJet. Modify the default value if the quiesce marker table is not in the schema associated with the user specified in the Username. |
Send Before Image | Boolean | True | set to False to omit |
Start Position | String | NOW | With the default value If you are using schema evolution (see Handling schema evolution, set a Start Position only if you are sure that there have been no DDL changes after that point. See also Switching from initial load to continuous replication. |
Tables | String | The table(s) for which to return change data. Names must be specified as Do not modify this property when CDDL Capture is True or recovery is enabled for the application. You may specify multiple tables as a list separated by semicolons or with the following wildcards:
For example, At least one table must match the wildcard or start will fail with a "Could not find tables specified in the database" error. Temporary tables (which start with MSJet supports compressed tables and indexes (see Learn / SQL / SQL Server / Enable Compression on a Table or Index). Specifying a table with more than 1018 columns will cause the application to halt with a SQL Server error that a column "exceeds the maximum of 1024 columns" (because additional columns are added to SQL Server's corresponding change table). Known issue DEV-26878: table names containing | |
Transaction Buffer Spillover Size | String | 100MB | Visible in Flow Designer only when Transaction Buffer Type is Disk. When Transaction Buffer Type is Memory, this setting has no effect. When Transaction Buffer Type is Disk, the amount of memory that Striim will use to hold each in-process transaction before buffering it to disk. You may specify the size in MB or GB. |
Transaction Buffer Type | String | Disk | When Striim runs out of available Java heap space, the application will terminate. Typically this will happen when a transaction includes millions of INSERT, UPDATE, or DELETE events with a single COMMIT. To avoid this problem, with the default setting of Disk, when a transaction exceeds the Transaction Buffer Spillover Size, Striim will buffer it to disk at the location specified by the Transaction Buffer Disk Location property, then process it when memory is available. When the setting is Disk and recovery is enabled (see Recovering applications), after the application terminates or is stopped the buffer will be reset, and during recovery any previously buffered transactions will restart from the beginning. To disable transaction buffering, set Transaction Buffer Type to Memory. |
Username | String | If Integrated Security is True, leave blank. If Integrated Security is False, specify the login name for the SQL Server user. |
MS SQL Reader properties
Note
Before using this adapter, you must complete the tasks described in Configuring SQL Server to use MS SQL Reader.
By default, SQL Server retains three days of change capture data.
Striim provides wizards for creating applications that read from SQL Server and write to various targets. SeeCreating an application using a wizard for details.
The adapter properties are:
property | type | default value | notes |
---|---|---|---|
Auto Disable Table CDC | Boolean | False | SQL Server starts capturing change data when the Striim application is started. With the default setting of False, SQL Server will continue capturing change data after the application is undeployed. If set to True, when the application is undeployed, SQL Server will stop capturing change data and delete all previously captured data from its change tables. |
Bidirectional Marker Table | String | When performing bidirectional replication, the fully qualified name of the marker table (see Bidirectional replication). This setting is case-sensitive. | |
CDC Role Name | String | STRIIM_READER | The name of the role Striim will use when it enables CDC at the table level. If this role does not exist it will be created automatically. See Learn / SQL / SQL Server / sys.sp_cdc_enable_table (Transact-SQL) for more information. |
Compression | Boolean | False | Set to True when the output of the source is the input of a DatabaseWriter target that writes to Cassandra {see Cassandra Writer). |
Connection Pool Size | Integer | 10 | typically should be set to the number of tables, with a large number of tables can set lower to reduce impact on MSSQL host |
Connection Retry Policy | String | timeOut=30, retryInterval=30, maxRetries=3 | With the default setting:
Negative values are not supported. |
Connection URL | String |
When connecting through an SSH tunnel (see Using an SSH tunnel to connect to a source or target), specify the IP address of the tunnel. If the connection requires SSL, see Set up connection to MSSQLReader with SSL in Striim's knowledge base. Known issue DEV-46366: The connection URL does not support connecting to a specific instance. Striim will always connect to the default instance. | |
Database Name | String | the SQL Server database name | |
Excluded Tables | String | Data for any tables specified here will not be returned. For example, if | |
Fetch Size | Integer | 0 | The fetch size is the number of rows that MSSQLReader will fetch at a time. With the default value of 0, this is controlled by SQL Server. You may set this manually: lower values will reduce memory usage, higher values will increase performance. |
Fetch Transaction Metadata | Boolean | False | With the default value of False, the |
Filter Transaction Boundaries | Boolean | True | With the default value of True, begin and commit transactions are filtered out. Set to False to include begin and commit transactions. |
Integrated Security | Boolean | False | When set to the default value of False, the adapter will use SQL Server Authentication. Set to True to use Windows Authentication, in which case the adapter will authenticate as the user running the Forwarding Agent or Striim server on which it is deployed, and any settings in Username or Password will be ignored. See Choose an Authentication Mode for more information. |
Partial Record Policy | String | This property enables enable fetching column values from the database tables when the values are partially available or not available in the database transaction log. It allows the adapter to query and fetch supported/unsupported columns from the source database as needed. For example:
The PKEY should be used if you need to fetch the record based on the primary key. If you do not specify a See Using the Partial Record Policy to fetch unsupported columns for more information. | |
Password | encrypted password | the password specified for the username | |
Polling Interval | Integer | 5 | This property controls how often the adapter reads from the source. The value is in seconds. By default, it checks the source for new data every five seconds. If there is new data, the adapter reads it and sends it to the adapter's output stream. |
Send Before Image | Boolean | True | set to False to omit |
Start Position | String | NOW | With the default value See also Switching from initial load to continuous replication. |
Tables | String | The table(s) for which to return change data. Names must be specified as Do not modify this property when CDDL Capture is True or recovery is enabled for the application. You may specify multiple tables as a list separated by semicolons or with the following wildcards:
For example, At least one table must match the wildcard or start will fail with a "Could not find tables specified in the database" error. Temporary tables (which start with Specifying a table with more than 1018 columns will cause the application to halt with a SQL Server error that a column "exceeds the maximum of 1024 columns" (because additional columns are added to SQL Server's corresponding change table). | |
Transaction Support | Boolean | False | If set to True, MSSQLReader will preserve the order of operations within a transaction. This is required for Bidirectional replication and to support Preserve Source Transaction Boundary in Database Writer. If you set Transaction Support to True, set Filter Transaction Boundaries to False. Transaction support requires one of the cumulative SQL Server updates listed in FIX: The change table is ordered incorrectly for updated rows after you enable change data capture for a Microsoft SQL Server database. If you have not applied one of those updates, or are reading from SQL Server 2008, leave this at its default value of False. |
Username | String | the login name for the user created as described in Configuring SQL Server to use MS SQL Reader |
SQL Server readers WAEvent fields
The output data type for MS SQL Reader and MSJet is WAEvent. The elements are:
metadata: a map including:
BeginLsn (MSJet only): LSN of Begin operation for the transaction
BeginTimestamp (MSJet only): timestamp of Begin operation for the transaction
CommitLsn (MSJet only): LSN of Commit operation for the transaction
CommitTimestamp (MSJet only): timestamp of Commit operation for the transaction
OperationName: INSERT, UPDATE, or DELETE
MSJet only: When schema evolution is enabled, OperationName for DDL events will be Alter, AlterColumns, Create, or Drop. This metadata is reserved for internal use by Striim and subject to change, so should not be used in CQs, open processors, or custom Java functions.
PartitionId (MSJet only): the partition from which the data was read
PK_UPDATE:
MS SQL Reader: for UPDATE only,
true
if the primary key value was changed, otherwisefalse
MSJet: field not included (see limitations in SQL Server CDC readers)
SEQUENCE: LSN of the operation
TableName: fully qualified name of the table . It is present but null for key-sequenced files and key-sequenced tables that have a user-defined primary key.
TimeStamp (MS SQL Reader only): timestamp from the CDC log. By default, values are included only for the first record of a new transaction (for more details, see FetchTransactionMetadata in MSSQLReader properties).
TransactionName: name of the transaction
TxnID: transaction ID. When using MS SQL Reader, by default, values are included only for the first record of a new transaction (for more details, see FetchTransactionMetadata in MSSQLReader properties).
To retrieve the values for these fields, use the META()
function. See Parsing the fields of WAEvent for CDC readers.
data: an array of fields, numbered from 0, containing:
for an INSERT or DELETE operation, the values that were inserted or deleted
for an UPDATE, the values after the operation was completed
To retrieve the values for these fields, use SELECT ... (DATA[])
. See Parsing the fields of WAEvent for CDC readers.
before (for UPDATE operations only): the same format as data, but containing the values as they were prior to the UPDATE operation
dataPresenceBitMap, beforePresenceBitMap, and typeUUID are reserved and should be ignored.
MSJet example output
MSJet's output type is WAEvent. See WAEvent contents for change data and SQL Server readers WAEvent fields.
The following commands are examples of various common operation types.
create table employee(id int,name char(40),address char(40)); begin transaction t1; --insert insert into dbo.employee values('1','Maha 5','Chennai'); --update update dbo.employee set name='Maha' where ID=1; --primary key update update dbo.employee set ID=10 where ID=1; --delete delete from dbo.employee where id=10; commit transaction t1;
The WAEvent output resulting from those commands will be similar to:
Data: WAEvent{ data: [ ] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":null,"TxnID":"0000.000003ea", "OperationName":"BEGIN","SEQUENCE":"0x00000028:00000450:0020","CommitTimestamp":1633414675857, "BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020","TransactionName":"t1"} userdata: null before: null dataPresenceBitMap: "AA==" beforePresenceBitMap: "AA==" typeUUID: null }; Data: WAEvent{ data: ["1","Maha 5 ","Chennai "] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":"dbo.employee","TxnID":"0000.000003ea", "OperationName":"INSERT","SEQUENCE":"0x00000028:00000450:003a","CommitTimestamp":1633414675857," PartitionId":72057594043170816,"BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020", "TransactionName":"t1"} userdata: null before: null dataPresenceBitMap: "Bw==" beforePresenceBitMap: "AA==" typeUUID: {"uuidstring":"01ec25a3-fb2f-70d1-901a-001c42ca1a64"} }; Data: WAEvent{ data: ["1","Maha ","Chennai "] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":"dbo.employee","TxnID":"0000.000003ea", "OperationName":"UPDATE","SEQUENCE":"0x00000028:00000450:003c","CommitTimestamp":1633414675857, "PartitionId":72057594043170816,"BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020", "TransactionName":"t1"} userdata: null before: [1,"Maha 5 ","Chennai "] dataPresenceBitMap: "Bw==" beforePresenceBitMap: "Bw==" typeUUID: {"uuidstring":"01ec25a3-fb2f-70d1-901a-001c42ca1a64"} }; Data: WAEvent{ data: ["10","Maha ","Chennai "] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":"dbo.employee","TxnID":"0000.000003ea", "OperationName":"UPDATE","SEQUENCE":"0x00000028:00000450:003d","CommitTimestamp":1633414675857, "PartitionId":72057594043170816,"BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020", "TransactionName":"t1"} userdata: null before: [1,"Maha ","Chennai "] dataPresenceBitMap: "Bw==" beforePresenceBitMap: "Bw==" typeUUID: {"uuidstring":"01ec25a3-fb2f-70d1-901a-001c42ca1a64"} }; Data: WAEvent{ data: ["10","Maha ","Chennai "] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":"dbo.employee","TxnID":"0000.000003ea", "OperationName":"DELETE","SEQUENCE":"0x00000028:00000450:003e","CommitTimestamp":1633414675857," PartitionId":72057594043170816,"BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020"," TransactionName":"t1"} userdata: null before: null dataPresenceBitMap: "Bw==" beforePresenceBitMap: "AA==" typeUUID: {"uuidstring":"01ec25a3-fb2f-70d1-901a-001c42ca1a64"} }; Data: WAEvent{ data: [ ] metadata: {"CommitLsn":"0x00000028:00000450:0040","TableName":null,"TxnID":"0000.000003ea", "OperationName":"COMMIT","SEQUENCE":"0x00000028:00000450:0040","CommitTimestamp":1633414675857, "BeginTimestamp":1633414675823,"BeginLsn":"0x00000028:00000450:0020","TransactionName":"t1"} userdata: null before: null dataPresenceBitMap: "AA==" beforePresenceBitMap: "AA==" typeUUID: null };
MS SQL Reader simple application
The following application will write change data for the specified table to SysOut. Replace the Username and Password values with the credentials for the account you created for Striim (see Configuring SQL Server to use MS SQL Reader), dbo.mytable
with the name of the table to be read, and watestdb
with the name of the database containing the table.
CREATE APPLICATION SQLServerTest; CREATE SOURCE SQLServerCDCIn USING MSSqlReader ( Username:'wauser', Password:'password', DatabaseName:'watestdb', ConnectionURL:'192.168.1.10:1433', Tables:'dbo.mytable' ) OUTPUT TO SQLServerCDCStream; CREATE TARGET SQLServerCDCOut USING SysOut(name:SQLServerCDC) INPUT FROM SQLServerCDCStream; END APPLICATION SQLServerTest;
MSSQLReader example output
MSSQLReader's output type is WAEvent. See WAEvent contents for change data and SQL Server readers WAEvent fields.
The following are examples of WAEvents emitted by MSSQLReader for various operation types. They all use the following table:
CREATE TABLE POSAUTHORIZATIONS (BUSINESS_NAME varchar(30), MERCHANT_ID varchar(100), PRIMARY_ACCOUNT bigint, POS bigint, CODE varchar(20), EXP char(4), CURRENCY_CODE char(3), AUTH_AMOUNT decimal(10,3), TERMINAL_ID bigint, ZIP integer, CITY varchar(20)); GO
INSERT
If you performed the following INSERT on the table:
INSERT INTO POSAUTHORIZATIONS VALUES( 'COMPANY 1', 'D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu', 6705362103919221351, 0, '20130309113025', '0916', 'USD', 2.20, 5150279519809946, 41363, 'Quicksand'); GO
The WAEvent for that INSERT would be:
data: ["COMPANY 1","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",6705362103919221351,0,"20130309113025", "0916","USD","2.200",5150279519809946,41363,"Quicksand"] metadata: {"TimeStamp":0,"TxnID":"","SEQUENCE":"0000002800000171001C","PK_UPDATE":"false", "TableName":"dbo.POSAUTHORIZATIONS","OperationName":"INSERT"} before: null
UPDATE
If you performed the following UPDATE on the table:
UPDATE POSAUTHORIZATIONS SET BUSINESS_NAME = 'COMPANY 5A' where pos=0; GO
The WAEvent for that UPDATE for the row created by the INSERT above would be:
data: ["COMPANY 5A","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",6705362103919221351,0,"20130309113025", "0916","USD","2.200",5150279519809946,41363,"Quicksand"] metadata: {"TimeStamp":0,"TxnID":"","SEQUENCE":"00000028000001BC0002","PK_UPDATE":"false", "TableName":"dbo.POSAUTHORIZATIONS","OperationName":"UPDATE"} before: ["COMPANY 1","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",6705362103919221351,0,"20130309113025", "0916","USD","2.200",5150279519809946,41363,"Quicksand"]
DELETE
If you performed the following DELETE on the table:
DELETE from POSAUTHORIZATIONS where pos=0; GO
The WAEvent for that DELETE for the row affected by the INSERT above would be:
data: ["COMPANY 5A","D6RJPwyuLXoLqQRQcOcouJ26KGxJSf6hgbu",6705362103919221351,0,"20130309113025", "0916","USD","2.200",5150279519809946,41363,"Quicksand"] metadata: {"TimeStamp":0,"TxnID":"","SEQUENCE":"00000028000001DE0002","PK_UPDATE":"false", "TableName":"dbo.POSAUTHORIZATIONS","OperationName":"DELETE"} before: null
Note that the contents of data
and before
are reversed from what you might expect for a DELETE operation. This simplifies programming since you can get data for INSERT, UPDATE, and DELETE operations using only the data
field.
SQL Server readers data type support and correspondence
SQL Server type | MS SQL Reader TQL type | MSJet TQL type | notes |
---|---|---|---|
bigint | long | integer | |
binary | byte[] | byte[] | not included in when reading from Azure SQL Database, supported only when values are less than 64 kb |
bit | string | boolean | |
char | string | string | |
date | string | string | |
datetime | string | string | |
datetime2 | string | string | |
datetimeoffset | string | string | |
decimal | string | string | |
float | double | string | |
geography | not supported | not supported | |
geometry | not supported | not supported | |
image | byte[] | byte[] | not included in |
int | integer | integer | |
money | string | string | |
nchar | string | string | |
ntext | string | string | not included in |
numeric | string | string | |
nvarchar | string | string | |
nvarchar(max) | string | string | included in before array for UPDATE operations only if value is changed by the update |
real | float | string | |
rowversion | byte[] | byte[] |
|
smalldatetime | string | string | |
smallint | short | short | |
smallmoney | string | string | |
sqlvariant | not supported | not supported | Columns of this type will have value |
text | string | string | not included in |
time | string | string | |
timestamp | byte[] | byte[] | |
tinyint | short | short | |
udt | string | string | |
uniqueidentifier | string | string | |
varbinary | byte[] | byte | not included in when reading from Azure SQL Database, supported only when values are less than 64 kb |
varbinary(max) | byte[] | byte[] | not included in when reading from Azure SQL Database, supported only when values are less than 64 kb |
varchar | string | string | |
varchar(max) | string | string | included in before array for UPDATE operations only if value is changed by the update |
xml | string | not supported | MS SQL Reader: included in before array for UPDATE operations only if value is changed by the update MSJet: columns of this type type will have value |
Caution
When all tables being read have primary keys and none of those primary key columns is of type binary, image, ntext, text, varbinary, or varbinary(max), you will not encounter the following issue.
When replicating MSSQLReader or MSJet output using DatabaseWriter, if one or more of a table's primary key columns is of type binary, image, ntext, text, varbinary, or varbinary(max), or if a table has no primary key and one more columns of those types, UPDATE or DELETE operations may erroneously be replicated to more than one row. This may result in additional errors when subsequent operations try to update or delete the missing or incorrectly updated rows.
Target data type support & mapping for SQL Server sources
The table below details how Striim maps the data types of a SQL Server source to the data types of a target such as Azure Synapse, BigQuery, Databricks, and so on when you create an application using a wizard with Auto Schema Creation, perform an initial load using Database Reader with Create Schema enabled, or run the schema conversion utility, or when Striim schema evolution creates or alters target tables.
SQL Server source data types rowversion and udt are not supported.
If your screen is not wide enough to display the whole table, click in a cell and drag left to view the right-hand columns.
SQL Server Data Type | Azure Synapse | BigQuery | Databricks | Db2 for z/OS | Fabric Mirror | MariaDB | MySQL | Oracle | PostgreSQL | Snowflake | Spanner | Spanner PG Dialect | SQL Server | Yellowbrick |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BIGINT | bigint | int64 | bigint | bigint | long | bigint | bigint | int | bigint | integer | INT64 | int | bigint | bigint |
BIGINT IDENTITY(p,s) | bigint, if 10 <= (p) <= 19 | int64, if (p) <= 19 | bigint, if (p) <= 19 | bigint, if 10 <= (p) <= 19 | long | bigint, if 10 <= (p) <= 19 | bigint, if 10 <= (p) <= 19 | int, if (p) <= 127 | bigint, if 10 <= (p) <= 19 | integer, if (p) <= 38 | INT64, if (p) <= 20 | int, if (p) <= 19 | bigint, if 10 <= (p) <= 19 | bigint, if 10 <= (p) <= 19 |
BINARY(p) | binary(p), if (p) <= 8000 binary, if (p) > 8000* | bytes, if (p) > 9223372036854775807* bytes(p), if (p) <= 9223372036854775807 | binary | binary(255), if (p) <= 127 blob, if (p) > 127* | bytes | binary(p), if (p) <= 255 | binary(p), if (p) <= 255 | BLOB | bytea, if (p) <= 2147483647 | BINARY, if (p) <= 8388608 BINARY, if (p) > 8388608* | BYTES(MAX), if (p) > 10485760* BYTES(p), if (p) <= 10485760 | bytea, if (p) <= 1048576 | binary(p), if (p) <= 8000 binary, if (p) > 8000* | character varying(40000) |
BIT | BIT | boolean | boolean | Not supported | boolean | bool | bool | CHAR(5) | boolean | BOOLEAN | BOOL | boolean | BIT | boolean |
CHAR | character(p) | string | string | character(p) | string | character(p) | character(p) | character(p) | character(p) | character(p) | STRING(p) | varchar(p) | character(p) | character(p) |
CHAR(p) | character(p), if (p) <= 8000 varchar(8000), if (p) > 8000* | string | string | character(p), if (p) <= 255 clob(p), if 255 <= (p) <= 2147483647 | string | character(p), if (p) <= 255 longtext, if 255 <= (p) <= 2147483647 | character(p), if (p) <= 255 longtext, if 255 <= (p) <= 2147483647 | clob, if (p) > 2000* character(p), if (p) <= 2000 | character(p), if (p) <= 10485760 text, if (p) > 10485760* | character, if (p) > 16777216* character(p), if (p) <= 16777216 | STRING(p), if (p) <= 2621440 | varchar(p), if (p) <= 1048576 text, if (p) > 1048576* | character(p), if (p) <= 8000 varchar(max), if (p) > 8000* | character(p), if (p) <= 64000 |
DATE | date | date | date | date | date | date | date | date | date | date | DATE | date | date | date |
DATETIME | datetime2 | timestamp | timestamp | timestamp | timestamp-millis | datetime(s) | datetime(s) | timestamp(s) | timestamp(s) without time zone | timestamp | TIMESTAMP | timestamptz | datetime2 | timestamp |
DATETIME2 | datetime2 | timestamp | timestamp | timestamp | timestamp-millis | varchar(34) | varchar(34) | timestamp(s) | timestamp without time zone | timestamp | TIMESTAMP | timestamptz | datetime2 | timestamp |
DATETIME2(p) | datetime2 | timestamp, if (s) <= 6 | timestamp | timestamp | timestamp-millis | varchar(34), if (s) > 6* datetime(s), if (s) <= 6 | varchar(34), if (s) > 6* datetime(s), if (s) <= 6 | timestamp(s), if (s) <= 9 timestamp, if (s) > 9* | timestamp without time zone, if 29 <= (p) <= 29, if (s) > 6* timestamp(s) without time zone, if (p) <= 29, if (s) <= 6 | timestamp | TIMESTAMP | timestamptz, if 36 <= (p) <= 36* timestamptz, if (p) <= 36, if (s) <= 6 | datetime2 | timestamp |
DATETIMEOFFSET | datetimeoffset | timestamp | timestamp | timestamp with time zone | string | varchar(150) | varchar(150) | timestamp with time zone | timestamp with time zone | timestamp with time zone | TIMESTAMP | timestamptz | datetimeoffset | timestamptz |
DATETIMEOFFSET(p) | datetimeoffset | timestamp, if (s) <= 6 | timestamp | timestamp with time zone | string | varchar(150) | varchar(150) | timestamp with time zone | timestamp(s) with time zone, if (p) <= 35, if (s) <= 6 timestamp with time zone, if 35 <= (p) <= 35, if (s) > 6* | timestamp with time zone | TIMESTAMP | timestamptz, if 36 <= (p) <= 36* timestamptz, if (p) <= 36, if (s) <= 6 | datetimeoffset | timestamptz |
DECIMAL | numeric(p,s) | numeric | decimal(p,s) | numeric(p,s) | decimal | decimal(p,s) | decimal(p,s) | number(p,s) | numeric(p,s) | numeric(p,s) | NUMERIC | numeric | numeric(p,s) | decimal(p,s) |
DECIMAL(p,0) | numeric(p,s), if (p) <= 38, if (s) <= 38 | bignumeric, if 29 <= (p) <= 39, if 9 <= (s) <= 38 | decimal(p,s), if (p) <= 38, if (s) <= 37 | numeric | decimal, if (p) <= 38 | decimal(p,s), if (p) <= 65, if (s) <= 30 | decimal(p,s), if (p) <= 65, if (s) <= 30 | number(p,s), if (p) <= 38, if (s) <= 127 | numeric(p,s), if (p) <= 1000, if (s) <= 1000 | numeric(p,s), if (p) <= 38, if (s) <= 37 | NUMERIC, if (p) <= 38, if (s) <= 9 | numeric, if (p) <= 131072, if (s) <= 16384 | numeric(p,s), if (p) <= 38, if (s) <= 38 | decimal(p,s), if (p) <= 38, if (s) <= 38 |
DECIMAL(p,s) | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | string, if (s) > 38* string, if (p,s) > 39* numeric, if (p) <= 29, if (s) <= 9 bignumeric, if 29 <= (p) <= 39, if 9 <= (s) <= 38 | string, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 37 string, if (s) > 37* | numeric(p,s), if (p) <= 31, if (s) <= 30 numeric, if (s) > 30* numeric, if (p,s) > 31* | string, if (p,s) > 38* decimal, if (p) <= 38 | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | number, if (s) > 127* number, if (p,s) > 38* number(p,s), if (p) <= 38, if (s) <= 127 | double precision, if (s) > 1000 double precision, if (p,s) > 1000 numeric(p,s), if (p) <= 1000, if (s) <= 1000 | VARCHAR, if (s) > 37* numeric(p,s), if (p) <= 38, if (s) <= 37 VARCHAR, if (p,s) > 38* | FLOAT64, if 9 <= (s) <= 15 FLOAT64, if 38 <= (p) <= 308 NUMERIC, if (p) <= 38, if (s) <= 9 | numeric, if (p) <= 131072, if (s) <= 16384 | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | character varying, if (s) > 38* character varying, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 38 |
FLOAT | float(p) | float64 | float | real | double | double | double | float(p) | double precision | float | FLOAT64 | float8 | float(p) | double precision |
FLOAT(p) | float(p), if (p) <= 53 varchar(8000), if (p) > 53* | float64, if (p) <= 308, if (s) <= 16 | float | varchar(p), if (p) > 76* real, if (p) <= 76 | double, if (p) > 10 | double, if (p) > 23* | double, if (p) > 23* | float, if (p) > 126* float(p), if (p) <= 126 | double precision, if (p) > 8 | float | STRING(MAX), if (p) > 308* STRING(MAX), if (s) > 15* FLOAT64, if (p) <= 308, if (s) <= 15 | float8, if (p) > 309 float8, if 38 <= (p) <= 309 | float(p), if (p) <= 53 varchar(8000), if (p) > 53* | double precision, if (p) > 24* |
GEOGRAPHY | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported |
GEOMETRY | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported |
HIERARCHYID | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported |
IMAGE | varbinary(8000) | bytes(p) | binary | blob(p) | bytes | longblob | longblob | BLOB | bytea | BINARY | BYTES(MAX) | Not supported | varbinary(max) | Not supported |
INT | integer | int64 | bigint | integer | int | integer | integer | int | integer | integer | INT64 | int | integer | integer |
INT IDENTITY(p,s) | integer, if 5 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | int64, if (p) <= 19 numeric, if (p,s) > 19 | decimal(38), if (p,s) > 19* bigint, if (p) <= 19 | integer, if 5 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | int, if (p) <= 10 long, if (p,s) > 10 | integer, if 7 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | integer, if 7 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | int, if (p) <= 127 | integer, if 5 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | integer, if (p) <= 38 | INT64, if (p) <= 20 NUMERIC, if 20 <= (p) <= 38 | int, if (p) <= 19 float8, if (p,s) > 19* | integer, if 5 <= (p) <= 10 bigint, if 10 <= (p) <= 19 | integer, if 5 <= (p) <= 10 bigint, if 10 <= (p) <= 19 |
MONEY | money | string | string | varchar(150) | string | varchar(150) | varchar(150) | VARCHAR2(150) | numeric | varchar(150) | STRING(150) | varchar(150) | money | character varying(150) |
NCHAR | nchar(p) | string | string | character(p) | string | nchar(p) | nchar(p) | nchar(p) | character(p) | character(p) | STRING(p) | varchar(p) | nchar(p) | character(p) |
NCHAR(p) | nchar(p), if (p) <= 4000 nvarchar(4000), if (p) > 4000* | string | string | character(p), if (p) <= 255 clob(p), if 255 <= (p) <= 2147483647 | string | nvarchar(p), if 255 <= (p) <= 65535 nchar(p), if (p) <= 255 | nvarchar(p), if 255 <= (p) <= 65535 nchar(p), if (p) <= 255 | nclob, if (p) > 1000* nchar(p), if (p) <= 1000 | character(p), if (p) <= 10485760 text, if (p) > 10485760* | character, if (p) > 16777216* character(p), if (p) <= 16777216 | STRING(p), if (p) <= 2621440 | varchar(p), if (p) <= 1048576 text, if (p) > 1048576* | nchar(p), if (p) <= 4000 nvarchar(max), if (p) > 4000* | character(p), if (p) <= 64000 |
NTEXT | nvarchar(4000) | string | string | clob | string | LONGTEXT | LONGTEXT | nclob | text | VARCHAR | STRING(MAX) | text | nvarchar(max) | character varying |
NUMERIC | numeric(p,s) | numeric | decimal(p,s) | numeric(p,s) | decimal | decimal(p,s) | decimal(p,s) | number(p,s) | numeric(p,s) | numeric(p,s) | NUMERIC | numeric | numeric(p,s) | decimal(p,s) |
NUMERIC IDENTITY(p,s) | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | bignumeric, if 9 <= (s) <= 38 numeric, if (p) <= 29, if (s) <= 9 bignumeric, if 29 <= (p) <= 39 | string, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 37 string, if (s) > 37* | numeric(p,s), if (p) <= 31, if (s) <= 30 numeric, if (s) > 30* numeric, if (p,s) > 31* | string, if (p,s) > 38* decimal, if (p) <= 38 | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | number, if (s) > 127* number, if (p,s) > 38* number(p,s), if (p) <= 38, if (s) <= 127 | double precision, if (s) > 1000 double precision, if (p,s) > 1000 numeric(p,s), if (p) <= 1000, if (s) <= 1000 | VARCHAR, if (s) > 37* numeric(p,s), if (p) <= 38, if (s) <= 37 VARCHAR, if (p,s) > 38* | FLOAT64, if 9 <= (s) <= 15 FLOAT64, if 38 <= (p) <= 308 NUMERIC, if (p) <= 38, if (s) <= 9 | numeric, if (p) <= 131072, if (s) <= 16384 | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | character varying, if (s) > 38* character varying, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 38 |
NUMERIC(p,0) | numeric(p,s), if (p) <= 38, if (s) <= 38 | bignumeric, if 29 <= (p) <= 39, if 9 <= (s) <= 38 | decimal(p,s), if (p) <= 38, if (s) <= 37 | numeric | decimal, if (p) <= 38 | decimal(p,s), if (p) <= 65, if (s) <= 30 | decimal(p,s), if (p) <= 65, if (s) <= 30 | number(p,s), if (p) <= 38, if (s) <= 127 | numeric(p,s), if (p) <= 1000, if (s) <= 1000 | numeric(p,s), if (p) <= 38, if (s) <= 37 | NUMERIC, if (p) <= 38, if (s) <= 9 | numeric, if (p) <= 131072, if (s) <= 16384 | numeric(p,s), if (p) <= 38, if (s) <= 38 | decimal(p,s), if (p) <= 38, if (s) <= 38 |
NUMERIC(p,s) | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | string, if (s) > 38* string, if (p,s) > 39* bignumeric, if 29 <= (p) <= 39, if 9 <= (s) <= 38 | string, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 37 string, if (s) > 37* | numeric(p,s), if (p) <= 31, if (s) <= 30 numeric, if (s) > 30* numeric, if (p,s) > 31* | string, if (p,s) > 38* decimal, if (p) <= 38 | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | decimal(p,s), if (p) <= 65, if (s) <= 30 TEXT, if (p,s) > 65* TEXT, if (s) > 30* | number, if (s) > 127* number, if (p,s) > 38* number(p,s), if (p) <= 38, if (s) <= 127 | double precision, if (s) > 1000 double precision, if (p,s) > 1000 numeric(p,s), if (p) <= 1000, if (s) <= 1000 | VARCHAR, if (s) > 37* numeric(p,s), if (p) <= 38, if (s) <= 37 VARCHAR, if (p,s) > 38* | FLOAT64, if 9 <= (s) <= 15 FLOAT64, if 38 <= (p) <= 308 NUMERIC, if (p) <= 38, if (s) <= 9 | numeric, if (p) <= 131072, if (s) <= 16384 | varchar(8000), if (s) > 38* varchar(8000), if (p,s) > 38* numeric(p,s), if (p) <= 38, if (s) <= 38 | character varying, if (s) > 38* character varying, if (p,s) > 38* decimal(p,s), if (p) <= 38, if (s) <= 38 |
NVARCHAR | nvarchar(p) | string | string | varchar(p) | string | nvarchar(p) | nvarchar(p) | NVARCHAR2(p) | character varying(p) | VARCHAR(p) | STRING(p) | varchar(p) | nvarchar(p) | character varying(p) |
NVARCHAR(max) | nvarchar(4000), if (max) > 4000* | string | string | clob(p), if 4045 <= (p) <= 2147483647 | string | longtext, if (max) > 65535* | longtext, if (max) > 65535* | nclob, if (max) > 4000* | character varying, if (max) > 10485760* | VARCHAR, if (max) > 16777216* | STRING(MAX), if (max) > 2621440 | text, if (max) > 1048576* | nvarchar(max), if (max) > 4000* | character varying, if (max) > 64000* |
NVARCHAR(p) | nvarchar(p), if (p) <= 4000 | string | string | varchar(p), if (p) <= 4045 | string | nvarchar(p), if (p) <= 65535 | nvarchar(p), if (p) <= 65535 | NVARCHAR2(p), if (p) <= 4000 | character varying(p), if (p) <= 10485760 | VARCHAR(p), if (p) <= 16777216 | STRING(p), if (p) <= 2621440 | varchar(p), if (p) <= 1048576 | nvarchar(p), if (p) <= 4000 | character varying(p), if (p) <= 64000 |
REAL | float(p) | float64 | float | real | double | float | float | float | double precision | float | FLOAT64 | float4 | float(p) | real |
REAL(p) | float(p), if (p) <= 53 | float64, if (p) <= 308, if (s) <= 16 | float | real, if (p) <= 76 | double | float, if (p) <= 38 | float, if (p) <= 38 | float, if (p) <= 126 | double precision | float, if (p) <= 38 | FLOAT64, if (p) <= 308, if (s) <= 15 | float4, if (p) <= 38 | float(p), if (p) <= 53 | real |
SMALLDATETIME | datetime2 | timestamp | timestamp | timestamp | timestamp-millis | datetime(s) | datetime(s) | timestamp(s) | timestamp(s) without time zone | timestamp | TIMESTAMP | timestamptz | datetime2 | timestamp |
SMALLINT | smallint | int64 | bigint | smallint | int | smallint | smallint | int | smallint | integer | INT64 | int | smallint | smallint |
SMALLINT IDENTITY(p,s) | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | int64, if (p) <= 19 numeric, if (p,s) > 19 | decimal(38), if (p,s) > 19* bigint, if (p) <= 19 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | int, if (p) <= 10 long, if (p,s) > 10 | smallint, if 3 <= (p) <= 5 mediumint, if 5 <= (p) <= 7 | smallint, if 3 <= (p) <= 5 mediumint, if 5 <= (p) <= 7 | int, if (p) <= 127 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | integer, if (p) <= 38 | INT64, if (p) <= 20 NUMERIC, if 20 <= (p) <= 38 | int, if (p) <= 19 float8, if (p,s) > 19* | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 |
SMALLMONEY | smallmoney | string | string | varchar(150) | string | varchar(150) | varchar(150) | VARCHAR2(150) | numeric | varchar(150) | STRING(150) | varchar(150) | smallmoney | character varying(150) |
SQL_VARIANT | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported |
TEXT | varchar(8000) | string | string | clob(p) | string | LONGTEXT | LONGTEXT | clob | text | VARCHAR | STRING(MAX) | Not supported | varchar(max) | character varying |
TIME | time | string | string | time | time-millis | varchar(150) | varchar(150) | VARCHAR2(150) | time | time | STRING(150) | varchar(150) | time | time |
TIME(p) | time | string, if (s) > 6* time, if (s) <= 6 | string | time | time-millis | varchar(150), if (s) > 6* time(s), if (s) <= 6 | varchar(150), if (s) > 6* time(s), if (s) <= 6 | VARCHAR2(150) | time(s), if (p) <= 15, if (s) <= 6 time, if (p) > 15, if (s) > 6* | time | STRING(150) | varchar(150) | time | time |
TIMESTAMP | varbinary(8000) | bytes | binary | blob | bytes | longblob | longblob | BLOB | bytea | BINARY | BYTES(MAX) | bytea | varbinary(max) | character varying |
TINYINT | tinyint | int64 | bigint | smallint | int | tinyint unsigned | tinyint unsigned | int | smallint | integer | INT64 | int | tinyint | smallint |
TINYINT IDENTITY(p,s) | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | int64, if (p) <= 19 numeric, if (p,s) > 19 | decimal(38), if (p,s) > 19* bigint, if (p) <= 19 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | int, if (p) <= 10 long, if (p,s) > 10 | tinyint, if (p) <= 3 smallint, if 3 <= (p) <= 5 | tinyint, if (p) <= 3 smallint, if 3 <= (p) <= 5 | int, if (p) <= 127 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | integer, if (p) <= 38 | INT64, if (p) <= 20 NUMERIC, if 20 <= (p) <= 38 | int, if (p) <= 19 float8, if (p,s) > 19* | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 | integer, if 5 <= (p) <= 10 smallint, if (p) <= 5 |
UNIQUEIDENTIFIER | varchar(p) | string | string | varchar(p) | string | varchar(p) | varchar(p) | VARCHAR2(p) | character varying(p) | VARCHAR(p) | STRING(p) | varchar(p) | varchar(p) | character varying(p) |
VARBINARY | varbinary(p) | bytes(p) | binary | varbinary(4046) | bytes | varbinary(p) | varbinary(p) | BLOB | bytea | VARBINARY | BYTES(p) | bytea | varbinary(p) | character varying(p) |
VARBINARY(max) | varbinary(8000), if (max) > 8000* | bytes, if (max) > 9223372036854775807* bytes(p), if (p) <= 9223372036854775807 | binary | blob, if (max) > 1011* | bytes | varbinary(65535), if (max) > 65535 | varbinary(65535), if (max) > 65535 | BLOB | bytea, if (p) <= 2147483647 bytea, if (max) > 2147483647* | VARBINARY | BYTES(MAX), if (max) > 10485760* | bytea | varbinary(max), if (max) > 8000* | character varying, if (max) > 64000* |
VARBINARY(p) | varbinary(p), if (p) <= 8000 | bytes(p), if (p) <= 9223372036854775807 | binary | blob varbinary(4046), if (p) <= 1011 | bytes | varbinary(p), if (p) <= 65535 | varbinary(p), if (p) <= 65535 | BLOB | bytea, if (p) <= 2147483647 | VARBINARY | BYTES(p), if (p) <= 10485760 | bytea, if (p) <= 1048576 | varbinary(p), if (p) <= 8000 | character varying(p), if (p) <= 64000 |
VARCHAR | varchar(p) | string | string | varchar(p) | string | varchar(p) | varchar(p) | VARCHAR2(p) | character varying(p) | VARCHAR(p) | STRING(p) | varchar(p) | varchar(p) | character varying(p) |
VARCHAR(max) | varchar(8000), if (max) > 8000* | string | string | clob(p), if 4045 <= (p) <= 2147483647 | string | longtext, if 65535 <= (p) <= 2147483647 longtext, if (max) > 2147483647* | longtext, if 65535 <= (p) <= 2147483647 longtext, if (max) > 2147483647* | clob, if (max) > 4000* | character varying, if (max) > 10485760* | VARCHAR, if (max) > 16777216* | STRING(MAX), if (max) > 2621440 | text, if (max) > 1048576* | varchar(max), if (max) > 8000* | character varying, if (max) > 64000* |
VARCHAR(p) | varchar(p), if (p) <= 8000 varchar(8000), if (p) > 8000* | string | string | clob(p), if 4045 <= (p) <= 2147483647* varchar(p), if (p) <= 4045 | string | longtext, if 65535 <= (p) <= 2147483647* varchar(p), if (p) <= 65535 | longtext, if 65535 <= (p) <= 2147483647* varchar(p), if (p) <= 65535 | clob, if (p) > 4000* VARCHAR2(p), if (p) <= 4000 | character varying(p), if (p) <= 10485760 character varying, if (p) > 10485760* | VARCHAR, if (p) > 16777216* VARCHAR(p), if (p) <= 16777216 | STRING(MAX), if (p) > 2621440 STRING(p), if (p) <= 2621440 | varchar(p), if (p) <= 1048576 text, if (p) > 1048576* | varchar(max), if (p) > 8000* varchar(p), if (p) <= 8000 | character varying, if (p) > 64000* character varying(p), if (p) <= 64000 |
XML | varchar(8000) | string | string | xml | string | LONGTEXT | LONGTEXT | xmltype | xml | varchar | STRING(MAX) | varchar(p) | xml | character varying |
*When using the schema conversion utility, these mappings appear in converted_tables_with_striim_intelligence.sql.