googleapis/google/cloud/bigquery/v2/routine.proto
Google APIs 9415ba048a chore: update copyright year for auto-generated protos
PiperOrigin-RevId: 732130682
2025-02-28 07:26:00 -08:00

536 lines
20 KiB
Protocol Buffer

// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.bigquery.v2;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/cloud/bigquery/v2/routine_reference.proto";
import "google/cloud/bigquery/v2/standard_sql.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/wrappers.proto";
option go_package = "cloud.google.com/go/bigquery/apiv2/bigquerypb;bigquerypb";
option java_outer_classname = "RoutineProto";
option java_package = "com.google.cloud.bigquery.v2";
// RoutineService provides management access to BigQuery routines.
service RoutineService {
option (google.api.default_host) = "bigquery.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/bigquery,"
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/cloud-platform.read-only";
// Gets the specified routine resource by routine ID.
rpc GetRoutine(GetRoutineRequest) returns (Routine) {
option (google.api.http) = {
get: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}/routines/{routine_id=*}"
};
}
// Creates a new routine in the dataset.
rpc InsertRoutine(InsertRoutineRequest) returns (Routine) {
option (google.api.http) = {
post: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}/routines"
body: "routine"
};
}
// Updates information in an existing routine. The update method replaces the
// entire Routine resource.
rpc UpdateRoutine(UpdateRoutineRequest) returns (Routine) {
option (google.api.http) = {
put: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}/routines/{routine_id=*}"
body: "routine"
};
}
// Patches information in an existing routine. The patch method does a partial
// update to an existing Routine resource.
rpc PatchRoutine(PatchRoutineRequest) returns (Routine) {}
// Deletes the routine specified by routineId from the dataset.
rpc DeleteRoutine(DeleteRoutineRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}/routines/{routine_id=*}"
};
}
// Lists all routines in the specified dataset. Requires the READER dataset
// role.
rpc ListRoutines(ListRoutinesRequest) returns (ListRoutinesResponse) {
option (google.api.http) = {
get: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}/routines"
};
}
}
// A user-defined function or a stored procedure.
message Routine {
// The fine-grained type of the routine.
enum RoutineType {
// Default value.
ROUTINE_TYPE_UNSPECIFIED = 0;
// Non-built-in persistent scalar function.
SCALAR_FUNCTION = 1;
// Stored procedure.
PROCEDURE = 2;
// Non-built-in persistent TVF.
TABLE_VALUED_FUNCTION = 3;
// Non-built-in persistent aggregate function.
AGGREGATE_FUNCTION = 4;
}
// The language of the routine.
enum Language {
// Default value.
LANGUAGE_UNSPECIFIED = 0;
// SQL language.
SQL = 1;
// JavaScript language.
JAVASCRIPT = 2;
// Python language.
PYTHON = 3;
// Java language.
JAVA = 4;
// Scala language.
SCALA = 5;
}
// Input/output argument of a function or a stored procedure.
message Argument {
// Represents the kind of a given argument.
enum ArgumentKind {
// Default value.
ARGUMENT_KIND_UNSPECIFIED = 0;
// The argument is a variable with fully specified type, which can be a
// struct or an array, but not a table.
FIXED_TYPE = 1;
// The argument is any type, including struct or array, but not a table.
ANY_TYPE = 2;
}
// The input/output mode of the argument.
enum Mode {
// Default value.
MODE_UNSPECIFIED = 0;
// The argument is input-only.
IN = 1;
// The argument is output-only.
OUT = 2;
// The argument is both an input and an output.
INOUT = 3;
}
// Optional. The name of this argument. Can be absent for function return
// argument.
string name = 1 [(google.api.field_behavior) = OPTIONAL];
// Optional. Defaults to FIXED_TYPE.
ArgumentKind argument_kind = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. Specifies whether the argument is input or output.
// Can be set for procedures only.
Mode mode = 3;
// Set if argument_kind == FIXED_TYPE.
StandardSqlDataType data_type = 4;
// Optional. Whether the argument is an aggregate function parameter.
// Must be Unset for routine types other than AGGREGATE_FUNCTION.
// For AGGREGATE_FUNCTION, if set to false, it is equivalent to adding "NOT
// AGGREGATE" clause in DDL; Otherwise, it is equivalent to omitting "NOT
// AGGREGATE" clause in DDL.
google.protobuf.BoolValue is_aggregate = 6
[(google.api.field_behavior) = OPTIONAL];
}
// JavaScript UDF determinism levels.
//
// If all JavaScript UDFs are DETERMINISTIC, the query result is
// potentially cacheable (see below). If any JavaScript UDF is
// NOT_DETERMINISTIC, the query result is not cacheable.
//
// Even if a JavaScript UDF is deterministic, many other factors can prevent
// usage of cached query results. Example factors include but not limited to:
// DDL/DML, non-deterministic SQL function calls, update of referenced
// tables/views/UDFs or imported JavaScript libraries.
//
// SQL UDFs cannot have determinism specified. Their determinism is
// automatically determined.
enum DeterminismLevel {
// The determinism of the UDF is unspecified.
DETERMINISM_LEVEL_UNSPECIFIED = 0;
// The UDF is deterministic, meaning that 2 function calls with the same
// inputs always produce the same result, even across 2 query runs.
DETERMINISTIC = 1;
// The UDF is not deterministic.
NOT_DETERMINISTIC = 2;
}
// Security mode.
enum SecurityMode {
// The security mode of the routine is unspecified.
SECURITY_MODE_UNSPECIFIED = 0;
// The routine is to be executed with the privileges of the user who
// defines it.
DEFINER = 1;
// The routine is to be executed with the privileges of the user who
// invokes it.
INVOKER = 2;
}
// Options for a remote user-defined function.
message RemoteFunctionOptions {
// Endpoint of the user-provided remote service, e.g.
// ```https://us-east1-my_gcf_project.cloudfunctions.net/remote_add```
string endpoint = 1;
// Fully qualified name of the user-provided connection object which holds
// the authentication information to send requests to the remote service.
// Format:
// ```"projects/{projectId}/locations/{locationId}/connections/{connectionId}"```
string connection = 2;
// User-defined context as a set of key/value pairs, which will be sent as
// function invocation context together with batched arguments in the
// requests to the remote service. The total number of bytes of keys and
// values must be less than 8KB.
map<string, string> user_defined_context = 3;
// Max number of rows in each batch sent to the remote service.
// If absent or if 0, BigQuery dynamically decides the number of rows in a
// batch.
int64 max_batching_rows = 4;
}
// Data governance type values. Only supports `DATA_MASKING`.
enum DataGovernanceType {
// The data governance type is unspecified.
DATA_GOVERNANCE_TYPE_UNSPECIFIED = 0;
// The data governance type is data masking.
DATA_MASKING = 1;
}
// Output only. A hash of this resource.
string etag = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. Reference describing the ID of this routine.
RoutineReference routine_reference = 2
[(google.api.field_behavior) = REQUIRED];
// Required. The type of routine.
RoutineType routine_type = 3 [(google.api.field_behavior) = REQUIRED];
// Output only. The time when this routine was created, in milliseconds since
// the epoch.
int64 creation_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time when this routine was last modified, in milliseconds
// since the epoch.
int64 last_modified_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Defaults to "SQL" if remote_function_options field is absent, not
// set otherwise.
Language language = 6 [(google.api.field_behavior) = OPTIONAL];
// Optional.
repeated Argument arguments = 7;
// Optional if language = "SQL"; required otherwise.
// Cannot be set if routine_type = "TABLE_VALUED_FUNCTION".
//
// If absent, the return type is inferred from definition_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 return_type is `{type_kind: "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.
StandardSqlDataType return_type = 10;
// Optional. Can be set only if routine_type = "TABLE_VALUED_FUNCTION".
//
// If absent, the return table type is inferred from definition_body at query
// time in each query that references this routine. If present, then the
// columns in the evaluated table result will be cast to match the column
// types specified in return table type, at query time.
StandardSqlTableType return_table_type = 13
[(google.api.field_behavior) = OPTIONAL];
// Optional. If language = "JAVASCRIPT", this field stores the path of the
// imported JAVASCRIPT libraries.
repeated string imported_libraries = 8;
// Required. The body of the routine.
//
// For functions, this is the expression in the AS clause.
//
// If language=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).
//
// If language=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.
string definition_body = 9;
// Optional. The description of the routine, if defined.
string description = 11 [(google.api.field_behavior) = OPTIONAL];
// Optional. The determinism level of the JavaScript UDF, if defined.
DeterminismLevel determinism_level = 12
[(google.api.field_behavior) = OPTIONAL];
// Optional. The security mode of the routine, if defined. If not defined, the
// security mode is automatically determined from the routine's configuration.
SecurityMode security_mode = 18 [(google.api.field_behavior) = OPTIONAL];
// Optional. Use this option to catch many common errors. Error checking is
// not exhaustive, and successfully creating a procedure doesn't guarantee
// that the procedure will successfully execute at runtime. If `strictMode` is
// set to `TRUE`, the procedure body is further checked for errors such as
// non-existent tables or columns. The `CREATE PROCEDURE` statement fails if
// the body fails any of these checks.
//
// If `strictMode` is set to `FALSE`, the procedure body is checked only for
// syntax. For procedures that invoke themselves recursively, specify
// `strictMode=FALSE` to avoid non-existent procedure errors during
// validation.
//
// Default value is `TRUE`.
google.protobuf.BoolValue strict_mode = 14
[(google.api.field_behavior) = OPTIONAL];
// Optional. Remote function specific options.
RemoteFunctionOptions remote_function_options = 15
[(google.api.field_behavior) = OPTIONAL];
// Optional. Spark specific options.
SparkOptions spark_options = 16 [(google.api.field_behavior) = OPTIONAL];
// Optional. If set to `DATA_MASKING`, the function is validated and made
// available as a masking function. For more information, see [Create custom
// masking
// routines](https://cloud.google.com/bigquery/docs/user-defined-functions#custom-mask).
DataGovernanceType data_governance_type = 17
[(google.api.field_behavior) = OPTIONAL];
}
// Options for a user-defined Spark routine.
message SparkOptions {
// Fully qualified name of the user-provided Spark connection object. Format:
// ```"projects/{project_id}/locations/{location_id}/connections/{connection_id}"```
string connection = 1;
// Runtime version. If not specified, the default runtime version is used.
string runtime_version = 2;
// Custom container image for the runtime environment.
string container_image = 3;
// Configuration properties as a set of key/value pairs, which will be passed
// on to the Spark application. For more information, see
// [Apache Spark](https://spark.apache.org/docs/latest/index.html) and the
// [procedure option
// list](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#procedure_option_list).
map<string, string> properties = 4;
// The main file/jar URI of the Spark application. Exactly one of the
// definition_body field and the main_file_uri field must be set for Python.
// Exactly one of main_class and main_file_uri field
// should be set for Java/Scala language type.
string main_file_uri = 5;
// Python files to be placed on the PYTHONPATH for PySpark application.
// Supported file types: `.py`, `.egg`, and `.zip`. For more information
// about Apache Spark, see
// [Apache Spark](https://spark.apache.org/docs/latest/index.html).
repeated string py_file_uris = 6;
// JARs to include on the driver and executor CLASSPATH.
// For more information about Apache Spark, see
// [Apache Spark](https://spark.apache.org/docs/latest/index.html).
repeated string jar_uris = 7;
// Files to be placed in the working directory of each executor.
// For more information about Apache Spark, see
// [Apache Spark](https://spark.apache.org/docs/latest/index.html).
repeated string file_uris = 8;
// Archive files to be extracted into the working directory of each executor.
// For more information about Apache Spark, see
// [Apache Spark](https://spark.apache.org/docs/latest/index.html).
repeated string archive_uris = 9;
// The fully qualified name of a class in jar_uris, for example,
// com.example.wordcount. Exactly one of main_class and main_jar_uri field
// should be set for Java/Scala language type.
string main_class = 10;
}
// Describes the format for getting information about a routine.
message GetRoutineRequest {
// Required. Project ID of the requested routine
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the requested routine
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Routine ID of the requested routine
string routine_id = 3 [(google.api.field_behavior) = REQUIRED];
}
// Describes the format for inserting a routine.
message InsertRoutineRequest {
// Required. Project ID of the new routine
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the new routine
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A routine resource to insert
Routine routine = 3 [(google.api.field_behavior) = REQUIRED];
}
// Describes the format for updating a routine.
message UpdateRoutineRequest {
// Required. Project ID of the routine to update
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the routine to update
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Routine ID of the routine to update
string routine_id = 3 [(google.api.field_behavior) = REQUIRED];
// Required. A routine resource which will replace the specified routine
Routine routine = 4 [(google.api.field_behavior) = REQUIRED];
}
// Describes the format for the partial update (patch) of a routine.
message PatchRoutineRequest {
// Required. Project ID of the routine to update
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the routine to update
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Routine ID of the routine to update
string routine_id = 3 [(google.api.field_behavior) = REQUIRED];
// Required. A routine resource which will be used to partially
// update the specified routine
Routine routine = 4 [(google.api.field_behavior) = REQUIRED];
// Only the Routine fields in the field mask are updated
// by the given routine. Repeated routine fields will be fully replaced
// if contained in the field mask.
google.protobuf.FieldMask field_mask = 5;
}
// Describes the format for deleting a routine.
message DeleteRoutineRequest {
// Required. Project ID of the routine to delete
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the routine to delete
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Routine ID of the routine to delete
string routine_id = 3 [(google.api.field_behavior) = REQUIRED];
}
// Describes the format for listing routines.
message ListRoutinesRequest {
// Required. Project ID of the routines to list
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Dataset ID of the routines to list
string dataset_id = 2 [(google.api.field_behavior) = REQUIRED];
// The maximum number of results to return in a single response page.
// Leverage the page tokens to iterate through the entire collection.
google.protobuf.UInt32Value max_results = 3;
// Page token, returned by a previous call, to request the next page of
// results
string page_token = 4;
// If set, then only the Routines matching this filter are returned.
// The supported format is `routineType:{RoutineType}`, where `{RoutineType}`
// is a RoutineType enum. For example: `routineType:SCALAR_FUNCTION`.
string filter = 6;
}
// Describes the format of a single result page when listing routines.
message ListRoutinesResponse {
// Routines in the requested dataset. Unless read_mask is set in the request,
// only the following fields are populated:
// etag, project_id, dataset_id, routine_id, routine_type, creation_time,
// last_modified_time, language, and remote_function_options.
repeated Routine routines = 1;
// A token to request the next page of results.
string next_page_token = 2;
}