use of com.qlangtech.tis.plugin.datax.SelectedTab in project plugins by qlangtech.
the class TestStarRocksSinkFactory method testStartRocksWrite.
public void testStartRocksWrite() throws Exception {
/**
* CREATE TABLE `totalpayinfo` (
* `id` varchar(32) NULL COMMENT "",
* `entity_id` varchar(10) NULL COMMENT "",
* `num` int(11) NULL COMMENT "",
* `create_time` bigint(20) NULL COMMENT "",
* `update_time` DATETIME NULL,
* `update_date` DATE NULL,
* `start_time` DATETIME NULL
* ) ENGINE=OLAP
* UNIQUE KEY(`id`)
* DISTRIBUTED BY HASH(`id`) BUCKETS 10
* PROPERTIES (
* "replication_num" = "1",
* "in_memory" = "false",
* "storage_format" = "DEFAULT"
* );
*/
String tableName = "totalpayinfo";
String colEntityId = "entity_id";
String colNum = "num";
String colId = "id";
String colCreateTime = "create_time";
String updateTime = "update_time";
String updateDate = "update_date";
String starTime = "start_time";
IDataxProcessor dataxProcessor = mock("dataxProcessor", IDataxProcessor.class);
IDataxReader dataxReader = mock("dataxReader", IDataxReader.class);
List<ISelectedTab> selectedTabs = Lists.newArrayList();
SelectedTab totalpayinfo = mock(tableName, SelectedTab.class);
EasyMock.expect(totalpayinfo.getName()).andReturn(tableName).times(1);
List<ISelectedTab.ColMeta> cols = Lists.newArrayList();
ISelectedTab.ColMeta cm = new ISelectedTab.ColMeta();
cm.setName(colEntityId);
cm.setType(new DataType(Types.VARCHAR, 6));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colNum);
cm.setType(new DataType(Types.INTEGER));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colId);
cm.setType(new DataType(Types.VARCHAR, 32));
cm.setPk(true);
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colCreateTime);
cm.setType(new DataType(Types.BIGINT));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(updateTime);
cm.setType(new DataType(Types.TIMESTAMP));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(updateDate);
cm.setType(new DataType(Types.DATE));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(starTime);
cm.setType(new DataType(Types.TIMESTAMP));
cols.add(cm);
EasyMock.expect(totalpayinfo.getCols()).andReturn(cols).times(2);
selectedTabs.add(totalpayinfo);
EasyMock.expect(dataxReader.getSelectedTabs()).andReturn(selectedTabs);
EasyMock.expect(dataxProcessor.getReader(null)).andReturn(dataxReader);
DataXDorisWriter dataXWriter = mock("dataXWriter", DataXDorisWriter.class);
DorisSourceFactory sourceFactory = new DorisSourceFactory();
sourceFactory.loadUrl = "[\"192.168.28.201:8030\"]";
sourceFactory.userName = "root";
sourceFactory.dbName = "tis";
// sourceFactory.password = "";
sourceFactory.port = 9030;
sourceFactory.nodeDesc = "192.168.28.201";
EasyMock.expect(dataXWriter.getDataSourceFactory()).andReturn(sourceFactory);
dataXWriter.initWriterTable(tableName, Collections.singletonList("jdbc:mysql://192.168.28.201:9030/tis"));
EasyMock.expect(dataxProcessor.getWriter(null)).andReturn(dataXWriter);
StarRocksSinkFactory sinkFactory = new StarRocksSinkFactory();
sinkFactory.columnSeparator = "x01";
sinkFactory.rowDelimiter = "x02";
sinkFactory.sinkSemantic = StarRocksSinkSemantic.AT_LEAST_ONCE.getName();
sinkFactory.sinkBatchFlushInterval = 2000l;
System.out.println("sinkFactory.sinkBatchFlushInterval:" + sinkFactory.sinkBatchFlushInterval);
Map<String, IDataxProcessor.TableAlias> aliasMap = new HashMap<>();
IDataxProcessor.TableAlias tab = new IDataxProcessor.TableAlias(tableName);
aliasMap.put(tableName, tab);
EasyMock.expect(dataxProcessor.getTabAlias()).andReturn(aliasMap);
this.replay();
Map<IDataxProcessor.TableAlias, SinkFunction<DTO>> sinkFunction = sinkFactory.createSinkFunction(dataxProcessor);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DTO d = new DTO();
d.setEventType(DTO.EventType.DELETE);
d.setTableName(tableName);
Map<String, Object> after = Maps.newHashMap();
after.put(colEntityId, "334556");
after.put(colNum, "5");
after.put(colId, "88888888887");
after.put(colCreateTime, "20211113115959");
after.put(updateTime, "2021-12-17T09:21:20Z");
after.put(starTime, "2021-12-18 09:21:20");
after.put(updateDate, "2021-12-9");
d.setAfter(after);
assertEquals(1, sinkFunction.size());
for (Map.Entry<IDataxProcessor.TableAlias, SinkFunction<DTO>> entry : sinkFunction.entrySet()) {
env.fromElements(new DTO[] { d }).addSink(entry.getValue());
break;
}
env.execute("testJob");
Thread.sleep(14000);
this.verifyAll();
}
use of com.qlangtech.tis.plugin.datax.SelectedTab in project plugins by qlangtech.
the class CUDCDCTestSuit method createDataxReader.
private BasicDataXRdbmsReader createDataxReader(TargetResName dataxName, String tabName) {
BasicDataSourceFactory dataSourceFactory = createDataSourceFactory(dataxName);
List<ColumnMetaData> tableMetadata = dataSourceFactory.getTableMetadata(tabName);
BasicDataXRdbmsReader dataxReader = new BasicDataXRdbmsReader() {
@Override
protected RdbmsReaderContext createDataXReaderContext(String jobName, SelectedTab tab, IDataSourceDumper dumper) {
return null;
}
@Override
public DataSourceFactory getDataSourceFactory() {
return dataSourceFactory;
}
};
SelectedTab baseTab = new SelectedTab(tabName);
baseTab.setCols(tableMetadata.stream().map((m) -> m.getName()).collect(Collectors.toList()));
dataxReader.selectedTabs = Collections.singletonList(baseTab);
return dataxReader;
}
use of com.qlangtech.tis.plugin.datax.SelectedTab in project plugins by qlangtech.
the class TestClickHouseSinkFactory method testCreateSinkFunction.
public void testCreateSinkFunction() throws Exception {
String tableName = "totalpayinfo";
String colEntityId = "entity_id";
String colNum = "num";
String colId = "id";
String colCreateTime = "create_time";
IDataxProcessor dataxProcessor = mock("dataxProcessor", IDataxProcessor.class);
IDataxReader dataxReader = mock("dataxReader", IDataxReader.class);
List<ISelectedTab> selectedTabs = Lists.newArrayList();
SelectedTab totalpayinfo = mock(tableName, SelectedTab.class);
EasyMock.expect(totalpayinfo.getName()).andReturn(tableName);
List<ISelectedTab.ColMeta> cols = Lists.newArrayList();
ISelectedTab.ColMeta cm = new ISelectedTab.ColMeta();
cm.setName(colEntityId);
cm.setType(new DataType(Types.VARCHAR, 6));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colNum);
cm.setType(new DataType(Types.INTEGER));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colId);
cm.setType(new DataType(Types.VARCHAR, 32));
cm.setPk(true);
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colCreateTime);
cm.setType(new DataType(Types.BIGINT));
cols.add(cm);
EasyMock.expect(totalpayinfo.getCols()).andReturn(cols).anyTimes();
selectedTabs.add(totalpayinfo);
EasyMock.expect(dataxReader.getSelectedTabs()).andReturn(selectedTabs);
EasyMock.expect(dataxProcessor.getReader(null)).andReturn(dataxReader);
DataXClickhouseWriter dataXWriter = mock("dataXWriter", DataXClickhouseWriter.class);
dataXWriter.initWriterTable(tableName, Collections.singletonList("jdbc:clickhouse://192.168.28.201:8123/tis"));
ClickHouseDataSourceFactory sourceFactory = new ClickHouseDataSourceFactory();
sourceFactory.userName = "default";
sourceFactory.dbName = "tis";
sourceFactory.password = "123456";
sourceFactory.port = 8123;
sourceFactory.nodeDesc = "192.168.28.201";
EasyMock.expect(dataXWriter.getDataSourceFactory()).andReturn(sourceFactory);
EasyMock.expect(dataxProcessor.getWriter(null)).andReturn(dataXWriter);
Map<String, IDataxProcessor.TableAlias> aliasMap = new HashMap<>();
IDataxProcessor.TableAlias tab = new IDataxProcessor.TableAlias(tableName);
aliasMap.put(tableName, tab);
EasyMock.expect(dataxProcessor.getTabAlias()).andReturn(aliasMap);
this.replay();
ClickHouseSinkFactory clickHouseSinkFactory = new ClickHouseSinkFactory();
clickHouseSinkFactory.ignoringSendingException = true;
clickHouseSinkFactory.maxBufferSize = 1;
clickHouseSinkFactory.numRetries = 5;
clickHouseSinkFactory.numWriters = 1;
clickHouseSinkFactory.queueMaxCapacity = 1;
clickHouseSinkFactory.timeout = 30;
Map<IDataxProcessor.TableAlias, SinkFunction<DTO>> sinkFuncs = clickHouseSinkFactory.createSinkFunction(dataxProcessor);
assertTrue(sinkFuncs.size() > 0);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
DTO d = new DTO();
d.setTableName(tableName);
Map<String, Object> after = Maps.newHashMap();
after.put(colEntityId, "334556");
after.put(colNum, "5");
after.put(colId, "123dsf124325253dsf123");
after.put(colCreateTime, "20211113115959");
d.setAfter(after);
assertEquals(1, sinkFuncs.size());
for (Map.Entry<IDataxProcessor.TableAlias, SinkFunction<DTO>> entry : sinkFuncs.entrySet()) {
env.fromElements(new DTO[] { d }).addSink(entry.getValue()).name("clickhouse");
break;
}
env.execute("testJob");
Thread.sleep(5000);
this.verifyAll();
}
use of com.qlangtech.tis.plugin.datax.SelectedTab in project plugins by qlangtech.
the class TestElasticSearchSinkFactory method testCreateSinkFunction.
/**
* 参考:ElasticsearchSinkTestBase
*
* @throws Exception
*/
@Test
public void testCreateSinkFunction() throws Exception {
String tableName = "totalpayinfo";
String colEntityId = "entity_id";
String colNum = "num";
String colId = "id";
String colCreateTime = "create_time";
IDataxProcessor dataxProcessor = mock("dataxProcessor", IDataxProcessor.class);
IDataxReader dataxReader = mock("dataxReader", IDataxReader.class);
List<ISelectedTab> selectedTabs = Lists.newArrayList();
SelectedTab totalpayinfo = mock(tableName, SelectedTab.class);
EasyMock.expect(totalpayinfo.getName()).andReturn(tableName);
List<ISelectedTab.ColMeta> cols = Lists.newArrayList();
ISelectedTab.ColMeta cm = new ISelectedTab.ColMeta();
cm.setName(colEntityId);
cm.setType(new DataType(Types.VARCHAR, 6));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colNum);
cm.setType(new DataType(Types.INTEGER));
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colId);
cm.setType(new DataType(Types.VARCHAR, 32));
cm.setPk(true);
cols.add(cm);
cm = new ISelectedTab.ColMeta();
cm.setName(colCreateTime);
cm.setType(new DataType(Types.BIGINT));
cols.add(cm);
EasyMock.expect(totalpayinfo.getCols()).andReturn(cols).anyTimes();
selectedTabs.add(totalpayinfo);
EasyMock.expect(dataxReader.getSelectedTabs()).andReturn(selectedTabs);
EasyMock.expect(dataxProcessor.getReader(null)).andReturn(dataxReader);
DataXElasticsearchWriter dataXWriter = mock("dataXWriter", DataXElasticsearchWriter.class);
ESTableAlias esTableAlias = new ESTableAlias();
dataXWriter.initialIndex(esTableAlias);
EasyMock.expect(dataxProcessor.getWriter(null)).andReturn(dataXWriter);
Map<String, IDataxProcessor.TableAlias> aliasMap = new HashMap<>();
IDataxProcessor.TableAlias tab = new IDataxProcessor.TableAlias(tableName);
aliasMap.put(tableName, tab);
EasyMock.expect(dataxProcessor.getTabAlias()).andReturn(aliasMap);
this.replay();
ElasticSearchSinkFactory clickHouseSinkFactory = new ElasticSearchSinkFactory();
Map<IDataxProcessor.TableAlias, SinkFunction<DTO>> sinkFuncs = clickHouseSinkFactory.createSinkFunction(dataxProcessor);
Assert.assertTrue("sinkFuncs must > 0", sinkFuncs.size() > 0);
// StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// env.setParallelism(1);
DTO d = new DTO();
d.setTableName(tableName);
d.setEventType(DTO.EventType.ADD);
Map<String, Object> after = Maps.newHashMap();
after.put(colEntityId, "334556");
after.put(colNum, "5");
after.put(colId, "123dsf124325253dsf123");
after.put(colCreateTime, "20211113115959");
d.setAfter(after);
Assert.assertEquals(1, sinkFuncs.size());
for (Map.Entry<IDataxProcessor.TableAlias, SinkFunction<DTO>> entry : sinkFuncs.entrySet()) {
// env.fromElements(new DTO[]{d}).addSink(entry.getValue()).name("clickhouse");
runElasticSearchSinkTest("elasticsearch-sink-test-json-index", entry.getValue());
break;
}
// env.execute("testJob");
Thread.sleep(5000);
this.verifyAll();
Client client = getClient();
}
use of com.qlangtech.tis.plugin.datax.SelectedTab in project plugins by qlangtech.
the class CUDCDCTestSuit method startTest.
public void startTest(MQListenerFactory cdcFactory, String tabName) throws Exception {
BasicDataXRdbmsReader dataxReader = createDataxReader(dataxName, tabName);
// replay();
List<SelectedTab> selectedTabs = dataxReader.getSelectedTabs();
Optional<SelectedTab> firstSelectedTab = selectedTabs.stream().filter((t) -> tabName.equals(t.name)).findFirst();
Assert.assertTrue("firstSelectedTab:" + tabName + " must be present", firstSelectedTab.isPresent());
ISelectedTab tab = firstSelectedTab.get();
this.cols = Lists.newArrayList();
HdfsColMeta cMeta = null;
for (ISelectedTab.ColMeta c : tab.getCols()) {
cMeta = new HdfsColMeta(c.getName(), c.isNullable(), c.isPk(), c.getType());
cols.add(cMeta);
}
IResultRows consumerHandle = getTestBasicFlinkSourceHandle(tabName);
cdcFactory.setConsumerHandle(consumerHandle.getConsumerHandle());
IMQListener<JobExecutionResult> imqListener = cdcFactory.create();
this.verfiyTableCrudProcess(tabName, dataxReader, tab, consumerHandle, imqListener);
consumerHandle.cancel();
}
Aggregations