Search in sources :

Example 1 with Column

use of org.apache.gora.kudu.mapping.Column in project gora by apache.

the class KuduStore method deleteByQuery.

@Override
public long deleteByQuery(Query<K, T> query) throws GoraException {
    try {
        long count = 0;
        Column pkc = kuduMapping.getPrimaryKey().get(0);
        ColumnSchema column = table.getSchema().getColumn(pkc.getName());
        List<String> dbFields = new ArrayList<>();
        dbFields.add(pkc.getName());
        List<KuduPredicate> rangePredicates = KuduClientUtils.createRangePredicate(column, query.getStartKey(), query.getEndKey());
        rangePredicates.add(KuduPredicate.newIsNotNullPredicate(column));
        KuduScanner build = createScanner(rangePredicates, dbFields, query.getLimit());
        while (build.hasMoreRows()) {
            RowResultIterator nextRows = build.nextRows();
            for (RowResult it : nextRows) {
                count++;
                K key = (K) KuduClientUtils.getObjectRow(it, pkc);
                if (query.getFields() != null && query.getFields().length < kuduMapping.getFields().size()) {
                    Update updateOp = table.newUpdate();
                    PartialRow row = updateOp.getRow();
                    String[] avFields = getFieldsToQuery(query.getFields());
                    KuduClientUtils.addObjectRow(row, pkc, key);
                    for (String af : avFields) {
                        row.setNull(kuduMapping.getFields().get(af).getName());
                    }
                    session.apply(updateOp);
                } else {
                    delete(key);
                }
            }
        }
        build.close();
        return count;
    } catch (Exception e) {
        throw new GoraException(e);
    }
}
Also used : ArrayList(java.util.ArrayList) PartialRow(org.apache.kudu.client.PartialRow) ColumnSchema(org.apache.kudu.ColumnSchema) Update(org.apache.kudu.client.Update) KuduPredicate(org.apache.kudu.client.KuduPredicate) KuduException(org.apache.kudu.client.KuduException) GoraException(org.apache.gora.util.GoraException) IOException(java.io.IOException) RowResultIterator(org.apache.kudu.client.RowResultIterator) RowResult(org.apache.kudu.client.RowResult) GoraException(org.apache.gora.util.GoraException) Column(org.apache.gora.kudu.mapping.Column) KuduScanner(org.apache.kudu.client.KuduScanner)

Example 2 with Column

use of org.apache.gora.kudu.mapping.Column in project gora by apache.

the class KuduStore method newInstance.

public T newInstance(RowResult next, String[] fields) throws IOException {
    fields = getFieldsToQuery(fields);
    T persistent = newPersistent();
    for (String objField : fields) {
        Schema.Field field = fieldMap.get(objField);
        Schema fieldSchema = field.schema();
        Column column = kuduMapping.getFields().get(objField);
        if (next.isNull(column.getName())) {
            continue;
        }
        Object fieldValue = KuduClientUtils.getObjectRow(next, column);
        Object obtainedValue = deserializeFieldValue(field, fieldSchema, fieldValue, persistent);
        persistent.put(field.pos(), obtainedValue);
        persistent.setDirty(field.pos());
    }
    return persistent;
}
Also used : Column(org.apache.gora.kudu.mapping.Column) ColumnSchema(org.apache.kudu.ColumnSchema) Schema(org.apache.avro.Schema)

Example 3 with Column

use of org.apache.gora.kudu.mapping.Column in project gora by apache.

the class KuduStore method delete.

@Override
public boolean delete(K key) throws GoraException {
    try {
        Column pkc = kuduMapping.getPrimaryKey().get(0);
        Delete delete = table.newDelete();
        PartialRow row = delete.getRow();
        KuduClientUtils.addObjectRow(row, pkc, key);
        OperationResponse apply = session.apply(delete);
        return !apply.hasRowError();
    } catch (KuduException ex) {
        throw new GoraException(ex);
    }
}
Also used : Delete(org.apache.kudu.client.Delete) GoraException(org.apache.gora.util.GoraException) Column(org.apache.gora.kudu.mapping.Column) PartialRow(org.apache.kudu.client.PartialRow) OperationResponse(org.apache.kudu.client.OperationResponse) KuduException(org.apache.kudu.client.KuduException)

Example 4 with Column

use of org.apache.gora.kudu.mapping.Column in project gora by apache.

the class KuduStore method put.

@Override
public void put(K key, T obj) throws GoraException {
    try {
        if (obj.isDirty()) {
            Column pkc = kuduMapping.getPrimaryKey().get(0);
            Upsert upsert = table.newUpsert();
            PartialRow row = upsert.getRow();
            KuduClientUtils.addObjectRow(row, pkc, key);
            Schema schemaObj = obj.getSchema();
            List<Schema.Field> fields = schemaObj.getFields();
            for (Schema.Field field : fields) {
                Column mappedColumn = kuduMapping.getFields().get(field.name());
                if (mappedColumn != null) {
                    Object fieldValue = obj.get(field.pos());
                    if (fieldValue != null) {
                        Schema fieldSchema = field.schema();
                        Object serializedObj = serializeFieldValue(fieldSchema, fieldValue);
                        KuduClientUtils.addObjectRow(row, mappedColumn, serializedObj);
                    } else {
                        row.setNull(mappedColumn.getName());
                    }
                } else {
                    throw new GoraException("Unmapped field : " + field.name());
                }
            }
            session.apply(upsert);
        } else {
            LOG.info("Ignored putting object {} in the store as it is neither " + "new, neither dirty.", new Object[] { obj });
        }
    } catch (Exception e) {
        throw new GoraException(e);
    }
}
Also used : GoraException(org.apache.gora.util.GoraException) Upsert(org.apache.kudu.client.Upsert) Column(org.apache.gora.kudu.mapping.Column) ColumnSchema(org.apache.kudu.ColumnSchema) Schema(org.apache.avro.Schema) PartialRow(org.apache.kudu.client.PartialRow) KuduException(org.apache.kudu.client.KuduException) GoraException(org.apache.gora.util.GoraException) IOException(java.io.IOException)

Example 5 with Column

use of org.apache.gora.kudu.mapping.Column in project gora by apache.

the class KuduStore method createSchema.

@Override
public void createSchema() throws GoraException {
    if (client == null) {
        throw new GoraException("Impossible to create the schema as no connection has been initiated.");
    }
    if (schemaExists()) {
        return;
    }
    try {
        List<ColumnSchema> columns = new ArrayList<>();
        List<String> keys = new ArrayList<>();
        for (Column primaryKey : kuduMapping.getPrimaryKey()) {
            columns.add(new ColumnSchema.ColumnSchemaBuilder(primaryKey.getName(), primaryKey.getDataType().getType()).key(true).build());
            keys.add(primaryKey.getName());
        }
        for (Map.Entry<String, Column> clt : kuduMapping.getFields().entrySet()) {
            Column aColumn = clt.getValue();
            ColumnSchema aColumnSch;
            ColumnSchema.ColumnSchemaBuilder aBaseColumn = new ColumnSchema.ColumnSchemaBuilder(aColumn.getName(), aColumn.getDataType().getType()).nullable(true);
            if (aColumn.getDataType().getType() == Type.DECIMAL) {
                aColumnSch = aBaseColumn.typeAttributes(DecimalUtil.typeAttributes(aColumn.getDataType().getPrecision(), aColumn.getDataType().getScale())).build();
            } else {
                aColumnSch = aBaseColumn.build();
            }
            columns.add(aColumnSch);
        }
        org.apache.kudu.Schema sch = new org.apache.kudu.Schema(columns);
        CreateTableOptions cto = new CreateTableOptions();
        cto.setNumReplicas(kuduMapping.getNumReplicas());
        if (kuduMapping.getHashBuckets() > 0) {
            cto.addHashPartitions(keys, kuduMapping.getHashBuckets());
        }
        if (!kuduMapping.getRangePartitions().isEmpty()) {
            cto.setRangePartitionColumns(keys);
            for (Map.Entry<String, String> range : kuduMapping.getRangePartitions()) {
                PartialRow lowerPar = sch.newPartialRow();
                PartialRow upperPar = sch.newPartialRow();
                for (String ky : keys) {
                    if (!range.getKey().isEmpty()) {
                        lowerPar.addString(ky, range.getKey());
                    }
                    if (!range.getValue().isEmpty()) {
                        upperPar.addString(ky, range.getValue());
                    }
                }
                cto.addRangePartition(lowerPar, upperPar);
            }
        }
        table = client.createTable(kuduMapping.getTableName(), sch, cto);
    } catch (KuduException ex) {
        throw new GoraException(ex);
    }
}
Also used : ColumnSchema(org.apache.kudu.ColumnSchema) Schema(org.apache.avro.Schema) ArrayList(java.util.ArrayList) PartialRow(org.apache.kudu.client.PartialRow) ColumnSchema(org.apache.kudu.ColumnSchema) KuduException(org.apache.kudu.client.KuduException) GoraException(org.apache.gora.util.GoraException) Column(org.apache.gora.kudu.mapping.Column) CreateTableOptions(org.apache.kudu.client.CreateTableOptions) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Aggregations

Column (org.apache.gora.kudu.mapping.Column)5 GoraException (org.apache.gora.util.GoraException)4 ColumnSchema (org.apache.kudu.ColumnSchema)4 KuduException (org.apache.kudu.client.KuduException)4 PartialRow (org.apache.kudu.client.PartialRow)4 Schema (org.apache.avro.Schema)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 CreateTableOptions (org.apache.kudu.client.CreateTableOptions)1 Delete (org.apache.kudu.client.Delete)1 KuduPredicate (org.apache.kudu.client.KuduPredicate)1 KuduScanner (org.apache.kudu.client.KuduScanner)1 OperationResponse (org.apache.kudu.client.OperationResponse)1 RowResult (org.apache.kudu.client.RowResult)1 RowResultIterator (org.apache.kudu.client.RowResultIterator)1 Update (org.apache.kudu.client.Update)1 Upsert (org.apache.kudu.client.Upsert)1