code: func FromAvro(data string) (*dosa.EntityDefinition, error) {
  	schema, err := gv.ParseSchema(data)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed to parse avro schema from json")
  	}
  
  	pks, err := decodePartitionKeysFromSchema(schema)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed to parse avro schema for partition keys")
  	}
  
  	cks, err := decodeClusteringKeysFromSchema(schema)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed to parse avro schema for clustering keys")
  	}
  
  	rs, ok := schema.(*gv.RecordSchema)
  	if !ok {
  		return nil, errors.New("fail to parse avro schema")
  	}
  
  	cols, err := decodeFields(rs.Fields)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed to parse avro schema for fields")
  	}
  
  	// index
  	idx, err := decodeIndexes(schema)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed to parse avro schema for index")
  	}
  
  	return &dosa.EntityDefinition{
  		Name: schema.GetName(),
  		Key: &dosa.PrimaryKey{
  			PartitionKeys:  pks,
  			ClusteringKeys: cks,
  		},
  		Columns: cols,
  		Indexes: idx,
  	}, nil
  }
docs: // FromAvro converts avro schema to dosa entity definition