<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def ext_pillar(minion_id,
               pillar,
               table='pillar',
               id_field=None,
               field=None,
               pillar_key=None):
    '''
    Collect minion external pillars from a RethinkDB database

    Arguments:
    * `table`: The RethinkDB table containing external pillar information.
      Defaults to ``'pillar'``
    * `id_field`: Field in document containing the minion id.
      If blank then we assume the table index matches minion ids
    * `field`: Specific field in the document used for pillar data, if blank
      then the entire document will be used
    * `pillar_key`: The salt-master will nest found external pillars under
      this key before merging into the minion pillars. If blank, external
      pillars will be merged at top level
    '''
    host = __opts__['rethinkdb.host']
    port = __opts__['rethinkdb.port']
    database = __opts__['rethinkdb.database']
    username = __opts__['rethinkdb.username']
    password = __opts__['rethinkdb.password']

    log.debug('Connecting to %s:%s as user \'%s\' for RethinkDB ext_pillar',
              host, port, username)

    # Connect to the database
    conn = rethinkdb.connect(host=host,
                             port=port,
                             db=database,
                             user=username,
                             password=password)

    data = None

    try:

        if id_field:
            log.debug('ext_pillar.rethinkdb: looking up pillar. '
                      'table: %s, field: %s, minion: %s',
                      table, id_field, minion_id)

            if field:
                data = rethinkdb.table(table).filter(
                    {id_field: minion_id}).pluck(field).run(conn)
            else:
                data = rethinkdb.table(table).filter(
                    {id_field: minion_id}).run(conn)

        else:
            log.debug('ext_pillar.rethinkdb: looking up pillar. '
                      'table: %s, field: id, minion: %s',
                      table, minion_id)

            if field:
                data = rethinkdb.table(table).get(minion_id).pluck(field).run(
                    conn)
            else:
                data = rethinkdb.table(table).get(minion_id).run(conn)

    finally:
        if conn.is_open():
            conn.close()

    if data.items:

        # Return nothing if multiple documents are found for a minion
        if len(data.items) > 1:
            log.error('ext_pillar.rethinkdb: ambiguous documents found for '
                      'minion %s', minion_id)
            return {}

        else:
            result = data.items.pop()

        if pillar_key:
            return {pillar_key: result}
        return result

    else:
        # No document found in the database
        log.debug('ext_pillar.rethinkdb: no document found')
        return {}