sql2avro 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/interface/mysql.rb +5 -1
  2. data/lib/sql2avro.rb +12 -1
  3. metadata +6 -6
@@ -148,10 +148,14 @@ class MySql < DbInterface
148
148
  #{db_name}
149
149
  }
150
150
 
151
- Open3.popen3(cmd) do |i, o, e|
151
+ Open3.popen3(cmd) do |i, o, e, wait_thr|
152
152
  while (line = o.gets)
153
153
  block.call(line.chop.split(MYSQL_BATCH_SEP))
154
154
  end
155
+
156
+ if !wait_thr.value.success?
157
+ raise "Error querying mysql\n\nQuery: #{cmd}\nSTDERR: #{e.read}\nSTATUS: #{wait_thr.value}"
158
+ end
155
159
  end
156
160
  end
157
161
 
data/lib/sql2avro.rb CHANGED
@@ -29,7 +29,7 @@ module Sql2Avro
29
29
  # min_id specifies the value of the id column from which to start.
30
30
  def Sql2Avro.avroize(database_config, table, min_id, max_rows_per_batch=nil)
31
31
  raise "Database interface not specified." if !database_config.has_key? 'adapter'
32
- raise "Database interface not supported: #{database_config['adapter']}" if database_config['adapter'] != 'mysql'
32
+ raise "Database interface not supported: #{database_config['adapter']}" unless ['mysql', 'mysql2'].include? database_config['adapter']
33
33
 
34
34
  interface = MySql.new(database_config)
35
35
 
@@ -50,6 +50,9 @@ module Sql2Avro
50
50
  }
51
51
 
52
52
  begin
53
+ prev_default_internal = Encoding.default_internal
54
+ Encoding.default_internal = nil
55
+
53
56
  json_file = "#{filename}.json"
54
57
  File.open(json_file, 'w') do |f|
55
58
  interface.data(table, min_id, max_id_this_batch) do |datum|
@@ -58,10 +61,18 @@ module Sql2Avro
58
61
  end
59
62
  end
60
63
 
64
+ Encoding.default_internal = prev_default_internal
65
+
61
66
  cmd = "java -jar #{AVRO_TOOLS_PATH} fromjson --codec snappy --schema '#{schema}' #{json_file} > #{filename}"
62
67
  `#{cmd}`
68
+ if !$?.success?
69
+ raise "Error converting JSON to Avro.\n\nCommand: #{cmd}\nStatus: #{$?}"
70
+ end
63
71
 
64
72
  `rm #{json_file}`
73
+ if !$?.success?
74
+ raise "Error deleting temporary JSON file #{json_file}"
75
+ end
65
76
  rescue Exception => e
66
77
  retval[:error] = "#{e}\n\n#{e.backtrace}"
67
78
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql2avro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-21 00:00:00.000000000Z
12
+ date: 2013-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yajl-ruby
16
- requirement: &70328438994660 !ruby/object:Gem::Requirement
16
+ requirement: &70297282972760 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70328438994660
24
+ version_requirements: *70297282972760
25
25
  description: sql2avro extracts data from a specified SQL database table and transforms
26
26
  it into an Avro file with a schema based on the database table's schema. The intended
27
27
  use case is to incrementally load data out of an SQL database and into HDFS for
@@ -52,7 +52,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
52
  version: '0'
53
53
  segments:
54
54
  - 0
55
- hash: 3312347816830426626
55
+ hash: -3119210657153955613
56
56
  required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  version: '0'
62
62
  segments:
63
63
  - 0
64
- hash: 3312347816830426626
64
+ hash: -3119210657153955613
65
65
  requirements: []
66
66
  rubyforge_project:
67
67
  rubygems_version: 1.8.10