====== Das Konzept einer Tabelle in der NoSQL Datenbank v3 verwenden ====== Mit der Version 3 der Oracle NoSQL Datenbank wird das Konzept der Tabelle in den Key-Value Store eingeführt. Neben der Vereinfachung der Entwicklung steht dem Entwickler dann auch das Konzept eines Index auf die Values des Stores zur Verfügung. Eine Tabelle wird erst mit **table create** definiert und damit mit einem **plan add-table** erzeugt. Beispiel Anlegen der Tabelle EMP: Starten der Koncole (hier als Beispiel mit einer [[nosql:lokale_testdatenbank_oracle_nosql_db_11gr2|lokalen Testinstallation]] set KVHOME=D:\entwicklung\libraries\kv-ee-3.0.5 java -jar %KVHOME%\lib\kvcli.jar -host localhost -port 5000 -store kvstore Die Tabelle anlegen: kv-> table create -name emp -desc "Die Mitarbeiter" emp-> add-field -type integer -name empno emp-> primary-key -field empno emp-> add-field -type string -name ename -not-nullable -default "NEW" emp-> add-field -type string -name job emp-> add-field -type integer -name mgr emp-> add-field -type long -name hiredate emp-> add-field -type float -name sal -default 0 emp-> add-field -type float -name comm emp-> add-field -type integer -name deptno emp-> exit Table emp built. kv-> plan add-table -name emp -wait Executed plan 5, waiting for completion... Plan 5 ended successfully Eine Index auf den Namen mit **"plan add-index -name"** anlegen: kv-> plan add-index -name IDX_EMP_ENAME -table emp -field ename Started plan 6. Use show plan -id 6 to check status. To wait for completion, use plan wait -id 6 kv-> plan wait -id 6 Plan 6 ended successfully Mit **show tables** alle Tabellen anzeigen, mit **show tables -name** eine bestehende Tabelle als JSON Schema anzeigen. Die erzeugte Tabelle anzeigen mit: kv-> show tables Tables: emp -- Die Mitarbeiter kv-> show tables -name emp { "type" : "table", "name" : "emp", "description" : "Die Mitarbeiter", "shardKey" : [ "empno" ], "primaryKey" : [ "empno" ], "fields" : [ { "name" : "empno", "type" : "INTEGER", "nullable" : true, "default" : null }, { "name" : "ename", "type" : "STRING", "nullable" : false, "default" : "NEW" }, { "name" : "job", "type" : "STRING", "nullable" : true, "default" : null }, { "name" : "mgr", "type" : "INTEGER", "nullable" : true, "default" : null }, { "name" : "hiredate", "type" : "LONG", "nullable" : true, "default" : null }, { "name" : "sal", "type" : "FLOAT", "nullable" : true, "default" : 0.0 }, { "name" : "comm", "type" : "FLOAT", "nullable" : true, "default" : null }, { "name" : "deptno", "type" : "INTEGER", "nullable" : true, "default" : null } ], "indexes" : [ { "name" : "IDX_EMP_ENAME", "description" : null, "fields" : [ "ename" ] } ] } Daten auslesen: kv-> get table -name emp -pretty { "empno" : 10, "ename" : "Gunther", "job" : "Developer", "mgr" : 0, "hiredate" : 1388531040000, "sal" : 1000.0, "comm" : 5.0, "deptno" : 10 } 1 row returned. Einfache Java Klasse um die Daten in die Tabelle einzulesen: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import oracle.kv.KVStore; import oracle.kv.KVStoreConfig; import oracle.kv.KVStoreFactory; import oracle.kv.table.Row; import oracle.kv.table.Table; import oracle.kv.table.TableAPI; public class TableReadWrite { // KV Store public static KVStore kvstore = null; public static void main(String[] args) throws ParseException { TableReadWrite tableReadWrite = new TableReadWrite(); // get the host to connect as first parameter String host = "localhost:5000"; // get the store Name String store = "kvstore"; KVStoreConfig kvconfig = new KVStoreConfig(store, host); // Connect to the store kvstore = KVStoreFactory.getStore(kvconfig); // get the Table API TableAPI tableAPI = kvstore.getTableAPI(); //get a reference to the table Table empTable = tableAPI.getTable("emp"); // Get a Row instance Row empRow = empTable.createRow(); // put data in the row empRow.put("empno", 10); empRow.put("ename", "Gunther"); empRow.put("job", "Developer"); empRow.put("mgr", 0); // date handling SimpleDateFormat formatter = new SimpleDateFormat("dd.mm.yyyy"); Date date = (Date) formatter.parse("01.04.2014"); empRow.put("hiredate", date.getTime()); empRow.put("sal", 1000f); empRow.put("comm", 5f); empRow.put("deptno", 10); // write the data to the store tableAPI.put(empRow, null, null); //-------- Read the data again from the Store //------- Use an Index //get Ref on the index Index empEmpnoIndex = empTable.getIndex("IDX_EMP_ENAME"); IndexKey empEmpnoIndexKey=empEmpnoIndex.createIndexKey(); TableIterator result = tableAPI.tableIterator(empEmpnoIndexKey, null, null); while (result.hasNext()) { Row empRowResult = result.next(); // read row String jRow=empRowResult.toJsonString(true); System.out.println(jRow); } } } ==== Quellen ==== DOAG: * http://www.doag.org/de/home/aktuelle-news/article/so-nutzen-sie-die-tabellen-schnittstelle-von-oracle-nosql-database-30.html Oracle: * http://docs.oracle.com/cd/NOSQL/html/GettingStartedGuideTables/ * http://www.youtube.com/watch?v=o7B94ch8iVs