code: def open_reader(self, file_name, reopen=False, endpoint=None, start=None, length=None, **kwargs):
          
          tunnel = self._create_volume_tunnel(endpoint=endpoint)
          download_id = self._download_id if not reopen else None
          download_session = tunnel.create_download_session(volume=self.volume.name, partition_spec=self.name,
                                                            file_name=file_name, download_id=download_id, **kwargs)
          self._download_id = download_session.id
  
          open_args = {}
          if start is not None:
              open_args['start'] = start
          if length is not None:
              open_args['length'] = length
          return download_session.open(**open_args)
docs: Open a volume file for read. A file-like object will be returned which can be used to read contents from
          volume files.
  
          :param str file_name: name of the file
          :param bool reopen: whether we need to open an existing read session
          :param str endpoint: tunnel service URL
          :param start: start position
          :param length: length limit
          :param compress_option: the compression algorithm, level and strategy
          :type compress_option: :class:`odps.tunnel.CompressOption`
  
          :Example:
          >>> with partition.open_reader('file') as reader:
          >>>     [print(line) for line in reader]