google-cloud-bigquery 1.27.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +58 -0
- data/CONTRIBUTING.md +3 -4
- data/LOGGING.md +1 -1
- data/OVERVIEW.md +15 -14
- data/lib/google/cloud/bigquery/convert.rb +72 -76
- data/lib/google/cloud/bigquery/copy_job.rb +1 -0
- data/lib/google/cloud/bigquery/data.rb +2 -2
- data/lib/google/cloud/bigquery/dataset.rb +181 -62
- data/lib/google/cloud/bigquery/dataset/access.rb +3 -3
- data/lib/google/cloud/bigquery/dataset/list.rb +2 -2
- data/lib/google/cloud/bigquery/external.rb +9 -2619
- data/lib/google/cloud/bigquery/external/bigtable_source.rb +230 -0
- data/lib/google/cloud/bigquery/external/bigtable_source/column.rb +404 -0
- data/lib/google/cloud/bigquery/external/bigtable_source/column_family.rb +945 -0
- data/lib/google/cloud/bigquery/external/csv_source.rb +481 -0
- data/lib/google/cloud/bigquery/external/data_source.rb +771 -0
- data/lib/google/cloud/bigquery/external/json_source.rb +170 -0
- data/lib/google/cloud/bigquery/external/parquet_source.rb +148 -0
- data/lib/google/cloud/bigquery/external/sheets_source.rb +166 -0
- data/lib/google/cloud/bigquery/extract_job.rb +4 -2
- data/lib/google/cloud/bigquery/job.rb +9 -3
- data/lib/google/cloud/bigquery/job/list.rb +4 -4
- data/lib/google/cloud/bigquery/load_job.rb +178 -19
- data/lib/google/cloud/bigquery/model/list.rb +2 -2
- data/lib/google/cloud/bigquery/policy.rb +2 -1
- data/lib/google/cloud/bigquery/project.rb +47 -43
- data/lib/google/cloud/bigquery/project/list.rb +2 -2
- data/lib/google/cloud/bigquery/query_job.rb +84 -62
- data/lib/google/cloud/bigquery/routine.rb +1 -4
- data/lib/google/cloud/bigquery/routine/list.rb +2 -2
- data/lib/google/cloud/bigquery/schema.rb +39 -3
- data/lib/google/cloud/bigquery/schema/field.rb +63 -13
- data/lib/google/cloud/bigquery/service.rb +11 -13
- data/lib/google/cloud/bigquery/standard_sql.rb +15 -3
- data/lib/google/cloud/bigquery/table.rb +312 -69
- data/lib/google/cloud/bigquery/table/async_inserter.rb +44 -17
- data/lib/google/cloud/bigquery/table/list.rb +2 -2
- data/lib/google/cloud/bigquery/version.rb +1 -1
- metadata +28 -14
|
@@ -64,7 +64,10 @@ module Google
|
|
|
64
64
|
class AsyncInserter
|
|
65
65
|
include MonitorMixin
|
|
66
66
|
|
|
67
|
-
attr_reader :max_bytes
|
|
67
|
+
attr_reader :max_bytes
|
|
68
|
+
attr_reader :max_rows
|
|
69
|
+
attr_reader :interval
|
|
70
|
+
attr_reader :threads
|
|
68
71
|
##
|
|
69
72
|
# @private Implementation accessors
|
|
70
73
|
attr_reader :table, :batch
|
|
@@ -98,6 +101,21 @@ module Google
|
|
|
98
101
|
# collected in batches and inserted together.
|
|
99
102
|
# See {Google::Cloud::Bigquery::Table#insert_async}.
|
|
100
103
|
#
|
|
104
|
+
# Simple Ruby types are generally accepted per JSON rules, along with the following support for BigQuery's
|
|
105
|
+
# more complex types:
|
|
106
|
+
#
|
|
107
|
+
# | BigQuery | Ruby | Notes |
|
|
108
|
+
# |--------------|--------------------------------------|----------------------------------------------------|
|
|
109
|
+
# | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
|
|
110
|
+
# | `BIGNUMERIC` | `String` | Pass as `String` to avoid rounding to scale 9. |
|
|
111
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
|
112
|
+
# | `DATE` | `Date` | |
|
|
113
|
+
# | `TIMESTAMP` | `Time` | |
|
|
114
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
|
115
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
|
116
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
|
117
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
|
118
|
+
#
|
|
101
119
|
# Because BigQuery's streaming API is designed for high insertion
|
|
102
120
|
# rates, modifications to the underlying table metadata are eventually
|
|
103
121
|
# consistent when interacting with the streaming system. In most cases
|
|
@@ -111,8 +129,11 @@ module Google
|
|
|
111
129
|
# @see https://cloud.google.com/bigquery/troubleshooting-errors#metadata-errors-for-streaming-inserts
|
|
112
130
|
# BigQuery Troubleshooting: Metadata errors for streaming inserts
|
|
113
131
|
#
|
|
114
|
-
# @param [Hash, Array<Hash>] rows A hash object or array of hash
|
|
115
|
-
#
|
|
132
|
+
# @param [Hash, Array<Hash>] rows A hash object or array of hash objects
|
|
133
|
+
# containing the data. Required. `BigDecimal` values will be rounded to
|
|
134
|
+
# scale 9 to conform with the BigQuery `NUMERIC` data type. To avoid
|
|
135
|
+
# rounding `BIGNUMERIC` type values with scale greater than 9, use `String`
|
|
136
|
+
# instead of `BigDecimal`.
|
|
116
137
|
# @param [Array<String|Symbol>, Symbol] insert_ids A unique ID for each row. BigQuery uses this property to
|
|
117
138
|
# detect duplicate insertion requests on a best-effort basis. For more information, see [data
|
|
118
139
|
# consistency](https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency). Optional. If
|
|
@@ -265,18 +286,19 @@ module Google
|
|
|
265
286
|
json_rows = @batch.json_rows
|
|
266
287
|
insert_ids = @batch.insert_ids
|
|
267
288
|
Concurrent::Future.new executor: @thread_pool do
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
289
|
+
raise ArgumentError, "No rows provided" if json_rows.empty?
|
|
290
|
+
insert_resp = @table.service.insert_tabledata_json_rows @table.dataset_id,
|
|
291
|
+
@table.table_id,
|
|
292
|
+
json_rows,
|
|
293
|
+
skip_invalid: @skip_invalid,
|
|
294
|
+
ignore_unknown: @ignore_unknown,
|
|
295
|
+
insert_ids: insert_ids
|
|
296
|
+
|
|
297
|
+
result = Result.new InsertResponse.from_gapi(orig_rows, insert_resp)
|
|
298
|
+
rescue StandardError => e
|
|
299
|
+
result = Result.new nil, e
|
|
300
|
+
ensure
|
|
301
|
+
@callback&.call result
|
|
280
302
|
end.execute
|
|
281
303
|
|
|
282
304
|
@batch = nil
|
|
@@ -286,7 +308,11 @@ module Google
|
|
|
286
308
|
##
|
|
287
309
|
# @private
|
|
288
310
|
class Batch
|
|
289
|
-
attr_reader :max_bytes
|
|
311
|
+
attr_reader :max_bytes
|
|
312
|
+
attr_reader :max_rows
|
|
313
|
+
attr_reader :rows
|
|
314
|
+
attr_reader :json_rows
|
|
315
|
+
attr_reader :insert_ids
|
|
290
316
|
|
|
291
317
|
def initialize max_bytes: 10_000_000, max_rows: 500
|
|
292
318
|
@max_bytes = max_bytes
|
|
@@ -395,7 +421,8 @@ module Google
|
|
|
395
421
|
@error = error
|
|
396
422
|
end
|
|
397
423
|
|
|
398
|
-
attr_reader :insert_response
|
|
424
|
+
attr_reader :insert_response
|
|
425
|
+
attr_reader :error
|
|
399
426
|
|
|
400
427
|
##
|
|
401
428
|
# Checks if an error is present, meaning that the insert operation
|
|
@@ -130,12 +130,12 @@ module Google
|
|
|
130
130
|
# puts table.name
|
|
131
131
|
# end
|
|
132
132
|
#
|
|
133
|
-
def all request_limit: nil
|
|
133
|
+
def all request_limit: nil, &block
|
|
134
134
|
request_limit = request_limit.to_i if request_limit
|
|
135
135
|
return enum_for :all, request_limit: request_limit unless block_given?
|
|
136
136
|
results = self
|
|
137
137
|
loop do
|
|
138
|
-
results.each
|
|
138
|
+
results.each(&block)
|
|
139
139
|
if request_limit
|
|
140
140
|
request_limit -= 1
|
|
141
141
|
break if request_limit.negative?
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: google-cloud-bigquery
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.32.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mike Moore
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2021-
|
|
12
|
+
date: 2021-06-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: concurrent-ruby
|
|
@@ -40,33 +40,39 @@ dependencies:
|
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
41
|
version: '0.1'
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
43
|
+
name: googleauth
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
|
-
- - "
|
|
46
|
+
- - ">="
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
|
-
version:
|
|
48
|
+
version: 0.16.2
|
|
49
|
+
- - "<"
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: 2.a
|
|
49
52
|
type: :runtime
|
|
50
53
|
prerelease: false
|
|
51
54
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
55
|
requirements:
|
|
53
|
-
- - "
|
|
56
|
+
- - ">="
|
|
54
57
|
- !ruby/object:Gem::Version
|
|
55
|
-
version:
|
|
58
|
+
version: 0.16.2
|
|
59
|
+
- - "<"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 2.a
|
|
56
62
|
- !ruby/object:Gem::Dependency
|
|
57
|
-
name:
|
|
63
|
+
name: google-cloud-core
|
|
58
64
|
requirement: !ruby/object:Gem::Requirement
|
|
59
65
|
requirements:
|
|
60
66
|
- - "~>"
|
|
61
67
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '
|
|
68
|
+
version: '1.6'
|
|
63
69
|
type: :runtime
|
|
64
70
|
prerelease: false
|
|
65
71
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
72
|
requirements:
|
|
67
73
|
- - "~>"
|
|
68
74
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '
|
|
75
|
+
version: '1.6'
|
|
70
76
|
- !ruby/object:Gem::Dependency
|
|
71
77
|
name: mini_mime
|
|
72
78
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -101,14 +107,14 @@ dependencies:
|
|
|
101
107
|
requirements:
|
|
102
108
|
- - "~>"
|
|
103
109
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: 1.
|
|
110
|
+
version: 1.25.1
|
|
105
111
|
type: :development
|
|
106
112
|
prerelease: false
|
|
107
113
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
114
|
requirements:
|
|
109
115
|
- - "~>"
|
|
110
116
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 1.
|
|
117
|
+
version: 1.25.1
|
|
112
118
|
- !ruby/object:Gem::Dependency
|
|
113
119
|
name: minitest
|
|
114
120
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -250,6 +256,14 @@ files:
|
|
|
250
256
|
- lib/google/cloud/bigquery/dataset/list.rb
|
|
251
257
|
- lib/google/cloud/bigquery/encryption_configuration.rb
|
|
252
258
|
- lib/google/cloud/bigquery/external.rb
|
|
259
|
+
- lib/google/cloud/bigquery/external/bigtable_source.rb
|
|
260
|
+
- lib/google/cloud/bigquery/external/bigtable_source/column.rb
|
|
261
|
+
- lib/google/cloud/bigquery/external/bigtable_source/column_family.rb
|
|
262
|
+
- lib/google/cloud/bigquery/external/csv_source.rb
|
|
263
|
+
- lib/google/cloud/bigquery/external/data_source.rb
|
|
264
|
+
- lib/google/cloud/bigquery/external/json_source.rb
|
|
265
|
+
- lib/google/cloud/bigquery/external/parquet_source.rb
|
|
266
|
+
- lib/google/cloud/bigquery/external/sheets_source.rb
|
|
253
267
|
- lib/google/cloud/bigquery/extract_job.rb
|
|
254
268
|
- lib/google/cloud/bigquery/insert_response.rb
|
|
255
269
|
- lib/google/cloud/bigquery/job.rb
|
|
@@ -284,14 +298,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
284
298
|
requirements:
|
|
285
299
|
- - ">="
|
|
286
300
|
- !ruby/object:Gem::Version
|
|
287
|
-
version: '2.
|
|
301
|
+
version: '2.5'
|
|
288
302
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
289
303
|
requirements:
|
|
290
304
|
- - ">="
|
|
291
305
|
- !ruby/object:Gem::Version
|
|
292
306
|
version: '0'
|
|
293
307
|
requirements: []
|
|
294
|
-
rubygems_version: 3.2.
|
|
308
|
+
rubygems_version: 3.2.17
|
|
295
309
|
signing_key:
|
|
296
310
|
specification_version: 4
|
|
297
311
|
summary: API Client library for Google BigQuery
|