Arizona scored two in the first when the first three batters got hits off Kevin Correia, but Walker's three-run blast put the Bucs up 3-2. Correia pitched two 1-2-3 innings after that, and the Pirates padded their lead when Starling Marte hit a towering homer to lead off the third.
Correia got through the fourth thanks to a good catch from Travis Snider in right field that surprised baserunner Paul Goldschmidt, who'd run from first all the way around second and got doubled off. But in the fifth, Correia walked Gerardo Parra and Stephen Drew, then gave up an RBI double by Willie Bloomquist, making it a 4-3 game and putting runners on second and third with one out. Correia did a nice job getting out of the jam, striking out Chris Johnson and inducing Goldschmidt to hit a ball toward Pedro Alvarez, but Alvarez couldn't field it on the short hop, and a run came in to tie the game.
In the bottom of the fifth, though, the Pirates retook the lead when the first three batters reached on a single, an error and single, and Walker plated two of them with a double to make it 6-4. The Pirates didn't do any more damage that inning, however.
The Diamondbacks scored a run against Chris Resop in the seventh. The Pirates made three errors in the inning as the rain came down, but held Arizona to a single run when Tony Watson struck out Chris Young looking. That led to the ejections of both Young and Justin Upton. (Which was a little ironic, because the entire reason the inning got started was because the home-plate umpire missed what should have been a strike-three call against leadoff hitter Drew, who ended up walking. There was also a play that went in Arizona's favor later that inning in which Mercer made a high throw to Garrett Jones, whose foot either just barely stayed on the bag or just barely came off it. The umpire called Upton safe, which I think was right, but it was extremely close. Also, it looked like the three called strikes in the Young at-bat that led to the ejections were simply great pitches by Watson.)