<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_archive(self, archive):
 """Load data from the zip archive of the NCBI taxonomy. """


        # source
        self.load_table(
            'source',
            rows=[('ncbi', DATA_URL)],
            colnames=['name', 'description'],
        )

        conn = self.engine.raw_connection()
        cur = conn.cursor()
        cmd = "select id from {source} where name = 'ncbi'".format(**self.tables)
        cur.execute(cmd)
        source_id = cur.fetchone()[0]

        # ranks
        log.info('loading ranks')
        self.load_table(
            'ranks',
            rows=((rank, i) for i, rank in enumerate(RANKS)),
            colnames=['rank', 'height'],
        )

        # nodes
        logging.info('loading nodes')
        nodes_rows = read_nodes(
            read_archive(archive, 'nodes.dmp'), source_id=source_id)
        self.load_table('nodes', rows=nodes_rows)

        # names
        logging.info('loading names')
        names_rows = read_names(
            read_archive(archive, 'names.dmp'), source_id=source_id)
        self.load_table('names', rows=names_rows)

        # merged
        logging.info('loading merged')
        merged_rows = read_merged(read_archive(archive, 'merged.dmp'))
        self.load_table('merged', rows=merged_rows)