pub(crate) fn generate<T>(
    inner_len: usize,
    outer_len: usize,
    dist: DataDistribution,
    selectivity: Option<u32>
) -> Result<(Vec<T>, Vec<T>), Box<dyn Error>> where
    T: Copy + Default + Send + KeyAttribute + FromPrimitive + SampleUniform