Class: Gcloud::Bigquery::View

Inherits:
Object
  • Object
show all
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.

Examples:

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]"

Attributes collapse

Lifecycle collapse

Data collapse

Instance Method Details

#api_urlObject

A URL that can be used to access the dataset using the REST API.


130
131
132
133
# File 'lib/gcloud/bigquery/view.rb', line 130

def api_url
  ensure_full_data!
  @gapi["selfLink"]
end

#created_atObject

The time when this table was created.


159
160
161
162
# File 'lib/gcloud/bigquery/view.rb', line 159

def created_at
  ensure_full_data!
  Time.at(@gapi["creationTime"] / 1000.0)
end

#data(max: nil, timeout: nil, cache: nil, dryrun: nil) ⇒ Gcloud::Bigquery::QueryData

Runs a query to retrieve all data from the view.

Examples:

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?

Parameters:

  • max (Integer)

    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.

  • timeout (Integer)

    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).

  • cache (Boolean)

    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.

  • dryrun (Boolean)

    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 is false.

Returns:


326
327
328
329
330
331
332
333
334
335
336
# File 'lib/gcloud/bigquery/view.rb', line 326

def data max: nil, timeout: nil, cache: nil, dryrun: nil
  sql = "SELECT * FROM #{@gapi['id']}"
  ensure_connection!
  options = { max: max, timeout: timeout, cache: cache, dryrun: dryrun }
  resp = connection.query sql, options
  if resp.success?
    QueryData.from_gapi resp.data, connection
  else
    fail ApiError.from_response(resp)
  end
end

#dataset_idObject

The ID of the Dataset containing this table.


74
75
76
# File 'lib/gcloud/bigquery/view.rb', line 74

def dataset_id
  @gapi["tableReference"]["datasetId"]
end

#deleteBoolean

Permanently deletes the table.

Examples:

require "gcloud"

gcloud = Gcloud.new
bigquery = gcloud.bigquery
dataset = bigquery.dataset "my_dataset"
table = dataset.table "my_table"

table.delete

Returns:

  • (Boolean)

    Returns true if the table was deleted.


355
356
357
358
359
360
361
362
363
# File 'lib/gcloud/bigquery/view.rb', line 355

def delete
  ensure_connection!
  resp = connection.delete_table dataset_id, table_id
  if resp.success?
    true
  else
    fail ApiError.from_response(resp)
  end
end

#descriptionObject

The description of the table.


140
141
142
143
# File 'lib/gcloud/bigquery/view.rb', line 140

def description
  ensure_full_data!
  @gapi["description"]
end

#description=(new_description) ⇒ Object

Updates the description of the table.


150
151
152
# File 'lib/gcloud/bigquery/view.rb', line 150

def description= new_description
  patch_gapi! description: new_description
end

#etagObject

A string hash of the dataset.


120
121
122
123
# File 'lib/gcloud/bigquery/view.rb', line 120

def etag
  ensure_full_data!
  @gapi["etag"]
end

#expires_atObject

The time when this table expires. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.


171
172
173
174
175
# File 'lib/gcloud/bigquery/view.rb', line 171

def expires_at
  ensure_full_data!
  return nil if @gapi["expirationTime"].nil?
  Time.at(@gapi["expirationTime"] / 1000.0)
end

#fieldsObject

The fields of the table.


234
235
236
237
238
239
# File 'lib/gcloud/bigquery/view.rb', line 234

def fields
  f = schema["fields"]
  f = f.to_hash if f.respond_to? :to_hash
  f = [] if f.nil?
  f
end

#headersObject

The names of the columns in the table.


246
247
248
# File 'lib/gcloud/bigquery/view.rb', line 246

def headers
  fields.map { |f| f["name"] }
end

#locationObject

The geographic location where the table should reside. Possible values include EU and US. The default value is US.


211
212
213
214
# File 'lib/gcloud/bigquery/view.rb', line 211

def location
  ensure_full_data!
  @gapi["location"]
end

#modified_atObject

The date when this table was last modified.


182
183
184
185
# File 'lib/gcloud/bigquery/view.rb', line 182

def modified_at
  ensure_full_data!
  Time.at(@gapi["lastModifiedTime"] / 1000.0)
end

#nameObject

The name of the table.


102
103
104
# File 'lib/gcloud/bigquery/view.rb', line 102

def name
  @gapi["friendlyName"]
end

#name=(new_name) ⇒ Object

Updates the name of the table.


111
112
113
# File 'lib/gcloud/bigquery/view.rb', line 111

def name= new_name
  patch_gapi! name: new_name
end

#project_idObject

The ID of the Project containing this table.


83
84
85
# File 'lib/gcloud/bigquery/view.rb', line 83

def project_id
  @gapi["tableReference"]["projectId"]
end

#queryObject

The query that executes each time the view is loaded.


255
256
257
# File 'lib/gcloud/bigquery/view.rb', line 255

def query
  @gapi["view"]["query"] if @gapi["view"]
end

#query=(new_query) ⇒ Object

Updates the query that executes each time the view is loaded.

Examples:

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]"

Parameters:

  • new_query (String)

    The query that defines the view.

See Also:


279
280
281
# File 'lib/gcloud/bigquery/view.rb', line 279

def query= new_query
  patch_gapi! query: new_query
end

#reload!Object Also known as: refresh!

Reloads the table with current data from the BigQuery service.


370
371
372
373
374
375
376
377
378
# File 'lib/gcloud/bigquery/view.rb', line 370

def reload!
  ensure_connection!
  resp = connection.get_table dataset_id, table_id
  if resp.success?
    @gapi = resp.data
  else
    fail ApiError.from_response(resp)
  end
end

#schemaObject

The schema of the table.


221
222
223
224
225
226
227
# File 'lib/gcloud/bigquery/view.rb', line 221

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".

Returns:

  • (Boolean)

192
193
194
# File 'lib/gcloud/bigquery/view.rb', line 192

def table?
  @gapi["type"] == "TABLE"
end

#table_idObject

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.


65
66
67
# File 'lib/gcloud/bigquery/view.rb', line 65

def table_id
  @gapi["tableReference"]["tableId"]
end

#view?Boolean

Checks if the table's type is "VIEW".

Returns:

  • (Boolean)

201
202
203
# File 'lib/gcloud/bigquery/view.rb', line 201

def view?
  @gapi["type"] == "VIEW"
end