Real Madrid striker Cristiano Ronaldo took the overseas personality of the year prize.
Double Formula One world champion Lewis Hamilton, who won 11 Grands Prix for Mercedes in 2014, was named BBC Sports Personality of the Year against the odds on Sunday.
The award is widely regarded as Britain's most prestigious cross-sports accolade.
"I am so speechless," said the 29-year-old after a British public vote that overturned the betting form, with bookmakers having golfer Rory McIlroy as their clear favourite.
"I really was not expecting it. Dude, you had such an amazing year," he told McIlroy at the ceremony in Glasgow.
"Never in a million years did I think I would be up here standing with the greats," added Hamilton, who had walked the pre-event red carpet with his bulldog Roscoe.
McIlroy, who won two majors in 2014 and helped Europe retain the Ryder Cup, was a forlorn-looking runner-up with European 10,000 metres champion Jo Pavey third.
Bookmakers William Hill had listed the Northern Irishman at 2/5 earlier on Sunday with Hamilton, who was runner-up for the award in 2007 and again when he won his first title with McLaren in 2008, the 7/4 second favourite.
Hamilton is the fifth racing driver to win the award in 61 years, with champions Damon Hill and Nigel Mansell winning it twice after Stirling Moss and Jackie Stewart before them.
The Team of the Year award went to England's World Cup- winning women's rugby players while Europe's triumphant Ryder Cup captain Paul McGinley was coach of the year.
Real Madrid striker Cristiano Ronaldo took the overseas personality of the year prize.
Image: Lewis Hamilton and his dog Roscoe attend the BBC Sports Personality of the Year awards at The Hydro in Glasgow, Scotland, on Sunday
Photograph: Karwai Tang/Getty Images
With matters settled, McLaren's Button feels he's starting afresh
Rory McIlroy wins Golf Writers Trophy for second time
Australian Open: Spieth shares lead after McIlroy blows up
McLaren name Alonso, Button as their F1 drivers for 2015
Champions League PHOTOS: City scrape through; Barca create new record