code: func (c *InternalClient) RetrieveShardFromURI(ctx context.Context, index, field, view string, shard uint64, uri pilosa.URI) (io.ReadCloser, error) {
  	span, ctx := tracing.StartSpanFromContext(ctx, "InternalClient.RetrieveShardFromURI")
  	defer span.Finish()
  
  	node := &pilosa.Node{
  		URI: uri,
  	}
  
  	u := nodePathToURL(node, "/internal/fragment/data")
  	u.RawQuery = url.Values{
  		"index": {index},
  		"field": {field},
  		"view":  {view},
  		"shard": {strconv.FormatUint(shard, 10)},
  	}.Encode()
  
  	// Build request.
  	req, err := http.NewRequest("GET", u.String(), nil)
  	if err != nil {
  		return nil, errors.Wrap(err, "creating request")
  	}
  
  	req.Header.Set("User-Agent", "pilosa/"+pilosa.Version)
  
  	// Execute request.
  	resp, err := c.executeRequest(req.WithContext(ctx))
  	if err != nil {
  		if resp != nil && resp.StatusCode == http.StatusNotFound {
  			return nil, pilosa.ErrFragmentNotFound
  		}
  		return nil, err
  	}
  
  	return resp.Body, nil
  }
docs: // RetrieveShardFromURI returns a ReadCloser which contains the data of the
  // specified shard from the specified node. Caller *must* close the returned
  // ReadCloser or risk leaking goroutines/tcp connections.