fluent-plugin-bigquery 0.2.13 → 0.2.14
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/README.md +17 -0
- data/lib/fluent/plugin/bigquery/version.rb +1 -1
- data/lib/fluent/plugin/out_bigquery.rb +28 -20
- data/test/plugin/test_out_bigquery.rb +13 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 571266d1f383aaeeab090ba11195671a9fcd452f
|
4
|
+
data.tar.gz: 3caf0f7ce01b4396d198241b31cd1c4f65abfec8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 489ed6d5a4b10c2f52cf86a14193c4e53bc9cfeb641fb968552fec2e514b5bad708d845c449e8f8d036765f75de330cb01a6fe917a0b1bb79ace6d75361a73d3
|
7
|
+
data.tar.gz: 9148962886487649c2d83f1d211b9c6730f2fa0f66380539a3552eae716c8deaa1142347af50d13cfb7e06ca7bcc5f141b7ceb48ddb362d9eedcb75bb7508a1c
|
data/README.md
CHANGED
@@ -233,6 +233,23 @@ The format can be suffixed with attribute name.
|
|
233
233
|
If attribute name is given, the time to be used for formatting is value of each row.
|
234
234
|
The value for the time should be a UNIX time.
|
235
235
|
|
236
|
+
Or, the options can use `%{time_slice}` placeholder.
|
237
|
+
`%{time_slice}` is replaced by formatted time slice key at runtime.
|
238
|
+
|
239
|
+
```apache
|
240
|
+
<match dummy>
|
241
|
+
type bigquery
|
242
|
+
|
243
|
+
...
|
244
|
+
|
245
|
+
project yourproject_id
|
246
|
+
dataset yourdataset_id
|
247
|
+
table accesslog%{time_slice}
|
248
|
+
|
249
|
+
...
|
250
|
+
</match>
|
251
|
+
```
|
252
|
+
|
236
253
|
### Dynamic table creating
|
237
254
|
|
238
255
|
When `auto_create_table` is set to `true`, try to create the table using BigQuery API when insertion failed with code=404 "Not Found: Table ...".
|
@@ -13,7 +13,7 @@ module Fluent
|
|
13
13
|
# class BigQueryAPIError < StandardError
|
14
14
|
# end
|
15
15
|
|
16
|
-
class BigQueryOutput <
|
16
|
+
class BigQueryOutput < TimeSlicedOutput
|
17
17
|
Fluent::Plugin.register_output('bigquery', self)
|
18
18
|
|
19
19
|
# https://developers.google.com/bigquery/browser-tool-quickstart
|
@@ -278,7 +278,7 @@ module Fluent
|
|
278
278
|
@cached_client = client
|
279
279
|
end
|
280
280
|
|
281
|
-
def generate_table_id(table_id_format, current_time, row)
|
281
|
+
def generate_table_id(table_id_format, current_time, row = nil, chunk = nil)
|
282
282
|
format, col = table_id_format.split(/@/)
|
283
283
|
time = if col && row
|
284
284
|
keys = col.split('.')
|
@@ -287,7 +287,17 @@ module Fluent
|
|
287
287
|
else
|
288
288
|
current_time
|
289
289
|
end
|
290
|
-
time.strftime(format)
|
290
|
+
table_id = time.strftime(format)
|
291
|
+
|
292
|
+
if chunk
|
293
|
+
table_id.gsub(%r(%{time_slice})) { |expr|
|
294
|
+
chunk.key
|
295
|
+
}
|
296
|
+
else
|
297
|
+
table_id.gsub(%r(%{time_slice})) { |expr|
|
298
|
+
current_time.strftime(@time_slice_format)
|
299
|
+
}
|
300
|
+
end
|
291
301
|
end
|
292
302
|
|
293
303
|
def create_table(table_id)
|
@@ -385,24 +395,22 @@ module Fluent
|
|
385
395
|
record
|
386
396
|
end
|
387
397
|
|
388
|
-
def
|
389
|
-
super
|
398
|
+
def format(tag, time, record)
|
390
399
|
buf = ''
|
391
|
-
es.each do |time, record|
|
392
|
-
if @replace_record_key
|
393
|
-
record = replace_record_key(record)
|
394
|
-
end
|
395
400
|
|
396
|
-
|
397
|
-
|
398
|
-
|
401
|
+
if @replace_record_key
|
402
|
+
record = replace_record_key(record)
|
403
|
+
end
|
399
404
|
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
405
|
+
if @convert_hash_to_json
|
406
|
+
record = convert_hash_to_json(record)
|
407
|
+
end
|
408
|
+
|
409
|
+
row = @fields.format(@add_time_field.call(record, time))
|
410
|
+
unless row.empty?
|
411
|
+
row = {"json" => row}
|
412
|
+
row['insertId'] = @get_insert_id.call(record) if @get_insert_id
|
413
|
+
buf << row.to_msgpack
|
406
414
|
end
|
407
415
|
buf
|
408
416
|
end
|
@@ -422,14 +430,14 @@ module Fluent
|
|
422
430
|
t
|
423
431
|
end
|
424
432
|
|
425
|
-
rows.group_by {|row| generate_table_id(insert_table_format, Time.at(Fluent::Engine.now), row) }.each do |table_id, rows|
|
433
|
+
rows.group_by {|row| generate_table_id(insert_table_format, Time.at(Fluent::Engine.now), row, chunk) }.each do |table_id, rows|
|
426
434
|
insert(table_id, rows)
|
427
435
|
end
|
428
436
|
end
|
429
437
|
|
430
438
|
def fetch_schema
|
431
439
|
table_id_format = @tablelist[0]
|
432
|
-
table_id = generate_table_id(table_id_format, Time.at(Fluent::Engine.now)
|
440
|
+
table_id = generate_table_id(table_id_format, Time.at(Fluent::Engine.now))
|
433
441
|
res = client.execute(
|
434
442
|
api_method: @bq.tables.get,
|
435
443
|
parameters: {
|
@@ -27,7 +27,7 @@ class BigQueryOutputTest < Test::Unit::TestCase
|
|
27
27
|
API_SCOPE = "https://www.googleapis.com/auth/bigquery"
|
28
28
|
|
29
29
|
def create_driver(conf = CONFIG)
|
30
|
-
Fluent::Test::
|
30
|
+
Fluent::Test::TimeSlicedOutputTestDriver.new(Fluent::BigQueryOutput).configure(conf)
|
31
31
|
end
|
32
32
|
|
33
33
|
def stub_client(driver)
|
@@ -984,6 +984,18 @@ class BigQueryOutputTest < Test::Unit::TestCase
|
|
984
984
|
assert_equal 'foo_2014_08_10', table_id
|
985
985
|
end
|
986
986
|
|
987
|
+
def test_generate_table_id_with_time_sliced_format
|
988
|
+
driver = create_driver
|
989
|
+
table_id_format = 'foo_%{time_slice}'
|
990
|
+
current_time = Time.now
|
991
|
+
time = Time.local(2014, 8, 11, 21, 20, 56)
|
992
|
+
row = { "json" => { "foo" => "bar", "time" => time.to_i } }
|
993
|
+
chunk = Object.new
|
994
|
+
mock(chunk).key { time.strftime("%Y%m%d") }
|
995
|
+
table_id = driver.instance.generate_table_id(table_id_format, current_time, row, chunk)
|
996
|
+
assert_equal 'foo_20140811', table_id
|
997
|
+
end
|
998
|
+
|
987
999
|
def test_auto_create_table_by_bigquery_api
|
988
1000
|
now = Time.now
|
989
1001
|
message = {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-bigquery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naoya Ito
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|