Reference documentation and code samples for the BigQuery API class Google::Cloud::Bigquery::QueryJob.
QueryJob
A Job subclass representing a query operation that may be performed on a Table. A QueryJob instance is created when you call Project#query_job, Dataset#query_job.
Inherits
Examples
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new job = bigquery.query_job "SELECT COUNT(word) as count FROM " \ "`bigquery-public-data.samples.shakespeare`" job.wait_until_done! if job.failed? puts job.error else puts job.data.first end
With multiple statements and child jobs:
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new multi_statement_sql = <<~SQL -- Declare a variable to hold names as an array. DECLARE top_names ARRAY<STRING>; -- Build an array of the top 100 names from the year 2017. SET top_names = ( SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100) FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE year = 2017 ); -- Which names appear as words in Shakespeare's plays? SELECT name AS shakespeare_name FROM UNNEST(top_names) AS name WHERE name IN ( SELECT word FROM `bigquery-public-data.samples.shakespeare` ); SQL job = bigquery.query_job multi_statement_sql job.wait_until_done! child_jobs = bigquery.jobs parent_job: job child_jobs.each do |child_job| script_statistics = child_job.script_statistics puts script_statistics.evaluation_kind script_statistics.stack_frames.each do |stack_frame| puts stack_frame.text end end
Methods
#batch?
def batch?() -> BooleanChecks if the priority for the query is BATCH.
-
(Boolean) —
truewhen the priority isBATCH,falseotherwise.
#bytes_processed
def bytes_processed() -> Integer, nilThe number of bytes processed by the query.
- (Integer, nil) — Total bytes processed for the job.
#cache?
def cache?() -> BooleanChecks if the query job looks for an existing result in the query cache. For more information, see Query Caching.
-
(Boolean) —
truewhen the query cache will be used,falseotherwise.
#cache_hit?
def cache_hit?() -> BooleanChecks if the query results are from the query cache.
-
(Boolean) —
truewhen the job statistics indicate a cache hit,falseotherwise.
#clustering?
def clustering?() -> BooleanChecks if the destination table will be clustered.
See Updater#clustering_fields=, Table#clustering_fields and Table#clustering_fields=.
-
(Boolean) —
truewhen the table will be clustered, orfalseotherwise.
#clustering_fields
def clustering_fields() -> Array<String>, nilOne or more fields on which the destination table should be clustered. Must be specified with time-based partitioning, data in the table will be first partitioned and subsequently clustered. The order of the returned fields determines the sort order of the data.
BigQuery supports clustering for both partitioned and non-partitioned tables.
See Updater#clustering_fields=, Table#clustering_fields and Table#clustering_fields=.
-
(Array<String>, nil) — The clustering fields, or
nilif the destination table will not be clustered.
#data
def data(token: nil, max: nil, start: nil) -> Google::Cloud::Bigquery::DataRetrieves the query results for the job.
- token (String) (defaults to: nil) — Page token, returned by a previous call, identifying the result set.
- max (Integer) (defaults to: nil) — Maximum number of results to return.
- start (Integer) (defaults to: nil) — Zero-based index of the starting row to read.
- (Google::Cloud::Bigquery::Data) — An object providing access to data read from the destination table for the job.
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new sql = "SELECT word FROM `bigquery-public-data.samples.shakespeare`" job = bigquery.query_job sql job.wait_until_done! data = job.data # Iterate over the first page of results data.each do |row| puts row[:word] end # Retrieve the next page of results data = data.next if data.next?
#ddl?
def ddl?() -> BooleanWhether the query is a DDL statement.
- (Boolean)
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new query_job = bigquery.query_job "CREATE TABLE my_table (x INT64)" query_job.statement_type #=> "CREATE_TABLE" query_job.ddl? #=> true
#ddl_operation_performed
def ddl_operation_performed() -> String, nilThe DDL operation performed, possibly dependent on the pre-existence of the DDL target. (See #ddl_target_table.) Possible values (new values might be added in the future):
- "CREATE": The query created the DDL target.
- "SKIP": No-op. Example cases: the query is
CREATE TABLE IF NOT EXISTSwhile the table already exists, or the query isDROP TABLE IF EXISTSwhile the table does not exist. - "REPLACE": The query replaced the DDL target. Example case: the
query is
CREATE OR REPLACE TABLE, and the table already exists. - "DROP": The query deleted the DDL target.
- (String, nil) — The DDL operation performed.
#ddl_target_routine
def ddl_target_routine() -> Google::Cloud::Bigquery::Routine, nilThe DDL target routine, in reference state. (See Routine#reference?.)
Present only for CREATE/DROP FUNCTION/PROCEDURE queries. (See
#statement_type.)
- (Google::Cloud::Bigquery::Routine, nil) — The DDL target routine, in reference state.
#ddl_target_table
def ddl_target_table() -> Google::Cloud::Bigquery::Table, nilThe DDL target table, in reference state. (See Table#reference?.)
Present only for CREATE/DROP TABLE/VIEW queries. (See
#statement_type.)
- (Google::Cloud::Bigquery::Table, nil) — The DDL target table, in reference state.
#deleted_row_count
def deleted_row_count() -> Integer, nilThe number of deleted rows. Present only for DML statements DELETE,
MERGE and TRUNCATE. (See #statement_type.)
-
(Integer, nil) — The number of deleted rows, or
nilif not applicable.
#destination
def destination(view: nil) -> TableThe table in which the query results are stored.
-
view (String) (defaults to: nil) — Specifies the view that determines which table information is returned.
By default, basic table information and storage statistics (STORAGE_STATS) are returned.
Accepted values include
:unspecified,:basic,:storage, and:full. For more information, see BigQuery Classes. The default value is the:unspecifiedview type.
- (Table) — A table instance.
#dml?
def dml?() -> BooleanWhether the query is a DML statement.
- (Boolean)
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new query_job = bigquery.query_job "UPDATE my_table " \ "SET x = x + 1 " \ "WHERE x IS NOT NULL" query_job.statement_type #=> "UPDATE" query_job.dml? #=> true
#dry_run
def dry_run() -> BooleanIf set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run.
-
(Boolean) —
truewhen the dry run flag is set for the query job,falseotherwise.
#dry_run?
def dry_run?() -> BooleanIf set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run.
-
(Boolean) —
truewhen the dry run flag is set for the query job,falseotherwise.
#dryrun
def dryrun() -> BooleanIf set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run.
-
(Boolean) —
truewhen the dry run flag is set for the query job,falseotherwise.
#dryrun?
def dryrun?() -> BooleanIf set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run.
-
(Boolean) —
truewhen the dry run flag is set for the query job,falseotherwise.
#encryption
def encryption() -> Google::Cloud::BigQuery::EncryptionConfigurationThe encryption configuration of the destination table.
- (Google::Cloud::BigQuery::EncryptionConfiguration) — Custom encryption configuration (e.g., Cloud KMS keys).
#flatten?
def flatten?() -> BooleanChecks if the query job flattens nested and repeated fields in the
query results. The default is true. If the value is false,
large_results? should return true.
-
(Boolean) —
truewhen the job flattens results,falseotherwise.
#inserted_row_count
def inserted_row_count() -> Integer, nilThe number of inserted rows. Present only for DML statements INSERT
and MERGE. (See #statement_type.)
-
(Integer, nil) — The number of inserted rows, or
nilif not applicable.
#interactive?
def interactive?() -> BooleanChecks if the priority for the query is INTERACTIVE.
-
(Boolean) —
truewhen the priority isINTERACTIVE,falseotherwise.
#large_results?
def large_results?() -> BooleanChecks if the the query job allows arbitrarily large results at a slight cost to performance.
-
(Boolean) —
truewhen large results are allowed,falseotherwise.
#legacy_sql?
def legacy_sql?() -> BooleanChecks if the query job is using legacy sql.
-
(Boolean) —
truewhen legacy sql is used,falseotherwise.
#maximum_billing_tier
def maximum_billing_tier() -> Integer, nilLimits the billing tier for this job. Queries that have resource usage beyond this tier will raise (without incurring a charge). If unspecified, this will be set to your project default. For more information, see High-Compute queries.
-
(Integer, nil) — The tier number, or
nilfor the project default.
#maximum_bytes_billed
def maximum_bytes_billed() -> Integer, nilLimits the bytes billed for this job. Queries that will have bytes
billed beyond this limit will raise (without incurring a charge). If
nil, this will be set to your project default.
-
(Integer, nil) — The number of bytes, or
nilfor the project default.
#num_dml_affected_rows
def num_dml_affected_rows() -> Integer, nilThe number of rows affected by a DML statement. Present only for DML
statements INSERT, UPDATE or DELETE. (See #statement_type.)
-
(Integer, nil) — The number of rows affected by a DML statement,
or
nilif the query is not a DML statement.
#query_plan
def query_plan() -> Array<Google::Cloud::Bigquery::QueryJob::Stage>, nilDescribes the execution plan for the query.
- (Array<Google::Cloud::Bigquery::QueryJob::Stage>, nil) — An array containing the stages of the execution plan.
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new sql = "SELECT word FROM `bigquery-public-data.samples.shakespeare`" job = bigquery.query_job sql job.wait_until_done! stages = job.query_plan stages.each do |stage| puts stage.name stage.steps.each do |step| puts step.kind puts step.substeps.inspect end end
#query_results
def query_results(token: nil, max: nil, start: nil) -> Google::Cloud::Bigquery::DataRetrieves the query results for the job.
- token (String) (defaults to: nil) — Page token, returned by a previous call, identifying the result set.
- max (Integer) (defaults to: nil) — Maximum number of results to return.
- start (Integer) (defaults to: nil) — Zero-based index of the starting row to read.
- (Google::Cloud::Bigquery::Data) — An object providing access to data read from the destination table for the job.
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new sql = "SELECT word FROM `bigquery-public-data.samples.shakespeare`" job = bigquery.query_job sql job.wait_until_done! data = job.data # Iterate over the first page of results data.each do |row| puts row[:word] end # Retrieve the next page of results data = data.next if data.next?
#range_partitioning?
def range_partitioning?() -> BooleanChecks if the destination table will be range partitioned. See Creating and using integer range partitioned tables.
-
(Boolean) —
truewhen the table is range partitioned, orfalseotherwise.
#range_partitioning_end
def range_partitioning_end() -> Integer, nilThe end of range partitioning, exclusive. See Creating and using integer range partitioned tables.
-
(Integer, nil) — The end of range partitioning, exclusive, or
nilif not range partitioned.
#range_partitioning_field
def range_partitioning_field() -> String, nilThe field on which the destination table will be range partitioned, if any. The field must be a
top-level NULLABLE/REQUIRED field. The only supported type is INTEGER/INT64. See
Creating and using integer range partitioned
tables.
-
(String, nil) — The partition field, if a field was configured, or
nilif not range partitioned.
#range_partitioning_interval
def range_partitioning_interval() -> Integer, nilThe width of each interval. See Creating and using integer range partitioned tables.
-
(Integer, nil) — The width of each interval, for data in range partitions, or
nilif not range partitioned.
#range_partitioning_start
def range_partitioning_start() -> Integer, nilThe start of range partitioning, inclusive. See Creating and using integer range partitioned tables.
-
(Integer, nil) — The start of range partitioning, inclusive, or
nilif not range partitioned.
#standard_sql?
def standard_sql?() -> BooleanChecks if the query job is using standard sql.
-
(Boolean) —
truewhen standard sql is used,falseotherwise.
#statement_type
def statement_type() -> String, nilThe type of query statement, if valid. Possible values (new values might be added in the future):
- "ALTER_TABLE": DDL statement, see Using Data Definition Language Statements
- "CREATE_MODEL": DDL statement, see Using Data Definition Language Statements
- "CREATE_TABLE": DDL statement, see Using Data Definition Language Statements
- "CREATE_TABLE_AS_SELECT": DDL statement, see Using Data Definition Language Statements
- "CREATE_VIEW": DDL statement, see Using Data Definition Language Statements
- "DELETE": DML statement, see Data Manipulation Language Syntax
- "DROP_MODEL": DDL statement, see Using Data Definition Language Statements
- "DROP_TABLE": DDL statement, see Using Data Definition Language Statements
- "DROP_VIEW": DDL statement, see Using Data Definition Language Statements
- "INSERT": DML statement, see Data Manipulation Language Syntax
- "MERGE": DML statement, see Data Manipulation Language Syntax
- "SELECT": SQL query, see Standard SQL Query Syntax
- "UPDATE": DML statement, see Data Manipulation Language Syntax
- (String, nil) — The type of query statement.
#time_partitioning?
def time_partitioning?() -> BooleanChecks if the destination table will be time-partitioned. See Partitioned Tables.
-
(Boolean) —
truewhen the table will be time-partitioned, orfalseotherwise.
#time_partitioning_expiration
def time_partitioning_expiration() -> Integer, nilThe expiration for the destination table partitions, if any, in seconds. See Partitioned Tables.
-
(Integer, nil) — The expiration time, in seconds, for data in
partitions, or
nilif not present.
#time_partitioning_field
def time_partitioning_field() -> String, nilThe field on which the destination table will be partitioned, if any.
If not set, the destination table will be partitioned by pseudo column
_PARTITIONTIME; if set, the table will be partitioned by this field.
See Partitioned Tables.
-
(String, nil) — The partition field, if a field was configured.
nilif not partitioned or not set (partitioned by pseudo column '_PARTITIONTIME').
#time_partitioning_require_filter?
def time_partitioning_require_filter?() -> BooleanIf set to true, queries over the destination table will require a partition filter that can be used for partition elimination to be specified. See Partitioned Tables.
-
(Boolean) —
truewhen a partition filter will be required, orfalseotherwise.
#time_partitioning_type
def time_partitioning_type() -> String, nilThe period for which the destination table will be partitioned, if any. See Partitioned Tables.
-
(String, nil) — The partition type. The supported types are
DAY,HOUR,MONTH, andYEAR, which will generate one partition per day, hour, month, and year, respectively; ornilif not present.
#udfs
def udfs() -> Array<String>The user-defined function resources used in the query. May be either a
code resource to load from a Google Cloud Storage URI
(gs://bucket/path), or an inline resource that contains code for a
user-defined function (UDF). Providing an inline code resource is
equivalent to providing a URI for a file containing the same code. See
User-Defined Functions.
- (Array<String>) — An array containing Google Cloud Storage URIs and/or inline source code.
#updated_row_count
def updated_row_count() -> Integer, nilThe number of updated rows. Present only for DML statements UPDATE
and MERGE. (See #statement_type.)
-
(Integer, nil) — The number of updated rows, or
nilif not applicable.
#wait_until_done!
def wait_until_done!()Refreshes the job until the job is DONE.
The delay between refreshes will incrementally increase.
require "google/cloud/bigquery" bigquery = Google::Cloud::Bigquery.new sql = "SELECT word FROM `bigquery-public-data.samples.shakespeare`" job = bigquery.query_job sql job.wait_until_done! job.done? #=> true