google-cloud-bigquery 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/google/cloud/bigquery/data.rb +1 -0
- data/lib/google/cloud/bigquery/dataset.rb +40 -18
- data/lib/google/cloud/bigquery/dataset/access.rb +19 -13
- data/lib/google/cloud/bigquery/project.rb +376 -7
- data/lib/google/cloud/bigquery/query_job.rb +34 -0
- data/lib/google/cloud/bigquery/service.rb +27 -5
- data/lib/google/cloud/bigquery/table.rb +74 -44
- data/lib/google/cloud/bigquery/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 475fe669391639d85bc48bdabb141ab8efa86dd9cdcfa97544d92b77099a1f63
|
4
|
+
data.tar.gz: ad906eefc520fff184d81d1496e7e65914be90d631d4d31aead94fa41f4fff0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9639819d2a90cf202dcc9f2d4ef14fb1ddfab512ddb965af8fd394d7228a6ac5d061ba4e7444a98ac5c5a09a2bb189b0f6c81146375cd5d5bbbe78576f249d05
|
7
|
+
data.tar.gz: d3c854d3eb4ed7a053262842ab48e8bdcde7b929f1059695c8e67e36447c52fdaa1225b78334590d54ee0e445da8dcefd0402d04d5202c4d66155e9d27edb3b2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 1.10.0 / 2018-12-06
|
4
|
+
|
5
|
+
* Add dryrun param to Project#query_job and Dataset#query_job
|
6
|
+
* Add copy and extract methods to Project
|
7
|
+
* Add Project#extract and Project#extract_job
|
8
|
+
* Add Project#copy and Project#copy_job
|
9
|
+
* Deprecate dryrun param in Table#copy_job, Table#extract_job and
|
10
|
+
Table#load_job
|
11
|
+
* Fix memoization in Dataset#exists? and Table#exists?
|
12
|
+
* Add force param to Dataset#exists? and Table#exists?
|
13
|
+
|
3
14
|
### 1.9.0 / 2018-10-25
|
4
15
|
|
5
16
|
* Add clustering fields to LoadJob, QueryJob and Table
|
@@ -418,6 +418,8 @@ module Google
|
|
418
418
|
def delete force: nil
|
419
419
|
ensure_service!
|
420
420
|
service.delete_dataset dataset_id, force
|
421
|
+
# Set flag for #exists?
|
422
|
+
@exists = false
|
421
423
|
true
|
422
424
|
end
|
423
425
|
|
@@ -748,6 +750,10 @@ module Google
|
|
748
750
|
# * `append` - BigQuery appends the data to the table.
|
749
751
|
# * `empty` - A 'duplicate' error is returned in the job result if the
|
750
752
|
# table exists and contains data.
|
753
|
+
# @param [Boolean] dryrun If set to true, BigQuery doesn't run the job.
|
754
|
+
# Instead, if the query is valid, BigQuery returns statistics about
|
755
|
+
# the job such as how many bytes would be processed. If the query is
|
756
|
+
# invalid, an error returns. The default value is false.
|
751
757
|
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
752
758
|
# [standard
|
753
759
|
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
@@ -795,7 +801,8 @@ module Google
|
|
795
801
|
# contain lowercase letters, numeric characters, underscores and
|
796
802
|
# dashes. International characters are allowed. Label values are
|
797
803
|
# optional. Label keys must start with a letter and each label in the
|
798
|
-
# list must have a different key.
|
804
|
+
# list must have a different key. See [Requirements for
|
805
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
799
806
|
# @param [Array<String>, String] udfs User-defined function resources
|
800
807
|
# used in the query. May be either a code resource to load from a
|
801
808
|
# Google Cloud Storage URI (`gs://bucket/path`), or an inline resource
|
@@ -928,13 +935,13 @@ module Google
|
|
928
935
|
#
|
929
936
|
def query_job query, params: nil, external: nil,
|
930
937
|
priority: "INTERACTIVE", cache: true, table: nil,
|
931
|
-
create: nil, write: nil, standard_sql: nil,
|
938
|
+
create: nil, write: nil, dryrun: nil, standard_sql: nil,
|
932
939
|
legacy_sql: nil, large_results: nil, flatten: nil,
|
933
940
|
maximum_billing_tier: nil, maximum_bytes_billed: nil,
|
934
941
|
job_id: nil, prefix: nil, labels: nil, udfs: nil
|
935
942
|
ensure_service!
|
936
943
|
options = { priority: priority, cache: cache, table: table,
|
937
|
-
create: create, write: write,
|
944
|
+
create: create, write: write, dryrun: dryrun,
|
938
945
|
large_results: large_results, flatten: flatten,
|
939
946
|
legacy_sql: legacy_sql, standard_sql: standard_sql,
|
940
947
|
maximum_billing_tier: maximum_billing_tier,
|
@@ -1341,14 +1348,17 @@ module Google
|
|
1341
1348
|
# contain lowercase letters, numeric characters, underscores and
|
1342
1349
|
# dashes. International characters are allowed. Label values are
|
1343
1350
|
# optional. Label keys must start with a letter and each label in the
|
1344
|
-
# list must have a different key.
|
1345
|
-
#
|
1351
|
+
# list must have a different key. See [Requirements for
|
1352
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
1346
1353
|
# @yield [updater] A block for setting the schema and other
|
1347
1354
|
# options for the destination table. The schema can be omitted if the
|
1348
1355
|
# destination table already exists, or if you're loading data from a
|
1349
1356
|
# Google Cloud Datastore backup.
|
1350
1357
|
# @yieldparam [Google::Cloud::Bigquery::LoadJob::Updater] updater An
|
1351
1358
|
# updater to modify the load job and its schema.
|
1359
|
+
# @param [Boolean] dryrun If set, don't actually run this job. Behavior
|
1360
|
+
# is undefined however for non-query jobs and may result in an error.
|
1361
|
+
# Deprecated.
|
1352
1362
|
#
|
1353
1363
|
# @return [Google::Cloud::Bigquery::LoadJob] A new load job object.
|
1354
1364
|
#
|
@@ -1437,8 +1447,8 @@ module Google
|
|
1437
1447
|
projection_fields: nil, jagged_rows: nil,
|
1438
1448
|
quoted_newlines: nil, encoding: nil, delimiter: nil,
|
1439
1449
|
ignore_unknown: nil, max_bad_records: nil, quote: nil,
|
1440
|
-
skip_leading: nil,
|
1441
|
-
|
1450
|
+
skip_leading: nil, schema: nil, job_id: nil, prefix: nil,
|
1451
|
+
labels: nil, autodetect: nil, null_marker: nil, dryrun: nil
|
1442
1452
|
ensure_service!
|
1443
1453
|
|
1444
1454
|
updater = load_job_updater table_id,
|
@@ -1709,16 +1719,21 @@ module Google
|
|
1709
1719
|
#
|
1710
1720
|
def reload!
|
1711
1721
|
ensure_service!
|
1712
|
-
|
1722
|
+
@gapi = service.get_dataset dataset_id
|
1713
1723
|
@reference = nil
|
1714
|
-
@
|
1724
|
+
@exists = nil
|
1715
1725
|
self
|
1716
1726
|
end
|
1717
1727
|
alias refresh! reload!
|
1718
1728
|
|
1719
1729
|
##
|
1720
1730
|
# Determines whether the dataset exists in the BigQuery service. The
|
1721
|
-
# result is cached locally.
|
1731
|
+
# result is cached locally. To refresh state, set `force` to `true`.
|
1732
|
+
#
|
1733
|
+
# @param [Boolean] force Force the latest resource representation to be
|
1734
|
+
# retrieved from the BigQuery service when `true`. Otherwise the
|
1735
|
+
# return value of this method will be memoized to reduce the number of
|
1736
|
+
# API calls made to the BigQuery service. The default is `false`.
|
1722
1737
|
#
|
1723
1738
|
# @return [Boolean] `true` when the dataset exists in the BigQuery
|
1724
1739
|
# service, `false` otherwise.
|
@@ -1731,15 +1746,13 @@ module Google
|
|
1731
1746
|
# dataset = bigquery.dataset "my_dataset", skip_lookup: true
|
1732
1747
|
# dataset.exists? # true
|
1733
1748
|
#
|
1734
|
-
def exists?
|
1735
|
-
|
1736
|
-
|
1737
|
-
# If we have a value, return it
|
1749
|
+
def exists? force: nil
|
1750
|
+
return gapi_exists? if force
|
1751
|
+
# If we have a memoized value, return it
|
1738
1752
|
return @exists unless @exists.nil?
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
@exists = false
|
1753
|
+
# Always true if we have a gapi object
|
1754
|
+
return true if resource?
|
1755
|
+
gapi_exists?
|
1743
1756
|
end
|
1744
1757
|
|
1745
1758
|
##
|
@@ -2056,6 +2069,15 @@ module Google
|
|
2056
2069
|
reload!
|
2057
2070
|
end
|
2058
2071
|
|
2072
|
+
##
|
2073
|
+
# Fetch gapi and memoize whether resource exists.
|
2074
|
+
def gapi_exists?
|
2075
|
+
reload!
|
2076
|
+
@exists = true
|
2077
|
+
rescue Google::Cloud::NotFoundError
|
2078
|
+
@exists = false
|
2079
|
+
end
|
2080
|
+
|
2059
2081
|
def patch_gapi! *attributes
|
2060
2082
|
return if attributes.empty?
|
2061
2083
|
ensure_service!
|
@@ -191,10 +191,12 @@ module Google
|
|
191
191
|
##
|
192
192
|
# Add reader access to a view.
|
193
193
|
#
|
194
|
-
# @param [Google::Cloud::Bigquery::Table, String] view A table object
|
195
|
-
# or a string identifier as specified by the [Query
|
196
|
-
# Reference](https://cloud.google.com/bigquery/query-
|
197
|
-
# `
|
194
|
+
# @param [Google::Cloud::Bigquery::Table, String] view A table object,
|
195
|
+
# or a string identifier as specified by the [Standard SQL Query
|
196
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
197
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
198
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
199
|
+
# (`project-name:dataset_id.table_id`).
|
198
200
|
#
|
199
201
|
# @example
|
200
202
|
# require "google/cloud/bigquery"
|
@@ -450,10 +452,12 @@ module Google
|
|
450
452
|
##
|
451
453
|
# Remove reader access from a view.
|
452
454
|
#
|
453
|
-
# @param [Google::Cloud::Bigquery::Table, String] view A table object
|
454
|
-
# or a string identifier as specified by the [Query
|
455
|
-
# Reference](https://cloud.google.com/bigquery/query-
|
456
|
-
# `
|
455
|
+
# @param [Google::Cloud::Bigquery::Table, String] view A table object,
|
456
|
+
# or a string identifier as specified by the [Standard SQL Query
|
457
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
458
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
459
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
460
|
+
# (`project-name:dataset_id.table_id`).
|
457
461
|
#
|
458
462
|
# @example
|
459
463
|
# require "google/cloud/bigquery"
|
@@ -705,10 +709,12 @@ module Google
|
|
705
709
|
##
|
706
710
|
# Checks reader access for a view.
|
707
711
|
#
|
708
|
-
# @param [Google::Cloud::Bigquery::Table, String] view A table object
|
709
|
-
# or a string identifier as specified by the [Query
|
710
|
-
# Reference](https://cloud.google.com/bigquery/query-
|
711
|
-
# `
|
712
|
+
# @param [Google::Cloud::Bigquery::Table, String] view A table object,
|
713
|
+
# or a string identifier as specified by the [Standard SQL Query
|
714
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
715
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
716
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
717
|
+
# (`project-name:dataset_id.table_id`).
|
712
718
|
#
|
713
719
|
# @example
|
714
720
|
# require "google/cloud/bigquery"
|
@@ -923,7 +929,7 @@ module Google
|
|
923
929
|
if view.respond_to? :table_ref
|
924
930
|
view.table_ref
|
925
931
|
else
|
926
|
-
Service.table_ref_from_s view, @dataset_reference
|
932
|
+
Service.table_ref_from_s view, default_ref: @dataset_reference
|
927
933
|
end
|
928
934
|
end
|
929
935
|
|
@@ -95,6 +95,184 @@ module Google
|
|
95
95
|
service.project_service_account.email
|
96
96
|
end
|
97
97
|
|
98
|
+
##
|
99
|
+
# Copies the data from the source table to the destination table using
|
100
|
+
# an asynchronous method. In this method, a {CopyJob} is immediately
|
101
|
+
# returned. The caller may poll the service by repeatedly calling
|
102
|
+
# {Job#reload!} and {Job#done?} to detect when the job is done, or
|
103
|
+
# simply block until the job is done by calling #{Job#wait_until_done!}.
|
104
|
+
# See {#copy} for the synchronous version. Use this method instead of
|
105
|
+
# {Table#copy_job} to copy from source tables in other projects.
|
106
|
+
#
|
107
|
+
# The geographic location for the job ("US", "EU", etc.) can be set via
|
108
|
+
# {CopyJob::Updater#location=} in a block passed to this method.
|
109
|
+
#
|
110
|
+
# @param [String, Table] source_table The source table for the
|
111
|
+
# copied data. This can be a table object; or a string ID as specified
|
112
|
+
# by the [Standard SQL Query
|
113
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
114
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
115
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
116
|
+
# (`project-name:dataset_id.table_id`).
|
117
|
+
# @param [String, Table] destination_table The destination table for the
|
118
|
+
# copied data. This can be a table object; or a string ID as specified
|
119
|
+
# by the [Standard SQL Query
|
120
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
121
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
122
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
123
|
+
# (`project-name:dataset_id.table_id`).
|
124
|
+
# @param [String] create Specifies whether the job is allowed to create
|
125
|
+
# new tables. The default value is `needed`.
|
126
|
+
#
|
127
|
+
# The following values are supported:
|
128
|
+
#
|
129
|
+
# * `needed` - Create the table if it does not exist.
|
130
|
+
# * `never` - The table must already exist. A 'notFound' error is
|
131
|
+
# raised if the table does not exist.
|
132
|
+
# @param [String] write Specifies how to handle data already present in
|
133
|
+
# the destination table. The default value is `empty`.
|
134
|
+
#
|
135
|
+
# The following values are supported:
|
136
|
+
#
|
137
|
+
# * `truncate` - BigQuery overwrites the table data.
|
138
|
+
# * `append` - BigQuery appends the data to the table.
|
139
|
+
# * `empty` - An error will be returned if the destination table
|
140
|
+
# already contains data.
|
141
|
+
# @param [String] job_id A user-defined ID for the copy job. The ID
|
142
|
+
# must contain only letters (a-z, A-Z), numbers (0-9), underscores
|
143
|
+
# (_), or dashes (-). The maximum length is 1,024 characters. If
|
144
|
+
# `job_id` is provided, then `prefix` will not be used.
|
145
|
+
#
|
146
|
+
# See [Generating a job
|
147
|
+
# ID](https://cloud.google.com/bigquery/docs/managing-jobs#generate-jobid).
|
148
|
+
# @param [String] prefix A string, usually human-readable, that will be
|
149
|
+
# prepended to a generated value to produce a unique job ID. For
|
150
|
+
# example, the prefix `daily_import_job_` can be given to generate a
|
151
|
+
# job ID such as `daily_import_job_12vEDtMQ0mbp1Mo5Z7mzAFQJZazh`. The
|
152
|
+
# prefix must contain only letters (a-z, A-Z), numbers (0-9),
|
153
|
+
# underscores (_), or dashes (-). The maximum length of the entire ID
|
154
|
+
# is 1,024 characters. If `job_id` is provided, then `prefix` will not
|
155
|
+
# be used.
|
156
|
+
# @param [Hash] labels A hash of user-provided labels associated with
|
157
|
+
# the job. You can use these to organize and group your jobs. Label
|
158
|
+
# keys and values can be no longer than 63 characters, can only
|
159
|
+
# contain lowercase letters, numeric characters, underscores and
|
160
|
+
# dashes. International characters are allowed. Label values are
|
161
|
+
# optional. Label keys must start with a letter and each label in the
|
162
|
+
# list must have a different key. See [Requirements for
|
163
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
164
|
+
# @yield [job] a job configuration object
|
165
|
+
# @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
|
166
|
+
# configuration object for setting additional options.
|
167
|
+
#
|
168
|
+
# @return [Google::Cloud::Bigquery::CopyJob]
|
169
|
+
#
|
170
|
+
# @example
|
171
|
+
# require "google/cloud/bigquery"
|
172
|
+
#
|
173
|
+
# bigquery = Google::Cloud::Bigquery.new
|
174
|
+
# dataset = bigquery.dataset "my_dataset"
|
175
|
+
# source_table_id = "bigquery-public-data.samples.shakespeare"
|
176
|
+
# destination_table = dataset.table "my_destination_table"
|
177
|
+
#
|
178
|
+
# copy_job = bigquery.copy_job source_table_id, destination_table
|
179
|
+
#
|
180
|
+
# copy_job.wait_until_done!
|
181
|
+
# copy_job.done? #=> true
|
182
|
+
#
|
183
|
+
# @!group Data
|
184
|
+
#
|
185
|
+
def copy_job source_table, destination_table, create: nil, write: nil,
|
186
|
+
job_id: nil, prefix: nil, labels: nil
|
187
|
+
ensure_service!
|
188
|
+
options = { create: create, write: write, labels: labels,
|
189
|
+
job_id: job_id, prefix: prefix }
|
190
|
+
|
191
|
+
updater = CopyJob::Updater.from_options(
|
192
|
+
service,
|
193
|
+
Service.get_table_ref(source_table, default_ref: project_ref),
|
194
|
+
Service.get_table_ref(destination_table, default_ref: project_ref),
|
195
|
+
options
|
196
|
+
)
|
197
|
+
|
198
|
+
yield updater if block_given?
|
199
|
+
|
200
|
+
job_gapi = updater.to_gapi
|
201
|
+
gapi = service.copy_table job_gapi
|
202
|
+
Job.from_gapi gapi, service
|
203
|
+
end
|
204
|
+
|
205
|
+
##
|
206
|
+
# Copies the data from the source table to the destination table using a
|
207
|
+
# synchronous method that blocks for a response. Timeouts and transient
|
208
|
+
# errors are generally handled as needed to complete the job. See
|
209
|
+
# {#copy_job} for the asynchronous version. Use this method instead of
|
210
|
+
# {Table#copy} to copy from source tables in other projects.
|
211
|
+
#
|
212
|
+
# The geographic location for the job ("US", "EU", etc.) can be set via
|
213
|
+
# {CopyJob::Updater#location=} in a block passed to this method.
|
214
|
+
#
|
215
|
+
# @param [String, Table] source_table The source table for the
|
216
|
+
# copied data. This can be a table object; or a string ID as specified
|
217
|
+
# by the [Standard SQL Query
|
218
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
219
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
220
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
221
|
+
# (`project-name:dataset_id.table_id`).
|
222
|
+
# @param [String, Table] destination_table The destination table for the
|
223
|
+
# copied data. This can be a table object; or a string ID as specified
|
224
|
+
# by the [Standard SQL Query
|
225
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
226
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
227
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
228
|
+
# (`project-name:dataset_id.table_id`).
|
229
|
+
# @param [String] create Specifies whether the job is allowed to create
|
230
|
+
# new tables. The default value is `needed`.
|
231
|
+
#
|
232
|
+
# The following values are supported:
|
233
|
+
#
|
234
|
+
# * `needed` - Create the table if it does not exist.
|
235
|
+
# * `never` - The table must already exist. A 'notFound' error is
|
236
|
+
# raised if the table does not exist.
|
237
|
+
# @param [String] write Specifies how to handle data already present in
|
238
|
+
# the destination table. The default value is `empty`.
|
239
|
+
#
|
240
|
+
# The following values are supported:
|
241
|
+
#
|
242
|
+
# * `truncate` - BigQuery overwrites the table data.
|
243
|
+
# * `append` - BigQuery appends the data to the table.
|
244
|
+
# * `empty` - An error will be returned if the destination table
|
245
|
+
# already contains data.
|
246
|
+
# @yield [job] a job configuration object
|
247
|
+
# @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
|
248
|
+
# configuration object for setting additional options.
|
249
|
+
#
|
250
|
+
# @return [Boolean] Returns `true` if the copy operation succeeded.
|
251
|
+
#
|
252
|
+
# @example
|
253
|
+
# require "google/cloud/bigquery"
|
254
|
+
#
|
255
|
+
# bigquery = Google::Cloud::Bigquery.new
|
256
|
+
# dataset = bigquery.dataset "my_dataset"
|
257
|
+
# destination_table = dataset.table "my_destination_table"
|
258
|
+
#
|
259
|
+
# bigquery.copy "bigquery-public-data.samples.shakespeare",
|
260
|
+
# destination_table
|
261
|
+
#
|
262
|
+
# @!group Data
|
263
|
+
#
|
264
|
+
def copy source_table, destination_table, create: nil, write: nil,
|
265
|
+
&block
|
266
|
+
job = copy_job source_table,
|
267
|
+
destination_table,
|
268
|
+
create: create,
|
269
|
+
write: write,
|
270
|
+
&block
|
271
|
+
job.wait_until_done!
|
272
|
+
ensure_job_succeeded! job
|
273
|
+
true
|
274
|
+
end
|
275
|
+
|
98
276
|
##
|
99
277
|
# Queries data by creating a [query
|
100
278
|
# job](https://cloud.google.com/bigquery/docs/query-overview#query_jobs).
|
@@ -166,6 +344,10 @@ module Google
|
|
166
344
|
# * `append` - BigQuery appends the data to the table.
|
167
345
|
# * `empty` - A 'duplicate' error is returned in the job result if the
|
168
346
|
# table exists and contains data.
|
347
|
+
# @param [Boolean] dryrun If set to true, BigQuery doesn't run the job.
|
348
|
+
# Instead, if the query is valid, BigQuery returns statistics about
|
349
|
+
# the job such as how many bytes would be processed. If the query is
|
350
|
+
# invalid, an error returns. The default value is false.
|
169
351
|
# @param [Dataset, String] dataset The default dataset to use for
|
170
352
|
# unqualified table names in the query. Optional.
|
171
353
|
# @param [String] project Specifies the default projectId to assume for
|
@@ -221,7 +403,8 @@ module Google
|
|
221
403
|
# contain lowercase letters, numeric characters, underscores and
|
222
404
|
# dashes. International characters are allowed. Label values are
|
223
405
|
# optional. Label keys must start with a letter and each label in the
|
224
|
-
# list must have a different key.
|
406
|
+
# list must have a different key. See [Requirements for
|
407
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
225
408
|
# @param [Array<String>, String] udfs User-defined function resources
|
226
409
|
# used in the query. May be either a code resource to load from a
|
227
410
|
# Google Cloud Storage URI (`gs://bucket/path`), or an inline resource
|
@@ -357,14 +540,14 @@ module Google
|
|
357
540
|
#
|
358
541
|
def query_job query, params: nil, external: nil,
|
359
542
|
priority: "INTERACTIVE", cache: true, table: nil,
|
360
|
-
create: nil, write: nil,
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
labels: nil, udfs: nil
|
543
|
+
create: nil, write: nil, dryrun: nil, dataset: nil,
|
544
|
+
project: nil, standard_sql: nil, legacy_sql: nil,
|
545
|
+
large_results: nil, flatten: nil,
|
546
|
+
maximum_billing_tier: nil, maximum_bytes_billed: nil,
|
547
|
+
job_id: nil, prefix: nil, labels: nil, udfs: nil
|
365
548
|
ensure_service!
|
366
549
|
options = { priority: priority, cache: cache, table: table,
|
367
|
-
create: create, write: write,
|
550
|
+
create: create, write: write, dryrun: dryrun,
|
368
551
|
large_results: large_results, flatten: flatten,
|
369
552
|
dataset: dataset, project: (project || self.project),
|
370
553
|
legacy_sql: legacy_sql, standard_sql: standard_sql,
|
@@ -1096,6 +1279,177 @@ module Google
|
|
1096
1279
|
encrypt_config
|
1097
1280
|
end
|
1098
1281
|
|
1282
|
+
##
|
1283
|
+
# Extracts the data from the provided table to a Google Cloud Storage
|
1284
|
+
# file using an asynchronous method. In this method, an {ExtractJob} is
|
1285
|
+
# immediately returned. The caller may poll the service by repeatedly
|
1286
|
+
# calling {Job#reload!} and {Job#done?} to detect when the job is done,
|
1287
|
+
# or simply block until the job is done by calling
|
1288
|
+
# #{Job#wait_until_done!}. See {#extract} for the synchronous version.
|
1289
|
+
# Use this method instead of {Table#extract_job} to extract data from
|
1290
|
+
# source tables in other projects.
|
1291
|
+
#
|
1292
|
+
# The geographic location for the job ("US", "EU", etc.) can be set via
|
1293
|
+
# {ExtractJob::Updater#location=} in a block passed to this method.
|
1294
|
+
#
|
1295
|
+
# @see https://cloud.google.com/bigquery/exporting-data-from-bigquery
|
1296
|
+
# Exporting Data From BigQuery
|
1297
|
+
#
|
1298
|
+
# @param [String, Table] table The source table from which to extract
|
1299
|
+
# data. This can be a table object; or a string ID as specified by the
|
1300
|
+
# [Standard SQL Query
|
1301
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
1302
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
1303
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
1304
|
+
# (`project-name:dataset_id.table_id`).
|
1305
|
+
# @param [Google::Cloud::Storage::File, String, Array<String>]
|
1306
|
+
# extract_url The Google Storage file or file URI pattern(s) to which
|
1307
|
+
# BigQuery should extract the table data.
|
1308
|
+
# @param [String] format The exported file format. The default value is
|
1309
|
+
# `csv`.
|
1310
|
+
#
|
1311
|
+
# The following values are supported:
|
1312
|
+
#
|
1313
|
+
# * `csv` - CSV
|
1314
|
+
# * `json` - [Newline-delimited JSON](http://jsonlines.org/)
|
1315
|
+
# * `avro` - [Avro](http://avro.apache.org/)
|
1316
|
+
# @param [String] compression The compression type to use for exported
|
1317
|
+
# files. Possible values include `GZIP` and `NONE`. The default value
|
1318
|
+
# is `NONE`.
|
1319
|
+
# @param [String] delimiter Delimiter to use between fields in the
|
1320
|
+
# exported data. Default is <code>,</code>.
|
1321
|
+
# @param [Boolean] header Whether to print out a header row in the
|
1322
|
+
# results. Default is `true`.
|
1323
|
+
# @param [String] job_id A user-defined ID for the extract job. The ID
|
1324
|
+
# must contain only letters (a-z, A-Z), numbers (0-9), underscores
|
1325
|
+
# (_), or dashes (-). The maximum length is 1,024 characters. If
|
1326
|
+
# `job_id` is provided, then `prefix` will not be used.
|
1327
|
+
#
|
1328
|
+
# See [Generating a job
|
1329
|
+
# ID](https://cloud.google.com/bigquery/docs/managing-jobs#generate-jobid).
|
1330
|
+
# @param [String] prefix A string, usually human-readable, that will be
|
1331
|
+
# prepended to a generated value to produce a unique job ID. For
|
1332
|
+
# example, the prefix `daily_import_job_` can be given to generate a
|
1333
|
+
# job ID such as `daily_import_job_12vEDtMQ0mbp1Mo5Z7mzAFQJZazh`. The
|
1334
|
+
# prefix must contain only letters (a-z, A-Z), numbers (0-9),
|
1335
|
+
# underscores (_), or dashes (-). The maximum length of the entire ID
|
1336
|
+
# is 1,024 characters. If `job_id` is provided, then `prefix` will not
|
1337
|
+
# be used.
|
1338
|
+
# @param [Hash] labels A hash of user-provided labels associated with
|
1339
|
+
# the job. You can use these to organize and group your jobs. Label
|
1340
|
+
# keys and values can be no longer than 63 characters, can only
|
1341
|
+
# contain lowercase letters, numeric characters, underscores and
|
1342
|
+
# dashes. International characters are allowed. Label values are
|
1343
|
+
# optional. Label keys must start with a letter and each label in the
|
1344
|
+
# list must have a different key. See [Requirements for
|
1345
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
1346
|
+
# @yield [job] a job configuration object
|
1347
|
+
# @yieldparam [Google::Cloud::Bigquery::ExtractJob::Updater] job a job
|
1348
|
+
# configuration object for setting additional options.
|
1349
|
+
#
|
1350
|
+
# @return [Google::Cloud::Bigquery::ExtractJob]
|
1351
|
+
#
|
1352
|
+
# @example
|
1353
|
+
# require "google/cloud/bigquery"
|
1354
|
+
#
|
1355
|
+
# bigquery = Google::Cloud::Bigquery.new
|
1356
|
+
#
|
1357
|
+
# table_id = "bigquery-public-data.samples.shakespeare"
|
1358
|
+
# extract_job = bigquery.extract_job table_id,
|
1359
|
+
# "gs://my-bucket/shakespeare.csv"
|
1360
|
+
# extract_job.wait_until_done!
|
1361
|
+
# extract_job.done? #=> true
|
1362
|
+
#
|
1363
|
+
# @!group Data
|
1364
|
+
#
|
1365
|
+
def extract_job table, extract_url, format: nil, compression: nil,
|
1366
|
+
delimiter: nil, header: nil, job_id: nil, prefix: nil,
|
1367
|
+
labels: nil
|
1368
|
+
ensure_service!
|
1369
|
+
options = { format: format, compression: compression,
|
1370
|
+
delimiter: delimiter, header: header, job_id: job_id,
|
1371
|
+
prefix: prefix, labels: labels }
|
1372
|
+
|
1373
|
+
table_ref = Service.get_table_ref table, default_ref: project_ref
|
1374
|
+
updater = ExtractJob::Updater.from_options service, table_ref,
|
1375
|
+
extract_url, options
|
1376
|
+
|
1377
|
+
yield updater if block_given?
|
1378
|
+
|
1379
|
+
job_gapi = updater.to_gapi
|
1380
|
+
gapi = service.extract_table job_gapi
|
1381
|
+
Job.from_gapi gapi, service
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
##
|
1385
|
+
# Extracts the data from the provided table to a Google Cloud Storage
|
1386
|
+
# file using a synchronous method that blocks for a response. Timeouts
|
1387
|
+
# and transient errors are generally handled as needed to complete the
|
1388
|
+
# job. See {#extract_job} for the asynchronous version. Use this method
|
1389
|
+
# instead of {Table#extract} to extract data from source tables in other
|
1390
|
+
# projects.
|
1391
|
+
#
|
1392
|
+
# The geographic location for the job ("US", "EU", etc.) can be set via
|
1393
|
+
# {ExtractJob::Updater#location=} in a block passed to this method.
|
1394
|
+
#
|
1395
|
+
# @see https://cloud.google.com/bigquery/exporting-data-from-bigquery
|
1396
|
+
# Exporting Data From BigQuery
|
1397
|
+
#
|
1398
|
+
# @param [String, Table] table The source table from which to extract
|
1399
|
+
# data. This can be a table object; or a string ID as specified by the
|
1400
|
+
# [Standard SQL Query
|
1401
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
1402
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
1403
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
1404
|
+
# (`project-name:dataset_id.table_id`).
|
1405
|
+
# @param [Google::Cloud::Storage::File, String, Array<String>]
|
1406
|
+
# extract_url The Google Storage file or file URI pattern(s) to which
|
1407
|
+
# BigQuery should extract the table data.
|
1408
|
+
# @param [String] format The exported file format. The default value is
|
1409
|
+
# `csv`.
|
1410
|
+
#
|
1411
|
+
# The following values are supported:
|
1412
|
+
#
|
1413
|
+
# * `csv` - CSV
|
1414
|
+
# * `json` - [Newline-delimited JSON](http://jsonlines.org/)
|
1415
|
+
# * `avro` - [Avro](http://avro.apache.org/)
|
1416
|
+
# @param [String] compression The compression type to use for exported
|
1417
|
+
# files. Possible values include `GZIP` and `NONE`. The default value
|
1418
|
+
# is `NONE`.
|
1419
|
+
# @param [String] delimiter Delimiter to use between fields in the
|
1420
|
+
# exported data. Default is <code>,</code>.
|
1421
|
+
# @param [Boolean] header Whether to print out a header row in the
|
1422
|
+
# results. Default is `true`.
|
1423
|
+
# @yield [job] a job configuration object
|
1424
|
+
# @yieldparam [Google::Cloud::Bigquery::ExtractJob::Updater] job a job
|
1425
|
+
# configuration object for setting additional options.
|
1426
|
+
#
|
1427
|
+
# @return [Boolean] Returns `true` if the extract operation succeeded.
|
1428
|
+
#
|
1429
|
+
# @example
|
1430
|
+
# require "google/cloud/bigquery"
|
1431
|
+
#
|
1432
|
+
# bigquery = Google::Cloud::Bigquery.new
|
1433
|
+
#
|
1434
|
+
# bigquery.extract "bigquery-public-data.samples.shakespeare",
|
1435
|
+
# "gs://my-bucket/shakespeare.csv"
|
1436
|
+
#
|
1437
|
+
# @!group Data
|
1438
|
+
#
|
1439
|
+
def extract table, extract_url, format: nil, compression: nil,
|
1440
|
+
delimiter: nil, header: nil, &block
|
1441
|
+
job = extract_job table,
|
1442
|
+
extract_url,
|
1443
|
+
format: format,
|
1444
|
+
compression: compression,
|
1445
|
+
delimiter: delimiter,
|
1446
|
+
header: header,
|
1447
|
+
&block
|
1448
|
+
job.wait_until_done!
|
1449
|
+
ensure_job_succeeded! job
|
1450
|
+
true
|
1451
|
+
end
|
1452
|
+
|
1099
1453
|
##
|
1100
1454
|
# @private New Project from a Google API Client object, using the
|
1101
1455
|
# same Credentials as this project.
|
@@ -1122,6 +1476,21 @@ module Google
|
|
1122
1476
|
def ensure_service!
|
1123
1477
|
raise "Must have active connection" unless service
|
1124
1478
|
end
|
1479
|
+
|
1480
|
+
def ensure_job_succeeded! job
|
1481
|
+
return unless job.failed?
|
1482
|
+
begin
|
1483
|
+
# raise to activate ruby exception cause handling
|
1484
|
+
raise job.gapi_error
|
1485
|
+
rescue StandardError => e
|
1486
|
+
# wrap Google::Apis::Error with Google::Cloud::Error
|
1487
|
+
raise Google::Cloud::Error.from_error(e)
|
1488
|
+
end
|
1489
|
+
end
|
1490
|
+
|
1491
|
+
def project_ref
|
1492
|
+
Google::Apis::BigqueryV2::ProjectReference.new project_id: project_id
|
1493
|
+
end
|
1125
1494
|
end
|
1126
1495
|
end
|
1127
1496
|
end
|
@@ -99,6 +99,22 @@ module Google
|
|
99
99
|
val
|
100
100
|
end
|
101
101
|
|
102
|
+
##
|
103
|
+
# If set, don't actually run this job. A valid query will return a
|
104
|
+
# mostly empty response with some processing statistics, while an
|
105
|
+
# invalid query will return the same error it would if it wasn't a dry
|
106
|
+
# run.
|
107
|
+
#
|
108
|
+
# @return [Boolean] `true` when the dry run flag is set for the query
|
109
|
+
# job, `false` otherwise.
|
110
|
+
#
|
111
|
+
def dryrun?
|
112
|
+
@gapi.configuration.dry_run
|
113
|
+
end
|
114
|
+
alias dryrun dryrun?
|
115
|
+
alias dry_run dryrun?
|
116
|
+
alias dry_run? dryrun?
|
117
|
+
|
102
118
|
##
|
103
119
|
# Checks if the query job flattens nested and repeated fields in the
|
104
120
|
# query results. The default is `true`. If the value is `false`,
|
@@ -557,6 +573,9 @@ module Google
|
|
557
573
|
#
|
558
574
|
def data token: nil, max: nil, start: nil
|
559
575
|
return nil unless done?
|
576
|
+
if dryrun?
|
577
|
+
return Data.from_gapi_json({ rows: [] }, nil, @gapi, service)
|
578
|
+
end
|
560
579
|
if ddl? || dml?
|
561
580
|
data_hash = { totalRows: nil, rows: [] }
|
562
581
|
return Data.from_gapi_json data_hash, nil, @gapi, service
|
@@ -609,6 +628,7 @@ module Google
|
|
609
628
|
updater.create = options[:create]
|
610
629
|
updater.write = options[:write]
|
611
630
|
updater.table = options[:table]
|
631
|
+
updater.dryrun = options[:dryrun]
|
612
632
|
updater.maximum_bytes_billed = options[:maximum_bytes_billed]
|
613
633
|
updater.labels = options[:labels] if options[:labels]
|
614
634
|
updater.legacy_sql = Convert.resolve_legacy_sql(
|
@@ -786,6 +806,20 @@ module Google
|
|
786
806
|
Convert.write_disposition value
|
787
807
|
end
|
788
808
|
|
809
|
+
##
|
810
|
+
# Sets the dry run flag for the query job.
|
811
|
+
#
|
812
|
+
# @param [Boolean] value If set, don't actually run this job. A valid
|
813
|
+
# query will return a mostly empty response with some processing
|
814
|
+
# statistics, while an invalid query will return the same error it
|
815
|
+
# would if it wasn't a dry run..
|
816
|
+
#
|
817
|
+
# @!group Attributes
|
818
|
+
def dryrun= value
|
819
|
+
@gapi.configuration.dry_run = value
|
820
|
+
end
|
821
|
+
alias dry_run= dryrun=
|
822
|
+
|
789
823
|
##
|
790
824
|
# Sets the destination for the query results table.
|
791
825
|
#
|
@@ -324,14 +324,26 @@ module Google
|
|
324
324
|
end
|
325
325
|
end
|
326
326
|
|
327
|
+
def self.get_table_ref table, default_ref: nil
|
328
|
+
if table.respond_to? :table_ref
|
329
|
+
table.table_ref
|
330
|
+
else
|
331
|
+
table_ref_from_s table, default_ref: default_ref
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
327
335
|
##
|
328
336
|
# Extracts at least `tbl` group, and possibly `dts` and `prj` groups,
|
329
337
|
# from strings in the formats: "my_table", "my_dataset.my_table", or
|
330
338
|
# "my-project:my_dataset.my_table". Then merges project_id and
|
331
|
-
# dataset_id from the default table if they are missing.
|
332
|
-
|
339
|
+
# dataset_id from the default table ref if they are missing.
|
340
|
+
#
|
341
|
+
# The regex matches both Standard SQL
|
342
|
+
# ("bigquery-public-data.samples.shakespeare") and Legacy SQL
|
343
|
+
# ("bigquery-public-data:samples.shakespeare").
|
344
|
+
def self.table_ref_from_s str, default_ref: {}
|
333
345
|
str = str.to_s
|
334
|
-
m = /\A(((?<prj>\S*)
|
346
|
+
m = /\A(((?<prj>\S*)(:|\.))?(?<dts>\S*)\.)?(?<tbl>\S*)\z/.match str
|
335
347
|
unless m
|
336
348
|
raise ArgumentError, "unable to identify table from #{str.inspect}"
|
337
349
|
end
|
@@ -340,8 +352,18 @@ module Google
|
|
340
352
|
dataset_id: m["dts"],
|
341
353
|
table_id: m["tbl"]
|
342
354
|
}.delete_if { |_, v| v.nil? }
|
343
|
-
|
344
|
-
Google::Apis::BigqueryV2::TableReference.new
|
355
|
+
str_table_ref_hash = default_ref.to_h.merge str_table_ref_hash
|
356
|
+
ref = Google::Apis::BigqueryV2::TableReference.new str_table_ref_hash
|
357
|
+
validate_table_ref ref
|
358
|
+
ref
|
359
|
+
end
|
360
|
+
|
361
|
+
def self.validate_table_ref table_ref
|
362
|
+
%i[project_id dataset_id table_id].each do |f|
|
363
|
+
if table_ref.send(f).nil?
|
364
|
+
raise ArgumentError, "TableReference is missing #{f}"
|
365
|
+
end
|
366
|
+
end
|
345
367
|
end
|
346
368
|
|
347
369
|
##
|
@@ -371,9 +371,10 @@ module Google
|
|
371
371
|
##
|
372
372
|
# The combined Project ID, Dataset ID, and Table ID for this table, in
|
373
373
|
# the format specified by the [Legacy SQL Query
|
374
|
-
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
375
|
-
# `
|
376
|
-
#
|
374
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
375
|
+
# (`project-name:dataset_id.table_id`). This is useful for referencing
|
376
|
+
# tables in other projects and datasets. To use this value in queries
|
377
|
+
# see {#query_id}.
|
377
378
|
#
|
378
379
|
# @return [String, nil] The combined ID, or `nil` if the object is a
|
379
380
|
# reference (see {#reference?}).
|
@@ -386,10 +387,9 @@ module Google
|
|
386
387
|
end
|
387
388
|
|
388
389
|
##
|
389
|
-
# The value returned by {#id}, wrapped in
|
390
|
-
#
|
391
|
-
#
|
392
|
-
# Useful in queries.
|
390
|
+
# The value returned by {#id}, wrapped in backticks (Standard SQL) or s
|
391
|
+
# quare brackets (Legacy SQL) to accommodate project IDs
|
392
|
+
# containing dashes. Useful in queries.
|
393
393
|
#
|
394
394
|
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
395
395
|
# [standard
|
@@ -1191,9 +1191,11 @@ module Google
|
|
1191
1191
|
#
|
1192
1192
|
# @param [Table, String] destination_table The destination for the
|
1193
1193
|
# copied data. This can also be a string identifier as specified by
|
1194
|
-
# the [Query
|
1195
|
-
# Reference](https://cloud.google.com/bigquery/query-
|
1196
|
-
# `
|
1194
|
+
# the [Standard SQL Query
|
1195
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
1196
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
1197
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
1198
|
+
# (`project-name:dataset_id.table_id`). This is useful for referencing
|
1197
1199
|
# tables in other projects and datasets.
|
1198
1200
|
# @param [String] create Specifies whether the job is allowed to create
|
1199
1201
|
# new tables. The default value is `needed`.
|
@@ -1233,7 +1235,12 @@ module Google
|
|
1233
1235
|
# contain lowercase letters, numeric characters, underscores and
|
1234
1236
|
# dashes. International characters are allowed. Label values are
|
1235
1237
|
# optional. Label keys must start with a letter and each label in the
|
1236
|
-
# list must have a different key.
|
1238
|
+
# list must have a different key. See [Requirements for
|
1239
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
1240
|
+
# @param [Boolean] dryrun If set, don't actually run this job. Behavior
|
1241
|
+
# is undefined however for non-query jobs and may result in an error.
|
1242
|
+
# Deprecated.
|
1243
|
+
#
|
1237
1244
|
# @yield [job] a job configuration object
|
1238
1245
|
# @yieldparam [Google::Cloud::Bigquery::CopyJob::Updater] job a job
|
1239
1246
|
# configuration object for setting additional options.
|
@@ -1259,17 +1266,20 @@ module Google
|
|
1259
1266
|
#
|
1260
1267
|
# copy_job = table.copy_job "other-project:other_dataset.other_table"
|
1261
1268
|
#
|
1269
|
+
# copy_job.wait_until_done!
|
1270
|
+
# copy_job.done? #=> true
|
1271
|
+
#
|
1262
1272
|
# @!group Data
|
1263
1273
|
#
|
1264
|
-
def copy_job destination_table, create: nil, write: nil,
|
1265
|
-
|
1274
|
+
def copy_job destination_table, create: nil, write: nil, job_id: nil,
|
1275
|
+
prefix: nil, labels: nil, dryrun: nil
|
1266
1276
|
ensure_service!
|
1267
1277
|
options = { create: create, write: write, dryrun: dryrun,
|
1268
1278
|
labels: labels, job_id: job_id, prefix: prefix }
|
1269
1279
|
updater = CopyJob::Updater.from_options(
|
1270
1280
|
service,
|
1271
1281
|
table_ref,
|
1272
|
-
get_table_ref(destination_table),
|
1282
|
+
Service.get_table_ref(destination_table, default_ref: table_ref),
|
1273
1283
|
options
|
1274
1284
|
)
|
1275
1285
|
updater.location = location if location # may be table reference
|
@@ -1295,9 +1305,11 @@ module Google
|
|
1295
1305
|
#
|
1296
1306
|
# @param [Table, String] destination_table The destination for the
|
1297
1307
|
# copied data. This can also be a string identifier as specified by
|
1298
|
-
# the [Query
|
1299
|
-
# Reference](https://cloud.google.com/bigquery/query-
|
1300
|
-
# `
|
1308
|
+
# the [Standard SQL Query
|
1309
|
+
# Reference](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#from-clause)
|
1310
|
+
# (`project-name.dataset_id.table_id`) or the [Legacy SQL Query
|
1311
|
+
# Reference](https://cloud.google.com/bigquery/query-reference#from)
|
1312
|
+
# (`project-name:dataset_id.table_id`). This is useful for referencing
|
1301
1313
|
# tables in other projects and datasets.
|
1302
1314
|
# @param [String] create Specifies whether the job is allowed to create
|
1303
1315
|
# new tables. The default value is `needed`.
|
@@ -1406,7 +1418,12 @@ module Google
|
|
1406
1418
|
# contain lowercase letters, numeric characters, underscores and
|
1407
1419
|
# dashes. International characters are allowed. Label values are
|
1408
1420
|
# optional. Label keys must start with a letter and each label in the
|
1409
|
-
# list must have a different key.
|
1421
|
+
# list must have a different key. See [Requirements for
|
1422
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
1423
|
+
# @param [Boolean] dryrun If set, don't actually run this job. Behavior
|
1424
|
+
# is undefined however for non-query jobs and may result in an error.
|
1425
|
+
# Deprecated.
|
1426
|
+
#
|
1410
1427
|
# @yield [job] a job configuration object
|
1411
1428
|
# @yieldparam [Google::Cloud::Bigquery::ExtractJob::Updater] job a job
|
1412
1429
|
# configuration object for setting additional options.
|
@@ -1421,13 +1438,15 @@ module Google
|
|
1421
1438
|
# table = dataset.table "my_table"
|
1422
1439
|
#
|
1423
1440
|
# extract_job = table.extract_job "gs://my-bucket/file-name.json",
|
1424
|
-
#
|
1441
|
+
# format: "json"
|
1442
|
+
# extract_job.wait_until_done!
|
1443
|
+
# extract_job.done? #=> true
|
1425
1444
|
#
|
1426
1445
|
# @!group Data
|
1427
1446
|
#
|
1428
1447
|
def extract_job extract_url, format: nil, compression: nil,
|
1429
|
-
delimiter: nil, header: nil,
|
1430
|
-
|
1448
|
+
delimiter: nil, header: nil, job_id: nil, prefix: nil,
|
1449
|
+
labels: nil, dryrun: nil
|
1431
1450
|
ensure_service!
|
1432
1451
|
options = { format: format, compression: compression,
|
1433
1452
|
delimiter: delimiter, header: header, dryrun: dryrun,
|
@@ -1643,7 +1662,12 @@ module Google
|
|
1643
1662
|
# contain lowercase letters, numeric characters, underscores and
|
1644
1663
|
# dashes. International characters are allowed. Label values are
|
1645
1664
|
# optional. Label keys must start with a letter and each label in the
|
1646
|
-
# list must have a different key.
|
1665
|
+
# list must have a different key. See [Requirements for
|
1666
|
+
# labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#requirements).
|
1667
|
+
# @param [Boolean] dryrun If set, don't actually run this job. Behavior
|
1668
|
+
# is undefined however for non-query jobs and may result in an error.
|
1669
|
+
# Deprecated.
|
1670
|
+
#
|
1647
1671
|
# @yield [load_job] a block for setting the load job
|
1648
1672
|
# @yieldparam [LoadJob] load_job the load job object to be updated
|
1649
1673
|
#
|
@@ -1700,8 +1724,8 @@ module Google
|
|
1700
1724
|
projection_fields: nil, jagged_rows: nil,
|
1701
1725
|
quoted_newlines: nil, encoding: nil, delimiter: nil,
|
1702
1726
|
ignore_unknown: nil, max_bad_records: nil, quote: nil,
|
1703
|
-
skip_leading: nil,
|
1704
|
-
|
1727
|
+
skip_leading: nil, job_id: nil, prefix: nil, labels: nil,
|
1728
|
+
autodetect: nil, null_marker: nil, dryrun: nil
|
1705
1729
|
ensure_service!
|
1706
1730
|
|
1707
1731
|
updater = load_job_updater format: format, create: create,
|
@@ -2058,6 +2082,8 @@ module Google
|
|
2058
2082
|
def delete
|
2059
2083
|
ensure_service!
|
2060
2084
|
service.delete_table dataset_id, table_id
|
2085
|
+
# Set flag for #exists?
|
2086
|
+
@exists = false
|
2061
2087
|
true
|
2062
2088
|
end
|
2063
2089
|
|
@@ -2081,14 +2107,21 @@ module Google
|
|
2081
2107
|
#
|
2082
2108
|
def reload!
|
2083
2109
|
ensure_service!
|
2084
|
-
gapi = service.get_table dataset_id, table_id
|
2085
|
-
@
|
2110
|
+
@gapi = service.get_table dataset_id, table_id
|
2111
|
+
@reference = nil
|
2112
|
+
@exists = nil
|
2113
|
+
self
|
2086
2114
|
end
|
2087
2115
|
alias refresh! reload!
|
2088
2116
|
|
2089
2117
|
##
|
2090
2118
|
# Determines whether the table exists in the BigQuery service. The
|
2091
|
-
# result is cached locally.
|
2119
|
+
# result is cached locally. To refresh state, set `force` to `true`.
|
2120
|
+
#
|
2121
|
+
# @param [Boolean] force Force the latest resource representation to be
|
2122
|
+
# retrieved from the BigQuery service when `true`. Otherwise the
|
2123
|
+
# return value of this method will be memoized to reduce the number of
|
2124
|
+
# API calls made to the BigQuery service. The default is `false`.
|
2092
2125
|
#
|
2093
2126
|
# @return [Boolean] `true` when the table exists in the BigQuery
|
2094
2127
|
# service, `false` otherwise.
|
@@ -2102,15 +2135,13 @@ module Google
|
|
2102
2135
|
# table = dataset.table "my_table", skip_lookup: true
|
2103
2136
|
# table.exists? # true
|
2104
2137
|
#
|
2105
|
-
def exists?
|
2106
|
-
|
2107
|
-
return true unless reference?
|
2138
|
+
def exists? force: nil
|
2139
|
+
return gapi_exists? if force
|
2108
2140
|
# If we have a value, return it
|
2109
2141
|
return @exists unless @exists.nil?
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
@exists = false
|
2142
|
+
# Always true if we have a gapi object
|
2143
|
+
return true if resource?
|
2144
|
+
gapi_exists?
|
2114
2145
|
end
|
2115
2146
|
|
2116
2147
|
##
|
@@ -2259,6 +2290,15 @@ module Google
|
|
2259
2290
|
reload!
|
2260
2291
|
end
|
2261
2292
|
|
2293
|
+
##
|
2294
|
+
# Fetch gapi and memoize whether resource exists.
|
2295
|
+
def gapi_exists?
|
2296
|
+
reload!
|
2297
|
+
@exists = true
|
2298
|
+
rescue Google::Cloud::NotFoundError
|
2299
|
+
@exists = false
|
2300
|
+
end
|
2301
|
+
|
2262
2302
|
def patch_gapi! *attributes
|
2263
2303
|
return if attributes.empty?
|
2264
2304
|
ensure_service!
|
@@ -2459,16 +2499,6 @@ module Google
|
|
2459
2499
|
end
|
2460
2500
|
end
|
2461
2501
|
|
2462
|
-
private
|
2463
|
-
|
2464
|
-
def get_table_ref table
|
2465
|
-
if table.respond_to? :table_ref
|
2466
|
-
table.table_ref
|
2467
|
-
else
|
2468
|
-
Service.table_ref_from_s table, table_ref
|
2469
|
-
end
|
2470
|
-
end
|
2471
|
-
|
2472
2502
|
##
|
2473
2503
|
# Yielded to a block to accumulate changes for a patch request.
|
2474
2504
|
class Updater < Table
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-bigquery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.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: 2018-
|
12
|
+
date: 2018-12-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|