google-cloud-bigquery 1.38.1 → 1.40.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0548a7d1c7cdbc387d819573b26adca5ea813c3ffda5d9a585f5cdb9e359a59
4
- data.tar.gz: 42c818041de0fe87d32c9a559dba2c2ee7acfe441fc97fde61ccb6ebf9407c9d
3
+ metadata.gz: a0cd69b913db71840e3b893b15edfefe3c18bb204c8a8e542a82afcee37c0eeb
4
+ data.tar.gz: cfd00e65e67aac9e07e1eada563f221c462004319c7fa2a6d38915434ef21f19
5
5
  SHA512:
6
- metadata.gz: abb28b6af3f0b30b2b58dbde4a8b0727419d802cf5144b62bd310295bbdffd3a2dc9dd03c11cbabb2792a440a33f54c803b937659c19d4e65973d0e0dc53862f
7
- data.tar.gz: 832ef3b337a073041d6df5de3f4bb1fab20f1dd6ab1c3dcb20078a710bcc1011fec2f8a574fa9e81b9dc391218115848430ec58acb4897b7bb772cf4614fff86
6
+ metadata.gz: b9027b585d39714f8977ccdc397d04f8caf4f036f6be86ff091f0b1268379ef0c7410247d4186b6a164ceece002ade98bdea6efb3473747e14b1b11bf90649a5
7
+ data.tar.gz: 40d261fc0e31e07b05aa619099588a3341f74cd3ec0cf7a3e0ba46efc629a94069076e190987484b3450212c310f6230abd5e8186679bfbe16dedc50509efc03
data/AUTHENTICATION.md CHANGED
@@ -106,15 +106,6 @@ To configure your system for this, simply:
106
106
  **NOTE:** This is _not_ recommended for running in production. The Cloud SDK
107
107
  *should* only be used during development.
108
108
 
109
- [gce-how-to]: https://cloud.google.com/compute/docs/authentication#using
110
- [dev-console]: https://console.cloud.google.com/project
111
-
112
- [enable-apis]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/enable-apis.png
113
-
114
- [create-new-service-account]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/create-new-service-account.png
115
- [create-new-service-account-existing-keys]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/create-new-service-account-existing-keys.png
116
- [reuse-service-account]: https://raw.githubusercontent.com/GoogleCloudPlatform/gcloud-common/master/authentication/reuse-service-account.png
117
-
118
109
  ## Creating a Service Account
119
110
 
120
111
  Google Cloud requires a **Project ID** and **Service Account Credentials** to
@@ -124,31 +115,22 @@ connect to most services with google-cloud-bigquery.
124
115
  If you are not running this client on Google Compute Engine, you need a Google
125
116
  Developers service account.
126
117
 
127
- 1. Visit the [Google Developers Console][dev-console].
118
+ 1. Visit the [Google Cloud Console](https://console.cloud.google.com/project).
128
119
  1. Create a new project or click on an existing project.
129
- 1. Activate the slide-out navigation tray and select **API Manager**. From
120
+ 1. Activate the menu in the upper left and select **APIs & Services**. From
130
121
  here, you will enable the APIs that your application requires.
131
122
 
132
- ![Enable the APIs that your application requires][enable-apis]
133
-
134
123
  *Note: You may need to enable billing in order to use these services.*
135
124
 
136
125
  1. Select **Credentials** from the side navigation.
137
126
 
138
- You should see a screen like one of the following.
139
-
140
- ![Create a new service account][create-new-service-account]
141
-
142
- ![Create a new service account With Existing Keys][create-new-service-account-existing-keys]
143
-
144
- Find the "Add credentials" drop down and select "Service account" to be
145
- guided through downloading a new JSON key file.
146
-
147
- If you want to re-use an existing service account, you can easily generate a
148
- new key file. Just select the account you wish to re-use, and click "Generate
149
- new JSON key":
127
+ Find the "Create credentials" drop down near the top of the page, and select
128
+ "Service account" to be guided through downloading a new JSON key file.
150
129
 
151
- ![Re-use an existing service account][reuse-service-account]
130
+ If you want to re-use an existing service account, you can easily generate
131
+ a new key file. Just select the account you wish to re-use click the pencil
132
+ tool on the right side to edit the service account, select the **Keys** tab,
133
+ and then select **Add Key**.
152
134
 
153
135
  The key file you download will be used by this library to authenticate API
154
136
  requests and should be stored in a secure location.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Release History
2
2
 
3
+ ### 1.40.0 (2022-12-14)
4
+
5
+ #### Features
6
+
7
+ * support table snapshot and clone ([#19354](https://github.com/googleapis/google-cloud-ruby/issues/19354))
8
+
9
+ ### 1.39.0 (2022-07-27)
10
+
11
+ #### Features
12
+
13
+ * Update minimum Ruby version to 2.6 ([#18871](https://github.com/googleapis/google-cloud-ruby/issues/18871))
14
+
3
15
  ### 1.38.1 / 2022-01-13
4
16
 
5
17
  #### Bug Fixes
data/LOGGING.md CHANGED
@@ -4,7 +4,7 @@ To enable logging for this library, set the logger for the underlying [Google
4
4
  API
5
5
  Client](https://github.com/google/google-api-ruby-client/blob/master/README.md#logging)
6
6
  library. The logger that you set may be a Ruby stdlib
7
- [`Logger`](https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) as
7
+ [`Logger`](https://ruby-doc.org/current/stdlibs/logger/Logger.html) as
8
8
  shown below, or a
9
9
  [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
10
10
  that will write logs to [Stackdriver
data/OVERVIEW.md CHANGED
@@ -276,7 +276,7 @@ To follow along with these examples, you will need to set up billing on the
276
276
  [Google Developers Console](https://console.developers.google.com).
277
277
 
278
278
  In addition to CSV, data can be imported from files that are formatted as
279
- [Newline-delimited JSON](http://jsonlines.org/),
279
+ [Newline-delimited JSON](https://jsonlines.org/),
280
280
  [Avro](http://avro.apache.org/),
281
281
  [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc),
282
282
  [Parquet](https://parquet.apache.org/) or from a Google Cloud Datastore backup.
@@ -54,10 +54,9 @@ module Google
54
54
  end
55
55
 
56
56
  def self.format_row row, fields
57
- row_pairs = fields.zip(row[:f]).map do |f, v|
57
+ fields.zip(row[:f]).to_h do |f, v|
58
58
  [f.name.to_sym, format_value(v, f)]
59
59
  end
60
- Hash[row_pairs]
61
60
  end
62
61
 
63
62
  # rubocop:disable all
@@ -123,10 +122,9 @@ module Google
123
122
  array_values = json_value.map { |v| to_query_param_value v, type }
124
123
  Google::Apis::BigqueryV2::QueryParameterValue.new array_values: array_values
125
124
  when Hash
126
- struct_pairs = json_value.map do |k, v|
125
+ struct_values = json_value.to_h do |k, v|
127
126
  [String(k), to_query_param_value(v, type)]
128
127
  end
129
- struct_values = Hash[struct_pairs]
130
128
  Google::Apis::BigqueryV2::QueryParameterValue.new struct_values: struct_values
131
129
  else
132
130
  # Everything else is converted to a string, per the API expectations.
@@ -239,7 +237,7 @@ module Google
239
237
  type = extract_array_type type
240
238
  value.map { |x| to_json_value x, type }
241
239
  elsif Hash === value
242
- Hash[value.map { |k, v| [k.to_s, to_json_value(v, type)] }]
240
+ value.to_h { |k, v| [k.to_s, to_json_value(v, type)] }
243
241
  else
244
242
  value
245
243
  end
@@ -266,7 +264,7 @@ module Google
266
264
  end
267
265
 
268
266
  def self.to_json_row row
269
- Hash[row.map { |k, v| [k.to_s, to_json_value(v)] }]
267
+ row.to_h { |k, v| [k.to_s, to_json_value(v)] }
270
268
  end
271
269
 
272
270
  def self.resolve_legacy_sql standard_sql, legacy_sql
@@ -17,6 +17,24 @@ require "google/cloud/bigquery/encryption_configuration"
17
17
  module Google
18
18
  module Cloud
19
19
  module Bigquery
20
+ module OperationType
21
+ # Different operation types supported in table copy job.
22
+ # https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#operationtype
23
+
24
+ # The source and destination table have the same table type.
25
+ COPY = "COPY".freeze
26
+
27
+ # The source table type is TABLE and the destination table type is SNAPSHOT.
28
+ SNAPSHOT = "SNAPSHOT".freeze
29
+
30
+ # The source table type is SNAPSHOT and the destination table type is TABLE.
31
+ RESTORE = "RESTORE".freeze
32
+
33
+ # The source and destination table have the same table type, but only bill for
34
+ # unique data.
35
+ CLONE = "CLONE".freeze
36
+ end
37
+
20
38
  ##
21
39
  # # CopyJob
22
40
  #
@@ -157,7 +175,8 @@ module Google
157
175
  job_ref = service.job_ref_from options[:job_id], options[:prefix]
158
176
  copy_cfg = Google::Apis::BigqueryV2::JobConfigurationTableCopy.new(
159
177
  source_table: source,
160
- destination_table: target
178
+ destination_table: target,
179
+ operation_type: options[:operation_type]
161
180
  )
162
181
  req = Google::Apis::BigqueryV2::Job.new(
163
182
  job_reference: job_ref,
@@ -1816,7 +1816,7 @@ module Google
1816
1816
  # The following values are supported:
1817
1817
  #
1818
1818
  # * `csv` - CSV
1819
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
1819
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1820
1820
  # * `avro` - [Avro](http://avro.apache.org/)
1821
1821
  # * `sheets` - Google Sheets
1822
1822
  # * `datastore_backup` - Cloud Datastore backup
@@ -1879,7 +1879,7 @@ module Google
1879
1879
  # The following values are supported:
1880
1880
  #
1881
1881
  # * `csv` - CSV
1882
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
1882
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1883
1883
  # * `avro` - [Avro](http://avro.apache.org/)
1884
1884
  # * `orc` - [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc)
1885
1885
  # * `parquet` - [Parquet](https://parquet.apache.org/)
@@ -2141,7 +2141,7 @@ module Google
2141
2141
  # The following values are supported:
2142
2142
  #
2143
2143
  # * `csv` - CSV
2144
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
2144
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
2145
2145
  # * `avro` - [Avro](http://avro.apache.org/)
2146
2146
  # * `orc` - [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc)
2147
2147
  # * `parquet` - [Parquet](https://parquet.apache.org/)
@@ -2754,7 +2754,7 @@ module Google
2754
2754
  def patch_gapi! *attributes
2755
2755
  return if attributes.empty?
2756
2756
  ensure_service!
2757
- patch_args = Hash[attributes.map { |attr| [attr, @gapi.send(attr)] }]
2757
+ patch_args = attributes.to_h { |attr| [attr, @gapi.send(attr)] }
2758
2758
  patch_gapi = Google::Apis::BigqueryV2::Dataset.new(**patch_args)
2759
2759
  patch_gapi.etag = etag if etag
2760
2760
  @gapi = service.patch_dataset dataset_id, patch_gapi
@@ -108,7 +108,7 @@ module Google
108
108
 
109
109
  ##
110
110
  # Checks if the destination format for the table data is [newline-delimited
111
- # JSON](http://jsonlines.org/). The default is `false`. Not applicable when
111
+ # JSON](https://jsonlines.org/). The default is `false`. Not applicable when
112
112
  # extracting models.
113
113
  #
114
114
  # @return [Boolean] `true` when `NEWLINE_DELIMITED_JSON`, `false` if not
@@ -221,7 +221,7 @@ module Google
221
221
  # and the counts as values.
222
222
  #
223
223
  def destinations_counts
224
- Hash[destinations.zip destinations_file_counts]
224
+ destinations.zip(destinations_file_counts).to_h
225
225
  end
226
226
 
227
227
  ##
@@ -362,7 +362,7 @@ module Google
362
362
  # Supported values for tables:
363
363
  #
364
364
  # * `csv` - CSV
365
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
365
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
366
366
  # * `avro` - [Avro](http://avro.apache.org/)
367
367
  #
368
368
  # Supported values for models:
@@ -489,7 +489,7 @@ module Google
489
489
  #
490
490
  def wait_until_done!
491
491
  backoff = lambda do |retries|
492
- delay = [retries**2 + 5, 60].min # Maximum delay is 60
492
+ delay = [(retries**2) + 5, 60].min # Maximum delay is 60
493
493
  sleep delay
494
494
  end
495
495
  retries = 0
@@ -188,7 +188,7 @@ module Google
188
188
 
189
189
  ##
190
190
  # Checks if the format of the source data is [newline-delimited
191
- # JSON](http://jsonlines.org/). The default is `false`.
191
+ # JSON](https://jsonlines.org/). The default is `false`.
192
192
  #
193
193
  # @return [Boolean] `true` when the source format is
194
194
  # `NEWLINE_DELIMITED_JSON`, `false` otherwise.
@@ -1269,7 +1269,7 @@ module Google
1269
1269
  # The following values are supported:
1270
1270
  #
1271
1271
  # * `csv` - CSV
1272
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
1272
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1273
1273
  # * `avro` - [Avro](http://avro.apache.org/)
1274
1274
  # * `orc` - [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc)
1275
1275
  # * `parquet` - [Parquet](https://parquet.apache.org/)
@@ -961,7 +961,7 @@ module Google
961
961
  # The following values are supported:
962
962
  #
963
963
  # * `csv` - CSV
964
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
964
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
965
965
  # * `avro` - [Avro](http://avro.apache.org/)
966
966
  # * `sheets` - Google Sheets
967
967
  # * `datastore_backup` - Cloud Datastore backup
@@ -1554,7 +1554,7 @@ module Google
1554
1554
  # Supported values for tables:
1555
1555
  #
1556
1556
  # * `csv` - CSV
1557
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
1557
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1558
1558
  # * `avro` - [Avro](http://avro.apache.org/)
1559
1559
  #
1560
1560
  # Supported values for models:
@@ -1683,7 +1683,7 @@ module Google
1683
1683
  # Supported values for tables:
1684
1684
  #
1685
1685
  # * `csv` - CSV
1686
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
1686
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1687
1687
  # * `avro` - [Avro](http://avro.apache.org/)
1688
1688
  #
1689
1689
  # Supported values for models:
@@ -1193,7 +1193,7 @@ module Google
1193
1193
  #
1194
1194
  def external= value
1195
1195
  external_table_pairs = value.map { |name, obj| [String(name), obj.to_gapi] }
1196
- external_table_hash = Hash[external_table_pairs]
1196
+ external_table_hash = external_table_pairs.to_h
1197
1197
  @gapi.configuration.query.table_definitions = external_table_hash
1198
1198
  end
1199
1199
 
@@ -471,7 +471,7 @@ module Google
471
471
  #
472
472
  def param_type
473
473
  param_type = type.to_sym
474
- param_type = Hash[fields.map { |field| [field.name.to_sym, field.param_type] }] if record?
474
+ param_type = fields.to_h { |field| [field.name.to_sym, field.param_type] } if record?
475
475
  param_type = [param_type] if repeated?
476
476
  param_type
477
477
  end
@@ -172,7 +172,7 @@ module Google
172
172
  # schema.param_types
173
173
  #
174
174
  def param_types
175
- Hash[fields.map { |field| [field.name.to_sym, field.param_type] }]
175
+ fields.to_h { |field| [field.name.to_sym, field.param_type] }
176
176
  end
177
177
 
178
178
  ##
@@ -154,6 +154,45 @@ module Google
154
154
  @gapi.table_reference.project_id
155
155
  end
156
156
 
157
+ ##
158
+ # The type of the table like if its a TABLE, VIEW or SNAPSHOT etc.,
159
+ #
160
+ # @return [String, nil] Type of the table, or
161
+ # `nil` if the object is a reference (see {#reference?}).
162
+ #
163
+ # @!group Attributes
164
+ #
165
+ def type
166
+ return nil if reference?
167
+ @gapi.type
168
+ end
169
+
170
+ ##
171
+ # The Information about base table and snapshot time of the table.
172
+ #
173
+ # @return [Google::Apis::BigqueryV2::SnapshotDefinition, nil] Snapshot definition of table snapshot, or
174
+ # `nil` if not snapshot or the object is a reference (see {#reference?}).
175
+ #
176
+ # @!group Attributes
177
+ #
178
+ def snapshot_definition
179
+ return nil if reference?
180
+ @gapi.snapshot_definition
181
+ end
182
+
183
+ ##
184
+ # The Information about base table and clone time of the table.
185
+ #
186
+ # @return [Google::Apis::BigqueryV2::CloneDefinition, nil] Clone definition of table clone, or
187
+ # `nil` if not clone or the object is a reference (see {#reference?}).
188
+ #
189
+ # @!group Attributes
190
+ #
191
+ def clone_definition
192
+ return nil if reference?
193
+ @gapi.clone_definition
194
+ end
195
+
157
196
  ##
158
197
  # @private The gapi fragment containing the Project ID, Dataset ID, and
159
198
  # Table ID.
@@ -820,6 +859,40 @@ module Google
820
859
  @gapi.type == "VIEW"
821
860
  end
822
861
 
862
+ ##
863
+ # Checks if the table's type is `SNAPSHOT`, indicating that the table
864
+ # represents a BigQuery table snapshot.
865
+ #
866
+ # @see https://cloud.google.com/bigquery/docs/table-snapshots-intro
867
+ #
868
+ # @return [Boolean, nil] `true` when the type is `SNAPSHOT`, `false`
869
+ # otherwise, if the object is a resource (see {#resource?}); `nil` if
870
+ # the object is a reference (see {#reference?}).
871
+ #
872
+ # @!group Attributes
873
+ #
874
+ def snapshot?
875
+ return nil if reference?
876
+ @gapi.type == "SNAPSHOT"
877
+ end
878
+
879
+ ##
880
+ # Checks if the table's type is `CLONE`, indicating that the table
881
+ # represents a BigQuery table clone.
882
+ #
883
+ # @see https://cloud.google.com/bigquery/docs/table-clones-intro
884
+ #
885
+ # @return [Boolean, nil] `true` when the type is `CLONE`, `false`
886
+ # otherwise, if the object is a resource (see {#resource?}); `nil` if
887
+ # the object is a reference (see {#reference?}).
888
+ #
889
+ # @!group Attributes
890
+ #
891
+ def clone?
892
+ return nil if reference?
893
+ !@gapi.clone_definition.nil?
894
+ end
895
+
823
896
  ##
824
897
  # Checks if the table's type is `MATERIALIZED_VIEW`, indicating that
825
898
  # the table represents a BigQuery materialized view.
@@ -1697,9 +1770,16 @@ module Google
1697
1770
  #
1698
1771
  # @!group Data
1699
1772
  #
1700
- def copy_job destination_table, create: nil, write: nil, job_id: nil, prefix: nil, labels: nil, dryrun: nil
1773
+ def copy_job destination_table, create: nil, write: nil, job_id: nil, prefix: nil, labels: nil, dryrun: nil,
1774
+ operation_type: nil
1701
1775
  ensure_service!
1702
- options = { create: create, write: write, dryrun: dryrun, labels: labels, job_id: job_id, prefix: prefix }
1776
+ options = { create: create,
1777
+ write: write,
1778
+ dryrun: dryrun,
1779
+ labels: labels,
1780
+ job_id: job_id,
1781
+ prefix: prefix,
1782
+ operation_type: operation_type }
1703
1783
  updater = CopyJob::Updater.from_options(
1704
1784
  service,
1705
1785
  table_ref,
@@ -1780,10 +1860,195 @@ module Google
1780
1860
  # @!group Data
1781
1861
  #
1782
1862
  def copy destination_table, create: nil, write: nil, &block
1783
- job = copy_job destination_table, create: create, write: write, &block
1784
- job.wait_until_done!
1785
- ensure_job_succeeded! job
1786
- true
1863
+ copy_job_with_operation_type destination_table,
1864
+ create: create,
1865
+ write: write,
1866
+ operation_type: OperationType::COPY,
1867
+ &block
1868
+ end
1869
+
1870
+ ##
1871
+ # Clones the data from the table to another table using a synchronous
1872
+ # method that blocks for a response.
1873
+ # The source and destination table have the same table type, but only bill for
1874
+ # unique data.
1875
+ # Timeouts and transient errors are generally handled as needed to complete the job.
1876
+ # See also {#copy_job}.
1877
+ #
1878
+ # The geographic location for the job ("US", "EU", etc.) can be set via
1879
+ # {CopyJob::Updater#location=} in a block passed to this method. If the
1880
+ # table is a full resource representation (see {#resource_full?}), the
1881
+ # location of the job will be automatically set to the location of the
1882
+ # table.
1883
+ #
1884
+ # @param [Table, String] destination_table The destination for the
1885
+ # copied data. This can also be a string identifier as specified by
1886
+ # the [Standard SQL Query
1887
+ # Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
1888
+ # (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
1889
+ # Reference](https://cloud.google.com/bigquery/query-reference#from)
1890
+ # (`project-name:dataset_id.table_id`). This is useful for referencing
1891
+ # tables in other projects and datasets.
1892
+ #
1893
+ # @yield [job] a job configuration object
1894
+ # @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
1895
+ # configuration object for setting additional options.
1896
+ #
1897
+ # @return [Boolean] Returns `true` if the copy operation succeeded.
1898
+ #
1899
+ # @example
1900
+ # require "google/cloud/bigquery"
1901
+ #
1902
+ # bigquery = Google::Cloud::Bigquery.new
1903
+ # dataset = bigquery.dataset "my_dataset"
1904
+ # table = dataset.table "my_table"
1905
+ # destination_table = dataset.table "my_destination_table"
1906
+ #
1907
+ # table.clone destination_table
1908
+ #
1909
+ # @example Passing a string identifier for the destination table:
1910
+ # require "google/cloud/bigquery"
1911
+ #
1912
+ # bigquery = Google::Cloud::Bigquery.new
1913
+ # dataset = bigquery.dataset "my_dataset"
1914
+ # table = dataset.table "my_table"
1915
+ #
1916
+ # table.clone "other-project:other_dataset.other_table"
1917
+ #
1918
+ # @!group Data
1919
+ #
1920
+ def clone destination_table, &block
1921
+ copy_job_with_operation_type destination_table,
1922
+ operation_type: OperationType::CLONE,
1923
+ &block
1924
+ end
1925
+
1926
+ ##
1927
+ # Takes snapshot of the data from the table to another table using a synchronous
1928
+ # method that blocks for a response.
1929
+ # The source table type is TABLE and the destination table type is SNAPSHOT.
1930
+ # Timeouts and transient errors are generally handled as needed to complete the job.
1931
+ # See also {#copy_job}.
1932
+ #
1933
+ # The geographic location for the job ("US", "EU", etc.) can be set via
1934
+ # {CopyJob::Updater#location=} in a block passed to this method. If the
1935
+ # table is a full resource representation (see {#resource_full?}), the
1936
+ # location of the job will be automatically set to the location of the
1937
+ # table.
1938
+ #
1939
+ # @param [Table, String] destination_table The destination for the
1940
+ # copied data. This can also be a string identifier as specified by
1941
+ # the [Standard SQL Query
1942
+ # Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
1943
+ # (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
1944
+ # Reference](https://cloud.google.com/bigquery/query-reference#from)
1945
+ # (`project-name:dataset_id.table_id`). This is useful for referencing
1946
+ # tables in other projects and datasets.
1947
+ #
1948
+ # @yield [job] a job configuration object
1949
+ # @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
1950
+ # configuration object for setting additional options.
1951
+ #
1952
+ # @return [Boolean] Returns `true` if the copy operation succeeded.
1953
+ #
1954
+ # @example
1955
+ # require "google/cloud/bigquery"
1956
+ #
1957
+ # bigquery = Google::Cloud::Bigquery.new
1958
+ # dataset = bigquery.dataset "my_dataset"
1959
+ # table = dataset.table "my_table"
1960
+ # destination_table = dataset.table "my_destination_table"
1961
+ #
1962
+ # table.snapshot destination_table
1963
+ #
1964
+ # @example Passing a string identifier for the destination table:
1965
+ # require "google/cloud/bigquery"
1966
+ #
1967
+ # bigquery = Google::Cloud::Bigquery.new
1968
+ # dataset = bigquery.dataset "my_dataset"
1969
+ # table = dataset.table "my_table"
1970
+ #
1971
+ # table.snapshot "other-project:other_dataset.other_table"
1972
+ #
1973
+ # @!group Data
1974
+ #
1975
+ def snapshot destination_table, &block
1976
+ copy_job_with_operation_type destination_table,
1977
+ operation_type: OperationType::SNAPSHOT,
1978
+ &block
1979
+ end
1980
+
1981
+ ##
1982
+ # Restore the data from the table to another table using a synchronous
1983
+ # method that blocks for a response.
1984
+ # The source table type is SNAPSHOT and the destination table type is TABLE.
1985
+ # Timeouts and transient errors are generally handled as needed to complete the job.
1986
+ # See also {#copy_job}.
1987
+ #
1988
+ # The geographic location for the job ("US", "EU", etc.) can be set via
1989
+ # {CopyJob::Updater#location=} in a block passed to this method. If the
1990
+ # table is a full resource representation (see {#resource_full?}), the
1991
+ # location of the job will be automatically set to the location of the
1992
+ # table.
1993
+ #
1994
+ # @param [Table, String] destination_table The destination for the
1995
+ # copied data. This can also be a string identifier as specified by
1996
+ # the [Standard SQL Query
1997
+ # Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
1998
+ # (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
1999
+ # Reference](https://cloud.google.com/bigquery/query-reference#from)
2000
+ # (`project-name:dataset_id.table_id`). This is useful for referencing
2001
+ # tables in other projects and datasets.
2002
+ # @param [String] create Specifies whether the job is allowed to create
2003
+ # new tables. The default value is `needed`.
2004
+ #
2005
+ # The following values are supported:
2006
+ #
2007
+ # * `needed` - Create the table if it does not exist.
2008
+ # * `never` - The table must already exist. A 'notFound' error is
2009
+ # raised if the table does not exist.
2010
+ # @param [String] write Specifies how to handle data already present in
2011
+ # the destination table. The default value is `empty`.
2012
+ #
2013
+ # The following values are supported:
2014
+ #
2015
+ # * `truncate` - BigQuery overwrites the table data.
2016
+ # * `append` - BigQuery appends the data to the table.
2017
+ # * `empty` - An error will be returned if the destination table
2018
+ # already contains data.
2019
+ # @yield [job] a job configuration object
2020
+ # @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
2021
+ # configuration object for setting additional options.
2022
+ #
2023
+ # @return [Boolean] Returns `true` if the copy operation succeeded.
2024
+ #
2025
+ # @example
2026
+ # require "google/cloud/bigquery"
2027
+ #
2028
+ # bigquery = Google::Cloud::Bigquery.new
2029
+ # dataset = bigquery.dataset "my_dataset"
2030
+ # table = dataset.table "my_table"
2031
+ # destination_table = dataset.table "my_destination_table"
2032
+ #
2033
+ # table.restore destination_table
2034
+ #
2035
+ # @example Passing a string identifier for the destination table:
2036
+ # require "google/cloud/bigquery"
2037
+ #
2038
+ # bigquery = Google::Cloud::Bigquery.new
2039
+ # dataset = bigquery.dataset "my_dataset"
2040
+ # table = dataset.table "my_table"
2041
+ #
2042
+ # table.restore "other-project:other_dataset.other_table"
2043
+ #
2044
+ # @!group Data
2045
+ #
2046
+ def restore destination_table, create: nil, write: nil, &block
2047
+ copy_job_with_operation_type destination_table,
2048
+ create: create,
2049
+ write: write,
2050
+ operation_type: OperationType::RESTORE,
2051
+ &block
1787
2052
  end
1788
2053
 
1789
2054
  ##
@@ -1812,7 +2077,7 @@ module Google
1812
2077
  # The following values are supported:
1813
2078
  #
1814
2079
  # * `csv` - CSV
1815
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
2080
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1816
2081
  # * `avro` - [Avro](http://avro.apache.org/)
1817
2082
  # @param [String] compression The compression type to use for exported
1818
2083
  # files. Possible values include `GZIP` and `NONE`. The default value
@@ -1915,7 +2180,7 @@ module Google
1915
2180
  # The following values are supported:
1916
2181
  #
1917
2182
  # * `csv` - CSV
1918
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
2183
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1919
2184
  # * `avro` - [Avro](http://avro.apache.org/)
1920
2185
  # @param [String] compression The compression type to use for exported
1921
2186
  # files. Possible values include `GZIP` and `NONE`. The default value
@@ -1986,7 +2251,7 @@ module Google
1986
2251
  # The following values are supported:
1987
2252
  #
1988
2253
  # * `csv` - CSV
1989
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
2254
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
1990
2255
  # * `avro` - [Avro](http://avro.apache.org/)
1991
2256
  # * `orc` - [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc)
1992
2257
  # * `parquet` - [Parquet](https://parquet.apache.org/)
@@ -2199,7 +2464,7 @@ module Google
2199
2464
  # The following values are supported:
2200
2465
  #
2201
2466
  # * `csv` - CSV
2202
- # * `json` - [Newline-delimited JSON](http://jsonlines.org/)
2467
+ # * `json` - [Newline-delimited JSON](https://jsonlines.org/)
2203
2468
  # * `avro` - [Avro](http://avro.apache.org/)
2204
2469
  # * `orc` - [ORC](https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-orc)
2205
2470
  # * `parquet` - [Parquet](https://parquet.apache.org/)
@@ -2739,6 +3004,17 @@ module Google
2739
3004
 
2740
3005
  protected
2741
3006
 
3007
+ def copy_job_with_operation_type destination_table, create: nil, write: nil, operation_type: nil, &block
3008
+ job = copy_job destination_table,
3009
+ create: create,
3010
+ write: write,
3011
+ operation_type: operation_type,
3012
+ &block
3013
+ job.wait_until_done!
3014
+ ensure_job_succeeded! job
3015
+ true
3016
+ end
3017
+
2742
3018
  ##
2743
3019
  # Raise an error unless an active service is available.
2744
3020
  def ensure_service!
@@ -2766,7 +3042,7 @@ module Google
2766
3042
  def patch_gapi! *attributes
2767
3043
  return if attributes.empty?
2768
3044
  ensure_service!
2769
- patch_args = Hash[attributes.map { |attr| [attr, @gapi.send(attr)] }]
3045
+ patch_args = attributes.to_h { |attr| [attr, @gapi.send(attr)] }
2770
3046
  patch_gapi = Google::Apis::BigqueryV2::Table.new(**patch_args)
2771
3047
  patch_gapi.etag = etag if etag
2772
3048
  @gapi = service.patch_table dataset_id, table_id, patch_gapi
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Bigquery
19
- VERSION = "1.38.1".freeze
19
+ VERSION = "1.40.0".freeze
20
20
  end
21
21
  end
22
22
  end
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.38.1
4
+ version: 1.40.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: 2022-01-13 00:00:00.000000000 Z
12
+ date: 2022-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -121,28 +121,28 @@ dependencies:
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.25.1
124
+ version: 1.26.1
125
125
  type: :development
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.25.1
131
+ version: 1.26.1
132
132
  - !ruby/object:Gem::Dependency
133
133
  name: minitest
134
134
  requirement: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '5.14'
138
+ version: '5.16'
139
139
  type: :development
140
140
  prerelease: false
141
141
  version_requirements: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '5.14'
145
+ version: '5.16'
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: minitest-autotest
148
148
  requirement: !ruby/object:Gem::Requirement
@@ -313,14 +313,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
313
313
  requirements:
314
314
  - - ">="
315
315
  - !ruby/object:Gem::Version
316
- version: '2.5'
316
+ version: '2.6'
317
317
  required_rubygems_version: !ruby/object:Gem::Requirement
318
318
  requirements:
319
319
  - - ">="
320
320
  - !ruby/object:Gem::Version
321
321
  version: '0'
322
322
  requirements: []
323
- rubygems_version: 3.3.5
323
+ rubygems_version: 3.3.14
324
324
  signing_key:
325
325
  specification_version: 4
326
326
  summary: API Client library for Google BigQuery