Skip to content

Commit 4565eb7

Browse files
authored
feat(bigquery): support multistatement transaction statistics in jobs (#4485)
* feat(bigquery): support multistatement transaction statistics in jobs
1 parent e55a016 commit 4565eb7

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

Diff for: bigquery/integration_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -2435,6 +2435,7 @@ func TestIntegration_Scripting(t *testing.T) {
24352435
sql := `
24362436
-- Declare a variable to hold names as an array.
24372437
DECLARE top_names ARRAY<STRING>;
2438+
BEGIN TRANSACTION;
24382439
-- Build an array of the top 100 names from the year 2017.
24392440
SET top_names = (
24402441
SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
@@ -2449,6 +2450,7 @@ func TestIntegration_Scripting(t *testing.T) {
24492450
SELECT word
24502451
FROM ` + "`bigquery-public-data`" + `.samples.shakespeare
24512452
);
2453+
COMMIT TRANSACTION;
24522454
`
24532455
q := client.Query(sql)
24542456
job, err := q.Run(ctx)
@@ -2506,6 +2508,12 @@ func TestIntegration_Scripting(t *testing.T) {
25062508
if cStatus.Statistics.ScriptStatistics.EvaluationKind == "" {
25072509
t.Errorf("child job %q didn't indicate evaluation kind", cj.ID())
25082510
}
2511+
if cStatus.Statistics.TransactionInfo == nil {
2512+
t.Errorf("child job %q didn't have transaction info present", cj.ID())
2513+
}
2514+
if cStatus.Statistics.TransactionInfo.TransactionID == "" {
2515+
t.Errorf("child job %q didn't have transactionID present", cj.ID())
2516+
}
25092517
}
25102518

25112519
}

Diff for: bigquery/job.go

+19
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,9 @@ type JobStatistics struct {
372372

373373
// ReservationUsage attributes slot consumption to reservations.
374374
ReservationUsage []*ReservationUsage
375+
376+
// TransactionInfo indicates the transaction ID associated with the job, if any.
377+
TransactionInfo *TransactionInfo
375378
}
376379

377380
// Statistics is one of ExtractStatistics, LoadStatistics or QueryStatistics.
@@ -880,6 +883,7 @@ func (j *Job) setStatistics(s *bq.JobStatistics, c *Client) {
880883
ParentJobID: s.ParentJobId,
881884
ScriptStatistics: bqToScriptStatistics(s.ScriptStatistics),
882885
ReservationUsage: bqToReservationUsage(s.ReservationUsage),
886+
TransactionInfo: bqToTransactionInfo(s.TransactionInfo),
883887
}
884888
switch {
885889
case s.Extract != nil:
@@ -983,3 +987,18 @@ func timelineFromProto(timeline []*bq.QueryTimelineSample) []*QueryTimelineSampl
983987
}
984988
return res
985989
}
990+
991+
// TransactionInfo contains information about a multi-statement transaction that may have associated with a job.
992+
type TransactionInfo struct {
993+
// TransactionID is the system-generated identifier for the transaction.
994+
TransactionID string
995+
}
996+
997+
func bqToTransactionInfo(in *bq.TransactionInfo) *TransactionInfo {
998+
if in == nil {
999+
return nil
1000+
}
1001+
return &TransactionInfo{
1002+
TransactionID: in.TransactionId,
1003+
}
1004+
}

0 commit comments

Comments
 (0)