code: func (cmd *ExportCommand) Run(ctx context.Context) error {
  	logger := log.New(cmd.Stderr, "", log.LstdFlags)
  
  	// Validate arguments.
  	if cmd.Index == "" {
  		return pilosa.ErrIndexRequired
  	} else if cmd.Field == "" {
  		return pilosa.ErrFieldRequired
  	}
  
  	// Use output file, if specified.
  	// Otherwise use STDOUT.
  	var w io.Writer = cmd.Stdout
  	if cmd.Path != "" {
  		f, err := os.Create(cmd.Path)
  		if err != nil {
  			return errors.Wrap(err, "creating file")
  		}
  		defer f.Close()
  
  		w = f
  	}
  
  	// Create a client to the server.
  	client, err := commandClient(cmd)
  	if err != nil {
  		return errors.Wrap(err, "creating client")
  	}
  
  	// Determine shard count.
  	maxShards, err := client.MaxShardByIndex(ctx)
  	if err != nil {
  		return errors.Wrap(err, "getting shard count")
  	}
  
  	// Export each shard.
  	for shard := uint64(0); shard <= maxShards[cmd.Index]; shard++ {
  		logger.Printf("exporting shard: %d", shard)
  		if err := client.ExportCSV(ctx, cmd.Index, cmd.Field, shard, w); err != nil {
  			return errors.Wrap(err, "exporting")
  		}
  	}
  
  	// Close writer, if applicable.
  	if w, ok := w.(io.Closer); ok {
  		if err := w.Close(); err != nil {
  			return errors.Wrap(err, "closing")
  		}
  	}
  
  	return nil
  }
docs: // Run executes the export.