My main issue with this is that it is basically just translating the VCF format into Avro, including storing strings that must be parsed (`filter` and `info`) and a list of genotypes.  Given that storage is cheap, I think it's advantageous to have a single "row" in the table correspond to a genotype call, and let the database perform any aggregations by position for computing things like MAF etc.  This maximally denormalizes the data, and lets you join it to whatever annotations you want easily.

So minimally, you could have a genome annotation object, for which a genotype call in a VCF file is just an `Observation`:
```thrift
struct Observation {
    // Every observation is on a piece of DNA
    1: required string contig,  // e.g., hg19_chr22
    2: required i64 start,  // python-style 0-based slicing
    3: required i64 end,
    4: optional Strand strand = Strand.NONE,
    
    // The unique identifier for the type of observation
    // e.g., NA_00056-RNA-seq, CCDS, conservation, etc.
    5: required string track,
    
    // Some convenience annotations
    6: optional string chromosome,
    7: optional string experiment,
    8: optional string sample,
    
    // one of these should be non-null, depending on the type of data
    9: optional string valueStr,
    10: optional i64 valueInt,
    11: optional double valueDouble
```

The other issue here is whether you want to parse the VCF file's metadata into columns.  E.g., parse the INFO and FILTER strings and actually make the key value pairs into actual columns in your schema.  The header in a VCF file defines a schema for the data.  The question is whether we want to enforce a rigid schema that everyone must meet (and perhaps leave some fields to hold a payload of key-value pairs), or have the system parse the header and generate a schema on the fly.  The latter would produce a schema like:

```json
{
  "fields": [
    {
      "type": "string",
      "name": "VCF_CHROM"
    },
    {
      "type": "int",
      "name": "VCF_POS"
    },
    {
      "type": "string",
      "name": "VCF_ID"
    },
    {
      "type": "string",
      "name": "VCF_REF"
    },
    {
      "type": "string",
      "name": "VCF_ALT"
    },
    {
      "type": [
        "double",
        "null"
      ],
      "name": "VCF_QUAL"
    },
    {
      "type": [
        "string",
        "null"
      ],
      "name": "VCF_SAMPLE"
    },
    {
      "type": "string",
      "name": "VCF_FILTER"
    },
    {
      "default": null,
      "doc": "Number of Samples With Data",
      "type": [
        "null",
        "int"
      ],
      "name": "VCF_INFO_NS"
    },
    {
      "default": null,
      "doc": "Total Depth",
      "type": [
        "null",
        "int"
      ],
      "name": "VCF_INFO_DP"
    },
    {
      "default": [],
      "doc": "Allele Frequency",
      "type": "string",
      "name": "VCF_INFO_AF"
    },
    {
      "default": null,
      "doc": "Ancestral Allele",
      "type": [
        "null",
        "string"
      ],
      "name": "VCF_INFO_AA"
    },
    {
      "default": 0,
      "doc": "dbSNP membership, build 129",
      "type": "int",
      "name": "VCF_INFO_DB"
    },
    {
      "default": 0,
      "doc": "HapMap2 membership",
      "type": "int",
      "name": "VCF_INFO_H2"
    },
    {
      "default": null,
      "doc": "Genotype",
      "type": [
        "null",
        "string"
      ],
      "name": "VCF_CALL_GT"
    },
    {
      "default": null,
      "doc": "Genotype Quality",
      "type": [
        "null",
        "int"
      ],
      "name": "VCF_CALL_GQ"
    },
    {
      "default": null,
      "doc": "Read Depth",
      "type": [
        "null",
        "int"
      ],
      "name": "VCF_CALL_DP"
    },
    {
      "default": [],
      "doc": "Haplotype Quality",
      "type": "string",
      "name": "VCF_CALL_HQ"
    }
  ],
  "name": "VCF",
  "type": "record"
}
```

Thoughts?