google-cloud-bigquery 0.21.0 → 0.23.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/.yardopts +7 -0
- data/LICENSE +201 -0
- data/README.md +74 -0
- data/lib/google-cloud-bigquery.rb +2 -2
- data/lib/google/cloud/bigquery.rb +118 -8
- data/lib/google/cloud/bigquery/data.rb +5 -0
- data/lib/google/cloud/bigquery/dataset.rb +197 -17
- data/lib/google/cloud/bigquery/job.rb +3 -3
- data/lib/google/cloud/bigquery/project.rb +248 -20
- data/lib/google/cloud/bigquery/query_job.rb +14 -0
- data/lib/google/cloud/bigquery/service.rb +152 -4
- data/lib/google/cloud/bigquery/table.rb +3 -3
- data/lib/google/cloud/bigquery/time.rb +59 -0
- data/lib/google/cloud/bigquery/version.rb +1 -1
- data/lib/google/cloud/bigquery/view.rb +7 -7
- metadata +11 -7
@@ -74,6 +74,7 @@ module Google
|
|
74
74
|
# require "google/cloud/bigquery"
|
75
75
|
#
|
76
76
|
# bigquery = Google::Cloud::Bigquery.new
|
77
|
+
# dataset = bigquery.dataset "my_dataset"
|
77
78
|
# table = dataset.table "my_table"
|
78
79
|
#
|
79
80
|
# data = table.data
|
@@ -94,6 +95,7 @@ module Google
|
|
94
95
|
# require "google/cloud/bigquery"
|
95
96
|
#
|
96
97
|
# bigquery = Google::Cloud::Bigquery.new
|
98
|
+
# dataset = bigquery.dataset "my_dataset"
|
97
99
|
# table = dataset.table "my_table"
|
98
100
|
#
|
99
101
|
# data = table.data
|
@@ -129,6 +131,7 @@ module Google
|
|
129
131
|
# require "google/cloud/bigquery"
|
130
132
|
#
|
131
133
|
# bigquery = Google::Cloud::Bigquery.new
|
134
|
+
# dataset = bigquery.dataset "my_dataset"
|
132
135
|
# table = dataset.table "my_table"
|
133
136
|
#
|
134
137
|
# table.data.all do |row|
|
@@ -139,6 +142,7 @@ module Google
|
|
139
142
|
# require "google/cloud/bigquery"
|
140
143
|
#
|
141
144
|
# bigquery = Google::Cloud::Bigquery.new
|
145
|
+
# dataset = bigquery.dataset "my_dataset"
|
142
146
|
# table = dataset.table "my_table"
|
143
147
|
#
|
144
148
|
# words = table.data.all.map do |row|
|
@@ -149,6 +153,7 @@ module Google
|
|
149
153
|
# require "google/cloud/bigquery"
|
150
154
|
#
|
151
155
|
# bigquery = Google::Cloud::Bigquery.new
|
156
|
+
# dataset = bigquery.dataset "my_dataset"
|
152
157
|
# table = dataset.table "my_table"
|
153
158
|
#
|
154
159
|
# table.data.all(request_limit: 10) do |row|
|
@@ -179,7 +179,7 @@ module Google
|
|
179
179
|
def created_at
|
180
180
|
ensure_full_data!
|
181
181
|
begin
|
182
|
-
Time.at(Integer(@gapi.creation_time) / 1000.0)
|
182
|
+
::Time.at(Integer(@gapi.creation_time) / 1000.0)
|
183
183
|
rescue
|
184
184
|
nil
|
185
185
|
end
|
@@ -193,7 +193,7 @@ module Google
|
|
193
193
|
def modified_at
|
194
194
|
ensure_full_data!
|
195
195
|
begin
|
196
|
-
Time.at(Integer(@gapi.last_modified_time) / 1000.0)
|
196
|
+
::Time.at(Integer(@gapi.last_modified_time) / 1000.0)
|
197
197
|
rescue
|
198
198
|
nil
|
199
199
|
end
|
@@ -229,14 +229,14 @@ module Google
|
|
229
229
|
# bigquery = Google::Cloud::Bigquery.new
|
230
230
|
# dataset = bigquery.dataset "my_dataset"
|
231
231
|
#
|
232
|
-
# dataset.access
|
233
|
-
# #
|
234
|
-
# #
|
235
|
-
# #
|
236
|
-
# #
|
237
|
-
# #
|
238
|
-
# #
|
239
|
-
# #
|
232
|
+
# dataset.access # [{"role"=>"OWNER",
|
233
|
+
# # "specialGroup"=>"projectOwners"},
|
234
|
+
# # {"role"=>"WRITER",
|
235
|
+
# # "specialGroup"=>"projectWriters"},
|
236
|
+
# # {"role"=>"READER",
|
237
|
+
# # "specialGroup"=>"projectReaders"},
|
238
|
+
# # {"role"=>"OWNER",
|
239
|
+
# # "userByEmail"=>"123456789-...com"}]
|
240
240
|
#
|
241
241
|
# @example Manage the access rules by passing a block:
|
242
242
|
# require "google/cloud/bigquery"
|
@@ -322,7 +322,7 @@ module Google
|
|
322
322
|
#
|
323
323
|
# bigquery = Google::Cloud::Bigquery.new
|
324
324
|
# dataset = bigquery.dataset "my_dataset"
|
325
|
-
# table = dataset.create_table "my_table"
|
325
|
+
# table = dataset.create_table "my_table",
|
326
326
|
# name: "My Table",
|
327
327
|
# description: "A description of table."
|
328
328
|
#
|
@@ -336,7 +336,7 @@ module Google
|
|
336
336
|
# Google::Cloud::Bigquery::Schema::Field.new(
|
337
337
|
# "first_name", :string, mode: :required),
|
338
338
|
# Google::Cloud::Bigquery::Schema::Field.new(
|
339
|
-
# "cities_lived", :record, mode: :repeated
|
339
|
+
# "cities_lived", :record, mode: :repeated,
|
340
340
|
# fields: [
|
341
341
|
# Google::Cloud::Bigquery::Schema::Field.new(
|
342
342
|
# "place", :string, mode: :required),
|
@@ -520,10 +520,37 @@ module Google
|
|
520
520
|
# Sets the current dataset as the default dataset in the query. Useful
|
521
521
|
# for using unqualified table names.
|
522
522
|
#
|
523
|
+
# When using standard SQL and passing arguments using `params`, Ruby
|
524
|
+
# types are mapped to BigQuery types as follows:
|
525
|
+
#
|
526
|
+
# | BigQuery | Ruby | Notes |
|
527
|
+
# |-------------|----------------|---|
|
528
|
+
# | `BOOL` | `true`/`false` | |
|
529
|
+
# | `INT64` | `Integer` | |
|
530
|
+
# | `FLOAT64` | `Float` | |
|
531
|
+
# | `STRING` | `STRING` | |
|
532
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
533
|
+
# | `DATE` | `Date` | |
|
534
|
+
# | `TIMESTAMP` | `Time` | |
|
535
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
536
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
537
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
538
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
539
|
+
#
|
540
|
+
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types)
|
541
|
+
# for an overview of each BigQuery data type, including allowed values.
|
542
|
+
#
|
523
543
|
# @param [String] query A query string, following the BigQuery [query
|
524
544
|
# syntax](https://cloud.google.com/bigquery/query-reference), of the
|
525
545
|
# query to execute. Example: "SELECT count(f1) FROM
|
526
546
|
# [myProjectId:myDatasetId.myTableId]".
|
547
|
+
# @param [Array, Hash] params Standard SQL only. Used to pass query
|
548
|
+
# arguments when the `query` string contains either positional (`?`)
|
549
|
+
# or named (`@myparam`) query parameters. If value passed is an array
|
550
|
+
# `["foo"]`, the query must use positional query parameters. If value
|
551
|
+
# passed is a hash `{ myparam: "foo" }`, the query must use named
|
552
|
+
# query parameters. When set, `legacy_sql` will automatically be set
|
553
|
+
# to false and `standard_sql` to true.
|
527
554
|
# @param [String] priority Specifies a priority for the query. Possible
|
528
555
|
# values include `INTERACTIVE` and `BATCH`. The default value is
|
529
556
|
# `INTERACTIVE`.
|
@@ -558,6 +585,25 @@ module Google
|
|
558
585
|
# @param [Boolean] flatten Flattens all nested and repeated fields in
|
559
586
|
# the query results. The default value is `true`. `large_results`
|
560
587
|
# parameter must be `true` if this is set to `false`.
|
588
|
+
# @param [Boolean] legacy_sql Specifies whether to use BigQuery's
|
589
|
+
# [legacy
|
590
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
591
|
+
# dialect for this query. If set to false, the query will use
|
592
|
+
# BigQuery's [standard
|
593
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
594
|
+
# When set to false, the values of `large_results` and `flatten` are
|
595
|
+
# ignored; the query will be run as if `large_results` is true and
|
596
|
+
# `flatten` is false. Optional. The default value is true.
|
597
|
+
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
598
|
+
# [standard
|
599
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
600
|
+
# dialect for this query. If set to true, the query will use standard
|
601
|
+
# SQL rather than the [legacy
|
602
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
603
|
+
# dialect. When set to true, the values of `large_results` and
|
604
|
+
# `flatten` are ignored; the query will be run as if `large_results`
|
605
|
+
# is true and `flatten` is false. Optional. The default value is
|
606
|
+
# false.
|
561
607
|
#
|
562
608
|
# @return [Google::Cloud::Bigquery::QueryJob]
|
563
609
|
#
|
@@ -575,13 +621,61 @@ module Google
|
|
575
621
|
# end
|
576
622
|
# end
|
577
623
|
#
|
624
|
+
# @example Query using standard SQL:
|
625
|
+
# require "google/cloud/bigquery"
|
626
|
+
#
|
627
|
+
# bigquery = Google::Cloud::Bigquery.new
|
628
|
+
#
|
629
|
+
# job = bigquery.query_job "SELECT name FROM my_table",
|
630
|
+
# standard_sql: true
|
631
|
+
#
|
632
|
+
# job.wait_until_done!
|
633
|
+
# if !job.failed?
|
634
|
+
# job.query_results.each do |row|
|
635
|
+
# puts row["name"]
|
636
|
+
# end
|
637
|
+
# end
|
638
|
+
#
|
639
|
+
# @example Query using positional query parameters:
|
640
|
+
# require "google/cloud/bigquery"
|
641
|
+
#
|
642
|
+
# bigquery = Google::Cloud::Bigquery.new
|
643
|
+
#
|
644
|
+
# job = bigquery.query_job "SELECT name FROM my_table WHERE id = ?",
|
645
|
+
# params: [1]
|
646
|
+
#
|
647
|
+
# job.wait_until_done!
|
648
|
+
# if !job.failed?
|
649
|
+
# job.query_results.each do |row|
|
650
|
+
# puts row["name"]
|
651
|
+
# end
|
652
|
+
# end
|
653
|
+
#
|
654
|
+
# @example Query using named query parameters:
|
655
|
+
# require "google/cloud/bigquery"
|
656
|
+
#
|
657
|
+
# bigquery = Google::Cloud::Bigquery.new
|
658
|
+
#
|
659
|
+
# job = bigquery.query_job "SELECT name FROM my_table WHERE id = @id",
|
660
|
+
# params: { id: 1 }
|
661
|
+
#
|
662
|
+
# job.wait_until_done!
|
663
|
+
# if !job.failed?
|
664
|
+
# job.query_results.each do |row|
|
665
|
+
# puts row["name"]
|
666
|
+
# end
|
667
|
+
# end
|
668
|
+
#
|
578
669
|
# @!group Data
|
579
670
|
#
|
580
|
-
def query_job query, priority: "INTERACTIVE", cache: true,
|
581
|
-
|
671
|
+
def query_job query, params: nil, priority: "INTERACTIVE", cache: true,
|
672
|
+
table: nil, create: nil, write: nil, large_results: nil,
|
673
|
+
flatten: nil, legacy_sql: nil, standard_sql: nil
|
582
674
|
options = { priority: priority, cache: cache, table: table,
|
583
675
|
create: create, write: write,
|
584
|
-
large_results: large_results, flatten: flatten
|
676
|
+
large_results: large_results, flatten: flatten,
|
677
|
+
legacy_sql: legacy_sql, standard_sql: standard_sql,
|
678
|
+
params: params }
|
585
679
|
options[:dataset] ||= self
|
586
680
|
ensure_service!
|
587
681
|
gapi = service.query_job query, options
|
@@ -595,10 +689,37 @@ module Google
|
|
595
689
|
# Sets the current dataset as the default dataset in the query. Useful
|
596
690
|
# for using unqualified table names.
|
597
691
|
#
|
692
|
+
# When using standard SQL and passing arguments using `params`, Ruby
|
693
|
+
# types are mapped to BigQuery types as follows:
|
694
|
+
#
|
695
|
+
# | BigQuery | Ruby | Notes |
|
696
|
+
# |-------------|----------------|---|
|
697
|
+
# | `BOOL` | `true`/`false` | |
|
698
|
+
# | `INT64` | `Integer` | |
|
699
|
+
# | `FLOAT64` | `Float` | |
|
700
|
+
# | `STRING` | `STRING` | |
|
701
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
702
|
+
# | `DATE` | `Date` | |
|
703
|
+
# | `TIMESTAMP` | `Time` | |
|
704
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
705
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
706
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
707
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
708
|
+
#
|
709
|
+
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types)
|
710
|
+
# for an overview of each BigQuery data type, including allowed values.
|
711
|
+
#
|
598
712
|
# @param [String] query A query string, following the BigQuery [query
|
599
713
|
# syntax](https://cloud.google.com/bigquery/query-reference), of the
|
600
714
|
# query to execute. Example: "SELECT count(f1) FROM
|
601
715
|
# [myProjectId:myDatasetId.myTableId]".
|
716
|
+
# @param [Array, Hash] params Standard SQL only. Used to pass query
|
717
|
+
# arguments when the `query` string contains either positional (`?`)
|
718
|
+
# or named (`@myparam`) query parameters. If value passed is an array
|
719
|
+
# `["foo"]`, the query must use positional query parameters. If value
|
720
|
+
# passed is a hash `{ myparam: "foo" }`, the query must use named
|
721
|
+
# query parameters. When set, `legacy_sql` will automatically be set
|
722
|
+
# to false and `standard_sql` to true.
|
602
723
|
# @param [Integer] max The maximum number of rows of data to return per
|
603
724
|
# page of results. Setting this flag to a small value such as 1000 and
|
604
725
|
# then paging through results might improve reliability when the query
|
@@ -620,6 +741,25 @@ module Google
|
|
620
741
|
# whenever tables in the query are modified. The default value is
|
621
742
|
# true. For more information, see [query
|
622
743
|
# caching](https://developers.google.com/bigquery/querying-data).
|
744
|
+
# @param [Boolean] legacy_sql Specifies whether to use BigQuery's
|
745
|
+
# [legacy
|
746
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
747
|
+
# dialect for this query. If set to false, the query will use
|
748
|
+
# BigQuery's [standard
|
749
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
750
|
+
# When set to false, the values of `large_results` and `flatten` are
|
751
|
+
# ignored; the query will be run as if `large_results` is true and
|
752
|
+
# `flatten` is false. Optional. The default value is true.
|
753
|
+
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
754
|
+
# [standard
|
755
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
756
|
+
# dialect for this query. If set to true, the query will use standard
|
757
|
+
# SQL rather than the [legacy
|
758
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
759
|
+
# dialect. When set to true, the values of `large_results` and
|
760
|
+
# `flatten` are ignored; the query will be run as if `large_results`
|
761
|
+
# is true and `flatten` is false. Optional. The default value is
|
762
|
+
# false.
|
623
763
|
#
|
624
764
|
# @return [Google::Cloud::Bigquery::QueryData]
|
625
765
|
#
|
@@ -629,14 +769,54 @@ module Google
|
|
629
769
|
# bigquery = Google::Cloud::Bigquery.new
|
630
770
|
#
|
631
771
|
# data = bigquery.query "SELECT name FROM my_table"
|
772
|
+
#
|
773
|
+
# data.each do |row|
|
774
|
+
# puts row["name"]
|
775
|
+
# end
|
776
|
+
#
|
777
|
+
# @example Query using standard SQL:
|
778
|
+
# require "google/cloud/bigquery"
|
779
|
+
#
|
780
|
+
# bigquery = Google::Cloud::Bigquery.new
|
781
|
+
#
|
782
|
+
# data = bigquery.query "SELECT name FROM my_table",
|
783
|
+
# standard_sql: true
|
784
|
+
#
|
785
|
+
# data.each do |row|
|
786
|
+
# puts row["name"]
|
787
|
+
# end
|
788
|
+
#
|
789
|
+
# @example Query using positional query parameters:
|
790
|
+
# require "google/cloud/bigquery"
|
791
|
+
#
|
792
|
+
# bigquery = Google::Cloud::Bigquery.new
|
793
|
+
#
|
794
|
+
# data = bigquery.query "SELECT name FROM my_table WHERE id = ?",
|
795
|
+
# params: [1]
|
796
|
+
#
|
797
|
+
# data.each do |row|
|
798
|
+
# puts row["name"]
|
799
|
+
# end
|
800
|
+
#
|
801
|
+
# @example Query using named query parameters:
|
802
|
+
# require "google/cloud/bigquery"
|
803
|
+
#
|
804
|
+
# bigquery = Google::Cloud::Bigquery.new
|
805
|
+
#
|
806
|
+
# data = bigquery.query "SELECT name FROM my_table WHERE id = @id",
|
807
|
+
# params: { id: 1 }
|
808
|
+
#
|
632
809
|
# data.each do |row|
|
633
810
|
# puts row["name"]
|
634
811
|
# end
|
635
812
|
#
|
636
813
|
# @!group Data
|
637
814
|
#
|
638
|
-
def query query, max: nil, timeout: 10000, dryrun: nil,
|
639
|
-
|
815
|
+
def query query, params: nil, max: nil, timeout: 10000, dryrun: nil,
|
816
|
+
cache: true, legacy_sql: nil, standard_sql: nil
|
817
|
+
options = { max: max, timeout: timeout, dryrun: dryrun, cache: cache,
|
818
|
+
legacy_sql: legacy_sql, standard_sql: standard_sql,
|
819
|
+
params: params }
|
640
820
|
options[:dataset] ||= dataset_id
|
641
821
|
options[:project] ||= project_id
|
642
822
|
ensure_service!
|
@@ -126,7 +126,7 @@ module Google
|
|
126
126
|
##
|
127
127
|
# The time when the job was created.
|
128
128
|
def created_at
|
129
|
-
Time.at(Integer(@gapi.statistics.creation_time) / 1000.0)
|
129
|
+
::Time.at(Integer(@gapi.statistics.creation_time) / 1000.0)
|
130
130
|
rescue
|
131
131
|
nil
|
132
132
|
end
|
@@ -136,7 +136,7 @@ module Google
|
|
136
136
|
# This field is present after the job's state changes from `PENDING`
|
137
137
|
# to either `RUNNING` or `DONE`.
|
138
138
|
def started_at
|
139
|
-
Time.at(Integer(@gapi.statistics.start_time) / 1000.0)
|
139
|
+
::Time.at(Integer(@gapi.statistics.start_time) / 1000.0)
|
140
140
|
rescue
|
141
141
|
nil
|
142
142
|
end
|
@@ -145,7 +145,7 @@ module Google
|
|
145
145
|
# The time when the job ended.
|
146
146
|
# This field is present when the job's state is `DONE`.
|
147
147
|
def ended_at
|
148
|
-
Time.at(Integer(@gapi.statistics.end_time) / 1000.0)
|
148
|
+
::Time.at(Integer(@gapi.statistics.end_time) / 1000.0)
|
149
149
|
rescue
|
150
150
|
nil
|
151
151
|
end
|
@@ -21,6 +21,7 @@ require "google/cloud/bigquery/dataset"
|
|
21
21
|
require "google/cloud/bigquery/job"
|
22
22
|
require "google/cloud/bigquery/query_data"
|
23
23
|
require "google/cloud/bigquery/project/list"
|
24
|
+
require "google/cloud/bigquery/time"
|
24
25
|
|
25
26
|
module Google
|
26
27
|
module Cloud
|
@@ -72,11 +73,11 @@ module Google
|
|
72
73
|
# require "google/cloud/bigquery"
|
73
74
|
#
|
74
75
|
# bigquery = Google::Cloud::Bigquery.new(
|
75
|
-
# project: "my-
|
76
|
+
# project: "my-project-id",
|
76
77
|
# keyfile: "/path/to/keyfile.json"
|
77
78
|
# )
|
78
79
|
#
|
79
|
-
# bigquery.project #=> "my-
|
80
|
+
# bigquery.project #=> "my-project-id"
|
80
81
|
#
|
81
82
|
def project
|
82
83
|
service.project
|
@@ -95,10 +96,37 @@ module Google
|
|
95
96
|
# Queries data using the [asynchronous
|
96
97
|
# method](https://cloud.google.com/bigquery/querying-data).
|
97
98
|
#
|
99
|
+
# When using standard SQL and passing arguments using `params`, Ruby
|
100
|
+
# types are mapped to BigQuery types as follows:
|
101
|
+
#
|
102
|
+
# | BigQuery | Ruby | Notes |
|
103
|
+
# |-------------|----------------|---|
|
104
|
+
# | `BOOL` | `true`/`false` | |
|
105
|
+
# | `INT64` | `Integer` | |
|
106
|
+
# | `FLOAT64` | `Float` | |
|
107
|
+
# | `STRING` | `STRING` | |
|
108
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
109
|
+
# | `DATE` | `Date` | |
|
110
|
+
# | `TIMESTAMP` | `Time` | |
|
111
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
112
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
113
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
114
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
115
|
+
#
|
116
|
+
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types)
|
117
|
+
# for an overview of each BigQuery data type, including allowed values.
|
118
|
+
#
|
98
119
|
# @param [String] query A query string, following the BigQuery [query
|
99
120
|
# syntax](https://cloud.google.com/bigquery/query-reference), of the
|
100
121
|
# query to execute. Example: "SELECT count(f1) FROM
|
101
122
|
# [myProjectId:myDatasetId.myTableId]".
|
123
|
+
# @param [Array, Hash] params Standard SQL only. Used to pass query
|
124
|
+
# arguments when the `query` string contains either positional (`?`)
|
125
|
+
# or named (`@myparam`) query parameters. If value passed is an array
|
126
|
+
# `["foo"]`, the query must use positional query parameters. If value
|
127
|
+
# passed is a hash `{ myparam: "foo" }`, the query must use named
|
128
|
+
# query parameters. When set, `legacy_sql` will automatically be set
|
129
|
+
# to false and `standard_sql` to true.
|
102
130
|
# @param [String] priority Specifies a priority for the query. Possible
|
103
131
|
# values include `INTERACTIVE` and `BATCH`. The default value is
|
104
132
|
# `INTERACTIVE`.
|
@@ -135,6 +163,25 @@ module Google
|
|
135
163
|
# parameter must be `true` if this is set to `false`.
|
136
164
|
# @param [Dataset, String] dataset Specifies the default dataset to use
|
137
165
|
# for unqualified table names in the query.
|
166
|
+
# @param [Boolean] legacy_sql Specifies whether to use BigQuery's
|
167
|
+
# [legacy
|
168
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
169
|
+
# dialect for this query. If set to false, the query will use
|
170
|
+
# BigQuery's [standard
|
171
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
172
|
+
# When set to false, the values of `large_results` and `flatten` are
|
173
|
+
# ignored; the query will be run as if `large_results` is true and
|
174
|
+
# `flatten` is false. Optional. The default value is true.
|
175
|
+
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
176
|
+
# [standard
|
177
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
178
|
+
# dialect for this query. If set to true, the query will use standard
|
179
|
+
# SQL rather than the [legacy
|
180
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
181
|
+
# dialect. When set to true, the values of `large_results` and
|
182
|
+
# `flatten` are ignored; the query will be run as if `large_results`
|
183
|
+
# is true and `flatten` is false. Optional. The default value is
|
184
|
+
# false.
|
138
185
|
#
|
139
186
|
# @return [Google::Cloud::Bigquery::QueryJob]
|
140
187
|
#
|
@@ -153,14 +200,66 @@ module Google
|
|
153
200
|
# end
|
154
201
|
# end
|
155
202
|
#
|
156
|
-
|
157
|
-
|
158
|
-
|
203
|
+
# @example Query using standard SQL:
|
204
|
+
# require "google/cloud/bigquery"
|
205
|
+
#
|
206
|
+
# bigquery = Google::Cloud::Bigquery.new
|
207
|
+
#
|
208
|
+
# job = bigquery.query_job "SELECT name FROM " \
|
209
|
+
# "`my_proj.my_data.my_table`",
|
210
|
+
# standard_sql: true
|
211
|
+
#
|
212
|
+
# job.wait_until_done!
|
213
|
+
# if !job.failed?
|
214
|
+
# job.query_results.each do |row|
|
215
|
+
# puts row["name"]
|
216
|
+
# end
|
217
|
+
# end
|
218
|
+
#
|
219
|
+
# @example Query using positional query parameters:
|
220
|
+
# require "google/cloud/bigquery"
|
221
|
+
#
|
222
|
+
# bigquery = Google::Cloud::Bigquery.new
|
223
|
+
#
|
224
|
+
# job = bigquery.query_job "SELECT name FROM " \
|
225
|
+
# "`my_proj.my_data.my_table`" \
|
226
|
+
# " WHERE id = ?",
|
227
|
+
# params: [1]
|
228
|
+
#
|
229
|
+
# job.wait_until_done!
|
230
|
+
# if !job.failed?
|
231
|
+
# job.query_results.each do |row|
|
232
|
+
# puts row["name"]
|
233
|
+
# end
|
234
|
+
# end
|
235
|
+
#
|
236
|
+
# @example Query using named query parameters:
|
237
|
+
# require "google/cloud/bigquery"
|
238
|
+
#
|
239
|
+
# bigquery = Google::Cloud::Bigquery.new
|
240
|
+
#
|
241
|
+
# job = bigquery.query_job "SELECT name FROM " \
|
242
|
+
# "`my_proj.my_data.my_table`" \
|
243
|
+
# " WHERE id = @id",
|
244
|
+
# params: { id: 1 }
|
245
|
+
#
|
246
|
+
# job.wait_until_done!
|
247
|
+
# if !job.failed?
|
248
|
+
# job.query_results.each do |row|
|
249
|
+
# puts row["name"]
|
250
|
+
# end
|
251
|
+
# end
|
252
|
+
#
|
253
|
+
def query_job query, params: nil, priority: "INTERACTIVE", cache: true,
|
254
|
+
table: nil, create: nil, write: nil, large_results: nil,
|
255
|
+
flatten: nil, dataset: nil, legacy_sql: nil,
|
256
|
+
standard_sql: nil
|
159
257
|
ensure_service!
|
160
258
|
options = { priority: priority, cache: cache, table: table,
|
161
259
|
create: create, write: write,
|
162
260
|
large_results: large_results, flatten: flatten,
|
163
|
-
dataset: dataset
|
261
|
+
dataset: dataset, legacy_sql: legacy_sql,
|
262
|
+
standard_sql: standard_sql, params: params }
|
164
263
|
gapi = service.query_job query, options
|
165
264
|
Job.from_gapi gapi, service
|
166
265
|
end
|
@@ -169,10 +268,37 @@ module Google
|
|
169
268
|
# Queries data using the [synchronous
|
170
269
|
# method](https://cloud.google.com/bigquery/querying-data).
|
171
270
|
#
|
271
|
+
# When using standard SQL and passing arguments using `params`, Ruby
|
272
|
+
# types are mapped to BigQuery types as follows:
|
273
|
+
#
|
274
|
+
# | BigQuery | Ruby | Notes |
|
275
|
+
# |-------------|----------------|---|
|
276
|
+
# | `BOOL` | `true`/`false` | |
|
277
|
+
# | `INT64` | `Integer` | |
|
278
|
+
# | `FLOAT64` | `Float` | |
|
279
|
+
# | `STRING` | `STRING` | |
|
280
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
281
|
+
# | `DATE` | `Date` | |
|
282
|
+
# | `TIMESTAMP` | `Time` | |
|
283
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
284
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
285
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
286
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
287
|
+
#
|
288
|
+
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types)
|
289
|
+
# for an overview of each BigQuery data type, including allowed values.
|
290
|
+
#
|
172
291
|
# @param [String] query A query string, following the BigQuery [query
|
173
292
|
# syntax](https://cloud.google.com/bigquery/query-reference), of the
|
174
293
|
# query to execute. Example: "SELECT count(f1) FROM
|
175
294
|
# [myProjectId:myDatasetId.myTableId]".
|
295
|
+
# @param [Array, Hash] params Standard SQL only. Used to pass query
|
296
|
+
# arguments when the `query` string contains either positional (`?`)
|
297
|
+
# or named (`@myparam`) query parameters. If value passed is an array
|
298
|
+
# `["foo"]`, the query must use positional query parameters. If value
|
299
|
+
# passed is a hash `{ myparam: "foo" }`, the query must use named
|
300
|
+
# query parameters. When set, `legacy_sql` will automatically be set
|
301
|
+
# to false and `standard_sql` to true.
|
176
302
|
# @param [Integer] max The maximum number of rows of data to return per
|
177
303
|
# page of results. Setting this flag to a small value such as 1000 and
|
178
304
|
# then paging through results might improve reliability when the query
|
@@ -201,6 +327,25 @@ module Google
|
|
201
327
|
# @param [String] project Specifies the default projectId to assume for
|
202
328
|
# any unqualified table names in the query. Only used if `dataset`
|
203
329
|
# option is set.
|
330
|
+
# @param [Boolean] legacy_sql Specifies whether to use BigQuery's
|
331
|
+
# [legacy
|
332
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
333
|
+
# dialect for this query. If set to false, the query will use
|
334
|
+
# BigQuery's [standard
|
335
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
336
|
+
# When set to false, the values of `large_results` and `flatten` are
|
337
|
+
# ignored; the query will be run as if `large_results` is true and
|
338
|
+
# `flatten` is false. Optional. The default value is true.
|
339
|
+
# @param [Boolean] standard_sql Specifies whether to use BigQuery's
|
340
|
+
# [standard
|
341
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/)
|
342
|
+
# dialect for this query. If set to true, the query will use standard
|
343
|
+
# SQL rather than the [legacy
|
344
|
+
# SQL](https://cloud.google.com/bigquery/docs/reference/legacy-sql)
|
345
|
+
# dialect. When set to true, the values of `large_results` and
|
346
|
+
# `flatten` are ignored; the query will be run as if `large_results`
|
347
|
+
# is true and `flatten` is false. Optional. The default value is
|
348
|
+
# false.
|
204
349
|
#
|
205
350
|
# @return [Google::Cloud::Bigquery::QueryData]
|
206
351
|
#
|
@@ -210,6 +355,19 @@ module Google
|
|
210
355
|
# bigquery = Google::Cloud::Bigquery.new
|
211
356
|
#
|
212
357
|
# data = bigquery.query "SELECT name FROM [my_proj:my_data.my_table]"
|
358
|
+
#
|
359
|
+
# data.each do |row|
|
360
|
+
# puts row["name"]
|
361
|
+
# end
|
362
|
+
#
|
363
|
+
# @example Query using standard SQL:
|
364
|
+
# require "google/cloud/bigquery"
|
365
|
+
#
|
366
|
+
# bigquery = Google::Cloud::Bigquery.new
|
367
|
+
#
|
368
|
+
# data = bigquery.query "SELECT name FROM `my_proj.my_data.my_table`",
|
369
|
+
# standard_sql: true
|
370
|
+
#
|
213
371
|
# data.each do |row|
|
214
372
|
# puts row["name"]
|
215
373
|
# end
|
@@ -220,15 +378,47 @@ module Google
|
|
220
378
|
# bigquery = Google::Cloud::Bigquery.new
|
221
379
|
#
|
222
380
|
# data = bigquery.query "SELECT name FROM [my_proj:my_data.my_table]"
|
381
|
+
#
|
223
382
|
# data.all do |row|
|
224
383
|
# puts row["name"]
|
225
384
|
# end
|
226
385
|
#
|
227
|
-
|
228
|
-
|
386
|
+
# @example Query using positional query parameters:
|
387
|
+
# require "google/cloud/bigquery"
|
388
|
+
#
|
389
|
+
# bigquery = Google::Cloud::Bigquery.new
|
390
|
+
#
|
391
|
+
# data = bigquery.query "SELECT name " \
|
392
|
+
# "FROM [my_proj:my_data.my_table]" \
|
393
|
+
# "WHERE id = ?",
|
394
|
+
# params: [1]
|
395
|
+
#
|
396
|
+
# data.each do |row|
|
397
|
+
# puts row["name"]
|
398
|
+
# end
|
399
|
+
#
|
400
|
+
# @example Query using named query parameters:
|
401
|
+
# require "google/cloud/bigquery"
|
402
|
+
#
|
403
|
+
# bigquery = Google::Cloud::Bigquery.new
|
404
|
+
#
|
405
|
+
# data = bigquery.query "SELECT name " \
|
406
|
+
# "FROM [my_proj:my_data.my_table]" \
|
407
|
+
# "WHERE id = @id",
|
408
|
+
# params: { id: 1 }
|
409
|
+
#
|
410
|
+
# data.each do |row|
|
411
|
+
# puts row["name"]
|
412
|
+
# end
|
413
|
+
#
|
414
|
+
def query query, params: nil, max: nil, timeout: 10000, dryrun: nil,
|
415
|
+
cache: true, dataset: nil, project: nil, legacy_sql: nil,
|
416
|
+
standard_sql: nil
|
229
417
|
ensure_service!
|
230
418
|
options = { max: max, timeout: timeout, dryrun: dryrun, cache: cache,
|
231
|
-
dataset: dataset, project: project
|
419
|
+
dataset: dataset, project: project,
|
420
|
+
legacy_sql: legacy_sql, standard_sql: standard_sql,
|
421
|
+
params: params }
|
232
422
|
gapi = service.query query, options
|
233
423
|
QueryData.from_gapi gapi, service
|
234
424
|
end
|
@@ -273,7 +463,8 @@ module Google
|
|
273
463
|
# should reside. Possible values include `EU` and `US`. The default
|
274
464
|
# value is `US`.
|
275
465
|
# @yield [access] a block for setting rules
|
276
|
-
# @yieldparam [Dataset
|
466
|
+
# @yieldparam [Google::Cloud::Bigquery::Dataset] access the object
|
467
|
+
# accepting rules
|
277
468
|
#
|
278
469
|
# @return [Google::Cloud::Bigquery::Dataset]
|
279
470
|
#
|
@@ -293,21 +484,13 @@ module Google
|
|
293
484
|
# name: "My Dataset",
|
294
485
|
# description: "This is my Dataset"
|
295
486
|
#
|
296
|
-
# @example Access rules can be provided with the `access` option:
|
297
|
-
# require "google/cloud/bigquery"
|
298
|
-
#
|
299
|
-
# bigquery = Google::Cloud::Bigquery.new
|
300
|
-
#
|
301
|
-
# dataset = bigquery.create_dataset "my_dataset",
|
302
|
-
# access: [{"role"=>"WRITER", "userByEmail"=>"writers@example.com"}]
|
303
|
-
#
|
304
487
|
# @example Or, configure access with a block: (See {Dataset::Access})
|
305
488
|
# require "google/cloud/bigquery"
|
306
489
|
#
|
307
490
|
# bigquery = Google::Cloud::Bigquery.new
|
308
491
|
#
|
309
|
-
# dataset = bigquery.create_dataset "my_dataset" do |
|
310
|
-
# access.add_writer_user "writers@example.com"
|
492
|
+
# dataset = bigquery.create_dataset "my_dataset" do |table|
|
493
|
+
# table.access.add_writer_user "writers@example.com"
|
311
494
|
# end
|
312
495
|
#
|
313
496
|
def create_dataset dataset_id, name: nil, description: nil,
|
@@ -509,6 +692,51 @@ module Google
|
|
509
692
|
Project::List.from_gapi gapi, service, max
|
510
693
|
end
|
511
694
|
|
695
|
+
##
|
696
|
+
# Creates a Bigquery::Time object to represent a time, independent of a
|
697
|
+
# specific date.
|
698
|
+
#
|
699
|
+
# @param [Integer] hour Hour, valid values from 0 to 23.
|
700
|
+
# @param [Integer] minute Minute, valid values from 0 to 59.
|
701
|
+
# @param [Integer, Float] second Second, valid values from 0 to 59. Can
|
702
|
+
# contain microsecond precision.
|
703
|
+
#
|
704
|
+
# @return [Bigquery::Time]
|
705
|
+
#
|
706
|
+
# @example
|
707
|
+
# require "google/cloud/bigquery"
|
708
|
+
#
|
709
|
+
# bigquery = Google::Cloud::Bigquery.new
|
710
|
+
#
|
711
|
+
# fourpm = bigquery.time 16, 0, 0
|
712
|
+
# data = bigquery.query "SELECT name " \
|
713
|
+
# "FROM [my_proj:my_data.my_table]" \
|
714
|
+
# "WHERE time_of_date = @time",
|
715
|
+
# params: { time: fourpm }
|
716
|
+
#
|
717
|
+
# data.each do |row|
|
718
|
+
# puts row["name"]
|
719
|
+
# end
|
720
|
+
#
|
721
|
+
# @example Create Time with fractional seconds:
|
722
|
+
# require "google/cloud/bigquery"
|
723
|
+
#
|
724
|
+
# bigquery = Google::Cloud::Bigquery.new
|
725
|
+
#
|
726
|
+
# precise_time = bigquery.time 16, 35, 15.376541
|
727
|
+
# data = bigquery.query "SELECT name " \
|
728
|
+
# "FROM [my_proj:my_data.my_table]" \
|
729
|
+
# "WHERE time_of_date >= @time",
|
730
|
+
# params: { time: precise_time }
|
731
|
+
#
|
732
|
+
# data.each do |row|
|
733
|
+
# puts row["name"]
|
734
|
+
# end
|
735
|
+
#
|
736
|
+
def time hour, minute, second
|
737
|
+
Bigquery::Time.new "#{hour}:#{minute}:#{second}"
|
738
|
+
end
|
739
|
+
|
512
740
|
##
|
513
741
|
# @private New Project from a Google API Client object, using the
|
514
742
|
# same Credentials as this project.
|