Duck race raises thousands for charity