google-cloud-bigquery 1.27.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
#
|