google-cloud-bigquery 1.21.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +16 -0
  3. data/AUTHENTICATION.md +158 -0
  4. data/CHANGELOG.md +397 -0
  5. data/CODE_OF_CONDUCT.md +40 -0
  6. data/CONTRIBUTING.md +188 -0
  7. data/LICENSE +201 -0
  8. data/LOGGING.md +27 -0
  9. data/OVERVIEW.md +463 -0
  10. data/TROUBLESHOOTING.md +31 -0
  11. data/lib/google-cloud-bigquery.rb +139 -0
  12. data/lib/google/cloud/bigquery.rb +145 -0
  13. data/lib/google/cloud/bigquery/argument.rb +197 -0
  14. data/lib/google/cloud/bigquery/convert.rb +383 -0
  15. data/lib/google/cloud/bigquery/copy_job.rb +316 -0
  16. data/lib/google/cloud/bigquery/credentials.rb +50 -0
  17. data/lib/google/cloud/bigquery/data.rb +526 -0
  18. data/lib/google/cloud/bigquery/dataset.rb +2845 -0
  19. data/lib/google/cloud/bigquery/dataset/access.rb +1021 -0
  20. data/lib/google/cloud/bigquery/dataset/list.rb +162 -0
  21. data/lib/google/cloud/bigquery/encryption_configuration.rb +123 -0
  22. data/lib/google/cloud/bigquery/external.rb +2432 -0
  23. data/lib/google/cloud/bigquery/extract_job.rb +368 -0
  24. data/lib/google/cloud/bigquery/insert_response.rb +180 -0
  25. data/lib/google/cloud/bigquery/job.rb +657 -0
  26. data/lib/google/cloud/bigquery/job/list.rb +162 -0
  27. data/lib/google/cloud/bigquery/load_job.rb +1704 -0
  28. data/lib/google/cloud/bigquery/model.rb +740 -0
  29. data/lib/google/cloud/bigquery/model/list.rb +164 -0
  30. data/lib/google/cloud/bigquery/project.rb +1655 -0
  31. data/lib/google/cloud/bigquery/project/list.rb +161 -0
  32. data/lib/google/cloud/bigquery/query_job.rb +1695 -0
  33. data/lib/google/cloud/bigquery/routine.rb +1108 -0
  34. data/lib/google/cloud/bigquery/routine/list.rb +165 -0
  35. data/lib/google/cloud/bigquery/schema.rb +564 -0
  36. data/lib/google/cloud/bigquery/schema/field.rb +668 -0
  37. data/lib/google/cloud/bigquery/service.rb +589 -0
  38. data/lib/google/cloud/bigquery/standard_sql.rb +495 -0
  39. data/lib/google/cloud/bigquery/table.rb +3340 -0
  40. data/lib/google/cloud/bigquery/table/async_inserter.rb +520 -0
  41. data/lib/google/cloud/bigquery/table/list.rb +172 -0
  42. data/lib/google/cloud/bigquery/time.rb +65 -0
  43. data/lib/google/cloud/bigquery/version.rb +22 -0
  44. metadata +297 -0
@@ -0,0 +1,31 @@
1
+ # Troubleshooting
2
+
3
+ ## Where can I get more help?
4
+
5
+ ### Ask the Community
6
+
7
+ If you have a question about how to use a Google Cloud client library in your
8
+ project or are stuck in the Developer's console and don't know where to turn,
9
+ it's possible your questions have already been addressed by the community.
10
+
11
+ First, check out the appropriate tags on StackOverflow:
12
+ - [`google-cloud-platform+ruby+bigquery`][so-ruby]
13
+
14
+ Next, try searching through the issues on GitHub:
15
+
16
+ - [`api:bigquery` issues][gh-search-ruby]
17
+
18
+ Still nothing?
19
+
20
+ ### Ask the Developers
21
+
22
+ If you're experiencing a bug with the code, or have an idea for how it can be
23
+ improved, *please* create a new issue on GitHub so we can talk about it.
24
+
25
+ - [New issue][gh-ruby]
26
+
27
+ [so-ruby]: http://stackoverflow.com/questions/tagged/google-cloud-platform+ruby+bigquery
28
+
29
+ [gh-search-ruby]: https://github.com/googleapis/google-cloud-ruby/issues?q=label%3A%22api%3A+bigquery%22
30
+
31
+ [gh-ruby]: https://github.com/googleapis/google-cloud-ruby/issues/new
@@ -0,0 +1,139 @@
1
+ # Copyright 2016 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
+ ##
16
+ # This file is here to be autorequired by bundler, so that the
17
+ # Google::Cloud.bigquery and Google::Cloud#bigquery methods can be available,
18
+ # but the library and all dependencies won't be loaded until required and used.
19
+
20
+
21
+ gem "google-cloud-core"
22
+ require "google/cloud" unless defined? Google::Cloud.new
23
+ require "google/cloud/config"
24
+ require "googleauth"
25
+
26
+ module Google
27
+ module Cloud
28
+ ##
29
+ # Creates a new object for connecting to the BigQuery service.
30
+ # Each call creates a new connection.
31
+ #
32
+ # For more information on connecting to Google Cloud see the
33
+ # {file:AUTHENTICATION.md Authentication Guide}.
34
+ #
35
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
36
+ # set of resources and operations that the connection can access. See
37
+ # [Using OAuth 2.0 to Access Google
38
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
39
+ #
40
+ # The default scope is:
41
+ #
42
+ # * `https://www.googleapis.com/auth/bigquery`
43
+ # @param [Integer] retries Number of times to retry requests on server
44
+ # error. The default value is `5`. Optional.
45
+ # @param [Integer] timeout Default request timeout in seconds. Optional.
46
+ #
47
+ # @return [Google::Cloud::Bigquery::Project]
48
+ #
49
+ # @example
50
+ # require "google/cloud"
51
+ #
52
+ # gcloud = Google::Cloud.new
53
+ # bigquery = gcloud.bigquery
54
+ # dataset = bigquery.dataset "my_dataset"
55
+ # table = dataset.table "my_table"
56
+ #
57
+ # data = table.data
58
+ #
59
+ # # Iterate over the first page of results
60
+ # data.each do |row|
61
+ # puts row[:name]
62
+ # end
63
+ # # Retrieve the next page of results
64
+ # data = data.next if data.next?
65
+ #
66
+ # @example The default scope can be overridden with the `scope` option:
67
+ # require "google/cloud"
68
+ #
69
+ # gcloud = Google::Cloud.new
70
+ # platform_scope = "https://www.googleapis.com/auth/cloud-platform"
71
+ # bigquery = gcloud.bigquery scope: platform_scope
72
+ #
73
+ def bigquery scope: nil, retries: nil, timeout: nil
74
+ Google::Cloud.bigquery @project, @keyfile, scope: scope,
75
+ retries: (retries || @retries),
76
+ timeout: (timeout || @timeout)
77
+ end
78
+
79
+ ##
80
+ # Creates a new `Project` instance connected to the BigQuery service.
81
+ # Each call creates a new connection.
82
+ #
83
+ # For more information on connecting to Google Cloud see the
84
+ # {file:AUTHENTICATION.md Authentication Guide}.
85
+ #
86
+ # @param [String] project_id Identifier for a BigQuery project. If not
87
+ # present, the default project for the credentials is used.
88
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
89
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
90
+ # Google::Auth::Credentials object. (See {Bigquery::Credentials})
91
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
92
+ # set of resources and operations that the connection can access. See
93
+ # [Using OAuth 2.0 to Access Google
94
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
95
+ #
96
+ # The default scope is:
97
+ #
98
+ # * `https://www.googleapis.com/auth/bigquery`
99
+ # @param [Integer] retries Number of times to retry requests on server
100
+ # error. The default value is `5`. Optional.
101
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
102
+ #
103
+ # @return [Google::Cloud::Bigquery::Project]
104
+ #
105
+ # @example
106
+ # require "google/cloud"
107
+ #
108
+ # bigquery = Google::Cloud.bigquery
109
+ # dataset = bigquery.dataset "my_dataset"
110
+ # table = dataset.table "my_table"
111
+ #
112
+ def self.bigquery project_id = nil, credentials = nil, scope: nil, retries: nil, timeout: nil
113
+ require "google/cloud/bigquery"
114
+ Google::Cloud::Bigquery.new project_id: project_id, credentials: credentials,
115
+ scope: scope, retries: retries, timeout: timeout
116
+ end
117
+ end
118
+ end
119
+
120
+ # Set the default bigquery configuration
121
+ Google::Cloud.configure.add_config! :bigquery do |config|
122
+ default_project = Google::Cloud::Config.deferred do
123
+ ENV["BIGQUERY_PROJECT"]
124
+ end
125
+ default_creds = Google::Cloud::Config.deferred do
126
+ Google::Cloud::Config.credentials_from_env(
127
+ "BIGQUERY_CREDENTIALS", "BIGQUERY_CREDENTIALS_JSON", "BIGQUERY_KEYFILE", "BIGQUERY_KEYFILE_JSON"
128
+ )
129
+ end
130
+
131
+ config.add_field! :project_id, default_project, match: String, allow_nil: true
132
+ config.add_alias! :project, :project_id
133
+ config.add_field! :credentials, default_creds, match: [String, Hash, Google::Auth::Credentials], allow_nil: true
134
+ config.add_alias! :keyfile, :credentials
135
+ config.add_field! :scope, nil, match: [String, Array]
136
+ config.add_field! :retries, nil, match: Integer
137
+ config.add_field! :timeout, nil, match: Integer
138
+ config.add_field! :endpoint, nil, match: String
139
+ end
@@ -0,0 +1,145 @@
1
+ # Copyright 2015 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
+
16
+ require "google-cloud-bigquery"
17
+ require "google/cloud/bigquery/project"
18
+ require "google/cloud/config"
19
+ require "google/cloud/env"
20
+
21
+ module Google
22
+ module Cloud
23
+ ##
24
+ # # Google Cloud BigQuery
25
+ #
26
+ # Google BigQuery enables super-fast, SQL-like queries against massive
27
+ # datasets, using the processing power of Google's infrastructure.
28
+ #
29
+ # See {file:OVERVIEW.md BigQuery Overview}.
30
+ #
31
+ module Bigquery
32
+ # Creates a new `Project` instance connected to the BigQuery service.
33
+ # Each call creates a new connection.
34
+ #
35
+ # For more information on connecting to Google Cloud see the
36
+ # {file:AUTHENTICATION.md Authentication Guide}.
37
+ #
38
+ # @param [String] project_id Identifier for a BigQuery project. If not
39
+ # present, the default project for the credentials is used.
40
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
41
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
42
+ # Google::Auth::Credentials object. (See {Bigquery::Credentials})
43
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
44
+ # the set of resources and operations that the connection can access.
45
+ # See # [Using OAuth 2.0 to Access Google #
46
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
47
+ #
48
+ # The default scope is:
49
+ #
50
+ # * `https://www.googleapis.com/auth/bigquery`
51
+ # @param [Integer] retries Number of times to retry requests on server
52
+ # error. The default value is `5`. Optional.
53
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
54
+ # @param [String] endpoint Override of the endpoint host name. Optional.
55
+ # If the param is nil, uses the default endpoint.
56
+ # @param [String] project Alias for the `project_id` argument. Deprecated.
57
+ # @param [String] keyfile Alias for the `credentials` argument.
58
+ # Deprecated.
59
+ #
60
+ # @return [Google::Cloud::Bigquery::Project]
61
+ #
62
+ # @example
63
+ # require "google/cloud/bigquery"
64
+ #
65
+ # bigquery = Google::Cloud::Bigquery.new
66
+ # dataset = bigquery.dataset "my_dataset"
67
+ # table = dataset.table "my_table"
68
+ #
69
+ def self.new project_id: nil, credentials: nil, scope: nil, retries: nil, timeout: nil, endpoint: nil,
70
+ project: nil, keyfile: nil
71
+ scope ||= configure.scope
72
+ retries ||= configure.retries
73
+ timeout ||= configure.timeout
74
+ endpoint ||= configure.endpoint
75
+ credentials ||= (keyfile || default_credentials(scope: scope))
76
+
77
+ unless credentials.is_a? Google::Auth::Credentials
78
+ credentials = Bigquery::Credentials.new credentials, scope: scope
79
+ end
80
+
81
+ project_id = resolve_project_id(project_id || project, credentials)
82
+ raise ArgumentError, "project_id is missing" if project_id.empty?
83
+
84
+ Bigquery::Project.new(
85
+ Bigquery::Service.new(
86
+ project_id, credentials,
87
+ retries: retries, timeout: timeout, host: endpoint
88
+ )
89
+ )
90
+ end
91
+
92
+ ##
93
+ # Configure the Google Cloud BigQuery library.
94
+ #
95
+ # The following BigQuery configuration parameters are supported:
96
+ #
97
+ # * `project_id` - (String) Identifier for a BigQuery project. (The
98
+ # parameter `project` is considered deprecated, but may also be used.)
99
+ # * `credentials` - (String, Hash, Google::Auth::Credentials) The path to
100
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
101
+ # Google::Auth::Credentials object. (See {Bigquery::Credentials}) (The
102
+ # parameter `keyfile` is considered deprecated, but may also be used.)
103
+ # * `endpoint` - (String) Override of the endpoint host name, or `nil`
104
+ # to use the default endpoint.
105
+ # * `scope` - (String, Array<String>) The OAuth 2.0 scopes controlling
106
+ # the set of resources and operations that the connection can access.
107
+ # * `retries` - (Integer) Number of times to retry requests on server
108
+ # error.
109
+ # * `timeout` - (Integer) Default timeout to use in requests.
110
+ #
111
+ # @return [Google::Cloud::Config] The configuration object the
112
+ # Google::Cloud::Bigquery library uses.
113
+ #
114
+ def self.configure
115
+ yield Google::Cloud.configure.bigquery if block_given?
116
+
117
+ Google::Cloud.configure.bigquery
118
+ end
119
+
120
+ ##
121
+ # @private Resolve project.
122
+ def self.resolve_project_id given_project, credentials
123
+ project_id = given_project || default_project_id
124
+ project_id ||= credentials.project_id if credentials.respond_to? :project_id
125
+ project_id.to_s # Always cast to a string
126
+ end
127
+
128
+ ##
129
+ # @private Default project.
130
+ def self.default_project_id
131
+ Google::Cloud.configure.bigquery.project_id ||
132
+ Google::Cloud.configure.project_id ||
133
+ Google::Cloud.env.project_id
134
+ end
135
+
136
+ ##
137
+ # @private Default credentials.
138
+ def self.default_credentials scope: nil
139
+ Google::Cloud.configure.bigquery.credentials ||
140
+ Google::Cloud.configure.credentials ||
141
+ Bigquery::Credentials.default(scope: scope)
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,197 @@
1
+ # Copyright 2020 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
+
16
+ require "google/cloud/bigquery/standard_sql"
17
+
18
+ module Google
19
+ module Cloud
20
+ module Bigquery
21
+ ##
22
+ # # Argument
23
+ #
24
+ # Input/output argument of a function or a stored procedure. See {Routine}.
25
+ #
26
+ # @example
27
+ # require "google/cloud/bigquery"
28
+ #
29
+ # bigquery = Google::Cloud::Bigquery.new
30
+ # dataset = bigquery.dataset "my_dataset"
31
+ # routine = dataset.create_routine "my_routine" do |r|
32
+ # r.routine_type = "SCALAR_FUNCTION"
33
+ # r.language = :SQL
34
+ # r.body = "(SELECT SUM(IF(elem.name = \"foo\",elem.val,null)) FROM UNNEST(arr) AS elem)"
35
+ # r.arguments = [
36
+ # Google::Cloud::Bigquery::Argument.new(
37
+ # name: "arr",
38
+ # argument_kind: "FIXED_TYPE",
39
+ # data_type: Google::Cloud::Bigquery::StandardSql::DataType.new(
40
+ # type_kind: "ARRAY",
41
+ # array_element_type: Google::Cloud::Bigquery::StandardSql::DataType.new(
42
+ # type_kind: "STRUCT",
43
+ # struct_type: Google::Cloud::Bigquery::StandardSql::StructType.new(
44
+ # fields: [
45
+ # Google::Cloud::Bigquery::StandardSql::Field.new(
46
+ # name: "name",
47
+ # type: Google::Cloud::Bigquery::StandardSql::DataType.new(type_kind: "STRING")
48
+ # ),
49
+ # Google::Cloud::Bigquery::StandardSql::Field.new(
50
+ # name: "val",
51
+ # type: Google::Cloud::Bigquery::StandardSql::DataType.new(type_kind: "INT64")
52
+ # )
53
+ # ]
54
+ # )
55
+ # )
56
+ # )
57
+ # )
58
+ # ]
59
+ # end
60
+ #
61
+ class Argument
62
+ ##
63
+ # Creates a new, immutable Argument object.
64
+ #
65
+ # @overload initialize(data_type, kind, mode, name)
66
+ # @param [StandardSql::DataType, String] data_type The data type of the argument. Required unless
67
+ # {#argument_kind} is `ANY_TYPE`.
68
+ # @param [String] argument_kind The kind of argument. Optional. Defaults to `FIXED_TYPE`.
69
+ #
70
+ # * `FIXED_TYPE` - The argument is a variable with fully specified type, which can be a struct or an array,
71
+ # but not a table.
72
+ # * `ANY_TYPE` - The argument is any type, including struct or array, but not a table.
73
+ #
74
+ # To be added: `FIXED_TABLE`, `ANY_TABLE`.
75
+ # @param [String] mode Specifies whether the argument is input or output. Optional. Can be set for procedures
76
+ # only.
77
+ #
78
+ # * IN - The argument is input-only.
79
+ # * OUT - The argument is output-only.
80
+ # * INOUT - The argument is both an input and an output.
81
+ # @param [String] name The name of the argument. Optional. Can be absent for a function return argument.
82
+ #
83
+ def initialize **kwargs
84
+ kwargs[:data_type] = StandardSql::DataType.gapi_from_string_or_data_type kwargs[:data_type]
85
+ @gapi = Google::Apis::BigqueryV2::Argument.new(**kwargs)
86
+ end
87
+
88
+ ##
89
+ # The data type of the argument. Required unless {#argument_kind} is `ANY_TYPE`.
90
+ #
91
+ # @return [StandardSql::DataType] The data type.
92
+ #
93
+ def data_type
94
+ StandardSql::DataType.from_gapi @gapi.data_type
95
+ end
96
+
97
+ ##
98
+ # The kind of argument. Optional. Defaults to `FIXED_TYPE`.
99
+ #
100
+ # * `FIXED_TYPE` - The argument is a variable with fully specified type, which can be a struct or an array, but
101
+ # not a table.
102
+ # * `ANY_TYPE` - The argument is any type, including struct or array, but not a table.
103
+ #
104
+ # To be added: `FIXED_TABLE`, `ANY_TABLE`.
105
+ #
106
+ # @return [String] The upper case kind of argument.
107
+ #
108
+ def argument_kind
109
+ @gapi.argument_kind
110
+ end
111
+
112
+ ##
113
+ # Checks if the value of {#argument_kind} is `FIXED_TYPE`. The default is `true`.
114
+ #
115
+ # @return [Boolean] `true` when `FIXED_TYPE`, `false` otherwise.
116
+ #
117
+ def fixed_type?
118
+ return true if @gapi.argument_kind.nil?
119
+ @gapi.argument_kind == "FIXED_TYPE"
120
+ end
121
+
122
+ ##
123
+ # Checks if the value of {#argument_kind} is `ANY_TYPE`. The default is `false`.
124
+ #
125
+ # @return [Boolean] `true` when `ANY_TYPE`, `false` otherwise.
126
+ #
127
+ def any_type?
128
+ @gapi.argument_kind == "ANY_TYPE"
129
+ end
130
+
131
+ ##
132
+ # Specifies whether the argument is input or output. Optional. Can be set for procedures only.
133
+ #
134
+ # * IN - The argument is input-only.
135
+ # * OUT - The argument is output-only.
136
+ # * INOUT - The argument is both an input and an output.
137
+ #
138
+ # @return [String] The upper case input/output mode of the argument.
139
+ #
140
+ def mode
141
+ @gapi.mode
142
+ end
143
+
144
+ ##
145
+ # Checks if the value of {#mode} is `IN`. Can be set for procedures only. The default is `false`.
146
+ #
147
+ # @return [Boolean] `true` when `IN`, `false` otherwise.
148
+ #
149
+ def in?
150
+ @gapi.mode == "IN"
151
+ end
152
+
153
+ ##
154
+ # Checks if the value of {#mode} is `OUT`. Can be set for procedures only. The default is `false`.
155
+ #
156
+ # @return [Boolean] `true` when `OUT`, `false` otherwise.
157
+ #
158
+ def out?
159
+ @gapi.mode == "OUT"
160
+ end
161
+
162
+ ##
163
+ # Checks if the value of {#mode} is `INOUT`. Can be set for procedures only. The default is `false`.
164
+ #
165
+ # @return [Boolean] `true` when `INOUT`, `false` otherwise.
166
+ #
167
+ def inout?
168
+ @gapi.mode == "INOUT"
169
+ end
170
+
171
+ ##
172
+ #
173
+ # The name of the argument. Optional. Can be absent for a function return argument.
174
+ #
175
+ # @return [String] The name of the argument.
176
+ #
177
+ def name
178
+ @gapi.name
179
+ end
180
+
181
+ ##
182
+ # @private
183
+ def to_gapi
184
+ @gapi
185
+ end
186
+
187
+ ##
188
+ # @private New Argument from a Google API Client object.
189
+ def self.from_gapi gapi
190
+ new.tap do |a|
191
+ a.instance_variable_set :@gapi, gapi
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end