minimal datatable abstraction