red-arrow-activerecord 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/doc/text/news.md +13 -0
- data/lib/arrow-activerecord/arrowable.rb +18 -55
- data/lib/arrow-activerecord/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6e3ce2d50d09a561409312f1a6d46b9be1764028c7502b036147f8be00c1b5ce
|
4
|
+
data.tar.gz: e4a5aa2ccbcf04142b9e798e5363813476b42982154dfcc5b1ca259d975de5ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b345fbf7fa5523565b991570bf09ea174be478e4b47644e0377c767380c6c27532ae4e2ad85e9587dccb7bbf48ad1eadd2b11e2c093e14ad81d91cb54300adbe
|
7
|
+
data.tar.gz: 752ec4e82b12c9f599fd02a1ea6b58204a4d7de22b7cf09b502bf7c183e3a55ddeaa74db73d02d3d07e49f6d02cf50fb4fe7f7c93f4835cba0ab8284f2bb8d5f
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 0.1.1 - 2019-02-02
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Suppressed a warning.
|
8
|
+
[GitHub#3][Patch by Yasuo Honda]
|
9
|
+
|
10
|
+
* Changed to use Red Arrow 0.12.0 or later.
|
11
|
+
|
12
|
+
### Thanks
|
13
|
+
|
14
|
+
* Yasuo Honda
|
15
|
+
|
3
16
|
## 0.1.0 - 2018-02-05
|
4
17
|
|
5
18
|
Initial release!!!
|
@@ -7,34 +7,23 @@ module ArrowActiveRecord
|
|
7
7
|
target_column_names = column_names if select_values.empty?
|
8
8
|
|
9
9
|
fields = []
|
10
|
-
data_types = []
|
11
10
|
target_column_names.each do |name|
|
12
11
|
name = name.to_s
|
13
12
|
target_column = columns.find do |column|
|
14
13
|
column.name == name
|
15
14
|
end
|
16
|
-
|
17
|
-
fields << Arrow::Field.new(name, arrow_data_type)
|
18
|
-
data_types << arrow_data_type
|
15
|
+
fields << {name: name, data_type: extract_arrow_data_type(target_column)}
|
19
16
|
end
|
20
17
|
schema = Arrow::Schema.new(fields)
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
end
|
19
|
+
record_batches = []
|
20
|
+
record_batch_builder = Arrow::RecordBatchBuilder.new(schema)
|
25
21
|
in_batches(of: batch_size).each do |relation|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
arrow_array_batches[i] << build_arrow_array(column_values, data_type)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
columns = fields.collect.with_index do |field, i|
|
33
|
-
chunked_array = Arrow::ChunkedArray.new(arrow_array_batches[i])
|
34
|
-
Arrow::Column.new(field, chunked_array)
|
22
|
+
records = relation.pluck(*target_column_names)
|
23
|
+
record_batch_builder.append(records)
|
24
|
+
record_batches << record_batch_builder.flush
|
35
25
|
end
|
36
|
-
|
37
|
-
Arrow::Table.new(schema, columns)
|
26
|
+
Arrow::Table.new(schema, record_batches)
|
38
27
|
end
|
39
28
|
|
40
29
|
private
|
@@ -49,56 +38,30 @@ module ArrowActiveRecord
|
|
49
38
|
end
|
50
39
|
case type
|
51
40
|
when :bigint
|
52
|
-
|
41
|
+
:int64
|
53
42
|
when :binary
|
54
|
-
|
43
|
+
:binary
|
55
44
|
when :boolean
|
56
|
-
|
45
|
+
:boolean
|
57
46
|
when :date
|
58
|
-
|
47
|
+
:date32
|
59
48
|
when :datetime
|
60
|
-
|
61
|
-
|
49
|
+
[:timestamp, :nano]
|
50
|
+
when :decimal
|
51
|
+
[:decimal128, type.precision, type.scale]
|
62
52
|
when :float
|
63
|
-
|
53
|
+
:float
|
64
54
|
when :integer
|
65
|
-
|
55
|
+
:int32
|
66
56
|
# when :json
|
67
57
|
when :string, :text
|
68
|
-
|
58
|
+
:string
|
69
59
|
when :time, :timestamp
|
70
|
-
|
71
|
-
when :timestamp
|
72
|
-
Arrow::TimestampDataType.new(:nano)
|
60
|
+
[:timestamp, :nano]
|
73
61
|
else
|
74
62
|
message = "unsupported data type: #{type}: #{column.inspect}"
|
75
63
|
raise NotImplementedError, message
|
76
64
|
end
|
77
65
|
end
|
78
|
-
|
79
|
-
def build_arrow_array(column_values, data_type)
|
80
|
-
case data_type
|
81
|
-
when Arrow::Int64DataType
|
82
|
-
Arrow::Int64Array.new(column_values)
|
83
|
-
when Arrow::BinaryDataType
|
84
|
-
Arrow::BinaryArray.new(column_values)
|
85
|
-
when Arrow::BooleanDataType
|
86
|
-
Arrow::BooleanArray.new(column_values)
|
87
|
-
when Arrow::Date32DataType
|
88
|
-
Arrow::Date32Array.new(column_values)
|
89
|
-
when Arrow::TimestampDataType
|
90
|
-
builder = Arrow::TimestampArrayBuilder.new(data_type)
|
91
|
-
builder.build(column_values)
|
92
|
-
when Arrow::FloatDataType
|
93
|
-
Arrow::FloatArray.new(column_values)
|
94
|
-
when Arrow::Int32DataType
|
95
|
-
Arrow::Int32Array.new(column_values)
|
96
|
-
when Arrow::StringDataType
|
97
|
-
Arrow::StringArray.new(column_values)
|
98
|
-
else
|
99
|
-
message = "unsupported data type: #{data_type.inspect}"
|
100
|
-
raise NotImplementedError, message
|
101
|
-
end
|
102
|
-
end
|
103
66
|
end
|
104
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: red-arrow-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hatappi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 0.12.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 0.12.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
requirements: []
|
131
131
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.7.6
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: A library that provides conversion method between Apache Arrow and ActiveRecord
|