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 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