Apache MetaModel (incubating) is a data access framework, providing a common interface for exploration and querying of different types of datastores.

Datastore types

MetaModel isn't a data mapping framework. Instead we emphasize abstraction of metadata and ability to add data sources at runtime, making MetaModel great for generic data processing applications, less so for applications modeled around a particular domain.

With MetaModel you get a uniform connector and query API to many very different datastore types, including: Relational (JDBC) databases, CSV files, Excel spreadsheets, XML files, JSON files, Fixed width files, MongoDB, Apache CouchDB, Apache HBase, Apache Cassandra, ElasticSearch, OpenOffice.org databases, Salesforce.com, SugarCRM and even collections of plain old Java objects (POJOs).


Maven dependency

Apache MetaModel is also distributed through the central Maven repository. Here's your typical <dependency> declaration:


Source code

The source code for Apache MetaModel is available through this Apache Git repository:


Mailing lists

To get involved with Apache MetaModel, start by joining our mailing lists and engage in the conversations!

Name Subscribe Unsubscribe Post Archive
Developer List Subscribe Unsubscribe Post mail-archives.apache.org
Commits Subscribe Unsubscribe Post mail-archives.apache.org


Please refer to our CONTRIBUTE.md file for details on contributing to Apache MetaModel.

Issue tracking

Issues for Apache MetaModel are tracked through this Apache JIRA system:



Query with MetaModel

With MetaModel you use a type-safe SQL-like API for querying any datastore:

DataContext dataContext = DataContextFactory.create[TypeOfDatastore](...);
DataSet dataSet = dataContext.query()

The MetaModel query API allows you to use the power of SQL, even on data formats such as CSV files, Excel spreadsheets, NoSQL databases and more.

Update with MetaModel

MetaModel lets you do CRUD operations on arbitrary datamodels, also in a type-safe manner. Batch updates and transactions are logically modelled as UpdateScript closures.

dataContext.executeUpdate(new UpdateScript() {
    public void run(UpdateCallback callback) {
        // CREATE a table
        Table table = callback.createTable("contributors")
        // INSERT INTO table
            .value("id", 1).value("name", "John Doe").execute();
            .value("name", "Jane D.").execute();
        // UPDATE table
        callback.update(table).value("name","Jane Doe")
        // DELETE FROM table

The rest of the API should reveal itself through using the DataContext! Javadocs, wiki, mailing lists and other resources help too of course, so check them out.


Check out the MetaModel wiki for more in-depth examples and documentation.


MetaModel was initially developed and released by Human Inference since 2011 and is an Apache Incubator project since July 2013. It is licensed under the Apache 2.0 license.

While the incubation at Apache is still ongoing the old MetaModel project will still be maintained with any urgent bugfixes.


Apache MetaModel is an effort undergoing incubation at The Apache Software Foundation sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.









Copyright © 2014 The Apache Software Foundation - Licensed under the Apache License 2.0. Apache MetaModel, MetaModel, and the project logo are trademarks of The Apache Software Foundation