TORONTO — Chris Colabello picked the perfect moment to extend his career-best hitting streak.
Jose Bautista hit a pair of solo homers and Russell Martin added a two-run shot for Toronto, which scored three times in the ninth to complete a three-game sweep.
Colabello's game-ending single increased his hitting streak to 17 games, the longest active run in the majors. It came on a slider from Astros closer Luke Gregerson (2-1), handed his second blown save in 17 chances.
"I told myself if it's above my waist, I'm going to swing," Colabello said. "Little did I know I would swing at one that was in the other box."
Liam Hendriks (1-0) pitched two scoreless innings for the win.
Pinch-hitter Munenori Kawasaki doubled to begin the ninth and scored on a single by Jose Reyes. After Reyes stole second with one out, Bautista reached on a strange single when shortstop Jonathan Villar collided with Reyes, who was standing on second base, and dropped a popup.
Astros manager A.J. Hinch argued and the umpires huddled, but no interference was called.
"My interpretation was that (Reyes) has to make an attempt to get out of the way," Hinch said. "He can't just hold his position."
Villar was upset that Reyes, who bent over to protect himself, didn't stand still.
"He moved to the side where the fly was," Villar said through a translator.
Reyes called the play "a little bit crazy" but denied any wrongdoing.
"That's the right play," he said. "I had to stay on the base."
After a double steal, Colabello hit a grounder into center and was mobbed by teammates, who chased him into left field for a victory scrum.
The AL West-leading Astros dropped their season-high fourth straight and lost for the first time in 30 games when leading after eight innings.
"To have this one taken away from us is painful," Hinch said. "We needed to win that game and we didn't."
Bautista opened the scoring with a two-out drive in the first, but the Astros answered in the second when Colby Rasmus scored on a wild pitch by R.A. Dickey.
Jake Marisnick gave Houston its first lead of the series with a solo drive in the third, the 13th home run off Dickey this season. Martin put the Blue Jays up 3-2 in the fourth with his first home run since May 6.
The Astros went ahead with a four-run seventh against Bo Schultz. Marisnick scored the tying run on a throwing error by third baseman Josh Donaldson. Evan Gattis hit a two-run double and Chris Carter added a sacrifice fly.
Bautista cut it to 6-4 in the bottom half by connecting off Will Harris, marking the 24th multihomer game of his career. It was the first run off Harris since May 6 and just the second he's allowed this season, raising his ERA to 0.65.
TOOK A WHILE
Astros reliever Pat Neshek issued his first base on balls of the season with a two-out walk to Justin Smoak in the eighth. Neshek had made 24 appearances without a walk, the second-longest streak to start a season in major league history. Angels RHP Mark Eichhorn went 30 games without a walk to start the 1991 season.
Donaldson went 2 for 4 and has reached base in 38 consecutive games against the Astros, the longest active streak for any player against one club. Texas SS Elvis Andrus reached in 39 consecutive games against Cleveland from 2009-13.
Astros: OF Preston Tucker, hitless in 13 at-bats, got the day off.
Blue Jays: Edwin Encarnacion (left shoulder) was unavailable after getting a cortisone shot Saturday. Encarnacion said he hopes to return Monday.
Astros: RHP Lance McCullers (2-0, 1.88 ERA) makes his fifth major league start as Houston begins a three-game series Monday night in Chicago. McCullers beat Baltimore with a complete game in his most recent start, allowing one run and four hits. LHP Chris Sale (5-2, 3.27) starts for the White Sox.
Blue Jays: RHP Marco Estrada (2-3, 3.77) tries to win back-to-back starts Monday night as Toronto begins a three-game series with visiting Miami. Estrada snapped a five-start winless stretch by beating Washington in the second game of a doubleheader Tuesday. LHP Brad Hand (1-1, 4.24) starts for the Marlins.