From 0ab30dadc43ae85354dc12a4130ecfcc56273882 Mon Sep 17 00:00:00 2001 From: shollyman Date: Tue, 27 Apr 2021 11:52:32 -0700 Subject: [PATCH] feat(bigquery): support mutable clustering configuration (#3950) * feat(bigquery): support mutable clustering configuration internal issue 185493320 --- bigquery/table.go | 11 ++++++++++- bigquery/table_test.go | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/bigquery/table.go b/bigquery/table.go index bc969227c7b..f3493aed7ba 100644 --- a/bigquery/table.go +++ b/bigquery/table.go @@ -356,7 +356,7 @@ func (rpr *RangePartitioningRange) toBQ() *bq.RangePartitioningRange { } } -// Clustering governs the organization of data within a partitioned table. +// Clustering governs the organization of data within a managed table. // For more information, see https://cloud.google.com/bigquery/docs/clustered-tables type Clustering struct { Fields []string @@ -681,6 +681,10 @@ func (tm *TableMetadataToUpdate) toBQ() (*bq.Table, error) { t.EncryptionConfiguration = tm.EncryptionConfig.toBQ() } + if tm.Clustering != nil { + t.Clustering = tm.Clustering.toBQ() + } + if !validExpiration(tm.ExpirationTime) { return nil, invalidTimeError(tm.ExpirationTime) } @@ -750,6 +754,11 @@ type TableMetadataToUpdate struct { // When updating a schema, you can add columns but not remove them. Schema Schema + // The table's clustering configuration. + // For more information on how modifying clustering affects the table, see: + // https://cloud.google.com/bigquery/docs/creating-clustered-tables#modifying-cluster-spec + Clustering *Clustering + // The table's encryption configuration. EncryptionConfig *EncryptionConfig diff --git a/bigquery/table_test.go b/bigquery/table_test.go index cc5ed3007b3..1ce48fdfca8 100644 --- a/bigquery/table_test.go +++ b/bigquery/table_test.go @@ -399,6 +399,12 @@ func TestTableMetadataToUpdateToBQ(t *testing.T) { ForceSendFields: []string{"RequirePartitionFilter"}, }, }, + { + tm: TableMetadataToUpdate{Clustering: &Clustering{Fields: []string{"foo", "bar"}}}, + want: &bq.Table{ + Clustering: &bq.Clustering{Fields: []string{"foo", "bar"}}, + }, + }, } { got, _ := test.tm.toBQ() if !testutil.Equal(got, test.want) {