embulk-plugin-redis 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -6,11 +6,14 @@ This plugin runs without transaction for now.
6
6
 
7
7
  ## Configuration
8
8
 
9
- - **host** host name of the Redis server (string, default: "localhost")
10
- - **port** port of the Redis server (integer, default: 6379)
11
- - **db** destination database number (integer, default: 0)
12
- - **key_prefix** key prefix to search keys for input/output plugin (string)
13
- - **key** key name for output plugin (string, required)
9
+ - **host** Hostname of the Redis server (string, default: "localhost")
10
+ - **port** Port of the Redis server (integer, default: 6379)
11
+ - **db** Database number (integer, default: 0)
12
+ - **key_prefix** Key prefix for input/output plugin (string)
13
+ - **encode** Encoding in Redis
14
+ - json: Stored as a JSON string. GET/SET commands can access it (string)
15
+ - hash: Stored as a Hash. H* commands such as HMGET/HMSET can access it (string, output only)
16
+ - **key** Column name used for a key in Redis (string, required: output only)
14
17
 
15
18
  ### Example
16
19
 
@@ -22,7 +25,7 @@ out:
22
25
  db: 0
23
26
  key: user_name
24
27
  key_prefix: user_
25
-
28
+ encode: hash
26
29
 
27
30
  in:
28
31
  type: redis
@@ -30,5 +33,6 @@ in:
30
33
  port: 6379
31
34
  db: 0
32
35
  key_prefix: user_
36
+ encode: json
33
37
  ```
34
38
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |gem|
3
3
  gem.name = "embulk-plugin-redis"
4
- gem.version = "0.1.2"
4
+ gem.version = "0.1.3"
5
5
 
6
6
  gem.summary = %q{Embulk plugin for Redis}
7
7
  gem.description = gem.summary
@@ -3,6 +3,7 @@ module Embulk
3
3
  class OutputRedis < OutputPlugin
4
4
  require 'redis'
5
5
  require 'json'
6
+ require 'set'
6
7
 
7
8
  Plugin.register_output('redis', self)
8
9
 
@@ -26,7 +27,8 @@ module Embulk
26
27
  def initialize(task, schema, index)
27
28
  puts "Example output thread #{index}..."
28
29
  super
29
- @records = 0
30
+ @rows = 0
31
+ @unique_keys = ::Set.new
30
32
  @redis = ::Redis.new(:host => task['host'], :port => task['port'], :db => task['db'])
31
33
  end
32
34
 
@@ -36,12 +38,20 @@ module Embulk
36
38
  def add(page)
37
39
  page.each do |record|
38
40
  hash = Hash[schema.names.zip(record)]
41
+ k = "#{task['key_prefix']}#{hash[task['key']]}"
42
+ unless @unique_keys.include? k
39
43
  case task['encode']
40
44
  when 'json'
41
45
  v = hash.to_json
42
- @redis.set("#{task['key_prefix']}#{hash[task['key']]}", v)
46
+ @redis.set(k, v)
47
+ when 'hash'
48
+ @redis.hmset(k, hash.to_a.flatten)
43
49
  end
44
- @records += 1
50
+ @unique_keys << k
51
+ else
52
+ puts "Warning: #{k} is already exists"
53
+ end
54
+ @rows += 1 # inrement anyway
45
55
  end
46
56
  end
47
57
 
@@ -53,7 +63,8 @@ module Embulk
53
63
 
54
64
  def commit
55
65
  commit_report = {
56
- "records" => @records
66
+ "rows" => @rows,
67
+ "unique_keys" => @unique_keys.size
57
68
  }
58
69
  return commit_report
59
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-plugin-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-27 00:00:00.000000000 Z
12
+ date: 2015-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis