code: def select(self, *fields, **kw):
          
          if len(fields) == 1 and isinstance(fields[0], list):
              fields = fields[0]
          else:
              fields = list(fields)
          if kw:
              def handle(it):
                  it = self._defunc(it)
                  if not isinstance(it, Expr):
                      it = Scalar(it)
                  return it
              fields.extend([handle(f).rename(new_name)
                             for new_name, f in six.iteritems(kw)])
  
          return self._project(fields)
docs: Projection columns. Remember to avoid column names' conflict.
  
          :param fields: columns to project
          :param kw: columns and their names to project
          :return: new collection
          :rtype: :class:`odps.df.expr.expression.CollectionExpr`