Skip to content

Commit b829327

Browse files
authored
feat(bigquery): support column name character map in load jobs (#10425)
internal issue: b/346834574
1 parent b95805f commit b829327

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

bigquery/load.go

+28
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ type LoadConfig struct {
105105

106106
// MediaOptions stores options for customizing media upload.
107107
MediaOptions []googleapi.MediaOption
108+
109+
// Controls the behavior of column naming during a load job.
110+
// For more information, see:
111+
// https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#columnnamecharactermap
112+
ColumnNameCharacterMap ColumnNameCharacterMap
108113
}
109114

110115
func (l *LoadConfig) toBQ() (*bq.JobConfiguration, io.Reader) {
@@ -124,6 +129,7 @@ func (l *LoadConfig) toBQ() (*bq.JobConfiguration, io.Reader) {
124129
HivePartitioningOptions: l.HivePartitioningOptions.toBQ(),
125130
ReferenceFileSchemaUri: l.ReferenceFileSchemaURI,
126131
CreateSession: l.CreateSession,
132+
ColumnNameCharacterMap: string(l.ColumnNameCharacterMap),
127133
},
128134
JobTimeoutMs: l.JobTimeout.Milliseconds(),
129135
}
@@ -153,6 +159,7 @@ func bqToLoadConfig(q *bq.JobConfiguration, c *Client) *LoadConfig {
153159
HivePartitioningOptions: bqToHivePartitioningOptions(q.Load.HivePartitioningOptions),
154160
ReferenceFileSchemaURI: q.Load.ReferenceFileSchemaUri,
155161
CreateSession: q.Load.CreateSession,
162+
ColumnNameCharacterMap: ColumnNameCharacterMap(q.Load.ColumnNameCharacterMap),
156163
}
157164
if q.JobTimeoutMs > 0 {
158165
lc.JobTimeout = time.Duration(q.JobTimeoutMs) * time.Millisecond
@@ -238,3 +245,24 @@ var (
238245
// StringTargetType indicates the preferred type is STRING when supported.
239246
StringTargetType DecimalTargetType = "STRING"
240247
)
248+
249+
// ColumnNameCharacterMap is used to specific column naming behavior for load jobs.
250+
type ColumnNameCharacterMap string
251+
252+
var (
253+
254+
// UnspecifiedColumnNameCharacterMap is the unspecified default value.
255+
UnspecifiedColumnNameCharacterMap ColumnNameCharacterMap = "COLUMN_NAME_CHARACTER_MAP_UNSPECIFIED"
256+
257+
// StrictColumnNameCharacterMap indicates support for flexible column names.
258+
// Invalid column names will be rejected.
259+
StrictColumnNameCharacterMap ColumnNameCharacterMap = "STRICT"
260+
261+
// V1ColumnNameCharacterMap indicates support for alphanumeric + underscore characters and names must start with a letter or underscore.
262+
// Invalid column names will be normalized.
263+
V1ColumnNameCharacterMap ColumnNameCharacterMap = "V1"
264+
265+
// V2ColumnNameCharacterMap indicates support for flexible column names.
266+
// Invalid column names will be normalized.
267+
V2ColumnNameCharacterMap ColumnNameCharacterMap = "V2"
268+
)

bigquery/load_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ func TestLoad(t *testing.T) {
419419
Value: "session_id_1234567890",
420420
},
421421
},
422+
ColumnNameCharacterMap: StrictColumnNameCharacterMap,
422423
},
423424
want: func() *bq.Job {
424425
j := defaultLoadJob()
@@ -429,6 +430,7 @@ func TestLoad(t *testing.T) {
429430
Value: "session_id_1234567890",
430431
},
431432
}
433+
j.Configuration.Load.ColumnNameCharacterMap = "STRICT"
432434
return j
433435
}(),
434436
},

0 commit comments

Comments
 (0)