google-cloud-bigquery 1.27.0 → 1.32.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +58 -0
- data/CONTRIBUTING.md +3 -4
- data/LOGGING.md +1 -1
- data/OVERVIEW.md +15 -14
- data/lib/google/cloud/bigquery/convert.rb +72 -76
- data/lib/google/cloud/bigquery/copy_job.rb +1 -0
- data/lib/google/cloud/bigquery/data.rb +2 -2
- data/lib/google/cloud/bigquery/dataset.rb +181 -62
- data/lib/google/cloud/bigquery/dataset/access.rb +3 -3
- data/lib/google/cloud/bigquery/dataset/list.rb +2 -2
- data/lib/google/cloud/bigquery/external.rb +9 -2619
- data/lib/google/cloud/bigquery/external/bigtable_source.rb +230 -0
- data/lib/google/cloud/bigquery/external/bigtable_source/column.rb +404 -0
- data/lib/google/cloud/bigquery/external/bigtable_source/column_family.rb +945 -0
- data/lib/google/cloud/bigquery/external/csv_source.rb +481 -0
- data/lib/google/cloud/bigquery/external/data_source.rb +771 -0
- data/lib/google/cloud/bigquery/external/json_source.rb +170 -0
- data/lib/google/cloud/bigquery/external/parquet_source.rb +148 -0
- data/lib/google/cloud/bigquery/external/sheets_source.rb +166 -0
- data/lib/google/cloud/bigquery/extract_job.rb +4 -2
- data/lib/google/cloud/bigquery/job.rb +9 -3
- data/lib/google/cloud/bigquery/job/list.rb +4 -4
- data/lib/google/cloud/bigquery/load_job.rb +178 -19
- data/lib/google/cloud/bigquery/model/list.rb +2 -2
- data/lib/google/cloud/bigquery/policy.rb +2 -1
- data/lib/google/cloud/bigquery/project.rb +47 -43
- data/lib/google/cloud/bigquery/project/list.rb +2 -2
- data/lib/google/cloud/bigquery/query_job.rb +84 -62
- data/lib/google/cloud/bigquery/routine.rb +1 -4
- data/lib/google/cloud/bigquery/routine/list.rb +2 -2
- data/lib/google/cloud/bigquery/schema.rb +39 -3
- data/lib/google/cloud/bigquery/schema/field.rb +63 -13
- data/lib/google/cloud/bigquery/service.rb +11 -13
- data/lib/google/cloud/bigquery/standard_sql.rb +15 -3
- data/lib/google/cloud/bigquery/table.rb +312 -69
- data/lib/google/cloud/bigquery/table/async_inserter.rb +44 -17
- data/lib/google/cloud/bigquery/table/list.rb +2 -2
- data/lib/google/cloud/bigquery/version.rb +1 -1
- metadata +28 -14
@@ -121,12 +121,12 @@ module Google
|
|
121
121
|
# puts project.name
|
122
122
|
# end
|
123
123
|
#
|
124
|
-
def all request_limit: nil
|
124
|
+
def all request_limit: nil, &block
|
125
125
|
request_limit = request_limit.to_i if request_limit
|
126
126
|
return enum_for :all, request_limit: request_limit unless block_given?
|
127
127
|
results = self
|
128
128
|
loop do
|
129
|
-
results.each
|
129
|
+
results.each(&block)
|
130
130
|
if request_limit
|
131
131
|
request_limit -= 1
|
132
132
|
break if request_limit.negative?
|
@@ -514,7 +514,7 @@ module Google
|
|
514
514
|
# Checks if the destination table will be time-partitioned. See
|
515
515
|
# [Partitioned Tables](https://cloud.google.com/bigquery/docs/partitioned-tables).
|
516
516
|
#
|
517
|
-
# @return [Boolean
|
517
|
+
# @return [Boolean] `true` when the table will be time-partitioned,
|
518
518
|
# or `false` otherwise.
|
519
519
|
#
|
520
520
|
# @!group Attributes
|
@@ -589,10 +589,15 @@ module Google
|
|
589
589
|
###
|
590
590
|
# Checks if the destination table will be clustered.
|
591
591
|
#
|
592
|
+
# See {QueryJob::Updater#clustering_fields=}, {Table#clustering_fields} and
|
593
|
+
# {Table#clustering_fields=}.
|
594
|
+
#
|
592
595
|
# @see https://cloud.google.com/bigquery/docs/clustered-tables
|
593
|
-
# Introduction to
|
596
|
+
# Introduction to clustered tables
|
597
|
+
# @see https://cloud.google.com/bigquery/docs/creating-clustered-tables
|
598
|
+
# Creating and using clustered tables
|
594
599
|
#
|
595
|
-
# @return [Boolean
|
600
|
+
# @return [Boolean] `true` when the table will be clustered,
|
596
601
|
# or `false` otherwise.
|
597
602
|
#
|
598
603
|
# @!group Attributes
|
@@ -607,14 +612,16 @@ module Google
|
|
607
612
|
# be first partitioned and subsequently clustered. The order of the
|
608
613
|
# returned fields determines the sort order of the data.
|
609
614
|
#
|
610
|
-
#
|
615
|
+
# BigQuery supports clustering for both partitioned and non-partitioned
|
616
|
+
# tables.
|
617
|
+
#
|
618
|
+
# See {QueryJob::Updater#clustering_fields=}, {Table#clustering_fields} and
|
619
|
+
# {Table#clustering_fields=}.
|
611
620
|
#
|
612
|
-
# @see https://cloud.google.com/bigquery/docs/partitioned-tables
|
613
|
-
# Partitioned Tables
|
614
621
|
# @see https://cloud.google.com/bigquery/docs/clustered-tables
|
615
|
-
# Introduction to
|
622
|
+
# Introduction to clustered tables
|
616
623
|
# @see https://cloud.google.com/bigquery/docs/creating-clustered-tables
|
617
|
-
# Creating and
|
624
|
+
# Creating and using clustered tables
|
618
625
|
#
|
619
626
|
# @return [Array<String>, nil] The clustering fields, or `nil` if the
|
620
627
|
# destination table will not be clustered.
|
@@ -692,8 +699,11 @@ module Google
|
|
692
699
|
end
|
693
700
|
ensure_schema!
|
694
701
|
|
695
|
-
|
696
|
-
|
702
|
+
data_hash = service.list_tabledata destination_table_dataset_id,
|
703
|
+
destination_table_table_id,
|
704
|
+
token: token,
|
705
|
+
max: max,
|
706
|
+
start: start
|
697
707
|
Data.from_gapi_json data_hash, destination_table_gapi, @gapi, service
|
698
708
|
end
|
699
709
|
alias query_results data
|
@@ -704,12 +714,11 @@ module Google
|
|
704
714
|
##
|
705
715
|
# @private Create an Updater object.
|
706
716
|
def initialize service, gapi
|
717
|
+
super()
|
707
718
|
@service = service
|
708
719
|
@gapi = gapi
|
709
720
|
end
|
710
721
|
|
711
|
-
# rubocop:disable all
|
712
|
-
|
713
722
|
##
|
714
723
|
# @private Create an Updater from an options hash.
|
715
724
|
#
|
@@ -748,8 +757,6 @@ module Google
|
|
748
757
|
updater
|
749
758
|
end
|
750
759
|
|
751
|
-
# rubocop:enable all
|
752
|
-
|
753
760
|
##
|
754
761
|
# Sets the geographic location where the job should run. Required
|
755
762
|
# except for US and EU.
|
@@ -853,20 +860,21 @@ module Google
|
|
853
860
|
#
|
854
861
|
# Ruby types are mapped to BigQuery types as follows:
|
855
862
|
#
|
856
|
-
# | BigQuery
|
857
|
-
#
|
858
|
-
# | `BOOL`
|
859
|
-
# | `INT64`
|
860
|
-
# | `FLOAT64`
|
861
|
-
# | `NUMERIC`
|
862
|
-
# | `
|
863
|
-
# | `
|
864
|
-
# | `
|
865
|
-
# | `
|
866
|
-
# | `
|
867
|
-
# | `
|
868
|
-
# | `
|
869
|
-
# | `
|
863
|
+
# | BigQuery | Ruby | Notes |
|
864
|
+
# |--------------|--------------------------------------|--------------------------------------------------|
|
865
|
+
# | `BOOL` | `true`/`false` | |
|
866
|
+
# | `INT64` | `Integer` | |
|
867
|
+
# | `FLOAT64` | `Float` | |
|
868
|
+
# | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
|
869
|
+
# | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
|
870
|
+
# | `STRING` | `String` | |
|
871
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
872
|
+
# | `DATE` | `Date` | |
|
873
|
+
# | `TIMESTAMP` | `Time` | |
|
874
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
875
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
876
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
877
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
870
878
|
#
|
871
879
|
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
|
872
880
|
# of each BigQuery data type, including allowed values.
|
@@ -887,35 +895,37 @@ module Google
|
|
887
895
|
#
|
888
896
|
# Ruby types are mapped to BigQuery types as follows:
|
889
897
|
#
|
890
|
-
# | BigQuery
|
891
|
-
#
|
892
|
-
# | `BOOL`
|
893
|
-
# | `INT64`
|
894
|
-
# | `FLOAT64`
|
895
|
-
# | `NUMERIC`
|
896
|
-
# | `
|
897
|
-
# | `
|
898
|
-
# | `
|
899
|
-
# | `
|
900
|
-
# | `
|
901
|
-
# | `
|
902
|
-
# | `
|
903
|
-
# | `
|
898
|
+
# | BigQuery | Ruby | Notes |
|
899
|
+
# |--------------|--------------------------------------|--------------------------------------------------|
|
900
|
+
# | `BOOL` | `true`/`false` | |
|
901
|
+
# | `INT64` | `Integer` | |
|
902
|
+
# | `FLOAT64` | `Float` | |
|
903
|
+
# | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
|
904
|
+
# | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
|
905
|
+
# | `STRING` | `String` | |
|
906
|
+
# | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
|
907
|
+
# | `DATE` | `Date` | |
|
908
|
+
# | `TIMESTAMP` | `Time` | |
|
909
|
+
# | `TIME` | `Google::Cloud::BigQuery::Time` | |
|
910
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
911
|
+
# | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
|
912
|
+
# | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
|
904
913
|
#
|
905
914
|
# See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
|
906
915
|
# of each BigQuery data type, including allowed values.
|
907
|
-
# @param [Array, Hash] types Standard SQL only. Types of the SQL parameters in `params`. It is not always
|
908
|
-
# infer the right SQL type from a value in `params`. In these cases, `types` must be used to
|
909
|
-
# type for these values.
|
916
|
+
# @param [Array, Hash] types Standard SQL only. Types of the SQL parameters in `params`. It is not always
|
917
|
+
# possible to infer the right SQL type from a value in `params`. In these cases, `types` must be used to
|
918
|
+
# specify the SQL type for these values.
|
910
919
|
#
|
911
|
-
#
|
912
|
-
# parameters. This must be an `Hash` when the query uses named query parameters. The values
|
913
|
-
# BigQuery type codes from the following list:
|
920
|
+
# Arguments must match the value type passed to `params`. This must be an `Array` when the query uses
|
921
|
+
# positional query parameters. This must be an `Hash` when the query uses named query parameters. The values
|
922
|
+
# should be BigQuery type codes from the following list:
|
914
923
|
#
|
915
924
|
# * `:BOOL`
|
916
925
|
# * `:INT64`
|
917
926
|
# * `:FLOAT64`
|
918
927
|
# * `:NUMERIC`
|
928
|
+
# * `:BIGNUMERIC`
|
919
929
|
# * `:STRING`
|
920
930
|
# * `:DATETIME`
|
921
931
|
# * `:DATE`
|
@@ -935,13 +945,13 @@ module Google
|
|
935
945
|
raise ArgumentError, "types must use the same format as params" if types.class != params.class
|
936
946
|
|
937
947
|
case params
|
938
|
-
when Array
|
948
|
+
when Array
|
939
949
|
@gapi.configuration.query.use_legacy_sql = false
|
940
950
|
@gapi.configuration.query.parameter_mode = "POSITIONAL"
|
941
951
|
@gapi.configuration.query.query_parameters = params.zip(types).map do |param, type|
|
942
952
|
Convert.to_query_param param, type
|
943
953
|
end
|
944
|
-
when Hash
|
954
|
+
when Hash
|
945
955
|
@gapi.configuration.query.use_legacy_sql = false
|
946
956
|
@gapi.configuration.query.parameter_mode = "NAMED"
|
947
957
|
@gapi.configuration.query.query_parameters = params.map do |name, param|
|
@@ -1442,23 +1452,23 @@ module Google
|
|
1442
1452
|
end
|
1443
1453
|
|
1444
1454
|
##
|
1445
|
-
# Sets
|
1446
|
-
# clustered. Must be specified with time-based partitioning, data in
|
1447
|
-
# the table will be first partitioned and subsequently clustered.
|
1455
|
+
# Sets the list of fields on which data should be clustered.
|
1448
1456
|
#
|
1449
1457
|
# Only top-level, non-repeated, simple-type fields are supported. When
|
1450
1458
|
# you cluster a table using multiple columns, the order of columns you
|
1451
1459
|
# specify is important. The order of the specified columns determines
|
1452
1460
|
# the sort order of the data.
|
1453
1461
|
#
|
1454
|
-
#
|
1462
|
+
# BigQuery supports clustering for both partitioned and non-partitioned
|
1463
|
+
# tables.
|
1464
|
+
#
|
1465
|
+
# See {QueryJob#clustering_fields}, {Table#clustering_fields} and
|
1466
|
+
# {Table#clustering_fields=}.
|
1455
1467
|
#
|
1456
|
-
# @see https://cloud.google.com/bigquery/docs/partitioned-tables
|
1457
|
-
# Partitioned Tables
|
1458
1468
|
# @see https://cloud.google.com/bigquery/docs/clustered-tables
|
1459
|
-
# Introduction to
|
1469
|
+
# Introduction to clustered tables
|
1460
1470
|
# @see https://cloud.google.com/bigquery/docs/creating-clustered-tables
|
1461
|
-
# Creating and
|
1471
|
+
# Creating and using clustered tables
|
1462
1472
|
#
|
1463
1473
|
# @param [Array<String>] fields The clustering fields. Only top-level,
|
1464
1474
|
# non-repeated, simple-type fields are supported.
|
@@ -1592,9 +1602,20 @@ module Google
|
|
1592
1602
|
# end
|
1593
1603
|
#
|
1594
1604
|
class Stage
|
1595
|
-
attr_reader :compute_ratio_avg
|
1596
|
-
|
1597
|
-
|
1605
|
+
attr_reader :compute_ratio_avg
|
1606
|
+
attr_reader :compute_ratio_max
|
1607
|
+
attr_reader :id
|
1608
|
+
attr_reader :name
|
1609
|
+
attr_reader :read_ratio_avg
|
1610
|
+
attr_reader :read_ratio_max
|
1611
|
+
attr_reader :records_read
|
1612
|
+
attr_reader :records_written
|
1613
|
+
attr_reader :status
|
1614
|
+
attr_reader :steps
|
1615
|
+
attr_reader :wait_ratio_avg
|
1616
|
+
attr_reader :wait_ratio_max
|
1617
|
+
attr_reader :write_ratio_avg
|
1618
|
+
attr_reader :write_ratio_max
|
1598
1619
|
|
1599
1620
|
##
|
1600
1621
|
# @private Creates a new Stage instance.
|
@@ -1657,7 +1678,8 @@ module Google
|
|
1657
1678
|
# end
|
1658
1679
|
#
|
1659
1680
|
class Step
|
1660
|
-
attr_reader :kind
|
1681
|
+
attr_reader :kind
|
1682
|
+
attr_reader :substeps
|
1661
1683
|
|
1662
1684
|
##
|
1663
1685
|
# @private Creates a new Stage instance.
|
@@ -1006,6 +1006,7 @@ module Google
|
|
1006
1006
|
##
|
1007
1007
|
# @private Create an Updater object.
|
1008
1008
|
def initialize gapi
|
1009
|
+
super()
|
1009
1010
|
@original_gapi = gapi
|
1010
1011
|
@gapi = gapi.dup
|
1011
1012
|
end
|
@@ -1210,15 +1211,11 @@ module Google
|
|
1210
1211
|
end
|
1211
1212
|
alias refresh! reload!
|
1212
1213
|
|
1213
|
-
# rubocop:disable Style/CaseEquality
|
1214
|
-
|
1215
1214
|
# @private
|
1216
1215
|
def updates?
|
1217
1216
|
!(@gapi === @original_gapi)
|
1218
1217
|
end
|
1219
1218
|
|
1220
|
-
# rubocop:enable Style/CaseEquality
|
1221
|
-
|
1222
1219
|
# @private
|
1223
1220
|
def to_gapi
|
1224
1221
|
@gapi
|
@@ -124,12 +124,12 @@ module Google
|
|
124
124
|
# puts routine.routine_id
|
125
125
|
# end
|
126
126
|
#
|
127
|
-
def all request_limit: nil
|
127
|
+
def all request_limit: nil, &block
|
128
128
|
request_limit = request_limit.to_i if request_limit
|
129
129
|
return enum_for :all, request_limit: request_limit unless block_given?
|
130
130
|
results = self
|
131
131
|
loop do
|
132
|
-
results.each
|
132
|
+
results.each(&block)
|
133
133
|
if request_limit
|
134
134
|
request_limit -= 1
|
135
135
|
break if request_limit.negative?
|
@@ -332,9 +332,18 @@ module Google
|
|
332
332
|
end
|
333
333
|
|
334
334
|
##
|
335
|
-
# Adds a numeric number field to the schema.
|
336
|
-
#
|
337
|
-
#
|
335
|
+
# Adds a numeric number field to the schema. `NUMERIC` is a decimal
|
336
|
+
# type with fixed precision and scale. Precision is the number of
|
337
|
+
# digits that the number contains. Scale is how many of these
|
338
|
+
# digits appear after the decimal point. It supports:
|
339
|
+
#
|
340
|
+
# Precision: 38
|
341
|
+
# Scale: 9
|
342
|
+
# Min: -9.9999999999999999999999999999999999999E+28
|
343
|
+
# Max: 9.9999999999999999999999999999999999999E+28
|
344
|
+
#
|
345
|
+
# This type can represent decimal fractions exactly, and is suitable
|
346
|
+
# for financial calculations.
|
338
347
|
#
|
339
348
|
# @param [String] name The field name. The name must contain only
|
340
349
|
# letters (a-z, A-Z), numbers (0-9), or underscores (_), and must
|
@@ -349,6 +358,33 @@ module Google
|
|
349
358
|
add_field name, :numeric, description: description, mode: mode
|
350
359
|
end
|
351
360
|
|
361
|
+
##
|
362
|
+
# Adds a bignumeric number field to the schema. `BIGNUMERIC` is a
|
363
|
+
# decimal type with fixed precision and scale. Precision is the
|
364
|
+
# number of digits that the number contains. Scale is how many of
|
365
|
+
# these digits appear after the decimal point. It supports:
|
366
|
+
#
|
367
|
+
# Precision: 76.76 (the 77th digit is partial)
|
368
|
+
# Scale: 38
|
369
|
+
# Min: -5.7896044618658097711785492504343953926634992332820282019728792003956564819968E+38
|
370
|
+
# Max: 5.7896044618658097711785492504343953926634992332820282019728792003956564819967E+38
|
371
|
+
#
|
372
|
+
# This type can represent decimal fractions exactly, and is suitable
|
373
|
+
# for financial calculations.
|
374
|
+
#
|
375
|
+
# @param [String] name The field name. The name must contain only
|
376
|
+
# letters (a-z, A-Z), numbers (0-9), or underscores (_), and must
|
377
|
+
# start with a letter or underscore. The maximum length is 128
|
378
|
+
# characters.
|
379
|
+
# @param [String] description A description of the field.
|
380
|
+
# @param [Symbol] mode The field's mode. The possible values are
|
381
|
+
# `:nullable`, `:required`, and `:repeated`. The default value is
|
382
|
+
# `:nullable`.
|
383
|
+
#
|
384
|
+
def bignumeric name, description: nil, mode: :nullable
|
385
|
+
add_field name, :bignumeric, description: description, mode: mode
|
386
|
+
end
|
387
|
+
|
352
388
|
##
|
353
389
|
# Adds a boolean field to the schema.
|
354
390
|
#
|
@@ -40,8 +40,8 @@ module Google
|
|
40
40
|
MODES = ["NULLABLE", "REQUIRED", "REPEATED"].freeze
|
41
41
|
|
42
42
|
# @private
|
43
|
-
TYPES = ["STRING", "INTEGER", "INT64", "FLOAT", "FLOAT64", "NUMERIC", "
|
44
|
-
"TIME", "DATETIME", "DATE", "RECORD", "STRUCT"].freeze
|
43
|
+
TYPES = ["STRING", "INTEGER", "INT64", "FLOAT", "FLOAT64", "NUMERIC", "BIGNUMERIC", "BOOLEAN", "BOOL",
|
44
|
+
"BYTES", "TIMESTAMP", "TIME", "DATETIME", "DATE", "RECORD", "STRUCT"].freeze
|
45
45
|
|
46
46
|
##
|
47
47
|
# The name of the field.
|
@@ -72,10 +72,10 @@ module Google
|
|
72
72
|
#
|
73
73
|
# @return [String] The field data type. Possible values include
|
74
74
|
# `STRING`, `BYTES`, `INTEGER`, `INT64` (same as `INTEGER`),
|
75
|
-
# `FLOAT`, `FLOAT64` (same as `FLOAT`), `NUMERIC`, `
|
76
|
-
# (same as `BOOLEAN`), `TIMESTAMP`, `DATE`,
|
77
|
-
# `RECORD` (where `RECORD` indicates that the
|
78
|
-
# nested schema) or `STRUCT` (same as `RECORD`).
|
75
|
+
# `FLOAT`, `FLOAT64` (same as `FLOAT`), `NUMERIC`, `BIGNUMERIC`,
|
76
|
+
# `BOOLEAN`, `BOOL` (same as `BOOLEAN`), `TIMESTAMP`, `DATE`,
|
77
|
+
# `TIME`, `DATETIME`, `RECORD` (where `RECORD` indicates that the
|
78
|
+
# field contains a nested schema) or `STRUCT` (same as `RECORD`).
|
79
79
|
#
|
80
80
|
def type
|
81
81
|
@gapi.type
|
@@ -86,10 +86,10 @@ module Google
|
|
86
86
|
#
|
87
87
|
# @param [String] new_type The data type. Possible values include
|
88
88
|
# `STRING`, `BYTES`, `INTEGER`, `INT64` (same as `INTEGER`),
|
89
|
-
# `FLOAT`, `FLOAT64` (same as `FLOAT`), `NUMERIC`, `
|
90
|
-
# (same as `BOOLEAN`), `TIMESTAMP`, `DATE`,
|
91
|
-
# `RECORD` (where `RECORD` indicates that the
|
92
|
-
# nested schema) or `STRUCT` (same as `RECORD`).
|
89
|
+
# `FLOAT`, `FLOAT64` (same as `FLOAT`), `NUMERIC`, `BIGNUMERIC`,
|
90
|
+
# `BOOLEAN`, `BOOL` (same as `BOOLEAN`), `TIMESTAMP`, `DATE`,
|
91
|
+
# `TIME`, `DATETIME`, `RECORD` (where `RECORD` indicates that the
|
92
|
+
# field contains a nested schema) or `STRUCT` (same as `RECORD`).
|
93
93
|
#
|
94
94
|
def type= new_type
|
95
95
|
@gapi.update! type: verify_type(new_type)
|
@@ -199,6 +199,15 @@ module Google
|
|
199
199
|
type == "NUMERIC"
|
200
200
|
end
|
201
201
|
|
202
|
+
##
|
203
|
+
# Checks if the type of the field is `BIGNUMERIC`.
|
204
|
+
#
|
205
|
+
# @return [Boolean] `true` when `BIGNUMERIC`, `false` otherwise.
|
206
|
+
#
|
207
|
+
def bignumeric?
|
208
|
+
type == "BIGNUMERIC"
|
209
|
+
end
|
210
|
+
|
202
211
|
##
|
203
212
|
# Checks if the type of the field is `BOOLEAN`.
|
204
213
|
#
|
@@ -299,6 +308,7 @@ module Google
|
|
299
308
|
# * `:INT64`
|
300
309
|
# * `:FLOAT64`
|
301
310
|
# * `:NUMERIC`
|
311
|
+
# * `:BIGNUMERIC`
|
302
312
|
# * `:STRING`
|
303
313
|
# * `:DATETIME`
|
304
314
|
# * `:DATE`
|
@@ -394,9 +404,18 @@ module Google
|
|
394
404
|
end
|
395
405
|
|
396
406
|
##
|
397
|
-
# Adds a numeric number field to the schema.
|
398
|
-
# fixed
|
399
|
-
# the
|
407
|
+
# Adds a numeric number field to the schema. `NUMERIC` is a decimal
|
408
|
+
# type with fixed precision and scale. Precision is the number of
|
409
|
+
# digits that the number contains. Scale is how many of these
|
410
|
+
# digits appear after the decimal point. It supports:
|
411
|
+
#
|
412
|
+
# Precision: 38
|
413
|
+
# Scale: 9
|
414
|
+
# Min: -9.9999999999999999999999999999999999999E+28
|
415
|
+
# Max: 9.9999999999999999999999999999999999999E+28
|
416
|
+
#
|
417
|
+
# This type can represent decimal fractions exactly, and is suitable
|
418
|
+
# for financial calculations.
|
400
419
|
#
|
401
420
|
# This can only be called on fields that are of type `RECORD`.
|
402
421
|
#
|
@@ -415,6 +434,37 @@ module Google
|
|
415
434
|
add_field name, :numeric, description: description, mode: mode
|
416
435
|
end
|
417
436
|
|
437
|
+
##
|
438
|
+
# Adds a bignumeric number field to the schema. `BIGNUMERIC` is a
|
439
|
+
# decimal type with fixed precision and scale. Precision is the
|
440
|
+
# number of digits that the number contains. Scale is how many of
|
441
|
+
# these digits appear after the decimal point. It supports:
|
442
|
+
#
|
443
|
+
# Precision: 76.76 (the 77th digit is partial)
|
444
|
+
# Scale: 38
|
445
|
+
# Min: -5.7896044618658097711785492504343953926634992332820282019728792003956564819968E+38
|
446
|
+
# Max: 5.7896044618658097711785492504343953926634992332820282019728792003956564819967E+38
|
447
|
+
#
|
448
|
+
# This type can represent decimal fractions exactly, and is suitable
|
449
|
+
# for financial calculations.
|
450
|
+
#
|
451
|
+
# This can only be called on fields that are of type `RECORD`.
|
452
|
+
#
|
453
|
+
# @param [String] name The field name. The name must contain only
|
454
|
+
# letters (a-z, A-Z), numbers (0-9), or underscores (_), and must
|
455
|
+
# start with a letter or underscore. The maximum length is 128
|
456
|
+
# characters.
|
457
|
+
# @param [String] description A description of the field.
|
458
|
+
# @param [Symbol] mode The field's mode. The possible values are
|
459
|
+
# `:nullable`, `:required`, and `:repeated`. The default value is
|
460
|
+
# `:nullable`.
|
461
|
+
#
|
462
|
+
def bignumeric name, description: nil, mode: :nullable
|
463
|
+
record_check!
|
464
|
+
|
465
|
+
add_field name, :bignumeric, description: description, mode: mode
|
466
|
+
end
|
467
|
+
|
418
468
|
##
|
419
469
|
# Adds a boolean field to the nested schema of a record field.
|
420
470
|
#
|