google-cloud-bigquery 1.40.0 → 1.41.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: a0cd69b913db71840e3b893b15edfefe3c18bb204c8a8e542a82afcee37c0eeb
4
- data.tar.gz: cfd00e65e67aac9e07e1eada563f221c462004319c7fa2a6d38915434ef21f19
3
+ metadata.gz: 8f13891ae7f46f3a0561140fabe4eed4cc426923258e17ed4cc10cc8155f9129
4
+ data.tar.gz: 65eb5cfc6fb0feadae0d4503bcf2bd1942a0a9740a6f4f1b6f6aaddf7ee244c0
5
5
  SHA512:
6
- metadata.gz: b9027b585d39714f8977ccdc397d04f8caf4f036f6be86ff091f0b1268379ef0c7410247d4186b6a164ceece002ade98bdea6efb3473747e14b1b11bf90649a5
7
- data.tar.gz: 40d261fc0e31e07b05aa619099588a3341f74cd3ec0cf7a3e0ba46efc629a94069076e190987484b3450212c310f6230abd5e8186679bfbe16dedc50509efc03
6
+ metadata.gz: cecf4d1450deb04f33772ebc0bf18892816dda84e9e2b43668615dc37c49b3319465c3d0f3cb9c07ca9cc5a5e7a7118daab1f1aa51c25bf83ebadc925bd52eef
7
+ data.tar.gz: c678e3b5420f82894c1d4935f4f89959fda4ea6e66faffa7fb649c0ff3c0e2fec91daf3e77208e02eb4747cf1a3d41ef5764a4b4da8b76b2a03328861121c7c2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Release History
2
2
 
3
+ ### 1.41.0 (2023-01-05)
4
+
5
+ #### Features
6
+
7
+ * Add support for partial projection of table metadata
8
+ #### Bug Fixes
9
+
10
+ * Fix querying of array of structs in named parameters ([#19466](https://github.com/googleapis/google-cloud-ruby/issues/19466))
11
+
3
12
  ### 1.40.0 (2022-12-14)
4
13
 
5
14
  #### 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
  ##
@@ -793,6 +793,11 @@ module Google
793
793
  # object without verifying that the resource exists on the BigQuery
794
794
  # service. Calls made on this object will raise errors if the resource
795
795
  # does not exist. Default is `false`. Optional.
796
+ # @param [String] view Specifies the view that determines which table information is returned.
797
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
798
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
799
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
800
+ # The default value is the `:unspecified` view type.
796
801
  #
797
802
  # @return [Google::Cloud::Bigquery::Table, nil] Returns `nil` if the
798
803
  # table does not exist.
@@ -815,13 +820,22 @@ module Google
815
820
  #
816
821
  # table = dataset.table "my_table", skip_lookup: true
817
822
  #
823
+ # @example Avoid retrieving transient stats of the table with `view`:
824
+ # require "google/cloud/bigquery"
825
+ #
826
+ # bigquery = Google::Cloud::Bigquery.new
827
+ #
828
+ # dataset = bigquery.dataset "my_dataset"
829
+ #
830
+ # table = dataset.table "my_table", view: "basic"
831
+ #
818
832
  # @!group Table
819
833
  #
820
- def table table_id, skip_lookup: nil
834
+ def table table_id, skip_lookup: nil, view: nil
821
835
  ensure_service!
822
836
  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
837
+ gapi = service.get_table dataset_id, table_id, metadata_view: view
838
+ Table.from_gapi gapi, service, metadata_view: view
825
839
  rescue Google::Cloud::NotFoundError
826
840
  nil
827
841
  end
@@ -2658,6 +2672,11 @@ module Google
2658
2672
  # messages before the batch is published. Default is 10.
2659
2673
  # @attr_reader [Numeric] threads The number of threads used to insert
2660
2674
  # batches of rows. Default is 4.
2675
+ # @param [String] view Specifies the view that determines which table information is returned.
2676
+ # By default, basic table information and storage statistics (STORAGE_STATS) are returned.
2677
+ # Accepted values include `:unspecified`, `:basic`, `:storage`, and
2678
+ # `:full`. For more information, see [BigQuery Classes](@todo: Update the link).
2679
+ # The default value is the `:unspecified` view type.
2661
2680
  # @yield [response] the callback for when a batch of rows is inserted
2662
2681
  # @yieldparam [Table::AsyncInserter::Result] result the result of the
2663
2682
  # asynchronous insert
@@ -2686,13 +2705,35 @@ module Google
2686
2705
  #
2687
2706
  # inserter.stop.wait!
2688
2707
  #
2708
+ # @example Avoid retrieving transient stats of the table with while inserting :
2709
+ # require "google/cloud/bigquery"
2710
+ #
2711
+ # bigquery = Google::Cloud::Bigquery.new
2712
+ # dataset = bigquery.dataset "my_dataset"
2713
+ # inserter = dataset.insert_async("my_table", view: "basic") do |result|
2714
+ # if result.error?
2715
+ # log_error result.error
2716
+ # else
2717
+ # log_insert "inserted #{result.insert_count} rows " \
2718
+ # "with #{result.error_count} errors"
2719
+ # end
2720
+ # end
2721
+ #
2722
+ # rows = [
2723
+ # { "first_name" => "Alice", "age" => 21 },
2724
+ # { "first_name" => "Bob", "age" => 22 }
2725
+ # ]
2726
+ # inserter.insert rows
2727
+ #
2728
+ # inserter.stop.wait!
2729
+ #
2689
2730
  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
2731
+ interval: 10, threads: 4, view: nil, &block
2691
2732
  ensure_service!
2692
2733
 
2693
2734
  # 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
2735
+ gapi = service.get_table dataset_id, table_id, metadata_view: view
2736
+ table = Table.from_gapi gapi, service, metadata_view: view
2696
2737
  # Get the AsyncInserter from the table
2697
2738
  table.insert_async skip_invalid: skip_invalid,
2698
2739
  ignore_unknown: ignore_unknown,
@@ -2944,8 +2985,6 @@ module Google
2944
2985
  @access
2945
2986
  end
2946
2987
 
2947
- # rubocop:disable Style/MethodDefParentheses
2948
-
2949
2988
  ##
2950
2989
  # @raise [RuntimeError] not implemented
2951
2990
  def delete(*)
@@ -3049,8 +3088,6 @@ module Google
3049
3088
  end
3050
3089
  alias refresh! reload!
3051
3090
 
3052
- # rubocop:enable Style/MethodDefParentheses
3053
-
3054
3091
  ##
3055
3092
  # @private Make sure any access changes are saved
3056
3093
  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
  ##
@@ -572,6 +573,14 @@ module Google
572
573
  raise Google::Cloud::Error.from_error e
573
574
  end
574
575
 
576
+ def table_metadata_view_type_for str
577
+ return nil if str.nil?
578
+ { "unspecified" => "TABLE_METADATA_VIEW_UNSPECIFIED",
579
+ "basic" => "BASIC",
580
+ "storage" => "STORAGE_STATS",
581
+ "full" => "FULL" }[str.to_s.downcase]
582
+ end
583
+
575
584
  class Backoff
576
585
  class << self
577
586
  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.41.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.41.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-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby