google-cloud-bigquery 1.40.0 → 1.42.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0cd69b913db71840e3b893b15edfefe3c18bb204c8a8e542a82afcee37c0eeb
4
- data.tar.gz: cfd00e65e67aac9e07e1eada563f221c462004319c7fa2a6d38915434ef21f19
3
+ metadata.gz: 779c0f4690b370db6eb7811fa6fb8dbca101dff34ff478dcdc51ed1e9c83c083
4
+ data.tar.gz: d1456024ae30a18c93c05d6d8be7eef88dd3f0610cdbf816cf0c46322c9574be
5
5
  SHA512:
6
- metadata.gz: b9027b585d39714f8977ccdc397d04f8caf4f036f6be86ff091f0b1268379ef0c7410247d4186b6a164ceece002ade98bdea6efb3473747e14b1b11bf90649a5
7
- data.tar.gz: 40d261fc0e31e07b05aa619099588a3341f74cd3ec0cf7a3e0ba46efc629a94069076e190987484b3450212c310f6230abd5e8186679bfbe16dedc50509efc03
6
+ metadata.gz: 6a5da0e2565b0c224f46a6330d138c8fb35831e874ebc2364fd3b91578d400354011d1e9df7d2986dbe2398f610776b130b7eb9305af8282bf3a6265dd84aa05
7
+ data.tar.gz: 0d14faa0d89ba6a114e247c362f8a5d4775ae4dc19de1aad0a64083da7e41fc93ac810e876b434056340b27412bb08063af05edf33355800ca1c528ff02f437b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Release History
2
2
 
3
+ ### 1.42.0 (2023-01-15)
4
+
5
+ #### Features
6
+
7
+ * Added support for authorized dataset ([#19442](https://github.com/googleapis/google-cloud-ruby/issues/19442))
8
+ * Added support for tags in dataset ([#19350](https://github.com/googleapis/google-cloud-ruby/issues/19350))
9
+
10
+ ### 1.41.0 (2023-01-05)
11
+
12
+ #### Features
13
+
14
+ * Add support for partial projection of table metadata
15
+ #### Bug Fixes
16
+
17
+ * Fix querying of array of structs in named parameters ([#19466](https://github.com/googleapis/google-cloud-ruby/issues/19466))
18
+
3
19
  ### 1.40.0 (2022-12-14)
4
20
 
5
21
  #### Features
@@ -254,11 +254,11 @@ module Google
254
254
 
255
255
  ##
256
256
  # Lists are specified by providing the type code in an array. For example, an array of integers are specified as
257
- # `[:INT64]`. Extracts the symbol.
257
+ # `[:INT64]`. Extracts the symbol/hash.
258
258
  def self.extract_array_type type
259
259
  return nil if type.nil?
260
- unless type.is_a?(Array) && type.count == 1 && type.first.is_a?(Symbol)
261
- raise ArgumentError, "types Array #{type.inspect} should include only a single symbol element."
260
+ unless type.is_a?(Array) && type.count == 1 && (type.first.is_a?(Symbol) || type.first.is_a?(Hash))
261
+ raise ArgumentError, "types Array #{type.inspect} should include only a single symbol or hash element."
262
262
  end
263
263
  type.first
264
264
  end
@@ -64,23 +64,35 @@ module Google
64
64
  # The table from which data is copied. This is the table on
65
65
  # which {Table#copy_job} was called.
66
66
  #
67
+ # @param [String] view Specifies the view that determines which table information is returned.
68
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
69
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
70
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
71
+ # The default value is the `:unspecified` view type.
72
+ #
67
73
  # @return [Table] A table instance.
68
74
  #
69
- def source
75
+ def source view: nil
70
76
  table = @gapi.configuration.copy.source_table
71
77
  return nil unless table
72
- retrieve_table table.project_id, table.dataset_id, table.table_id
78
+ retrieve_table table.project_id, table.dataset_id, table.table_id, metadata_view: view
73
79
  end
74
80
 
75
81
  ##
76
82
  # The table to which data is copied.
77
83
  #
84
+ # @param [String] view Specifies the view that determines which table information is returned.
85
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
86
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
87
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
88
+ # The default value is the `:unspecified` view type.
89
+ #
78
90
  # @return [Table] A table instance.
79
91
  #
80
- def destination
92
+ def destination view: nil
81
93
  table = @gapi.configuration.copy.destination_table
82
94
  return nil unless table
83
- retrieve_table table.project_id, table.dataset_id, table.table_id
95
+ retrieve_table table.project_id, table.dataset_id, table.table_id, metadata_view: view
84
96
  end
85
97
 
86
98
  ##
@@ -61,8 +61,10 @@ module Google
61
61
  "user" => :user_by_email,
62
62
  "user_by_email" => :user_by_email,
63
63
  "userByEmail" => :user_by_email,
64
- "view" => :view
64
+ "view" => :view,
65
+ "dataset" => :dataset
65
66
  }.freeze
67
+ attr_reader :rules
66
68
 
67
69
  # @private
68
70
  GROUPS = {
@@ -267,6 +269,44 @@ module Google
267
269
  add_access_view view
268
270
  end
269
271
 
272
+ ##
273
+ # Add reader access to a dataset.
274
+ #
275
+ # @param [Google::Cloud::Bigquery::DatasetAccessEntry, Hash<String,String> ] dataset A DatasetAccessEntry
276
+ # or a Hash object. Required
277
+ #
278
+ # @example
279
+ # require "google/cloud/bigquery"
280
+ #
281
+ # bigquery = Google::Cloud::Bigquery.new
282
+ # dataset = bigquery.dataset "my_dataset"
283
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
284
+ #
285
+ # params = {
286
+ # dataset_id: other_dataset.dataset_id,
287
+ # project_id: other_dataset.project_id,
288
+ # target_types: ["VIEWS"]
289
+ # }
290
+ #
291
+ # dataset.access do |access|
292
+ # access.add_reader_dataset params
293
+ # end
294
+ #
295
+ # @example
296
+ # require "google/cloud/bigquery"
297
+ #
298
+ # bigquery = Google::Cloud::Bigquery.new
299
+ # dataset = bigquery.dataset "my_dataset"
300
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
301
+ #
302
+ # dataset.access do |access|
303
+ # access.add_reader_dataset other_dataset.access_entry(target_types: ["VIEWS"])
304
+ # end
305
+ #
306
+ def add_reader_dataset dataset
307
+ add_access_dataset dataset
308
+ end
309
+
270
310
  ##
271
311
  # Add writer access to a user.
272
312
  #
@@ -610,6 +650,44 @@ module Google
610
650
  remove_access_view view
611
651
  end
612
652
 
653
+ ##
654
+ # Removes reader access of a dataset.
655
+ #
656
+ # @param [Google::Cloud::Bigquery::DatasetAccessEntry, Hash<String,String> ] dataset A DatasetAccessEntry
657
+ # or a Hash object. Required
658
+ #
659
+ # @example
660
+ # require "google/cloud/bigquery"
661
+ #
662
+ # bigquery = Google::Cloud::Bigquery.new
663
+ # dataset = bigquery.dataset "my_dataset"
664
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
665
+ #
666
+ # params = {
667
+ # dataset_id: other_dataset.dataset_id,
668
+ # project_id: other_dataset.project_id,
669
+ # target_types: ["VIEWS"]
670
+ # }
671
+ #
672
+ # dataset.access do |access|
673
+ # access.remove_reader_dataset params
674
+ # end
675
+ #
676
+ # @example
677
+ # require "google/cloud/bigquery"
678
+ #
679
+ # bigquery = Google::Cloud::Bigquery.new
680
+ # dataset = bigquery.dataset "my_dataset"
681
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
682
+ #
683
+ # dataset.access do |access|
684
+ # access.remove_reader_dataset other_dataset.access_entry(target_types: ["VIEWS"])
685
+ # end
686
+ #
687
+ def remove_reader_dataset dataset
688
+ remove_access_dataset dataset
689
+ end
690
+
613
691
  ##
614
692
  # Remove writer access from a user.
615
693
  #
@@ -951,6 +1029,40 @@ module Google
951
1029
  lookup_access_view view
952
1030
  end
953
1031
 
1032
+ ##
1033
+ # Checks reader access for a dataset.
1034
+ #
1035
+ # @param [Google::Cloud::Bigquery::DatasetAccessEntry, Hash<String,String> ] dataset A DatasetAccessEntry
1036
+ # or a Hash object. Required
1037
+ #
1038
+ # @example
1039
+ # require "google/cloud/bigquery"
1040
+ #
1041
+ # bigquery = Google::Cloud::Bigquery.new
1042
+ # dataset = bigquery.dataset "my_dataset"
1043
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
1044
+ #
1045
+ # params = {
1046
+ # dataset_id: other_dataset.dataset_id,
1047
+ # project_id: other_dataset.project_id,
1048
+ # target_types: ["VIEWS"]
1049
+ # }
1050
+ #
1051
+ # dataset.access.reader_dataset? params
1052
+ #
1053
+ # @example
1054
+ # require "google/cloud/bigquery"
1055
+ #
1056
+ # bigquery = Google::Cloud::Bigquery.new
1057
+ # dataset = bigquery.dataset "my_dataset"
1058
+ # other_dataset = bigquery.dataset "my_other_dataset", skip_lookup: true
1059
+ #
1060
+ # dataset.access.reader_dataset? other_dataset.access_entry(target_types: ["VIEWS"])
1061
+ #
1062
+ def reader_dataset? dataset
1063
+ lookup_access_dataset dataset
1064
+ end
1065
+
954
1066
  ##
955
1067
  # Checks writer access for a user.
956
1068
  #
@@ -1184,6 +1296,18 @@ module Google
1184
1296
  end
1185
1297
  end
1186
1298
 
1299
+ # @private
1300
+ #
1301
+ # Checks the type of user input and converts it to acceptable format.
1302
+ #
1303
+ def validate_dataset dataset
1304
+ if dataset.is_a? Google::Apis::BigqueryV2::DatasetAccessEntry
1305
+ dataset
1306
+ else
1307
+ Service.dataset_access_entry_from_hash dataset
1308
+ end
1309
+ end
1310
+
1187
1311
  # @private
1188
1312
  def add_access_role_scope_value role, scope, value
1189
1313
  role = validate_role role
@@ -1218,6 +1342,17 @@ module Google
1218
1342
  @rules << Google::Apis::BigqueryV2::Dataset::Access.new(**opts)
1219
1343
  end
1220
1344
 
1345
+ # @private
1346
+ def add_access_dataset dataset
1347
+ # scope is dataset, make sure value is in the right format
1348
+ value = validate_dataset dataset
1349
+ # Remove existing rule for input dataset, if any
1350
+ @rules.reject!(&find_by_scope_and_resource_ref(:dataset, value))
1351
+ # Add new rule for this role, scope, and value
1352
+ opts = { dataset: value }
1353
+ @rules << Google::Apis::BigqueryV2::Dataset::Access.new(**opts)
1354
+ end
1355
+
1221
1356
  # @private
1222
1357
  def remove_access_role_scope_value role, scope, value
1223
1358
  role = validate_role role
@@ -1244,6 +1379,14 @@ module Google
1244
1379
  @rules.reject!(&find_by_scope_and_resource_ref(:view, value))
1245
1380
  end
1246
1381
 
1382
+ # @private
1383
+ def remove_access_dataset dataset
1384
+ # scope is dataset, make sure value is in the right format
1385
+ value = validate_dataset dataset
1386
+ # Remove existing rule for input dataset, if any
1387
+ @rules.reject!(&find_by_scope_and_resource_ref(:dataset, value))
1388
+ end
1389
+
1247
1390
  # @private
1248
1391
  def lookup_access_role_scope_value role, scope, value
1249
1392
  role = validate_role role
@@ -1268,6 +1411,14 @@ module Google
1268
1411
  !(!@rules.detect(&find_by_scope_and_resource_ref(:view, value)))
1269
1412
  end
1270
1413
 
1414
+ # @private
1415
+ def lookup_access_dataset dataset
1416
+ # scope is dataset, make sure value is in the right format
1417
+ value = validate_dataset dataset
1418
+ # Detect existing rule for input dataset, if any
1419
+ !(!@rules.detect(&find_by_scope_and_resource_ref(:dataset, value)))
1420
+ end
1421
+
1271
1422
  # @private
1272
1423
  def find_by_role_and_scope_and_value role, scope, value
1273
1424
  lambda do |a|
@@ -0,0 +1,67 @@
1
+ # Copyright 2022 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require "google/apis/bigquery_v2"
16
+
17
+ module Google
18
+ module Cloud
19
+ module Bigquery
20
+ class Dataset
21
+ ##
22
+ # A global tag managed by Resource Manager.
23
+ #
24
+ # @see https://cloud.google.com/iam/docs/tags-access-control#definitions
25
+ #
26
+ class Tag
27
+ ##
28
+ # @private The Google API Client object.
29
+ attr_accessor :gapi
30
+
31
+ ##
32
+ # @private Create an empty Tag object.
33
+ def initialize
34
+ @gapi = Google::Apis::BigqueryV2::Dataset::Tag.new
35
+ end
36
+
37
+ ##
38
+ # The namespaced friendly name of the tag key, e.g. "12345/environment" where
39
+ # 12345 is org id.
40
+ #
41
+ # @return [String]
42
+ #
43
+ def tag_key
44
+ @gapi.tag_key
45
+ end
46
+
47
+ ##
48
+ # The friendly short name of the tag value, e.g. "production".
49
+ #
50
+ # @return [String]
51
+ #
52
+ def tag_value
53
+ @gapi.tag_value
54
+ end
55
+
56
+ ##
57
+ # @private Google API Client object.
58
+ def self.from_gapi gapi
59
+ new_tag = new
60
+ new_tag.instance_variable_set :@gapi, gapi
61
+ new_tag
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -22,6 +22,7 @@ require "google/cloud/bigquery/routine"
22
22
  require "google/cloud/bigquery/external"
23
23
  require "google/cloud/bigquery/dataset/list"
24
24
  require "google/cloud/bigquery/dataset/access"
25
+ require "google/cloud/bigquery/dataset/tag"
25
26
  require "google/cloud/bigquery/convert"
26
27
  require "google/apis/bigquery_v2"
27
28
 
@@ -466,6 +467,21 @@ module Google
466
467
  access_builder.freeze
467
468
  end
468
469
 
470
+ ##
471
+ # Retrieves the tags associated with this dataset. Tag keys are
472
+ # globally unique, and managed via the resource manager API.
473
+ #
474
+ # @see https://cloud.google.com/resource-manager/docs/tags/tags-overview
475
+ # for more information.
476
+ #
477
+ # @return [Google::Cloud::Bigquery::Dataset::Tag] The list of tags.
478
+ #
479
+ def tags
480
+ ensure_full_data!
481
+ return nil if @gapi.tags.nil?
482
+ @gapi.tags.map { |gapi| Tag.from_gapi(gapi) }
483
+ end
484
+
469
485
  ##
470
486
  # Permanently deletes the dataset. The dataset must be empty before it
471
487
  # can be deleted unless the `force` option is set to `true`.
@@ -793,6 +809,11 @@ module Google
793
809
  # object without verifying that the resource exists on the BigQuery
794
810
  # service. Calls made on this object will raise errors if the resource
795
811
  # does not exist. Default is `false`. Optional.
812
+ # @param [String] view Specifies the view that determines which table information is returned.
813
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
814
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
815
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
816
+ # The default value is the `:unspecified` view type.
796
817
  #
797
818
  # @return [Google::Cloud::Bigquery::Table, nil] Returns `nil` if the
798
819
  # table does not exist.
@@ -815,13 +836,22 @@ module Google
815
836
  #
816
837
  # table = dataset.table "my_table", skip_lookup: true
817
838
  #
839
+ # @example Avoid retrieving transient stats of the table with `view`:
840
+ # require "google/cloud/bigquery"
841
+ #
842
+ # bigquery = Google::Cloud::Bigquery.new
843
+ #
844
+ # dataset = bigquery.dataset "my_dataset"
845
+ #
846
+ # table = dataset.table "my_table", view: "basic"
847
+ #
818
848
  # @!group Table
819
849
  #
820
- def table table_id, skip_lookup: nil
850
+ def table table_id, skip_lookup: nil, view: nil
821
851
  ensure_service!
822
852
  return Table.new_reference project_id, dataset_id, table_id, service if skip_lookup
823
- gapi = service.get_table dataset_id, table_id
824
- Table.from_gapi gapi, service
853
+ gapi = service.get_table dataset_id, table_id, metadata_view: view
854
+ Table.from_gapi gapi, service, metadata_view: view
825
855
  rescue Google::Cloud::NotFoundError
826
856
  nil
827
857
  end
@@ -2658,6 +2688,11 @@ module Google
2658
2688
  # messages before the batch is published. Default is 10.
2659
2689
  # @attr_reader [Numeric] threads The number of threads used to insert
2660
2690
  # batches of rows. Default is 4.
2691
+ # @param [String] view Specifies the view that determines which table information is returned.
2692
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
2693
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
2694
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
2695
+ # The default value is the `:unspecified` view type.
2661
2696
  # @yield [response] the callback for when a batch of rows is inserted
2662
2697
  # @yieldparam [Table::AsyncInserter::Result] result the result of the
2663
2698
  # asynchronous insert
@@ -2686,13 +2721,35 @@ module Google
2686
2721
  #
2687
2722
  # inserter.stop.wait!
2688
2723
  #
2724
+ # @example Avoid retrieving transient stats of the table with while inserting :
2725
+ # require "google/cloud/bigquery"
2726
+ #
2727
+ # bigquery = Google::Cloud::Bigquery.new
2728
+ # dataset = bigquery.dataset "my_dataset"
2729
+ # inserter = dataset.insert_async("my_table", view: "basic") do |result|
2730
+ # if result.error?
2731
+ # log_error result.error
2732
+ # else
2733
+ # log_insert "inserted #{result.insert_count} rows " \
2734
+ # "with #{result.error_count} errors"
2735
+ # end
2736
+ # end
2737
+ #
2738
+ # rows = [
2739
+ # { "first_name" => "Alice", "age" => 21 },
2740
+ # { "first_name" => "Bob", "age" => 22 }
2741
+ # ]
2742
+ # inserter.insert rows
2743
+ #
2744
+ # inserter.stop.wait!
2745
+ #
2689
2746
  def insert_async table_id, skip_invalid: nil, ignore_unknown: nil, max_bytes: 10_000_000, max_rows: 500,
2690
- interval: 10, threads: 4, &block
2747
+ interval: 10, threads: 4, view: nil, &block
2691
2748
  ensure_service!
2692
2749
 
2693
2750
  # Get table, don't use Dataset#table which handles NotFoundError
2694
- gapi = service.get_table dataset_id, table_id
2695
- table = Table.from_gapi gapi, service
2751
+ gapi = service.get_table dataset_id, table_id, metadata_view: view
2752
+ table = Table.from_gapi gapi, service, metadata_view: view
2696
2753
  # Get the AsyncInserter from the table
2697
2754
  table.insert_async skip_invalid: skip_invalid,
2698
2755
  ignore_unknown: ignore_unknown,
@@ -2700,6 +2757,29 @@ module Google
2700
2757
  interval: interval, threads: threads, &block
2701
2758
  end
2702
2759
 
2760
+ ##
2761
+ # Build an object of type Google::Apis::BigqueryV2::DatasetAccessEntry from
2762
+ # the self.
2763
+ #
2764
+ # @param [Array<String>] target_types The list of target types within the dataset.
2765
+ #
2766
+ # @return [Google::Apis::BigqueryV2::DatasetAccessEntry] Returns a DatasetAccessEntry object.
2767
+ #
2768
+ # @example
2769
+ # require "google/cloud/bigquery"
2770
+ #
2771
+ # bigquery = Google::Cloud::Bigquery.new
2772
+ # dataset = bigquery.dataset "my_dataset"
2773
+ # dataset_access_entry = dataset.access_entry target_types: ["VIEWS"]
2774
+ #
2775
+ def build_access_entry target_types: nil
2776
+ params = {
2777
+ dataset: dataset_ref,
2778
+ target_types: target_types
2779
+ }.delete_if { |_, v| v.nil? }
2780
+ Google::Apis::BigqueryV2::DatasetAccessEntry.new(**params)
2781
+ end
2782
+
2703
2783
  protected
2704
2784
 
2705
2785
  def insert_data_with_autocreate table_id, rows, skip_invalid: nil, ignore_unknown: nil, insert_ids: nil
@@ -2944,8 +3024,6 @@ module Google
2944
3024
  @access
2945
3025
  end
2946
3026
 
2947
- # rubocop:disable Style/MethodDefParentheses
2948
-
2949
3027
  ##
2950
3028
  # @raise [RuntimeError] not implemented
2951
3029
  def delete(*)
@@ -3049,8 +3127,6 @@ module Google
3049
3127
  end
3050
3128
  alias refresh! reload!
3051
3129
 
3052
- # rubocop:enable Style/MethodDefParentheses
3053
-
3054
3130
  ##
3055
3131
  # @private Make sure any access changes are saved
3056
3132
  def check_for_mutated_access!
@@ -65,11 +65,17 @@ module Google
65
65
  ##
66
66
  # The table or model which is exported.
67
67
  #
68
+ # @param [String] view Specifies the view that determines which table information is returned.
69
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
70
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
71
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
72
+ # The default value is the `:unspecified` view type.
73
+ #
68
74
  # @return [Table, Model, nil] A table or model instance, or `nil`.
69
75
  #
70
- def source
76
+ def source view: nil
71
77
  if (table = @gapi.configuration.extract.source_table)
72
- retrieve_table table.project_id, table.dataset_id, table.table_id
78
+ retrieve_table table.project_id, table.dataset_id, table.table_id, metadata_view: view
73
79
  elsif (model = @gapi.configuration.extract.source_model)
74
80
  retrieve_model model.project_id, model.dataset_id, model.model_id
75
81
  end
@@ -710,9 +710,9 @@ module Google
710
710
  raise "Must have active connection" unless service
711
711
  end
712
712
 
713
- def retrieve_table project_id, dataset_id, table_id
713
+ def retrieve_table project_id, dataset_id, table_id, metadata_view: nil
714
714
  ensure_service!
715
- gapi = service.get_project_table project_id, dataset_id, table_id
715
+ gapi = service.get_project_table project_id, dataset_id, table_id, metadata_view: metadata_view
716
716
  Table.from_gapi gapi, service
717
717
  rescue Google::Cloud::NotFoundError
718
718
  nil
@@ -62,12 +62,18 @@ module Google
62
62
  # The table into which the operation loads data. This is the table on
63
63
  # which {Table#load_job} was invoked.
64
64
  #
65
+ # @param [String] view Specifies the view that determines which table information is returned.
66
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
67
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
68
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
69
+ # The default value is the `:unspecified` view type.
70
+ #
65
71
  # @return [Table] A table instance.
66
72
  #
67
- def destination
73
+ def destination view: nil
68
74
  table = @gapi.configuration.load.destination_table
69
75
  return nil unless table
70
- retrieve_table table.project_id, table.dataset_id, table.table_id
76
+ retrieve_table table.project_id, table.dataset_id, table.table_id, metadata_view: view
71
77
  end
72
78
 
73
79
  ##
@@ -437,14 +437,21 @@ module Google
437
437
  ##
438
438
  # The table in which the query results are stored.
439
439
  #
440
+ # @param [String] view Specifies the view that determines which table information is returned.
441
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
442
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
443
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
444
+ # The default value is the `:unspecified` view type.
445
+ #
440
446
  # @return [Table] A table instance.
441
447
  #
442
- def destination
448
+ def destination view: nil
443
449
  table = @gapi.configuration.query.destination_table
444
450
  return nil unless table
445
451
  retrieve_table table.project_id,
446
452
  table.dataset_id,
447
- table.table_id
453
+ table.table_id,
454
+ metadata_view: view
448
455
  end
449
456
 
450
457
  ##
@@ -144,10 +144,11 @@ module Google
144
144
 
145
145
  ##
146
146
  # Gets the specified table resource by full table reference.
147
- def get_project_table project_id, dataset_id, table_id
147
+ def get_project_table project_id, dataset_id, table_id, metadata_view: nil
148
+ metadata_view = table_metadata_view_type_for metadata_view
148
149
  # The get operation is considered idempotent
149
150
  execute backoff: true do
150
- service.get_table project_id, dataset_id, table_id
151
+ service.get_table project_id, dataset_id, table_id, view: metadata_view
151
152
  end
152
153
  end
153
154
 
@@ -156,8 +157,8 @@ module Google
156
157
  # This method does not return the data in the table,
157
158
  # it only returns the table resource,
158
159
  # which describes the structure of this table.
159
- def get_table dataset_id, table_id
160
- get_project_table @project, dataset_id, table_id
160
+ def get_table dataset_id, table_id, metadata_view: nil
161
+ get_project_table @project, dataset_id, table_id, metadata_view: metadata_view
161
162
  end
162
163
 
163
164
  ##
@@ -496,6 +497,19 @@ module Google
496
497
  ref
497
498
  end
498
499
 
500
+ ##
501
+ # Converts a hash to a Google::Apis::BigqueryV2::DatasetAccessEntry oject.
502
+ #
503
+ # @param [Hash<String,String>] dataset_hash Hash for a DatasetAccessEntry.
504
+ #
505
+ def self.dataset_access_entry_from_hash dataset_hash
506
+ params = {
507
+ dataset: Google::Apis::BigqueryV2::DatasetReference.new(**dataset_hash),
508
+ target_types: dataset_hash[:target_types]
509
+ }.delete_if { |_, v| v.nil? }
510
+ Google::Apis::BigqueryV2::DatasetAccessEntry.new(**params)
511
+ end
512
+
499
513
  def self.validate_table_ref table_ref
500
514
  [:project_id, :dataset_id, :table_id].each do |f|
501
515
  raise ArgumentError, "TableReference is missing #{f}" if table_ref.send(f).nil?
@@ -572,6 +586,14 @@ module Google
572
586
  raise Google::Cloud::Error.from_error e
573
587
  end
574
588
 
589
+ def table_metadata_view_type_for str
590
+ return nil if str.nil?
591
+ { "unspecified" => "TABLE_METADATA_VIEW_UNSPECIFIED",
592
+ "basic" => "BASIC",
593
+ "storage" => "STORAGE_STATS",
594
+ "full" => "FULL" }[str.to_s.downcase]
595
+ end
596
+
575
597
  class Backoff
576
598
  class << self
577
599
  attr_accessor :retries
@@ -108,6 +108,10 @@ module Google
108
108
  # @private A Google API Client Table Reference object.
109
109
  attr_reader :reference
110
110
 
111
+ ##
112
+ # @private The metadata view type string.
113
+ attr_accessor :metadata_view
114
+
111
115
  ##
112
116
  # @private Create an empty Table object.
113
117
  def initialize
@@ -2836,7 +2840,7 @@ module Google
2836
2840
  #
2837
2841
  def reload!
2838
2842
  ensure_service!
2839
- @gapi = service.get_table dataset_id, table_id
2843
+ @gapi = service.get_table dataset_id, table_id, metadata_view: metadata_view
2840
2844
  @reference = nil
2841
2845
  @exists = nil
2842
2846
  self
@@ -2970,10 +2974,11 @@ module Google
2970
2974
 
2971
2975
  ##
2972
2976
  # @private New Table from a Google API Client object.
2973
- def self.from_gapi gapi, service
2977
+ def self.from_gapi gapi, service, metadata_view: nil
2974
2978
  new.tap do |f|
2975
2979
  f.gapi = gapi
2976
2980
  f.service = service
2981
+ f.metadata_view = metadata_view
2977
2982
  end
2978
2983
  end
2979
2984
 
@@ -3982,8 +3987,6 @@ module Google
3982
3987
  schema.record name, description: description, mode: mode, &block
3983
3988
  end
3984
3989
 
3985
- # rubocop:disable Style/MethodDefParentheses
3986
-
3987
3990
  ##
3988
3991
  # @raise [RuntimeError] not implemented
3989
3992
  def data(*)
@@ -4069,8 +4072,6 @@ module Google
4069
4072
  end
4070
4073
  alias refresh! reload!
4071
4074
 
4072
- # rubocop:enable Style/MethodDefParentheses
4073
-
4074
4075
  ##
4075
4076
  # @private Make sure any access changes are saved
4076
4077
  def check_for_mutated_schema!
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Bigquery
19
- VERSION = "1.40.0".freeze
19
+ VERSION = "1.42.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.40.0
4
+ version: 1.42.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-12-14 00:00:00.000000000 Z
12
+ date: 2023-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -268,6 +268,7 @@ files:
268
268
  - lib/google/cloud/bigquery/dataset.rb
269
269
  - lib/google/cloud/bigquery/dataset/access.rb
270
270
  - lib/google/cloud/bigquery/dataset/list.rb
271
+ - lib/google/cloud/bigquery/dataset/tag.rb
271
272
  - lib/google/cloud/bigquery/encryption_configuration.rb
272
273
  - lib/google/cloud/bigquery/external.rb
273
274
  - lib/google/cloud/bigquery/external/avro_source.rb
@@ -320,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
321
  - !ruby/object:Gem::Version
321
322
  version: '0'
322
323
  requirements: []
323
- rubygems_version: 3.3.14
324
+ rubygems_version: 3.4.2
324
325
  signing_key:
325
326
  specification_version: 4
326
327
  summary: API Client library for Google BigQuery