Skip to content

Commit f8d039f

Browse files
committed
fix: change range-partitioning fields to be int
1 parent adf5210 commit f8d039f

File tree

5 files changed

+33
-17
lines changed

5 files changed

+33
-17
lines changed

README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ Following options are same as [bq command-line tools](https://cloud.google.com/b
113113
| range_partitioning | hash | optional | nil | See [Range Partitioning](#range-partitioning) |
114114
| range_partitioning.field | string | required | nil | `INT64` column used for partitioning |
115115
| range-partitioning.range | hash | required | nil | Defines the ranges for range paritioning |
116-
| range-partitioning.range.start | string | required | nil | The start of range partitioning, inclusive. This field is an INT64 value represented as a string. |
117-
| range-partitioning.range.end | string | required | nil | The end of range partitioning, exclusive. This field is an INT64 value represented as a string. |
118-
| range-partitioning.range.interval| string | required | nil | The width of each interval. This field is an INT64 value represented as a string. |
116+
| range-partitioning.range.start | int | required | nil | The start of range partitioning, inclusive. |
117+
| range-partitioning.range.end | int | required | nil | The end of range partitioning, exclusive. |
118+
| range-partitioning.range.interval| int | required | nil | The width of each interval. |
119119
| clustering | hash | optional | nil | Currently, clustering is supported for partitioned tables, so must be used with `time_partitioning` option. See [clustered tables](https://cloud.google.com/bigquery/docs/clustered-tables) |
120120
| clustering.fields | array | required | nil | One or more fields on which data should be clustered. The order of the specified columns determines the sort order of the data. |
121121
| schema_update_options | array | optional | nil | (Experimental) List of `ALLOW_FIELD_ADDITION` or `ALLOW_FIELD_RELAXATION` or both. See [jobs#configuration.load.schemaUpdateOptions](https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.load.schemaUpdateOptions). NOTE for the current status: `schema_update_options` does not work for `copy` job, that is, is not effective for most of modes such as `append`, `replace` and `replace_backup`. `delete_in_advance` deletes origin table so does not need to update schema. Only `append_direct` can utilize schema update. |
@@ -467,9 +467,9 @@ out:
467467
range_partitioning:
468468
field: customer_id
469469
range:
470-
start: '1'
471-
end: '99999'
472-
range: '1'
470+
start: 1
471+
end: 99999
472+
range: 1
473473
```
474474

475475
## Development

example/config_replace_field_range_partitioned_table.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ out:
3131
range_partitioning:
3232
field: 'long'
3333
range:
34-
start: '90'
35-
end: '100'
36-
interval: '1'
34+
start: 90
35+
end: 100
36+
interval: 1

lib/embulk/output/bigquery.rb

+12
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,24 @@ def self.configure(config, schema, task_count)
248248
unless task['range_partitioning']['range']['start']
249249
raise ConfigError.new "`range_partitioning` must have `range.start` key"
250250
end
251+
unless task['range_partitioning']['range']['start'].is_a?(Integer)
252+
raise ConfigError.new "`range_partitioning.range.start` must be an integer"
253+
end
251254
unless task['range_partitioning']['range']['end']
252255
raise ConfigError.new "`range_partitioning` must have `range.end` key"
253256
end
257+
unless task['range_partitioning']['range']['end'].is_a?(Integer)
258+
raise ConfigError.new "`range_partitioning.range.end` must be an integer"
259+
end
260+
if task['range_partitioning']['range']['start'] >= task['range_partitioning']['range']['end']
261+
raise ConfigError.new "`range_partitioning.range.start` must be less than `range_partitioning.range.end`"
262+
end
254263
unless task['range_partitioning']['range']['interval']
255264
raise ConfigError.new "`range_partitioning` must have `range.interval` key"
256265
end
266+
unless task['range_partitioning']['range']['interval'].is_a?(Integer)
267+
raise ConfigError.new "`range_partitioning.range.interval` must be an integer"
268+
end
257269
end
258270

259271
if task['clustering']

lib/embulk/output/bigquery/bigquery_client.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -440,9 +440,9 @@ def create_table_if_not_exists(table, dataset: nil, options: nil)
440440
body[:range_partitioning] = {
441441
field: options['range_partitioning']['field'],
442442
range: {
443-
start: options['range_partitioning']['range']['start'],
444-
end: options['range_partitioning']['range']['end'],
445-
interval: options['range_partitioning']['range']['interval'],
443+
start: options['range_partitioning']['range']['start'].to_s,
444+
end: options['range_partitioning']['range']['end'].to_s,
445+
interval: options['range_partitioning']['range']['interval'].to_s,
446446
},
447447
}
448448
end

test/test_configure.rb

+9-5
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,11 @@ def test_time_partitioning
271271
end
272272

273273
def test_range_partitioning
274-
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => '1', 'end' => '2', 'interval' => '1' }})
274+
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => 1, 'end' => 2, 'interval' => 1 }})
275275
assert_nothing_raised { Bigquery.configure(config, schema, processor_count) }
276276

277277
# field is required
278-
config = least_config.merge('range_partitioning' => {'range' => { 'start' => '1', 'end' => '2', 'interval' => '1' }})
278+
config = least_config.merge('range_partitioning' => {'range' => { 'start' => 1, 'end' => 2, 'interval' => 1 }})
279279
assert_raise { Bigquery.configure(config, schema, processor_count) }
280280

281281

@@ -284,15 +284,19 @@ def test_range_partitioning
284284
assert_raise { Bigquery.configure(config, schema, processor_count) }
285285

286286
# range.start is required
287-
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'end' => '2', 'interval' => '1' }})
287+
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'end' => 2, 'interval' => 1 }})
288288
assert_raise { Bigquery.configure(config, schema, processor_count) }
289289

290290
# range.end is required
291-
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => '1', 'interval' => '1' }})
291+
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => 1, 'interval' => 1 }})
292+
assert_raise { Bigquery.configure(config, schema, processor_count) }
293+
294+
# range.start should be less than range.end
295+
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => 2, 'end' => 1, 'interval' => 1 }})
292296
assert_raise { Bigquery.configure(config, schema, processor_count) }
293297

294298
# range.interval is required
295-
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => '1', 'end' => '2' }})
299+
config = least_config.merge('range_partitioning' => {'field' => 'foo', 'range' => { 'start' => 1, 'end' => 2 }})
296300
assert_raise { Bigquery.configure(config, schema, processor_count) }
297301
end
298302

0 commit comments

Comments
 (0)