fluent-plugin-s3-arrow 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/bench.yml +5 -1
- data/README.md +66 -6
- data/benchmark/prelude.rb +8 -5
- data/fluent-plugin-s3-arrow.gemspec +7 -5
- data/lib/fluent-plugin-s3-arrow/schemas.rb +7 -0
- data/lib/fluent-plugin-s3-arrow/schemas/aws_glue.rb +115 -0
- data/lib/fluent/plugin/s3_compressor_arrow.rb +29 -4
- data/test/fluent-plugin-s3-arrow/schemas/test_aws_glue.rb +51 -0
- data/test/helper.rb +1 -0
- data/test/plugin/test_s3_compressor_arrow.rb +11 -11
- metadata +40 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 896ac4c81632aa2283e4e3d299138bc1687529f550ea525fd6665dc3af8ddc4e
|
4
|
+
data.tar.gz: 6d9bd3eb2077f25992b5409ea2ca070f6eb4b1337c63ee305d83de50d910f8f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6a29a073d6495fe0a1e038eaeebf694d40866d904bfa892581b31f05a4d02d8a7d15409b1bffe321dd9b1ddfdc65515283b195c53ba034491efd88b42569d85
|
7
|
+
data.tar.gz: e9fff86cae0c8a00003d1ea5b45ab7ee53293f7b5338c82b2bad93257ab2844c6a4a0f8ab785d5fbb5d8f707a8cafb7b83e3e62c156555ab66dfed6c59dd127e
|
data/.github/workflows/bench.yml
CHANGED
@@ -13,7 +13,11 @@ jobs:
|
|
13
13
|
- name: 'bench'
|
14
14
|
id: 'bench'
|
15
15
|
run: |
|
16
|
-
docker run fluent-plugin-s3-arrow /bin/bash -c "benchmark-driver benchmark/compress.yml"
|
16
|
+
docker run fluent-plugin-s3-arrow /bin/bash -c "benchmark-driver benchmark/compress.yml -o markdown" | tee benchmark.md
|
17
|
+
- uses: actions/upload-artifact@v2
|
18
|
+
with:
|
19
|
+
name: benchmark.md
|
20
|
+
path: benchmark.md
|
17
21
|
- name: 'bench memory'
|
18
22
|
id: 'bench_mem'
|
19
23
|
run: |
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# fluent-plugin-s3-arrow
|
2
2
|
|
3
|
-
Extends the [fluent-plugin-s3](https://github.com/fluent/fluent-plugin-s3)
|
3
|
+
Extends the [fluent-plugin-s3](https://github.com/fluent/fluent-plugin-s3) compression algorithm to enable [red-arrow](https://github.com/apache/arrow/tree/master/ruby/red-arrow) compression.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -33,7 +33,7 @@ $ bundle
|
|
33
33
|
|
34
34
|
## Configuration
|
35
35
|
|
36
|
-
Example of fluent-plugin-s3 configuration.
|
36
|
+
Example of fluent-plugin-s3-arrow configuration.
|
37
37
|
|
38
38
|
```
|
39
39
|
<match pattern>
|
@@ -47,14 +47,74 @@ Example of fluent-plugin-s3 configuration.
|
|
47
47
|
|
48
48
|
store_as arrow
|
49
49
|
<arrow>
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
format parquet
|
51
|
+
compression gzip
|
52
|
+
|
53
|
+
schema_from static
|
54
|
+
<static>
|
55
|
+
schema [
|
56
|
+
{"name": "test_string", "type": "string"},
|
57
|
+
{"name": "test_uint64", "type": "uint64"}
|
58
|
+
]
|
59
|
+
</static>
|
54
60
|
</arrow>
|
55
61
|
</match>
|
56
62
|
```
|
57
63
|
|
64
|
+
### format and compression
|
65
|
+
|
66
|
+
This plugin supports multiple columnar formats and compressions by using red-arrow. Valid settings are below.
|
67
|
+
|
68
|
+
| format | compression |
|
69
|
+
| ---- | ---- |
|
70
|
+
| arrow | gzip, zstd |
|
71
|
+
| feather | zstd |
|
72
|
+
| parquet | gzip, snappy, zstd |
|
73
|
+
|
74
|
+
### schema
|
75
|
+
|
76
|
+
Schema of columnar formats.
|
77
|
+
#### schema_from static
|
78
|
+
|
79
|
+
Set the schema statically.
|
80
|
+
|
81
|
+
```
|
82
|
+
schema_from static
|
83
|
+
<static>
|
84
|
+
schema [
|
85
|
+
{"name": "test_string", "type": "string"},
|
86
|
+
{"name": "test_uint64", "type": "uint64"}
|
87
|
+
]
|
88
|
+
</static>
|
89
|
+
```
|
90
|
+
|
91
|
+
##### schema (required)
|
92
|
+
|
93
|
+
An array containing the names and types of the fields.
|
94
|
+
#### schema_from glue
|
95
|
+
|
96
|
+
Retrieve the schema from the AWS Glue Data Catalog.
|
97
|
+
|
98
|
+
```
|
99
|
+
schema_from glue
|
100
|
+
<glue>
|
101
|
+
catalog test_catalog
|
102
|
+
database test_db
|
103
|
+
table test_table
|
104
|
+
</glue>
|
105
|
+
```
|
106
|
+
|
107
|
+
##### catalog
|
108
|
+
|
109
|
+
The name of the data catalog for which to retrieve the definition. The default value is the same as the [AWS API CatalogId](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html).
|
110
|
+
|
111
|
+
##### database
|
112
|
+
|
113
|
+
The name of the database for which to retrieve the definition. The default value is `default`.
|
114
|
+
##### table (required)
|
115
|
+
|
116
|
+
The name of the table for which to retrieve the definition.
|
117
|
+
|
58
118
|
## License
|
59
119
|
|
60
120
|
Apache License, Version 2.0
|
data/benchmark/prelude.rb
CHANGED
@@ -18,11 +18,14 @@ ARROW_CONFIG = %[
|
|
18
18
|
<arrow>
|
19
19
|
format parquet
|
20
20
|
compression gzip
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
schema_from static
|
22
|
+
<static>
|
23
|
+
schema [
|
24
|
+
{"name": "test_string", "type": "string"},
|
25
|
+
{"name": "test_uint64", "type": "uint64"},
|
26
|
+
{"name": "test_boolean", "type": "boolean"}
|
27
|
+
]
|
28
|
+
</static>
|
26
29
|
</arrow>
|
27
30
|
]
|
28
31
|
|
@@ -3,12 +3,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = "fluent-plugin-s3-arrow"
|
6
|
-
spec.version = "0.
|
6
|
+
spec.version = "0.2.0"
|
7
7
|
spec.authors = ["kanga333"]
|
8
8
|
spec.email = ["e411z7t40w@gmail.com"]
|
9
9
|
|
10
|
-
spec.summary = %q{Extends the fluent-plugin-s3
|
11
|
-
spec.description = %q{Extends the fluent-plugin-s3
|
10
|
+
spec.summary = %q{Extends the fluent-plugin-s3 compression algorithm to enable red-arrow compression.}
|
11
|
+
spec.description = %q{Extends the fluent-plugin-s3 compression algorithm to enable red-arrow compression.}
|
12
12
|
spec.homepage = "https://github.com/red-data-tools/fluent-plugin-s3-arrow"
|
13
13
|
spec.license = "Apache-2.0"
|
14
14
|
|
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "faker"
|
25
25
|
spec.add_development_dependency "rake", "~> 12.0"
|
26
26
|
spec.add_development_dependency "test-unit", "~> 3.0"
|
27
|
+
spec.add_development_dependency "test-unit-rr", "~> 1.0"
|
27
28
|
spec.add_runtime_dependency "fluentd", [">= 0.14.10", "< 2"]
|
28
29
|
spec.add_runtime_dependency "fluent-plugin-s3", ">= 1.0"
|
29
|
-
spec.add_runtime_dependency "red-arrow", ">=
|
30
|
-
spec.add_runtime_dependency "red-parquet", ">=
|
30
|
+
spec.add_runtime_dependency "red-arrow", ">= 2.0"
|
31
|
+
spec.add_runtime_dependency "red-parquet", ">= 2.0"
|
32
|
+
spec.add_runtime_dependency "aws-sdk-glue", ">= 1.20.0"
|
31
33
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'aws-sdk-glue'
|
2
|
+
|
3
|
+
module FluentPluginS3Arrow
|
4
|
+
module Schemas
|
5
|
+
class AWSGlue
|
6
|
+
class Error < RuntimeError; end
|
7
|
+
class ConvertError < Error; end
|
8
|
+
class Field < Struct.new(:name, :type); end
|
9
|
+
|
10
|
+
def initialize(table_name, **options)
|
11
|
+
@table_name = table_name
|
12
|
+
@database_name = options.delete(:database_name) || "default"
|
13
|
+
@catalog_id = options.delete(:catalog_id)
|
14
|
+
@client = Aws::Glue::Client.new(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_arrow
|
18
|
+
glue_schema = fetch_glue_schema
|
19
|
+
convert_to_arrow_schema(glue_schema)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def fetch_glue_schema
|
24
|
+
glue_table = @client.get_table({
|
25
|
+
catalog_id: @catalog_id,
|
26
|
+
database_name: @database_name,
|
27
|
+
name: @table_name
|
28
|
+
})
|
29
|
+
glue_table.table.storage_descriptor.columns
|
30
|
+
end
|
31
|
+
|
32
|
+
def convert_to_arrow_schema(glue_schema)
|
33
|
+
arrow_schema_description = glue_schema.map do |glue_field|
|
34
|
+
convert_to_arrow_field_description(glue_field)
|
35
|
+
end
|
36
|
+
Arrow::Schema.new(arrow_schema_description)
|
37
|
+
end
|
38
|
+
|
39
|
+
def convert_to_arrow_field_description(glue_field)
|
40
|
+
arrow_field = {name: glue_field.name}
|
41
|
+
case glue_field.type
|
42
|
+
when "boolean", "float", "double"
|
43
|
+
arrow_field[:type] = glue_field.type
|
44
|
+
when "tinyint"
|
45
|
+
arrow_field[:type] = "int8"
|
46
|
+
when "smallint"
|
47
|
+
arrow_field[:type] = "int16"
|
48
|
+
when "int"
|
49
|
+
arrow_field[:type] = "int32"
|
50
|
+
when "bigint"
|
51
|
+
arrow_field[:type] = "int64"
|
52
|
+
when /\Achar/,/\Avarchar/,"string"
|
53
|
+
arrow_field[:type] = "string"
|
54
|
+
when "binary"
|
55
|
+
arrow_field[:type] = "binary"
|
56
|
+
when "date"
|
57
|
+
arrow_field[:type] = "date32"
|
58
|
+
when /\Aarray/
|
59
|
+
arrow_field[:type] = "list"
|
60
|
+
arrow_field[:field] = parse_array(glue_field.type)
|
61
|
+
when /\Astruct/
|
62
|
+
arrow_field[:type] = "struct"
|
63
|
+
arrow_field[:fields] = parse_struct(glue_field.type)
|
64
|
+
else
|
65
|
+
# TODO: Need support for MAP, DECIMAL, TIMESTAMP type.
|
66
|
+
raise ConvertError, "Input type is not supported: #{glue_field.type}"
|
67
|
+
end
|
68
|
+
arrow_field
|
69
|
+
end
|
70
|
+
|
71
|
+
def parse_array(str)
|
72
|
+
matched = str.match(/\Aarray<(.*)>\z/)
|
73
|
+
raise ConvertError, "Parse error on array type: #{str}" if matched.nil?
|
74
|
+
convert_to_arrow_field_description(Field.new("", matched[1]))
|
75
|
+
end
|
76
|
+
|
77
|
+
def parse_struct(str)
|
78
|
+
fields = []
|
79
|
+
matched = str.match(/\Astruct<(.*)>\z/)
|
80
|
+
raise ConvertError, "Parse error on struct type: #{str}" if matched.nil?
|
81
|
+
each_struct_fields(matched[1]) do |name, type|
|
82
|
+
fields << convert_to_arrow_field_description(Field.new(name, type))
|
83
|
+
end
|
84
|
+
fields
|
85
|
+
end
|
86
|
+
|
87
|
+
def each_struct_fields(str)
|
88
|
+
start, nest = 0, 0
|
89
|
+
name = ""
|
90
|
+
str.each_char.with_index do |c, i|
|
91
|
+
case c
|
92
|
+
when ':'
|
93
|
+
if nest == 0
|
94
|
+
name = str[start...i]
|
95
|
+
start = i + 1
|
96
|
+
end
|
97
|
+
when '<'
|
98
|
+
nest += 1
|
99
|
+
when '>'
|
100
|
+
nest -= 1
|
101
|
+
when ','
|
102
|
+
if nest == 0
|
103
|
+
type = str[start...i]
|
104
|
+
yield(name, type)
|
105
|
+
start = i + 1
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
type = str[start..]
|
110
|
+
yield(name, type)
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'arrow'
|
2
2
|
require 'parquet'
|
3
|
+
require 'fluent-plugin-s3-arrow/schemas'
|
3
4
|
|
4
5
|
module Fluent::Plugin
|
5
6
|
class S3Output
|
@@ -12,11 +13,21 @@ module Fluent::Plugin
|
|
12
13
|
}
|
13
14
|
|
14
15
|
config_section :arrow, multi: false do
|
15
|
-
config_param :schema, :array
|
16
16
|
config_param :format, :enum, list: [:arrow, :feather, :parquet], default: :arrow
|
17
17
|
SUPPORTED_COMPRESSION = [:gzip, :snappy, :zstd]
|
18
18
|
config_param :compression, :enum, list: SUPPORTED_COMPRESSION, default: nil
|
19
|
-
config_param :chunk_size, :integer, default:
|
19
|
+
config_param :chunk_size, :integer, default: nil
|
20
|
+
config_param :schema_from, :enum, list: [:static, :glue], default: :static
|
21
|
+
|
22
|
+
config_section :static, multi: false do
|
23
|
+
config_param :schema, :array, default: nil
|
24
|
+
end
|
25
|
+
|
26
|
+
config_section :glue, multi: false do
|
27
|
+
config_param :catalog, :string, default: nil
|
28
|
+
config_param :database, :string, default: "default"
|
29
|
+
config_param :table, :string, default: nil
|
30
|
+
end
|
20
31
|
end
|
21
32
|
|
22
33
|
def configure(conf)
|
@@ -26,9 +37,8 @@ module Fluent::Plugin
|
|
26
37
|
raise Fluent::ConfigError, "#{@arrow.format} unsupported with #{@arrow.format}"
|
27
38
|
end
|
28
39
|
|
29
|
-
@schema = Arrow::Schema.new(@arrow.schema)
|
30
40
|
@options = Arrow::JSONReadOptions.new
|
31
|
-
@options.schema =
|
41
|
+
@options.schema = resolve_schema
|
32
42
|
@options.unexpected_field_behavior = :ignore
|
33
43
|
end
|
34
44
|
|
@@ -51,6 +61,21 @@ module Fluent::Plugin
|
|
51
61
|
compression: @arrow.compression,
|
52
62
|
)
|
53
63
|
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def resolve_schema
|
68
|
+
case @arrow.schema_from
|
69
|
+
when :static
|
70
|
+
Arrow::Schema.new(@arrow.static.schema)
|
71
|
+
when :glue
|
72
|
+
glue_schema = FluentPluginS3Arrow::Schemas::AWSGlue.new(@arrow.glue.table, {
|
73
|
+
catalog_id: @arrow.glue.catalog,
|
74
|
+
database_name: @arrow.glue.database,
|
75
|
+
})
|
76
|
+
glue_schema.to_arrow
|
77
|
+
end
|
78
|
+
end
|
54
79
|
end
|
55
80
|
end
|
56
81
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "helper"
|
2
|
+
require "fluent-plugin-s3-arrow/schemas"
|
3
|
+
|
4
|
+
class AWSGlueTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
stub(Aws::Glue::Client).new
|
7
|
+
@schema = FluentPluginS3Arrow::Schemas::AWSGlue.new('test')
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def test_to_arrow
|
12
|
+
stub(@schema).fetch_glue_schema{
|
13
|
+
[
|
14
|
+
Aws::Glue::Types::Column.new({name: "a", type: "boolean"}),
|
15
|
+
Aws::Glue::Types::Column.new({name: "b", type: "tinyint"}),
|
16
|
+
Aws::Glue::Types::Column.new({name: "c", type: "smallint"}),
|
17
|
+
Aws::Glue::Types::Column.new({name: "d", type: "int"}),
|
18
|
+
Aws::Glue::Types::Column.new({name: "e", type: "bigint"}),
|
19
|
+
Aws::Glue::Types::Column.new({name: "f", type: "float"}),
|
20
|
+
Aws::Glue::Types::Column.new({name: "g", type: "double"}),
|
21
|
+
Aws::Glue::Types::Column.new({name: "h", type: "char(1)"}),
|
22
|
+
Aws::Glue::Types::Column.new({name: "i", type: "varchar(1)"}),
|
23
|
+
Aws::Glue::Types::Column.new({name: "j", type: "string"}),
|
24
|
+
Aws::Glue::Types::Column.new({name: "k", type: "binary"}),
|
25
|
+
Aws::Glue::Types::Column.new({name: "l", type: "date"}),
|
26
|
+
Aws::Glue::Types::Column.new({name: "m", type: "array<array<string>>"}),
|
27
|
+
Aws::Glue::Types::Column.new({name: "n", type: "struct<p1:string,p2:struct<c1:string,c2:string>,p3:string>"})
|
28
|
+
]
|
29
|
+
}
|
30
|
+
actual = @schema.to_arrow
|
31
|
+
expect = Arrow::Schema.new([
|
32
|
+
{name: "a", type: "boolean"},
|
33
|
+
{name: "b", type: "int8"},
|
34
|
+
{name: "c", type: "int16"},
|
35
|
+
{name: "d", type: "int32"},
|
36
|
+
{name: "e", type: "int64"},
|
37
|
+
{name: "f", type: "float"},
|
38
|
+
{name: "g", type: "double"},
|
39
|
+
{name: "h", type: "string"},
|
40
|
+
{name: "i", type: "string"},
|
41
|
+
{name: "j", type: "string"},
|
42
|
+
{name: "k", type: "binary"},
|
43
|
+
{name: "l", type: "date32"},
|
44
|
+
{name: "m", type: "list", field: {name: "", type: "list", field: {name: "", type: "string"}}},
|
45
|
+
{name: "n", type: "struct", fields: [{name: "p1", type: "string"},{name: "p2", type: "struct", fields: [{name: "c1", type: "string"},{name: "c2", type: "string"}]},{name: "p3", type: "string"}]}
|
46
|
+
])
|
47
|
+
|
48
|
+
assert_equal expect, actual
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/test/helper.rb
CHANGED
@@ -10,19 +10,19 @@ class S3OutputTest < Test::Unit::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
S3_CONFIG = {"s3_bucket" => "test", "store_as" => "arrow"}
|
13
|
-
SCHEMA = [
|
13
|
+
SCHEMA = config_element("static", "", {"schema" => [
|
14
14
|
{"name": "test_string", "type": "string"},
|
15
15
|
{"name": "test_uint64", "type": "uint64"},
|
16
|
-
]
|
17
|
-
|
16
|
+
]})
|
17
|
+
ARROW_CONFIG = config_element("arrow", "", {"schema_from" => "static"}, [SCHEMA])
|
18
|
+
CONFIG = config_element("ROOT", "", S3_CONFIG, [ARROW_CONFIG])
|
18
19
|
|
19
20
|
def test_configure
|
20
21
|
d = create_driver
|
21
22
|
c = d.instance.instance_variable_get(:@compressor)
|
22
23
|
assert_equal :arrow, c.ext
|
23
24
|
assert_equal 'application/x-apache-arrow-file', c.content_type
|
24
|
-
assert c.instance_variable_get(:@
|
25
|
-
assert_equal 1024, c.instance_variable_get(:@arrow).chunk_size
|
25
|
+
assert c.instance_variable_get(:@options).schema.is_a?(Arrow::Schema)
|
26
26
|
end
|
27
27
|
|
28
28
|
data(
|
@@ -32,10 +32,10 @@ class S3OutputTest < Test::Unit::TestCase
|
|
32
32
|
)
|
33
33
|
def test_invalid_configure
|
34
34
|
format, compression = data
|
35
|
-
arrow_config = config_element("arrow", "", { "
|
35
|
+
arrow_config = config_element("arrow", "", { "schema_from" => "static",
|
36
36
|
"format" => format,
|
37
37
|
"compression" => compression,
|
38
|
-
})
|
38
|
+
}, [SCHEMA])
|
39
39
|
config = config_element("ROOT", "", S3_CONFIG, [arrow_config])
|
40
40
|
assert_raise Fluent::ConfigError do
|
41
41
|
create_driver(config)
|
@@ -66,9 +66,9 @@ class S3OutputTest < Test::Unit::TestCase
|
|
66
66
|
|
67
67
|
data(gzip: "gzip", zstd: "zstd")
|
68
68
|
def test_compress_with_compression
|
69
|
-
arrow_config = config_element("arrow", "", { "
|
69
|
+
arrow_config = config_element("arrow", "", { "schema_from" => "static",
|
70
70
|
"compression" => data,
|
71
|
-
})
|
71
|
+
},[SCHEMA])
|
72
72
|
config = config_element("ROOT", "", S3_CONFIG, [arrow_config])
|
73
73
|
|
74
74
|
d = create_driver(conf=config)
|
@@ -100,10 +100,10 @@ class S3OutputTest < Test::Unit::TestCase
|
|
100
100
|
)
|
101
101
|
def test_compress_with_format
|
102
102
|
format, compression = data
|
103
|
-
arrow_config = config_element("arrow", "", { "
|
103
|
+
arrow_config = config_element("arrow", "", { "schema_from" => "static",
|
104
104
|
"format" => format,
|
105
105
|
"compression" => compression,
|
106
|
-
})
|
106
|
+
},[SCHEMA])
|
107
107
|
config = config_element("ROOT", "", S3_CONFIG, [arrow_config])
|
108
108
|
|
109
109
|
d = create_driver(conf=config)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-s3-arrow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kanga333
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-driver
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: test-unit-rr
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: fluentd
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,29 +120,43 @@ dependencies:
|
|
106
120
|
requirements:
|
107
121
|
- - ">="
|
108
122
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
123
|
+
version: '2.0'
|
110
124
|
type: :runtime
|
111
125
|
prerelease: false
|
112
126
|
version_requirements: !ruby/object:Gem::Requirement
|
113
127
|
requirements:
|
114
128
|
- - ">="
|
115
129
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
130
|
+
version: '2.0'
|
117
131
|
- !ruby/object:Gem::Dependency
|
118
132
|
name: red-parquet
|
119
133
|
requirement: !ruby/object:Gem::Requirement
|
120
134
|
requirements:
|
121
135
|
- - ">="
|
122
136
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
137
|
+
version: '2.0'
|
124
138
|
type: :runtime
|
125
139
|
prerelease: false
|
126
140
|
version_requirements: !ruby/object:Gem::Requirement
|
127
141
|
requirements:
|
128
142
|
- - ">="
|
129
143
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
131
|
-
|
144
|
+
version: '2.0'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: aws-sdk-glue
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.20.0
|
152
|
+
type: :runtime
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 1.20.0
|
159
|
+
description: Extends the fluent-plugin-s3 compression algorithm to enable red-arrow
|
132
160
|
compression.
|
133
161
|
email:
|
134
162
|
- e411z7t40w@gmail.com
|
@@ -149,7 +177,10 @@ files:
|
|
149
177
|
- benchmark/s3_compressor_parquet.rb
|
150
178
|
- benchmark/schema.bq.json
|
151
179
|
- fluent-plugin-s3-arrow.gemspec
|
180
|
+
- lib/fluent-plugin-s3-arrow/schemas.rb
|
181
|
+
- lib/fluent-plugin-s3-arrow/schemas/aws_glue.rb
|
152
182
|
- lib/fluent/plugin/s3_compressor_arrow.rb
|
183
|
+
- test/fluent-plugin-s3-arrow/schemas/test_aws_glue.rb
|
153
184
|
- test/helper.rb
|
154
185
|
- test/plugin/test_s3_compressor_arrow.rb
|
155
186
|
homepage: https://github.com/red-data-tools/fluent-plugin-s3-arrow
|
@@ -174,8 +205,8 @@ requirements: []
|
|
174
205
|
rubygems_version: 3.0.3
|
175
206
|
signing_key:
|
176
207
|
specification_version: 4
|
177
|
-
summary: Extends the fluent-plugin-s3
|
178
|
-
compression.
|
208
|
+
summary: Extends the fluent-plugin-s3 compression algorithm to enable red-arrow compression.
|
179
209
|
test_files:
|
210
|
+
- test/fluent-plugin-s3-arrow/schemas/test_aws_glue.rb
|
180
211
|
- test/helper.rb
|
181
212
|
- test/plugin/test_s3_compressor_arrow.rb
|