class Google::Cloud::Bigquery::Routine::Updater

Yielded to a block to accumulate changes. See {Dataset#create_routine} and {Routine#update}.

@example Creating a new routine:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"

routine = dataset.create_routine "my_routine" do |r|
  r.routine_type = "SCALAR_FUNCTION"
  r.language = "SQL"
  r.arguments = [
    Google::Cloud::Bigquery::Argument.new(name: "x", data_type: "INT64")
  ]
  r.body = "x * 3"
  r.description = "My routine description"
end

puts routine.routine_id

@example Updating an existing routine:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.update do |r|
  r.body = "x * 4"
  r.description = "My new routine description"
end

Public Class Methods

new(gapi) click to toggle source

@private Create an Updater object.

Calls superclass method Google::Cloud::Bigquery::Routine::new
# File lib/google/cloud/bigquery/routine.rb, line 1008
def initialize gapi
  super()
  @original_gapi = gapi
  @gapi = gapi.dup
end

Public Instance Methods

arguments=(new_arguments) click to toggle source

Updates the input/output arguments of the routine. Optional.

@param [Array<Argument>] new_arguments The new arguments.

@example

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.arguments = [
  Google::Cloud::Bigquery::Argument.new(name: "x", data_type: "INT64")
]
# File lib/google/cloud/bigquery/routine.rb, line 1054
def arguments= new_arguments
  @gapi.arguments = new_arguments.map(&:to_gapi)
end
body=(new_body) click to toggle source

Updates the body of the routine. Required.

For functions ({#scalar_function?}), this is the expression in the `AS` clause.

When the routine is a SQL function ({#sql?}), it is the substring inside (but excluding) the parentheses. For example, for the function created with the following statement: “` CREATE FUNCTION JoinLines(x string, y string) as (concat(x, “n”, y)) “` The definition_body is `concat(x, “n”, y)` (`n` is not replaced with linebreak).

When the routine is a JavaScript function ({#javascript?}), it is the evaluated string in the `AS` clause. For example, for the function created with the following statement: “` CREATE FUNCTION f() RETURNS STRING LANGUAGE js AS 'return “n”;n' “` The definition_body is “` “return "n";n”` “` Note that both `n` are replaced with linebreaks.

@param [String] new_body The new body of the routine.

# File lib/google/cloud/bigquery/routine.rb, line 1147
def body= new_body
  @gapi.definition_body = new_body
end
delete() click to toggle source
# File lib/google/cloud/bigquery/routine.rb, line 1205
def delete
  raise "not implemented in #{self.class}"
end
description=(new_description) click to toggle source

Updates the description of the routine. Optional. [Experimental]

@param [String] new_description The new routine description.

@example

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.description #=> "My routine description"
routine.update do |r|
  r.description = "My updated routine description"
end
# File lib/google/cloud/bigquery/routine.rb, line 1168
def description= new_description
  @gapi.description = new_description
end
determinism_level=(new_determinism_level) click to toggle source

Updates the JavaScript UDF determinism level. Optional.

  • `DETERMINISTIC` - Deterministic indicates that two calls with the same input to a UDF yield the same output. If all JavaScript UDFs are `DETERMINISTIC`, the query result is potentially cachable.

  • `NOT_DETERMINISTIC` - Not deterministic indicates that the output of the UDF is not guaranteed to yield the same output each time for a given set of inputs. If any JavaScript UDF is `NOT_DETERMINISTIC`, the query result is not cacheable.

@param [String, nil] new_determinism_level The new routine determinism level in upper case.

@example

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.determinism_level #=> "NOT_DETERMINISTIC"
routine.update do |r|
  r.determinism_level = "DETERMINISTIC"
end

@!group Attributes

# File lib/google/cloud/bigquery/routine.rb, line 1197
def determinism_level= new_determinism_level
  @gapi.determinism_level = new_determinism_level
end
imported_libraries=(new_imported_libraries) click to toggle source

Updates the list of the Google Cloud Storage URIs of imported JavaScript libraries. Optional. Only used if {#language} is `JAVASCRIPT` ({#javascript?}).

@param [Array<String>, nil] new_imported_libraries An array of Google Cloud Storage URIs, e.g.

`["gs://cloud-samples-data/bigquery/udfs/max-value.js"]`.

@example

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.update do |r|
  r.imported_libraries = [
    "gs://cloud-samples-data/bigquery/udfs/max-value.js"
  ]
end
# File lib/google/cloud/bigquery/routine.rb, line 1118
def imported_libraries= new_imported_libraries
  @gapi.imported_libraries = new_imported_libraries
end
language=(new_language) click to toggle source

Updates the programming language of routine. Optional. Defaults to “SQL”.

  • `SQL` - SQL language.

  • `JAVASCRIPT` - JavaScript language.

@param [String] new_language The new language in upper case.

# File lib/google/cloud/bigquery/routine.rb, line 1034
def language= new_language
  @gapi.language = new_language
end
refresh!()
Alias for: reload!
reload!() click to toggle source
# File lib/google/cloud/bigquery/routine.rb, line 1209
def reload!
  raise "not implemented in #{self.class}"
end
Also aliased as: refresh!
return_type=(new_return_type) click to toggle source

Updates the return type of the routine. Optional if the routine is a SQL function ({#sql?}); required otherwise.

If absent, the return type is inferred from {#body} at query time in each query that references this routine. If present, then the evaluated result will be cast to the specified returned type at query time.

For example, for the functions created with the following statements:

  • `CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);`

  • `CREATE FUNCTION Increment(x FLOAT64) AS (Add(x, 1));`

  • `CREATE FUNCTION Decrement(x FLOAT64) RETURNS FLOAT64 AS (Add(x, -1));`

The returnType is `{typeKind: “FLOAT64”}` for Add and Decrement, and is absent for Increment (inferred as `FLOAT64` at query time).

Suppose the function Add is replaced by `CREATE OR REPLACE FUNCTION Add(x INT64, y INT64) AS (x + y);`

Then the inferred return type of Increment is automatically changed to `INT64` at query time, while the return type of Decrement remains `FLOAT64`.

@param [Google::Cloud::Bigquery::StandardSql::DataType, String] new_return_type The new return type for the

routine.

@example

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new
dataset = bigquery.dataset "my_dataset"
routine = dataset.routine "my_routine"

routine.return_type.type_kind #=> "INT64"
routine.update do |r|
  r.return_type = "STRING"
end
# File lib/google/cloud/bigquery/routine.rb, line 1094
def return_type= new_return_type
  @gapi.return_type = StandardSql::DataType.gapi_from_string_or_data_type new_return_type
end
routine_type=(new_routine_type) click to toggle source

Updates the type of routine. Required.

  • `SCALAR_FUNCTION` - Non-builtin permanent scalar function.

  • `PROCEDURE` - Stored procedure.

@param [String] new_routine_type The new type of the routine.

# File lib/google/cloud/bigquery/routine.rb, line 1022
def routine_type= new_routine_type
  @gapi.routine_type = new_routine_type
end
to_gapi() click to toggle source

@private

# File lib/google/cloud/bigquery/routine.rb, line 1220
def to_gapi
  @gapi
end
update() click to toggle source
# File lib/google/cloud/bigquery/routine.rb, line 1201
def update
  raise "not implemented in #{self.class}"
end
updates?() click to toggle source

@private

# File lib/google/cloud/bigquery/routine.rb, line 1215
def updates?
  !(@gapi === @original_gapi)
end