fluent-plugin-s3-arrow 0.1.0 → 0.2.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/.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
|