Class: Google::Cloud::Bigquery::Table
- Inherits:
-
Object
- Object
- Google::Cloud::Bigquery::Table
- Defined in:
- lib/google/cloud/bigquery/table.rb,
lib/google/cloud/bigquery/table/list.rb
Overview
Table
A named resource representing a BigQuery table that holds zero or more records. Every table is defined by a schema that may contain nested and repeated fields.
Direct Known Subclasses
Defined Under Namespace
Attributes collapse
-
#api_url ⇒ Object
A URL that can be used to access the dataset using the REST API.
-
#created_at ⇒ Object
The time when this table was created.
-
#dataset_id ⇒ Object
The ID of the
Dataset
containing this 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.
-
#id ⇒ Object
The combined Project ID, Dataset ID, and Table ID for this table, in the format specified by the Legacy SQL Query Reference:
project_name:datasetId.tableId
. -
#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_id(standard_sql: nil, legacy_sql: nil) ⇒ Object
The value returned by #id, wrapped in square brackets if the Project ID contains dashes, as specified by the Query Reference.
-
#schema(replace: false) {|schema| ... } ⇒ Google::Cloud::Bigquery::Schema
Returns the table's schema.
-
#table? ⇒ Boolean
Checks if the table's type is "TABLE".
-
#table_id ⇒ Object
A unique ID for this table.
-
#time_partitioning? ⇒ Boolean
Is the table partitioned?.
-
#time_partitioning_expiration ⇒ Object
The expiration for the table partitions, if any, in seconds.
-
#time_partitioning_expiration=(expiration) ⇒ Object
Sets the partition expiration for the table.
-
#time_partitioning_type ⇒ Object
The period for which the table is partitioned, if any.
-
#time_partitioning_type=(type) ⇒ Object
Sets the partitioning for the table.
-
#view? ⇒ Boolean
Checks if the table's type is "VIEW".
Data collapse
-
#bytes_count ⇒ Object
The number of bytes in the table.
-
#copy(destination_table, create: nil, write: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::CopyJob
Copies the data from the table to another table.
-
#data(token: nil, max: nil, start: nil) ⇒ Google::Cloud::Bigquery::Data
Retrieves data from the table.
-
#extract(extract_url, format: nil, compression: nil, delimiter: nil, header: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::ExtractJob
Extract the data from the table to a Google Cloud Storage file.
-
#insert(rows, skip_invalid: nil, ignore_unknown: nil) ⇒ Google::Cloud::Bigquery::InsertResponse
Inserts data into the table for near-immediate querying, without the need to complete a #load operation before the data can appear in query results.
-
#load(file, format: nil, create: nil, write: nil, projection_fields: nil, jagged_rows: nil, quoted_newlines: nil, encoding: nil, delimiter: nil, ignore_unknown: nil, max_bad_records: nil, quote: nil, skip_leading: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::LoadJob
Loads data into the table.
-
#rows_count ⇒ Object
The number of rows in the table.
Lifecycle collapse
-
#delete ⇒ Boolean
Permanently deletes the table.
-
#reload! ⇒ Object
(also: #refresh!)
Reloads the table with current data from the BigQuery service.
Instance Method Details
#api_url ⇒ Object
A URL that can be used to access the dataset using the REST API.
292 293 294 295 |
# File 'lib/google/cloud/bigquery/table.rb', line 292 def api_url ensure_full_data! @gapi.self_link end |
#bytes_count ⇒ Object
The number of bytes in the table.
322 323 324 325 326 327 328 329 |
# File 'lib/google/cloud/bigquery/table.rb', line 322 def bytes_count ensure_full_data! begin Integer @gapi.num_bytes rescue nil end end |
#copy(destination_table, create: nil, write: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::CopyJob
Copies the data from the table to another table. The destination table
argument can also be a string identifier as specified by the Query
Reference:
project_name:datasetId.tableId
. This is useful for referencing
tables in other projects and datasets.
579 580 581 582 583 584 585 586 |
# File 'lib/google/cloud/bigquery/table.rb', line 579 def copy destination_table, create: nil, write: nil, dryrun: nil ensure_service! = { create: create, write: write, dryrun: dryrun } gapi = service.copy_table table_ref, get_table_ref(destination_table), Job.from_gapi gapi, service end |
#created_at ⇒ Object
The time when this table was created.
350 351 352 353 354 355 356 357 |
# File 'lib/google/cloud/bigquery/table.rb', line 350 def created_at ensure_full_data! begin ::Time.at(Integer(@gapi.creation_time) / 1000.0) rescue nil end end |
#data(token: nil, max: nil, start: nil) ⇒ Google::Cloud::Bigquery::Data
Retrieves data from the table.
522 523 524 525 526 527 |
# File 'lib/google/cloud/bigquery/table.rb', line 522 def data token: nil, max: nil, start: nil ensure_service! = { token: token, max: max, start: start } gapi = service.list_tabledata dataset_id, table_id, Data.from_gapi gapi, self end |
#dataset_id ⇒ Object
The ID of the Dataset
containing this table.
99 100 101 |
# File 'lib/google/cloud/bigquery/table.rb', line 99 def dataset_id @gapi.table_reference.dataset_id end |
#delete ⇒ Boolean
Permanently deletes the table.
838 839 840 841 842 |
# File 'lib/google/cloud/bigquery/table.rb', line 838 def delete ensure_service! service.delete_table dataset_id, table_id true end |
#description ⇒ Object
The description of the table.
302 303 304 305 |
# File 'lib/google/cloud/bigquery/table.rb', line 302 def description ensure_full_data! @gapi.description end |
#description=(new_description) ⇒ Object
Updates the description of the table.
312 313 314 315 |
# File 'lib/google/cloud/bigquery/table.rb', line 312 def description= new_description @gapi.update! description: new_description patch_gapi! :description end |
#etag ⇒ Object
A string hash of the dataset.
282 283 284 285 |
# File 'lib/google/cloud/bigquery/table.rb', line 282 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.
366 367 368 369 370 371 372 373 |
# File 'lib/google/cloud/bigquery/table.rb', line 366 def expires_at ensure_full_data! begin ::Time.at(Integer(@gapi.expiration_time) / 1000.0) rescue nil end end |
#extract(extract_url, format: nil, compression: nil, delimiter: nil, header: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::ExtractJob
Extract the data from the table to a Google Cloud Storage file.
628 629 630 631 632 633 634 635 |
# File 'lib/google/cloud/bigquery/table.rb', line 628 def extract extract_url, format: nil, compression: nil, delimiter: nil, header: nil, dryrun: nil ensure_service! = { format: format, compression: compression, delimiter: delimiter, header: header, dryrun: dryrun } gapi = service.extract_table table_ref, extract_url, Job.from_gapi gapi, service end |
#fields ⇒ Object
The fields of the table.
469 470 471 |
# File 'lib/google/cloud/bigquery/table.rb', line 469 def fields schema.fields end |
#headers ⇒ Object
The names of the columns in the table.
478 479 480 |
# File 'lib/google/cloud/bigquery/table.rb', line 478 def headers schema.headers end |
#id ⇒ Object
The combined Project ID, Dataset ID, and Table ID for this table, in
the format specified by the Legacy SQL Query
Reference:
project_name:datasetId.tableId
. To use this value in queries see
#query_id.
220 221 222 |
# File 'lib/google/cloud/bigquery/table.rb', line 220 def id @gapi.id end |
#insert(rows, skip_invalid: nil, ignore_unknown: nil) ⇒ Google::Cloud::Bigquery::InsertResponse
Inserts data into the table for near-immediate querying, without the need to complete a #load operation before the data can appear in query results.
812 813 814 815 816 817 818 819 820 |
# File 'lib/google/cloud/bigquery/table.rb', line 812 def insert rows, skip_invalid: nil, ignore_unknown: nil rows = [rows] if rows.is_a? Hash rows = Convert.to_json_rows rows ensure_service! = { skip_invalid: skip_invalid, ignore_unknown: ignore_unknown } gapi = service.insert_tabledata dataset_id, table_id, rows, InsertResponse.from_gapi rows, gapi end |
#load(file, format: nil, create: nil, write: nil, projection_fields: nil, jagged_rows: nil, quoted_newlines: nil, encoding: nil, delimiter: nil, ignore_unknown: nil, max_bad_records: nil, quote: nil, skip_leading: nil, dryrun: nil) ⇒ Google::Cloud::Bigquery::LoadJob
Loads data into the table. You can pass a google-cloud storage file path or a google-cloud storage file instance. Or, you can upload a file directly. See Loading Data with a POST Request.
760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 |
# File 'lib/google/cloud/bigquery/table.rb', line 760 def load file, format: nil, create: nil, write: nil, projection_fields: nil, jagged_rows: nil, quoted_newlines: nil, encoding: nil, delimiter: nil, ignore_unknown: nil, max_bad_records: nil, quote: nil, skip_leading: nil, dryrun: nil ensure_service! = { format: format, create: create, write: write, projection_fields: projection_fields, jagged_rows: jagged_rows, quoted_newlines: quoted_newlines, encoding: encoding, delimiter: delimiter, ignore_unknown: ignore_unknown, max_bad_records: max_bad_records, quote: quote, skip_leading: skip_leading, dryrun: dryrun } return load_storage(file, ) if storage_url? file return load_local(file, ) if local_file? file fail Google::Cloud::Error, "Don't know how to load #{file}" end |
#location ⇒ Object
The geographic location where the table should reside. Possible values include EU and US. The default value is US.
413 414 415 416 |
# File 'lib/google/cloud/bigquery/table.rb', line 413 def location ensure_full_data! @gapi.location end |
#modified_at ⇒ Object
The date when this table was last modified.
380 381 382 383 384 385 386 387 |
# File 'lib/google/cloud/bigquery/table.rb', line 380 def modified_at ensure_full_data! begin ::Time.at(Integer(@gapi.last_modified_time) / 1000.0) rescue nil end end |
#name ⇒ Object
The name of the table.
263 264 265 |
# File 'lib/google/cloud/bigquery/table.rb', line 263 def name @gapi.friendly_name end |
#name=(new_name) ⇒ Object
Updates the name of the table.
272 273 274 275 |
# File 'lib/google/cloud/bigquery/table.rb', line 272 def name= new_name @gapi.update! friendly_name: new_name patch_gapi! :friendly_name end |
#project_id ⇒ Object
The ID of the Project
containing this table.
108 109 110 |
# File 'lib/google/cloud/bigquery/table.rb', line 108 def project_id @gapi.table_reference.project_id end |
#query_id(standard_sql: nil, legacy_sql: nil) ⇒ Object
The value returned by #id, wrapped in square brackets if the Project ID contains dashes, as specified by the Query Reference. Useful in queries.
250 251 252 253 254 255 256 |
# File 'lib/google/cloud/bigquery/table.rb', line 250 def query_id standard_sql: nil, legacy_sql: nil if Convert.resolve_legacy_sql standard_sql, legacy_sql "[#{id}]" else "`#{project_id}.#{dataset_id}.#{table_id}`" end end |
#reload! ⇒ Object Also known as: refresh!
Reloads the table with current data from the BigQuery service.
849 850 851 852 853 |
# File 'lib/google/cloud/bigquery/table.rb', line 849 def reload! ensure_service! gapi = service.get_table dataset_id, table_id @gapi = gapi end |
#rows_count ⇒ Object
The number of rows in the table.
336 337 338 339 340 341 342 343 |
# File 'lib/google/cloud/bigquery/table.rb', line 336 def rows_count ensure_full_data! begin Integer @gapi.num_rows rescue nil end end |
#schema(replace: false) {|schema| ... } ⇒ Google::Cloud::Bigquery::Schema
Returns the table's schema. This method can also be used to set, replace, or add to the schema by passing a block. See Schema for available methods.
450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/google/cloud/bigquery/table.rb', line 450 def schema replace: false ensure_full_data! schema_builder = Schema.from_gapi @gapi.schema if block_given? schema_builder = Schema.from_gapi if replace yield schema_builder if schema_builder.changed? @gapi.schema = schema_builder.to_gapi patch_gapi! :schema end end schema_builder.freeze end |
#table? ⇒ Boolean
Checks if the table's type is "TABLE".
394 395 396 |
# File 'lib/google/cloud/bigquery/table.rb', line 394 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.
90 91 92 |
# File 'lib/google/cloud/bigquery/table.rb', line 90 def table_id @gapi.table_reference.table_id end |
#time_partitioning? ⇒ Boolean
Is the table partitioned?
126 127 128 |
# File 'lib/google/cloud/bigquery/table.rb', line 126 def time_partitioning? !@gapi.time_partitioning.nil? end |
#time_partitioning_expiration ⇒ Object
The expiration for the table partitions, if any, in seconds.
175 176 177 178 179 180 |
# File 'lib/google/cloud/bigquery/table.rb', line 175 def time_partitioning_expiration ensure_full_data! @gapi.time_partitioning.expiration_ms / 1_000 if time_partitioning? && !@gapi.time_partitioning.expiration_ms.nil? end |
#time_partitioning_expiration=(expiration) ⇒ Object
Sets the partition expiration for the table. See Partitioned Tables . The table must also be partitioned.
for data in partitions.
204 205 206 207 208 209 |
# File 'lib/google/cloud/bigquery/table.rb', line 204 def time_partitioning_expiration= expiration @gapi.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new @gapi.time_partitioning.expiration_ms = expiration * 1000 patch_gapi! :time_partitioning end |
#time_partitioning_type ⇒ Object
The period for which the table is partitioned, if any.
135 136 137 138 |
# File 'lib/google/cloud/bigquery/table.rb', line 135 def time_partitioning_type ensure_full_data! @gapi.time_partitioning.type if time_partitioning? end |
#time_partitioning_type=(type) ⇒ Object
Sets the partitioning for the table. See Partitioned Tables .
You can only set partitioning when creating a table as in the example below. BigQuery does not allow you to change partitioning on an existing table.
supported value is "DAY".
162 163 164 165 166 167 |
# File 'lib/google/cloud/bigquery/table.rb', line 162 def time_partitioning_type= type @gapi.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new @gapi.time_partitioning.type = type patch_gapi! :time_partitioning end |
#view? ⇒ Boolean
Checks if the table's type is "VIEW".
403 404 405 |
# File 'lib/google/cloud/bigquery/table.rb', line 403 def view? @gapi.type == "VIEW" end |