// Copyright 2024 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/field_behavior.proto";
import "google/protobuf/wrappers.proto";
option go_package = "cloud.google.com/go/bigquery/apiv2/bigquerypb;bigquerypb";
option java_outer_classname = "TableSchemaProto";
option java_package = "com.google.cloud.bigquery.v2";
// Schema of a table
message TableSchema {
// Describes the fields in a table.
repeated TableFieldSchema fields = 1;
// Optional. Specifies metadata of the foreign data type definition in field
// schema
// ([TableFieldSchema.foreign_type_definition][google.cloud.bigquery.v2.TableFieldSchema.foreign_type_definition]).
ForeignTypeInfo foreign_type_info = 3
[(google.api.field_behavior) = OPTIONAL];
}
// Metadata about the foreign data type definition such as the system
// in which the type is defined.
message ForeignTypeInfo {
// External systems, such as query engines or table formats, that have their
// own data types.
enum TypeSystem {
// TypeSystem not specified.
TYPE_SYSTEM_UNSPECIFIED = 0;
// Represents Hive data types.
HIVE = 1;
}
// Required. Specifies the system which defines the foreign data type.
TypeSystem type_system = 1 [(google.api.field_behavior) = REQUIRED];
}
// Data policy option proto, it currently supports name only, will support
// precedence later.
message DataPolicyOption {
// Data policy resource name in the form of
// projects/project_id/locations/location_id/dataPolicies/data_policy_id.
optional string name = 1;
}
// A field in TableSchema
message TableFieldSchema {
message PolicyTagList {
// A list of policy tag resource names. For example,
// "projects/1/locations/eu/taxonomies/2/policyTags/3". At most 1 policy tag
// is currently allowed.
repeated string names = 1;
}
// Rounding mode options that can be used when storing NUMERIC
// or BIGNUMERIC values.
enum RoundingMode {
// Unspecified will default to using ROUND_HALF_AWAY_FROM_ZERO.
ROUNDING_MODE_UNSPECIFIED = 0;
// ROUND_HALF_AWAY_FROM_ZERO rounds half values away from zero
// when applying precision and scale upon writing of NUMERIC and BIGNUMERIC
// values.
// For Scale: 0
// 1.1, 1.2, 1.3, 1.4 => 1
// 1.5, 1.6, 1.7, 1.8, 1.9 => 2
ROUND_HALF_AWAY_FROM_ZERO = 1;
// ROUND_HALF_EVEN rounds half values to the nearest even value
// when applying precision and scale upon writing of NUMERIC and BIGNUMERIC
// values.
// For Scale: 0
// 1.1, 1.2, 1.3, 1.4 => 1
// 1.5 => 2
// 1.6, 1.7, 1.8, 1.9 => 2
// 2.5 => 2
ROUND_HALF_EVEN = 2;
}
// Represents the type of a field element.
message FieldElementType {
// Required. The type of a field element. For more information, see
// [TableFieldSchema.type][google.cloud.bigquery.v2.TableFieldSchema.type].
string type = 1 [(google.api.field_behavior) = REQUIRED];
}
// Required. The field name. The name must contain only letters (a-z, A-Z),
// numbers (0-9), or underscores (_), and must start with a letter or
// underscore. The maximum length is 300 characters.
string name = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The field data type. Possible values include:
//
// * STRING
// * BYTES
// * INTEGER (or INT64)
// * FLOAT (or FLOAT64)
// * BOOLEAN (or BOOL)
// * TIMESTAMP
// * DATE
// * TIME
// * DATETIME
// * GEOGRAPHY
// * NUMERIC
// * BIGNUMERIC
// * JSON
// * RECORD (or STRUCT)
// * RANGE
//
// Use of RECORD/STRUCT indicates that the field contains a nested schema.
string type = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. The field mode. Possible values include NULLABLE, REQUIRED and
// REPEATED. The default value is NULLABLE.
string mode = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. Describes the nested schema fields if the type property is set
// to RECORD.
repeated TableFieldSchema fields = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. The field description. The maximum length is 1,024 characters.
google.protobuf.StringValue description = 6
[(google.api.field_behavior) = OPTIONAL];
// Optional. The policy tags attached to this field, used for field-level
// access control. If not set, defaults to empty policy_tags.
PolicyTagList policy_tags = 9 [(google.api.field_behavior) = OPTIONAL];
// Optional. Data policy options, will replace the data_policies.
repeated DataPolicyOption data_policies = 21
[(google.api.field_behavior) = OPTIONAL];
// Optional. Maximum length of values of this field for STRINGS or BYTES.
//
// If max_length is not specified, no maximum length constraint is imposed
// on this field.
//
// If type = "STRING", then max_length represents the maximum UTF-8
// length of strings in this field.
//
// If type = "BYTES", then max_length represents the maximum number of
// bytes in this field.
//
// It is invalid to set this field if type ≠ "STRING" and ≠ "BYTES".
int64 max_length = 10 [(google.api.field_behavior) = OPTIONAL];
// Optional. Precision (maximum number of total digits in base 10) and scale
// (maximum number of digits in the fractional part in base 10) constraints
// for values of this field for NUMERIC or BIGNUMERIC.
//
// It is invalid to set precision or scale if type ≠ "NUMERIC" and ≠
// "BIGNUMERIC".
//
// If precision and scale are not specified, no value range constraint is
// imposed on this field insofar as values are permitted by the type.
//
// Values of this NUMERIC or BIGNUMERIC field must be in this range when:
//
// * Precision (P) and scale (S) are specified:
// [-10P-S + 10-S,
// 10P-S - 10-S]
// * Precision (P) is specified but not scale (and thus scale is
// interpreted to be equal to zero):
// [-10P + 1, 10P - 1].
//
// Acceptable values for precision and scale if both are specified:
//
// * If type = "NUMERIC":
// 1 ≤ precision - scale ≤ 29 and 0 ≤ scale ≤ 9.
// * If type = "BIGNUMERIC":
// 1 ≤ precision - scale ≤ 38 and 0 ≤ scale ≤ 38.
//
// Acceptable values for precision if only precision is specified but not
// scale (and thus scale is interpreted to be equal to zero):
//
// * If type = "NUMERIC": 1 ≤ precision ≤ 29.
// * If type = "BIGNUMERIC": 1 ≤ precision ≤ 38.
//
// If scale is specified but not precision, then it is invalid.
int64 precision = 11 [(google.api.field_behavior) = OPTIONAL];
// Optional. See documentation for precision.
int64 scale = 12 [(google.api.field_behavior) = OPTIONAL];
// Optional. Specifies the rounding mode to be used when storing values of
// NUMERIC and BIGNUMERIC type.
RoundingMode rounding_mode = 15 [(google.api.field_behavior) = OPTIONAL];
// Optional. Field collation can be set only when the type of field is STRING.
// The following values are supported:
//
// * 'und:ci': undetermined locale, case insensitive.
// * '': empty string. Default to case-sensitive behavior.
google.protobuf.StringValue collation = 13
[(google.api.field_behavior) = OPTIONAL];
// Optional. A SQL expression to specify the [default value]
// (https://cloud.google.com/bigquery/docs/default-values) for this field.
google.protobuf.StringValue default_value_expression = 14
[(google.api.field_behavior) = OPTIONAL];
// Optional. The subtype of the RANGE, if the type of this field is RANGE. If
// the type is RANGE, this field is required. Values for the field element
// type can be the following:
//
// * DATE
// * DATETIME
// * TIMESTAMP
FieldElementType range_element_type = 18
[(google.api.field_behavior) = OPTIONAL];
// Optional. Definition of the foreign data type.
// Only valid for top-level schema fields (not nested fields).
// If the type is FOREIGN, this field is required.
string foreign_type_definition = 23 [(google.api.field_behavior) = OPTIONAL];
}