Class: Gcloud::Bigquery::View
- Inherits:
-
Object
- Object
- Gcloud::Bigquery::View
- Defined in:
- lib/gcloud/bigquery/view.rb
Overview
View
A view is a virtual table defined by a SQL query. You can query views in the browser tool, or by using a query job.
BigQuery’s views are logical views, not materialized views, which means that the query that defines the view is re-executed every time the view is queried. Queries are billed according to the total amount of data in all table fields referenced directly or indirectly by the top-level query.
require "gcloud"
gcloud = Gcloud.new
bigquery = gcloud.bigquery
dataset = bigquery.dataset "my_dataset"
view = dataset.create_view "my_view",
"SELECT name, age FROM [proj:dataset.users]"
Instance Attribute Summary collapse
-
#connection ⇒ Object
The Connection object.
-
#gapi ⇒ Object
The Google API Client object.
Class Method Summary collapse
-
.from_gapi(gapi, conn) ⇒ Object
New Table from a Google API Client object.
Instance Method Summary collapse
-
#created_at ⇒ Object
The time when this table was created.
-
#data(options = {}) ⇒ Object
Runs a query to retrieve all data from the view.
-
#dataset_id ⇒ Object
The ID of the
Dataset
containing this table. -
#delete ⇒ Object
Permanently deletes the table.
-
#description ⇒ Object
The description of the table.
-
#description=(new_description) ⇒ Object
Updates the description of the table.
-
#etag ⇒ Object
A string hash of the dataset.
-
#expires_at ⇒ Object
The time when this table expires.
-
#fields ⇒ Object
The fields of the table.
-
#headers ⇒ Object
The names of the columns in the table.
-
#initialize ⇒ View
constructor
Create an empty Table object.
-
#location ⇒ Object
The geographic location where the table should reside.
-
#modified_at ⇒ Object
The date when this table was last modified.
-
#name ⇒ Object
The name of the table.
-
#name=(new_name) ⇒ Object
Updates the name of the table.
-
#project_id ⇒ Object
The ID of the
Project
containing this table. -
#query ⇒ Object
The query that executes each time the view is loaded.
-
#query=(new_query) ⇒ Object
Updates the query that executes each time the view is loaded.
-
#schema ⇒ Object
The schema of the table.
-
#table? ⇒ Boolean
Checks if the table’s type is “TABLE”.
-
#table_id ⇒ Object
A unique ID for this table.
-
#url ⇒ Object
A URL that can be used to access the dataset using the REST API.
-
#view? ⇒ Boolean
Checks if the table’s type is “VIEW”.
Constructor Details
#initialize ⇒ View
Create an empty Table object.
52 53 54 55 |
# File 'lib/gcloud/bigquery/view.rb', line 52 def initialize #:nodoc: @connection = nil @gapi = {} end |
Instance Attribute Details
#connection ⇒ Object
The Connection object.
44 45 46 |
# File 'lib/gcloud/bigquery/view.rb', line 44 def connection @connection end |
#gapi ⇒ Object
The Google API Client object.
48 49 50 |
# File 'lib/gcloud/bigquery/view.rb', line 48 def gapi @gapi end |
Class Method Details
.from_gapi(gapi, conn) ⇒ Object
New Table from a Google API Client object.
372 373 374 375 376 377 |
# File 'lib/gcloud/bigquery/view.rb', line 372 def self.from_gapi gapi, conn #:nodoc: new.tap do |f| f.gapi = gapi f.connection = conn end end |
Instance Method Details
#created_at ⇒ Object
The time when this table was created.
:category: Attributes
148 149 150 151 |
# File 'lib/gcloud/bigquery/view.rb', line 148 def created_at ensure_full_data! Time.at(@gapi["creationTime"] / 1000.0) end |
#data(options = {}) ⇒ Object
Runs a query to retrieve all data from the view.
Parameters
options
-
An optional Hash for controlling additional behavior. (
Hash
) options[:max]
-
The maximum number of rows of data to return per page of results. Setting this flag to a small value such as 1000 and then paging through results might improve reliability when the query result set is large. In addition to this limit, responses are also limited to 10 MB. By default, there is no maximum row count, and only the byte limit applies. (
Integer
) options[:timeout]
-
How long to wait for the query to complete, in milliseconds, before the request times out and returns. Note that this is only a timeout for the request, not the query. If the query takes longer to run than the timeout value, the call returns without any results and with QueryData#complete? set to false. The default value is 10000 milliseconds (10 seconds). (
Integer
) options[:dryrun]
-
If set to
true
, BigQuery doesn’t run the job. Instead, if the query is valid, BigQuery returns statistics about the job such as how many bytes would be processed. If the query is invalid, an error returns. The default value isfalse
. (Boolean
) options[:cache]
-
Whether to look for the result in the query cache. The query cache is a best-effort cache that will be flushed whenever tables in the query are modified. The default value is true. For more information, see query caching. (
Boolean
)
Returns
Gcloud::Bigquery::QueryData
Example
require "gcloud"
gcloud = Gcloud.new
bigquery = gcloud.bigquery
dataset = bigquery.dataset "my_dataset"
view = dataset.table "my_view"
data = view.data
data.each do |row|
puts row["first_name"]
end
more_data = data.next if data.next?
:category: Data
329 330 331 332 333 334 335 336 337 338 |
# File 'lib/gcloud/bigquery/view.rb', line 329 def data = {} sql = "SELECT * FROM #{@gapi['id']}" ensure_connection! resp = connection.query sql, if resp.success? QueryData.from_gapi resp.data, connection else fail ApiError.from_response(resp) end end |
#dataset_id ⇒ Object
The ID of the Dataset
containing this table.
:category: Attributes
73 74 75 |
# File 'lib/gcloud/bigquery/view.rb', line 73 def dataset_id @gapi["tableReference"]["datasetId"] end |
#delete ⇒ Object
360 361 362 363 364 365 366 367 368 |
# File 'lib/gcloud/bigquery/view.rb', line 360 def delete ensure_connection! resp = connection.delete_table dataset_id, table_id if resp.success? true else fail ApiError.from_response(resp) end end |
#description ⇒ Object
The description of the table.
:category: Attributes
129 130 131 132 |
# File 'lib/gcloud/bigquery/view.rb', line 129 def description ensure_full_data! @gapi["description"] end |
#description=(new_description) ⇒ Object
Updates the description of the table.
:category: Lifecycle
139 140 141 |
# File 'lib/gcloud/bigquery/view.rb', line 139 def description= new_description patch_gapi! description: new_description end |
#etag ⇒ Object
A string hash of the dataset.
:category: Attributes
109 110 111 112 |
# File 'lib/gcloud/bigquery/view.rb', line 109 def etag ensure_full_data! @gapi["etag"] end |
#expires_at ⇒ Object
The time when this table expires. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
:category: Attributes
160 161 162 163 164 |
# File 'lib/gcloud/bigquery/view.rb', line 160 def expires_at ensure_full_data! return nil if @gapi["expirationTime"].nil? Time.at(@gapi["expirationTime"] / 1000.0) end |
#fields ⇒ Object
The fields of the table.
:category: Attributes
223 224 225 226 227 228 |
# File 'lib/gcloud/bigquery/view.rb', line 223 def fields f = schema["fields"] f = f.to_hash if f.respond_to? :to_hash f = [] if f.nil? f end |
#headers ⇒ Object
The names of the columns in the table.
:category: Attributes
235 236 237 |
# File 'lib/gcloud/bigquery/view.rb', line 235 def headers fields.map { |f| f["name"] } end |
#location ⇒ Object
The geographic location where the table should reside. Possible values include EU and US. The default value is US.
:category: Attributes
200 201 202 203 |
# File 'lib/gcloud/bigquery/view.rb', line 200 def location ensure_full_data! @gapi["location"] end |
#modified_at ⇒ Object
The date when this table was last modified.
:category: Attributes
171 172 173 174 |
# File 'lib/gcloud/bigquery/view.rb', line 171 def modified_at ensure_full_data! Time.at(@gapi["lastModifiedTime"] / 1000.0) end |
#name ⇒ Object
The name of the table.
:category: Attributes
91 92 93 |
# File 'lib/gcloud/bigquery/view.rb', line 91 def name @gapi["friendlyName"] end |
#name=(new_name) ⇒ Object
Updates the name of the table.
:category: Lifecycle
100 101 102 |
# File 'lib/gcloud/bigquery/view.rb', line 100 def name= new_name patch_gapi! name: new_name end |
#project_id ⇒ Object
The ID of the Project
containing this table.
:category: Attributes
82 83 84 |
# File 'lib/gcloud/bigquery/view.rb', line 82 def project_id @gapi["tableReference"]["projectId"] end |
#query ⇒ Object
The query that executes each time the view is loaded.
:category: Attributes
244 245 246 |
# File 'lib/gcloud/bigquery/view.rb', line 244 def query @gapi["view"]["query"] if @gapi["view"] end |
#query=(new_query) ⇒ Object
Updates the query that executes each time the view is loaded. See the BigQuery Query Reference .
Parameters
new_query
-
The query that defines the view. (
String
)
Example
require "gcloud"
gcloud = Gcloud.new
bigquery = gcloud.bigquery
dataset = bigquery.dataset "my_dataset"
view = dataset.table "my_view"
view.query = "SELECT first_name FROM [my_project:my_dataset.my_table]"
:category: Lifecycle
271 272 273 |
# File 'lib/gcloud/bigquery/view.rb', line 271 def query= new_query patch_gapi! query: new_query end |
#schema ⇒ Object
The schema of the table.
:category: Attributes
210 211 212 213 214 215 216 |
# File 'lib/gcloud/bigquery/view.rb', line 210 def schema ensure_full_data! s = @gapi["schema"] s = s.to_hash if s.respond_to? :to_hash s = {} if s.nil? s end |
#table? ⇒ Boolean
Checks if the table’s type is “TABLE”.
:category: Attributes
181 182 183 |
# File 'lib/gcloud/bigquery/view.rb', line 181 def table? @gapi["type"] == "TABLE" end |
#table_id ⇒ Object
A unique ID for this table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
:category: Attributes
64 65 66 |
# File 'lib/gcloud/bigquery/view.rb', line 64 def table_id @gapi["tableReference"]["tableId"] end |
#url ⇒ Object
A URL that can be used to access the dataset using the REST API.
:category: Attributes
119 120 121 122 |
# File 'lib/gcloud/bigquery/view.rb', line 119 def url ensure_full_data! @gapi["selfLink"] end |
#view? ⇒ Boolean
Checks if the table’s type is “VIEW”.
:category: Attributes
190 191 192 |
# File 'lib/gcloud/bigquery/view.rb', line 190 def view? @gapi["type"] == "VIEW" end |