SQL Configuration File
Before writing the sql config file, please make sure that the name of the config file should end with .sql.
Structure of SQL Configuration File
The SQL configuration file appears as follows:
SQL
/* config
env {
parallelism = 1
job.mode = "BATCH"
}
*/
CREATE TABLE source_table WITH (
'connector'='jdbc',
'type'='source',
'url' = 'jdbc:mysql://localhost:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'query' = 'select * from source',
'properties'= '{
useSSL = false,
rewriteBatchedStatements = true
}'
);
CREATE TABLE sink_table WITH (
'connector'='jdbc',
'type'='sink',
'url' = 'jdbc:mysql://localhost:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'generate_sink_sql' = 'true',
'database' = 'seatunnel',
'table' = 'sink'
);
INSERT INTO sink_table SELECT id, name, age, email FROM source_table;
Explanation of SQL Configuration File
General Configuration in SQL File
/* config
env {
parallelism = 1
job.mode = "BATCH"
}
*/
In the SQL file, common configuration sections are defined using /* config */ comments. Inside, common configurations like env can be defined using HOCON format.
SOURCE SQL Syntax
CREATE TABLE source_table WITH (
'connector'='jdbc',
'type'='source',
'url' = 'jdbc:mysql://localhost:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'query' = 'select * from source',
'properties' = '{
useSSL = false,
rewriteBatchedStatements = true
}'
);
- Using
CREATE TABLE ... WITH (...)syntax creates a mapping for the source table. TheTABLEname is the name of the source-mapped table, and theWITHsyntax contains source-related configuration parameters. - There are two fixed parameters in the WITH syntax:
connectorandtype, representing connector plugin name (such asjdbc,FakeSource, etc.) and source type (fixed assource), respectively. - Other parameter names can reference relevant configuration parameters of the corresponding connector plugin, but the format needs to be changed to
'key' = 'value',. - If
'value'is a sub-configuration, you can directly use a string inHOCONformat. Note: if using a sub-configuration inHOCONformat, the internal property items must be separated by,, like this:
'properties' = '{
useSSL = false,
rewriteBatchedStatements = true
}'
- If using
'within'value', it needs to be escaped with'', like this:
'query' = 'select * from source where name = ''Joy Ding'''
SINK SQL Syntax
CREATE TABLE sink_table WITH (
'connector'='jdbc',
'type'='sink',
'url' = 'jdbc:mysql://localhost:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'generate_sink_sql' = 'true',
'database' = 'seatunnel',
'table' = 'sink'
);
- Using
CREATE TABLE ... WITH (...)syntax creates a mapping for the target table. TheTABLEname is the name of the target-mapped table, and theWITHsyntax contains sink-related configuration parameters. - There are two fixed parameters in the
WITHsyntax:connectorandtype, representing connector plugin name (such asjdbc,console, etc.) and target type (fixed assink), respectively. - Other parameter names can reference relevant configuration parameters of the corresponding connector plugin, but the format needs to be changed to
'key' = 'value',.
INSERT INTO SELECT Syntax
INSERT INTO sink_table SELECT id, name, age, email FROM source_table;
- The
SELECT FROMpart is the table name of the source-mapped table. If the select field has keyword(refrence),you should use it like `filedName`.
INSERT INTO sink_table SELECT id, name, age, email,`output` FROM source_table;
- The
INSERT INTOpart is the table name of the target-mapped table. - Note: This syntax does not support specifying fields in
INSERT, like this:INSERT INTO sink_table (id, name, age, email) SELECT id, name, age, email FROM source_table;
INSERT INTO SELECT TABLE Syntax
INSERT INTO sink_table SELECT source_table;
- The
SELECTpart directly uses the name of the source-mapped table, indicating that all data from the source table will be inserted into the target table. - Using this syntax does not generate related
transformconfigurations. This syntax is generally used in multi-table synchronization scenarios. For example:
CREATE TABLE source_table WITH (
'connector'='jdbc',
'type' = 'source',
'url' = 'jdbc:mysql://127.0.0.1:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'table_list' = '[
{
table_path = "source.table1"
},
{
table_path = "source.table2",
query = "select * from source.table2"
}
]'
);
CREATE TABLE sink_table WITH (
'connector'='jdbc',
'type' = 'sink',
'url' = 'jdbc:mysql://127.0.0.1:3306/seatunnel',
'driver' = 'com.mysql.cj.jdbc.Driver',
'user' = 'root',
'password' = '123456',
'generate_sink_sql' = 'true',
'database' = 'sink'
);
INSERT INTO sink_table SELECT source_table;
CREATE TABLE AS Syntax
CREATE TABLE temp1 AS SELECT id, name, age, email FROM source_table;
- This syntax creates a temporary table with the result of a
SELECTquery, used forINSERT INTOoperations. - The syntax of the
SELECTpart refers to: SQL Transformqueryconfiguration item
CREATE TABLE temp1 AS SELECT id, name, age, email FROM source_table;
INSERT INTO sink_table SELECT * FROM temp1;
Example of SQL Configuration File Submission
./bin/seatunnel.sh --config ./config/sample.sql