blob: d953bcedb66700b4fd1875b738192c55628cf63e [file] [log] [blame]
------
Simple queries to get started
------
Simple queries to get started
In this example we will demonstrate a few simple queries that should get you started with the fluent Querying API in MetaModel.
We will assume you have a CSV file with the two colums first_name and last_name.
+-------------------------------+
File myFile = new File("persons.csv");
DataContext dataContext = DataContextFactory.createCsvDataContext(myFile);
Schema schema = dataContext.getDefaultSchema();
Table[] tables = schema.getTables();
// CSV files only has a single table in the default schema
assert tables.length == 1;
Table table = tables[0];
// there are several ways to get columns - here we simply get them by name
Column firstNameColumn = table.getColumnByName("first_name");
Column lastNameColumn = table.getColumnByName("last_name");
// use the table and column types in the query
Query q = dataContext.query().from(table).select(firstNameColumn).toQuery();
System.out.println(q.toString());
+-------------------------------+
This will print out:
+-------------------------------+
SELECT first_name FROM persons.csv.persons
+-------------------------------+
Now let's say we want to add a where clause for the lastname. We simple do like this in stead:
+-------------------------------+
Query q = dataContext.query().from(table).select(firstNameColumn).where(lastNameColumn).equals("Doe").toQuery();
System.out.println(q.toString());
+-------------------------------+
This will print out:
+-------------------------------+
SELECT first_name FROM persons.csv.persons WHERE last_name = 'Doe';
+-------------------------------+
Finally let's do some aggregation by adding a GROUP BY clause and COUNT(*) to the select clause:
+-------------------------------+
Query q = dataContext.query().from(table).select(lastNameColumn).selectCount().groupBy(lastNameColumn).orderBy(lastNameColumn).asc().toQuery();
System.out.println(q.toString());
+-------------------------------+
This will print out:
+-------------------------------+
SELECT last_name, COUNT(*) FROM persons.csv.persons GROUP BY last_name ORDER BY last_name ASC;
+-------------------------------+
And the beauty of it is that it will work even on a flat datastore like a CSV file. Here's the query execution code:
+-------------------------------+
DataSet ds = dataContext.executeQuery(q)
while (ds.next()) {
Row row = ds.getRow();
String lastName = (String) row.getValue(lastNameColumn);
Number count = (Number) row.getValue(1);
System.out.println("row: " + lastName + " occurs " + count + " times");
}
+-------------------------------+
Given an example CSV file this will print out:
+-------------------------------+
row: Elison occurs 2 times
row: Gates occurs 5 times
row: Jobs occurs 3 times
+-------------------------------+