Class: Google::Cloud::Bigquery::Schema::Field
- Inherits:
-
Object
- Object
- Google::Cloud::Bigquery::Schema::Field
- Defined in:
- lib/google/cloud/bigquery/schema/field.rb
Overview
Schema Field
The fields of a table schema.
Instance Method Summary collapse
-
#bignumeric(name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil) ⇒ Object
Adds a bignumeric number field to the schema.
-
#bignumeric? ⇒ Boolean
Checks if the type of the field is
BIGNUMERIC
. -
#boolean(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a boolean field to the nested schema of a record field.
-
#boolean? ⇒ Boolean
Checks if the type of the field is
BOOLEAN
. -
#bytes(name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil) ⇒ Object
Adds a bytes field to the nested schema of a record field.
-
#bytes? ⇒ Boolean
Checks if the type of the field is
BYTES
. -
#date(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a date field to the nested schema of a record field.
-
#date? ⇒ Boolean
Checks if the type of the field is
DATE
. -
#datetime(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a datetime field to the nested schema of a record field.
-
#datetime? ⇒ Boolean
Checks if the type of the field is
DATETIME
. -
#default_value_expression ⇒ String
The default value of a field using a SQL expression.
-
#default_value_expression=(default_value_expression) ⇒ Object
Updates the default value expression of the field.
-
#description ⇒ String
The description of the field.
-
#description=(new_description) ⇒ Object
Updates the description of the field.
-
#field(name) {|f| ... } ⇒ Field?
Retrieve a nested field by name, if the type property is set to
RECORD
. -
#fields ⇒ Array<Field>?
The nested fields if the type property is set to
RECORD
. -
#float(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a floating-point number field to the nested schema of a record field.
-
#float? ⇒ Boolean
Checks if the type of the field is
FLOAT
. -
#geography(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a geography field to the nested schema of a record field.
-
#geography? ⇒ Boolean
Checks if the type of the field is
GEOGRAPHY
. -
#headers ⇒ Array<Symbol>?
The names of the nested fields as symbols if the type property is set to
RECORD
. -
#integer(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds an integer field to the nested schema of a record field.
-
#integer? ⇒ Boolean
Checks if the type of the field is
INTEGER
. -
#json(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a json field to the nested schema of a record field.
-
#json? ⇒ Boolean
Checks if the type of the field is
JSON
. - #max_length ⇒ Integer?
-
#mode ⇒ String
The mode of the field.
-
#mode=(new_mode) ⇒ Object
Updates the mode of the field.
-
#name ⇒ String
The name of the field.
-
#name=(new_name) ⇒ Object
Updates the name of the field.
-
#nullable? ⇒ Boolean
Checks if the type of the field is
NULLABLE
. -
#numeric(name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil) ⇒ Object
Adds a numeric number field to the schema.
-
#numeric? ⇒ Boolean
Checks if the type of the field is
NUMERIC
. -
#param_type ⇒ Symbol, ...
The types of the field, using the same format as the optional query parameter types.
-
#policy_tags ⇒ Array<String>?
The policy tag list for the field.
-
#policy_tags=(new_policy_tags) ⇒ Object
Updates the policy tag list for the field.
-
#precision ⇒ Integer?
The precision (maximum number of total digits) for
NUMERIC
orBIGNUMERIC
types. -
#record(name, description: nil, mode: nil) {|nested_schema| ... } ⇒ Object
Adds a record field to the nested schema of a record field.
-
#record? ⇒ Boolean
(also: #struct?)
Checks if the type of the field is
RECORD
. -
#repeated? ⇒ Boolean
Checks if the type of the field is
REPEATED
. -
#required? ⇒ Boolean
Checks if the type of the field is
REQUIRED
. -
#scale ⇒ Integer?
The scale (maximum number of digits in the fractional part) for
NUMERIC
orBIGNUMERIC
types. -
#string(name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil) ⇒ Object
Adds a string field to the nested schema of a record field.
-
#string? ⇒ Boolean
Checks if the type of the field is
STRING
. -
#time(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a time field to the nested schema of a record field.
-
#time? ⇒ Boolean
Checks if the type of the field is
TIME
. -
#timestamp(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a timestamp field to the nested schema of a record field.
-
#timestamp? ⇒ Boolean
Checks if the type of the field is
TIMESTAMP
. -
#type ⇒ String
The data type of the field.
-
#type=(new_type) ⇒ Object
Updates the data type of the field.
Instance Method Details
#bignumeric(name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil) ⇒ Object
Adds a bignumeric number field to the schema. BIGNUMERIC
is a
decimal type with fixed precision and scale. Precision is the
number of digits that the number contains. Scale is how many of
these digits appear after the decimal point. It supports:
Precision: 76.76 (the 77th digit is partial) Scale: 38 Min: -5.7896044618658097711785492504343953926634992332820282019728792003956564819968E+38 Max: 5.7896044618658097711785492504343953926634992332820282019728792003956564819967E+38
This type can represent decimal fractions exactly, and is suitable for financial calculations.
This can only be called on fields that are of type RECORD
.
721 722 723 724 725 726 727 728 729 730 731 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 721 def bignumeric name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil record_check! add_field name, :bignumeric, description: description, mode: mode, policy_tags: , precision: precision, scale: scale end |
#bignumeric? ⇒ Boolean
Checks if the type of the field is BIGNUMERIC
.
395 396 397 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 395 def bignumeric? type == "BIGNUMERIC" end |
#boolean(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a boolean field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
751 752 753 754 755 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 751 def boolean name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :boolean, description: description, mode: mode, policy_tags: end |
#boolean? ⇒ Boolean
Checks if the type of the field is BOOLEAN
.
404 405 406 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 404 def boolean? type == "BOOLEAN" || type == "BOOL" end |
#bytes(name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil) ⇒ Object
Adds a bytes field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
777 778 779 780 781 782 783 784 785 786 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 777 def bytes name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil record_check! add_field name, :bytes, description: description, mode: mode, policy_tags: , max_length: max_length end |
#bytes? ⇒ Boolean
Checks if the type of the field is BYTES
.
413 414 415 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 413 def bytes? type == "BYTES" end |
#date(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a date field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
878 879 880 881 882 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 878 def date name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :date, description: description, mode: mode, policy_tags: end |
#date? ⇒ Boolean
Checks if the type of the field is DATE
.
449 450 451 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 449 def date? type == "DATE" end |
#datetime(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a datetime field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
854 855 856 857 858 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 854 def datetime name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :datetime, description: description, mode: mode, policy_tags: end |
#datetime? ⇒ Boolean
Checks if the type of the field is DATETIME
.
440 441 442 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 440 def datetime? type == "DATETIME" end |
#default_value_expression ⇒ String
The default value of a field using a SQL expression. It can only
be set for top level fields (columns). Default value for the entire struct or
array is set using a struct or array expression. The valid SQL expressions are:
- Literals for all data types, including STRUCT and ARRAY.
- The following functions:
CURRENT_TIMESTAMP
CURRENT_TIME
CURRENT_DATE
CURRENT_DATETIME
GENERATE_UUID
RAND
SESSION_USER
ST_GEOPOINT
- Struct or array composed with the above allowed functions, for example:
"[CURRENT_DATE(), DATE '2020-01-01'"]
288 289 290 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 288 def default_value_expression @gapi.default_value_expression end |
#default_value_expression=(default_value_expression) ⇒ Object
Updates the default value expression of the field.
312 313 314 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 312 def default_value_expression= default_value_expression @gapi.update! default_value_expression: default_value_expression end |
#description ⇒ String
The description of the field.
177 178 179 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 177 def description @gapi.description end |
#description=(new_description) ⇒ Object
Updates the description of the field.
187 188 189 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 187 def description= new_description @gapi.update! description: new_description end |
#field(name) {|f| ... } ⇒ Field?
Retrieve a nested field by name, if the type property is
set to RECORD
. Will return nil
otherwise.
544 545 546 547 548 549 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 544 def field name f = fields.find { |fld| fld.name == name.to_s } return nil if f.nil? yield f if block_given? f end |
#fields ⇒ Array<Field>?
The nested fields if the type property is set to RECORD
. Will be
empty otherwise.
488 489 490 491 492 493 494 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 488 def fields if frozen? Array(@gapi.fields).map { |f| Field.from_gapi(f).freeze }.freeze else Array(@gapi.fields).map { |f| Field.from_gapi f } end end |
#float(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a floating-point number field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
625 626 627 628 629 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 625 def float name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :float, description: description, mode: mode, policy_tags: end |
#float? ⇒ Boolean
Checks if the type of the field is FLOAT
.
377 378 379 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 377 def float? type == "FLOAT" || type == "FLOAT64" end |
#geography(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a geography field to the nested schema of a record field.
902 903 904 905 906 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 902 def geography name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :geography, description: description, mode: mode, policy_tags: end |
#geography? ⇒ Boolean
Checks if the type of the field is GEOGRAPHY
.
458 459 460 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 458 def geography? type == "GEOGRAPHY" end |
#headers ⇒ Array<Symbol>?
The names of the nested fields as symbols if the type property is
set to RECORD
. Will be empty otherwise.
503 504 505 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 503 def headers fields.map(&:name).map(&:to_sym) end |
#integer(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds an integer field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
600 601 602 603 604 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 600 def integer name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :integer, description: description, mode: mode, policy_tags: end |
#integer? ⇒ Boolean
Checks if the type of the field is INTEGER
.
368 369 370 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 368 def integer? type == "INTEGER" || type == "INT64" end |
#json(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a json field to the nested schema of a record field.
https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#json_type
926 927 928 929 930 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 926 def json name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :json, description: description, mode: mode, policy_tags: end |
#json? ⇒ Boolean
Checks if the type of the field is JSON
.
467 468 469 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 467 def json? type == "JSON" end |
#max_length ⇒ Integer?
The maximum length of values of this field for #string? or #bytes? fields. 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.
324 325 326 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 324 def max_length @gapi.max_length end |
#mode ⇒ String
The mode of the field.
197 198 199 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 197 def mode @gapi.mode end |
#mode=(new_mode) ⇒ Object
Updates the mode of the field.
208 209 210 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 208 def mode= new_mode @gapi.update! mode: verify_mode(new_mode) end |
#name ⇒ String
The name of the field.
72 73 74 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 72 def name @gapi.name end |
#name=(new_name) ⇒ Object
Updates the name of the field.
84 85 86 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 84 def name= new_name @gapi.update! name: String(new_name) end |
#nullable? ⇒ Boolean
Checks if the type of the field is NULLABLE
.
149 150 151 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 149 def nullable? mode == "NULLABLE" end |
#numeric(name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil) ⇒ Object
Adds a numeric number field to the schema. NUMERIC
is a decimal
type with fixed precision and scale. Precision is the number of
digits that the number contains. Scale is how many of these
digits appear after the decimal point. It supports:
Precision: 38 Scale: 9 Min: -9.9999999999999999999999999999999999999E+28 Max: 9.9999999999999999999999999999999999999E+28
This type can represent decimal fractions exactly, and is suitable for financial calculations.
This can only be called on fields that are of type RECORD
.
670 671 672 673 674 675 676 677 678 679 680 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 670 def numeric name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil record_check! add_field name, :numeric, description: description, mode: mode, policy_tags: , precision: precision, scale: scale end |
#numeric? ⇒ Boolean
Checks if the type of the field is NUMERIC
.
386 387 388 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 386 def numeric? type == "NUMERIC" end |
#param_type ⇒ Symbol, ...
The types of the field, using the same format as the optional query parameter types.
The parameter types are one of the following BigQuery type codes:
:BOOL
:INT64
:FLOAT64
:NUMERIC
:BIGNUMERIC
:STRING
:DATETIME
:DATE
:TIMESTAMP
:TIME
:BYTES
Array
- Lists are specified by providing the type code in an array. For example, an array of integers are specified as[:INT64]
.Hash
- Types for STRUCT values (Hash
objects) are specified using aHash
object, where the keys are the nested field names, and the values are the the nested field types.
531 532 533 534 535 536 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 531 def param_type param_type = type.to_sym param_type = fields.to_h { |field| [field.name.to_sym, field.param_type] } if record? param_type = [param_type] if repeated? param_type end |
#policy_tags ⇒ Array<String>?
The policy tag list for the field. Policy tag identifiers are of the form
projects/*/locations/*/taxonomies/*/policyTags/*
. At most 1 policy tag
is currently allowed.
231 232 233 234 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 231 def names = @gapi.&.names names.to_a if names && !names.empty? end |
#policy_tags=(new_policy_tags) ⇒ Object
Updates the policy tag list for the field.
261 262 263 264 265 266 267 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 261 def # If new_policy_tags is nil, send an empty array. # Sending a nil value for policy_tags results in no change. = Array() policy_tag_list = Google::Apis::BigqueryV2::TableFieldSchema::PolicyTags.new names: @gapi.update! policy_tags: policy_tag_list end |
#precision ⇒ Integer?
The precision (maximum number of total digits) for NUMERIC
or BIGNUMERIC
types. For #numeric? fields,
acceptable values for precision must be 1 ≤ (precision - scale) ≤ 29
and values for scale must be 0 ≤
scale ≤ 9
. For #bignumeric? fields, acceptable values for precision must be 1 ≤ (precision - scale) ≤
38
and values for scale must be 0 ≤ scale ≤ 38
. If the scale value is set, the precision value must be
set as well.
337 338 339 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 337 def precision @gapi.precision end |
#record(name, description: nil, mode: nil) {|nested_schema| ... } ⇒ Object
Adds a record field to the nested schema of a record field. A block must be passed describing the nested fields of the record. For more information about nested and repeated records, see Preparing Data for BigQuery.
This can only be called on fields that are of type RECORD
.
970 971 972 973 974 975 976 977 978 979 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 970 def record name, description: nil, mode: nil record_check! # TODO: do we need to raise if no block was given? raise ArgumentError, "a block is required" unless block_given? nested_field = add_field name, :record, description: description, mode: mode yield nested_field nested_field end |
#record? ⇒ Boolean Also known as: struct?
Checks if the type of the field is RECORD
.
476 477 478 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 476 def record? type == "RECORD" || type == "STRUCT" end |
#repeated? ⇒ Boolean
Checks if the type of the field is REPEATED
.
167 168 169 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 167 def repeated? mode == "REPEATED" end |
#required? ⇒ Boolean
Checks if the type of the field is REQUIRED
.
158 159 160 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 158 def required? mode == "REQUIRED" end |
#scale ⇒ Integer?
The scale (maximum number of digits in the fractional part) for NUMERIC
or BIGNUMERIC
types. For
#numeric? fields, acceptable values for precision must be 1 ≤ (precision - scale) ≤ 29
and values for
scale must be 0 ≤ scale ≤ 9
. For #bignumeric? fields, acceptable values for precision must be 1 ≤
(precision - scale) ≤ 38
and values for scale must be 0 ≤ scale ≤ 38
. If the scale value is set, the
precision value must be set as well.
350 351 352 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 350 def scale @gapi.scale end |
#string(name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil) ⇒ Object
Adds a string field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
571 572 573 574 575 576 577 578 579 580 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 571 def string name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil record_check! add_field name, :string, description: description, mode: mode, policy_tags: , max_length: max_length end |
#string? ⇒ Boolean
Checks if the type of the field is STRING
.
359 360 361 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 359 def string? type == "STRING" end |
#time(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a time field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
830 831 832 833 834 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 830 def time name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :time, description: description, mode: mode, policy_tags: end |
#time? ⇒ Boolean
Checks if the type of the field is TIME
.
431 432 433 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 431 def time? type == "TIME" end |
#timestamp(name, description: nil, mode: :nullable, policy_tags: nil) ⇒ Object
Adds a timestamp field to the nested schema of a record field.
This can only be called on fields that are of type RECORD
.
806 807 808 809 810 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 806 def name, description: nil, mode: :nullable, policy_tags: nil record_check! add_field name, :timestamp, description: description, mode: mode, policy_tags: end |
#timestamp? ⇒ Boolean
Checks if the type of the field is TIMESTAMP
.
422 423 424 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 422 def type == "TIMESTAMP" end |
#type ⇒ String
The data type of the field.
112 113 114 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 112 def type @gapi.type end |
#type=(new_type) ⇒ Object
Updates the data type of the field.
140 141 142 |
# File 'lib/google/cloud/bigquery/schema/field.rb', line 140 def type= new_type @gapi.update! type: verify_type(new_type) end |