Search in sources :

Example 11 with Field

use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.

the class Updater method deleteRow.

private boolean deleteRow(String dbName, String tableName, Map<Field, Object[]> fieldMap) {
    DeleteSelection deleteSelection = QueryBuilder.deleteFrom(dbName, tableName);
    Delete delete = null;
    int count = 0;
    for (Map.Entry<Field, Object[]> entry : fieldMap.entrySet()) {
        count++;
        String fieldName = entry.getKey().getName();
        FieldType fieldType = entry.getKey().getType();
        Object fieldValue = entry.getValue()[1];
        if (count == 1) {
            delete = deleteSelection.whereColumn(fieldName).isEqualTo(buildTerm(fieldType, fieldValue));
        } else {
            delete = delete.whereColumn(fieldName).isEqualTo(buildTerm(fieldType, fieldValue));
        }
    }
    boolean finishDelete = false;
    SimpleStatement stmt = delete.build();
    try {
        while (!cqlSession.isClosed() && !finishDelete) {
            ResultSet result = cqlSession.execute(stmt);
            if (result.wasApplied()) {
                log.info("delete from table success, executed query {}", delete);
                return true;
            }
            finishDelete = true;
        }
    } catch (Exception e) {
        log.error("delete from table error,{}", e);
    }
    return false;
}
Also used : Delete(com.datastax.oss.driver.api.querybuilder.delete.Delete) SimpleStatement(com.datastax.oss.driver.api.core.cql.SimpleStatement) DeleteSelection(com.datastax.oss.driver.api.querybuilder.delete.DeleteSelection) FieldType(io.openmessaging.connector.api.data.FieldType) Field(io.openmessaging.connector.api.data.Field) ResultSet(com.datastax.oss.driver.api.core.cql.ResultSet) Map(java.util.Map)

Example 12 with Field

use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.

the class Updater method updateRow.

/**
 * Since we have no way of getting the id of a record, and we cannot get the primary key list of a table,
 * even we can it is not extensible. So we the result sql sentense would be like
 * UPDATE dbName.tableName SET afterUpdateValues WHERE beforeUpdateValues.
 */
private Boolean updateRow(String dbName, String tableName, Map<Field, Object[]> fieldMap) {
    log.info("Updater.updateRow() get called ");
    int count = 0;
    InsertInto insert = QueryBuilder.insertInto(dbName, tableName);
    RegularInsert regularInsert = null;
    for (Map.Entry<Field, Object[]> entry : fieldMap.entrySet()) {
        count++;
        String fieldName = entry.getKey().getName();
        FieldType fieldType = entry.getKey().getType();
        Object fieldValue = entry.getValue()[1];
        if (count == 1) {
            regularInsert = insert.value(fieldName, buildTerm(fieldType, fieldValue));
        } else {
            regularInsert = regularInsert.value(fieldName, buildTerm(fieldType, fieldValue));
        }
    }
    SimpleStatement stmt;
    boolean finishUpdate = false;
    log.info("trying to execute sql query,{}", regularInsert.asCql());
    try {
        while (!cqlSession.isClosed() && !finishUpdate) {
            stmt = regularInsert.build();
            ResultSet result = cqlSession.execute(stmt);
            if (result.wasApplied()) {
                log.info("update table success, executed cql query {}", regularInsert.asCql());
                return true;
            }
            finishUpdate = true;
        }
    } catch (Exception e) {
        log.error("update table error,{}", e);
    }
    return false;
}
Also used : SimpleStatement(com.datastax.oss.driver.api.core.cql.SimpleStatement) FieldType(io.openmessaging.connector.api.data.FieldType) Field(io.openmessaging.connector.api.data.Field) ResultSet(com.datastax.oss.driver.api.core.cql.ResultSet) InsertInto(com.datastax.oss.driver.api.querybuilder.insert.InsertInto) RegularInsert(com.datastax.oss.driver.api.querybuilder.insert.RegularInsert) Map(java.util.Map)

Example 13 with Field

use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.

the class CassandraSourceTask method poll.

@Override
public Collection<SourceDataEntry> poll() {
    List<SourceDataEntry> res = new ArrayList<>();
    try {
        if (tableQueue.size() > 1)
            querier = tableQueue.poll(1000, TimeUnit.MILLISECONDS);
        else
            querier = tableQueue.peek();
        Timer timer = new Timer();
        try {
            Thread.currentThread();
            // 毫秒
            Thread.sleep(1000);
        } catch (Exception e) {
            throw e;
        }
        querier.poll();
        for (Table dataRow : querier.getList()) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("nextQuery", "database");
            jsonObject.put("nextPosition", "table");
            Schema schema = new Schema();
            schema.setDataSource(dataRow.getDatabase());
            schema.setName(dataRow.getName());
            schema.setFields(new ArrayList<>());
            for (int i = 0; i < dataRow.getColList().size(); i++) {
                String columnName = dataRow.getColList().get(i);
                String rawDataType = dataRow.getRawDataTypeList().get(i);
                Field field = new Field(i, columnName, ColumnParser.mapConnectorFieldType(rawDataType));
                schema.getFields().add(field);
            }
            DataEntryBuilder dataEntryBuilder = new DataEntryBuilder(schema);
            dataEntryBuilder.timestamp(System.currentTimeMillis()).queue(dataRow.getName()).entryType(EntryType.UPDATE);
            for (int i = 0; i < dataRow.getColList().size(); i++) {
                Object[] value = new Object[2];
                value[0] = value[1] = dataRow.getParserList().get(i).getValue(dataRow.getDataList().get(i));
                dataEntryBuilder.putFiled(dataRow.getColList().get(i), JSONObject.toJSONString(value));
            }
            SourceDataEntry sourceDataEntry = dataEntryBuilder.buildSourceDataEntry(ByteBuffer.wrap((ConstDefine.PREFIX + config.getDbUrl() + config.getDbPort()).getBytes(StandardCharsets.UTF_8)), ByteBuffer.wrap(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8)));
            res.add(sourceDataEntry);
            log.debug("sourceDataEntry : {}", JSONObject.toJSONString(sourceDataEntry));
        }
    } catch (Exception e) {
        log.error("Cassandra task poll error, current config:" + JSON.toJSONString(config), e);
    }
    log.debug("dataEntry poll successfully,{}", JSONObject.toJSONString(res));
    return res;
}
Also used : SourceDataEntry(io.openmessaging.connector.api.data.SourceDataEntry) Table(org.apache.rocketmq.connect.cassandra.schema.Table) Schema(io.openmessaging.connector.api.data.Schema) ArrayList(java.util.ArrayList) DataEntryBuilder(io.openmessaging.connector.api.data.DataEntryBuilder) Field(io.openmessaging.connector.api.data.Field) Timer(java.util.Timer) JSONObject(com.alibaba.fastjson.JSONObject) JSONObject(com.alibaba.fastjson.JSONObject)

Example 14 with Field

use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.

the class MongoDataEntry method createdField.

private static void createdField(Schema schema) {
    Field namespace = new Field(0, NAMESPACE, FieldType.STRING);
    schema.getFields().add(namespace);
    Field operation = new Field(1, Constants.CREATED, FieldType.STRING);
    schema.getFields().add(operation);
}
Also used : Field(io.openmessaging.connector.api.data.Field)

Example 15 with Field

use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.

the class MongoDataEntry method oplogField.

private static void oplogField(Schema schema) {
    schema.setFields(new ArrayList<>());
    Field op = new Field(0, OPERATION_TYPE, FieldType.STRING);
    schema.getFields().add(op);
    Field time = new Field(1, TIMESTAMP, FieldType.INT64);
    schema.getFields().add(time);
    Field v = new Field(2, VERSION, FieldType.INT32);
    schema.getFields().add(v);
    Field namespace = new Field(3, NAMESPACE, FieldType.STRING);
    schema.getFields().add(namespace);
    Field patch = new Field(4, PATCH, FieldType.STRING);
    schema.getFields().add(patch);
    Field objectId = new Field(5, OBJECT_ID, FieldType.STRING);
    schema.getFields().add(objectId);
}
Also used : Field(io.openmessaging.connector.api.data.Field)

Aggregations

Field (io.openmessaging.connector.api.data.Field)16 Schema (io.openmessaging.connector.api.data.Schema)9 JSONObject (com.alibaba.fastjson.JSONObject)6 FieldType (io.openmessaging.connector.api.data.FieldType)6 Map (java.util.Map)6 DataEntryBuilder (io.openmessaging.connector.api.data.DataEntryBuilder)5 SourceDataEntry (io.openmessaging.connector.api.data.SourceDataEntry)5 SinkDataEntry (io.openmessaging.connector.api.data.SinkDataEntry)4 ArrayList (java.util.ArrayList)4 EntryType (io.openmessaging.connector.api.data.EntryType)3 PreparedStatement (java.sql.PreparedStatement)3 SQLException (java.sql.SQLException)3 ResultSet (com.datastax.oss.driver.api.core.cql.ResultSet)2 SimpleStatement (com.datastax.oss.driver.api.core.cql.SimpleStatement)2 ResultSet (java.sql.ResultSet)2 HashMap (java.util.HashMap)2 Delete (com.datastax.oss.driver.api.querybuilder.delete.Delete)1 DeleteSelection (com.datastax.oss.driver.api.querybuilder.delete.DeleteSelection)1 InsertInto (com.datastax.oss.driver.api.querybuilder.insert.InsertInto)1 RegularInsert (com.datastax.oss.driver.api.querybuilder.insert.RegularInsert)1