elasticsearch适配器

This commit is contained in:
mcy
2018-10-30 09:49:04 +08:00
parent 82b8b56aa3
commit 1d2e85672c
12 changed files with 1065 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
package com.alibaba.otter.canal.client.adapter.es.test;
import com.alibaba.otter.canal.client.adapter.es.config.ESSyncConfig;
import com.alibaba.otter.canal.client.adapter.es.config.ESSyncConfigLoader;
import com.alibaba.otter.canal.client.adapter.support.AdapterConfigs;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.Map;
public class ConfigLoadTest {
@Before
public void before() {
AdapterConfigs.put("es", "myetst_user.yml");
}
@Test
public void testLoad() {
Map<String, ESSyncConfig> configMap = ESSyncConfigLoader.load();
ESSyncConfig config = configMap.get("myetst_user.yml");
Assert.assertNotNull(config);
Assert.assertEquals("defaultDS", config.getDataSourceKey());
ESSyncConfig.ESMapping esMapping = config.getEsMapping();
Assert.assertEquals("mytest_user", esMapping.get_index());
Assert.assertEquals("_doc", esMapping.get_type());
Assert.assertEquals("id", esMapping.get_id());
Assert.assertNotNull(esMapping.getSql());
}
}

View File

@@ -0,0 +1,51 @@
package com.alibaba.otter.canal.client.adapter.es.test;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.alibaba.otter.canal.client.adapter.es.config.SchemaItem;
import com.alibaba.otter.canal.client.adapter.es.config.SchemaItem.FieldItem;
import com.alibaba.otter.canal.client.adapter.es.config.SchemaItem.TableItem;
import com.alibaba.otter.canal.client.adapter.es.config.SqlParser;
public class SqlParseTest {
@Test
public void parseTest() {
// String sql = "select a.id,d.user_id2, concat(name,'_', a.nick) as name,
// b.name as roleNme, d.name as typeName,concat(d.label,'_') as label,"
// + " c.name as refName from user a left join role b on b.user_id=a.id "
// + "left join type d on d.user_id=a.id and d.user_id2=a.p_id "
// + "left join ( select ref_id,group_concat(name,',') as name from role group
// by ref_id ) c on c.ref_id=a.id "
// + "where a.id=1";
String sql = "select a.id, concat(a.name,'_test') as name, a.role_id, b.name as role_name, c.labels from user a "
+ "left join role b on a.role_id=b.id "
+ "left join (select user_id, group_concat(label,',') as labels from user_label "
+ "group by user_id) c on c.user_id=a.id";
SchemaItem schemaItem = SqlParser.parse(sql);
// 通过表名找 TableItem
List<TableItem> tableItems = schemaItem.getTableItemAliases().get("user_label".toLowerCase());
tableItems.forEach(tableItem -> Assert.assertEquals("c", tableItem.getAlias()));
TableItem tableItem = tableItems.get(0);
Assert.assertFalse(tableItem.isMain());
Assert.assertTrue(tableItem.isSubQuery());
// 通过字段名找 FieldItem
List<FieldItem> fieldItems = schemaItem.getColumnFields().get(tableItem.getAlias() + ".label".toLowerCase());
fieldItems.forEach(
fieldItem -> Assert.assertEquals("c.labels", fieldItem.getOwner() + "." + fieldItem.getFieldName()));
// 获取当前表关联条件字段
List<FieldItem> relationTableFields = tableItem.getRelationTableFields();
relationTableFields.forEach(fieldItem -> Assert.assertEquals("user_id", fieldItem.getColumn().getColumnName()));
// 获取关联字段在select中的对应字段
List<FieldItem> relationSelectFieldItem = tableItem.getRelationSelectFields();
relationSelectFieldItem.forEach(fieldItem -> Assert.assertEquals("c.labels",
fieldItem.getOwner() + "." + fieldItem.getColumn().getColumnName()));
}
}