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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d4d40af870606fbd11cf131fa371e29e45013281f7b23deae6e30b4f260ecf4
4
- data.tar.gz: dc911408cac26e521a32eb50a56e544d18b1f36e2ea83b20fbf7d08c357b7a3e
3
+ metadata.gz: 896ac4c81632aa2283e4e3d299138bc1687529f550ea525fd6665dc3af8ddc4e
4
+ data.tar.gz: 6d9bd3eb2077f25992b5409ea2ca070f6eb4b1337c63ee305d83de50d910f8f9
5
5
  SHA512:
6
- metadata.gz: 26a33661cab8c5d524d160c727eab8da58c43973ea708d8e1aad45eade08a220612a1620404f9647628d9e6e81cb94e8ccb2a08a59019317d1a582e5254831fc
7
- data.tar.gz: c24341e83a739023ab2bfc9b151ab9d1d6cedbba1f25bce63ae1455c426d724e20807cbed89a6663d18840f96196b266446772946176a0a5fdd7d4629f31b028
6
+ metadata.gz: e6a29a073d6495fe0a1e038eaeebf694d40866d904bfa892581b31f05a4d02d8a7d15409b1bffe321dd9b1ddfdc65515283b195c53ba034491efd88b42569d85
7
+ data.tar.gz: e9fff86cae0c8a00003d1ea5b45ab7ee53293f7b5338c82b2bad93257ab2844c6a4a0f8ab785d5fbb5d8f707a8cafb7b83e3e62c156555ab66dfed6c59dd127e
@@ -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) (de)compression algorithm to enable red-arrow compression.
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
- schema [
51
- {"name": "test_string", "type": "string"},
52
- {"name": "test_uint64", "type": "uint64"}
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
@@ -18,11 +18,14 @@ ARROW_CONFIG = %[
18
18
  <arrow>
19
19
  format parquet
20
20
  compression gzip
21
- schema [
22
- {"name": "test_string", "type": "string"},
23
- {"name": "test_uint64", "type": "uint64"},
24
- {"name": "test_boolean", "type": "boolean"}
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.1.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 (de)compression algorithm to enable red-arrow compression.}
11
- spec.description = %q{Extends the fluent-plugin-s3 (de)compression algorithm to enable red-arrow compression.}
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", ">= 1.0"
30
- spec.add_runtime_dependency "red-parquet", ">= 1.0"
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,7 @@
1
+ require "arrow"
2
+ require "fluent-plugin-s3-arrow/schemas/aws_glue"
3
+
4
+ module FluentPluginS3Arrow
5
+ module Schemas
6
+ end
7
+ 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: 1024
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 = @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
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.expand_path("../../", __FILE__))
2
2
  require "test-unit"
3
+ require "test/unit/rr"
3
4
  require "fluent/test"
4
5
  require "fluent/test/driver/output"
5
6
  require "fluent/test/helpers"
@@ -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
- CONFIG = config_element("ROOT", "", S3_CONFIG, [config_element("arrow", "", {"schema" => SCHEMA})])
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(:@schema).is_a?(Arrow::Schema)
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", "", { "schema" => SCHEMA,
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", "", { "schema" => SCHEMA,
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", "", { "schema" => SCHEMA,
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.1.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-09-30 00:00:00.000000000 Z
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: '1.0'
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: '1.0'
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: '1.0'
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: '1.0'
131
- description: Extends the fluent-plugin-s3 (de)compression algorithm to enable red-arrow
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 (de)compression algorithm to enable red-arrow
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