PURPLE: Making a Large Language Model a Better SQL Writer