refactor _getKeys to _getKeyColumns and add _getKeyFields
accept keyed or ordered array for id