       Object
       [id
        0
-       (Date. (rand-int 10)
+       (Date. (rand-int num-years)
 	      (rand-int 12)
 	      (+ (rand-int 28) 1))
        (rnd types)


;; create some whales...

(def num-whales 1000)

(time
 (doall
  (let [batcher (Batcher. 999 1000 (list whales-model))]
    (pmap (fn [id] (insert whales-model (whale id))) (range num-whales)))))

(println "LOADED: " num-whales)


		  [(meta-view
		    (str "=" extra-value)
		    tgt-metamodel
		    (fn [tgt-metamodel2 model extra-values]
			;;(insert tgt-metamodel tgt-metamodel2)
			(insert tgt-metamodel2 [model extra-values])
			;;(insert *metamodel* model)
			))
		   src-metadata
		   (str prefix "." split-key "=" extra-value)
		   (concat extra-keys [split-key])]))
	       model
	       )))))
   src-metadata
   (str prefix "." split-key)
   (concat extra-keys [split-key])])

;; extra keys are inserted into attribute list
;; extra values are carried in model's row in metamodel
;; each split adds an extra key/value downstream that we may need to unwrap upstream
(defn ccount [[#^Model src-metamodel #^Metadata src-metadata prefix #^Collection extra-keys]
	      & [count-key]]
  (println "count:" prefix ":" extra-keys)
  (let [extra-attributes (map (fn [key] (.getAttribute src-metadata key)) extra-keys)
	tgt-metadata (count-reducer-metadata extra-keys count-key extra-attributes)]
    [(meta-view
      (str "." (count-value-key count-key))
      src-metamodel
      (fn [tgt-metamodel #^Model src-model extra-values]
	  ;;(println "CCOUNT DATA:" extra-values)
	  (let [count-model (do-reduce-count 
			     (.getName src-model)
			     (.getMetadata src-model)
