td-client 0.8.62 → 0.8.63

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDRiYWJjYzc1NDFiOTQzMzBkNjNmMGUwNDcxMDAzOWQ5Njg0NzVmNA==
4
+ MDBjNmRmZmY5MjZkMGIxY2ZmZjEzMzU3NjhlNDMxYTBhMDc0YzUxMw==
5
5
  data.tar.gz: !binary |-
6
- Y2JkMzE0NTBhNWQ4YzZiZjY0MDY2ZmY4MmE2YmY4NWYzYmY2N2Q1NA==
6
+ MjE5ZTgwOTI1OGM4NjEyODdjMDNlYmM5NmQ4NGU5ZTVlYmNkMDMwYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTllMjQzNDUyOGVkNWM1MWMxNDY5YWMwOGE4ODNjM2M5N2ZjYjZhYWUzZWQ1
10
- YTFlMmMyMzNkNjExZGFjOWUyMzMxODM3ZGQ4YjQ2ZGUzYWZhYzEwY2M3OWE4
11
- ODA5ODI2NTQzNGE4ZDM0OTdiMzNjOGNlODFhNzZlNDU3YTY4M2Q=
9
+ ZDZmNjY2OTkyODExOWUwYmMyNDE0ZGEwMmU5MzU4OTkzMmYzZTMwMzY3MzEw
10
+ ZjIxZjMyYTkxZDlmYWFjODEwODA3ZmU0MDc0NjE1NzQzMDkxMWViYTQxZWE5
11
+ YzRlYzRlOGYwYmYzZTlmNDgzYzQ4YmUzYzAxZDVjYjY4N2VjYzk=
12
12
  data.tar.gz: !binary |-
13
- MjVhNmU2MmI5NDNlZDliNDU1YzQzNjdmYzkwYWQ0YWU2ZWRjMWJjMDE0ZTdl
14
- ZDgyMGYxY2Y3OTI4NmM4MDcwODJjMmJkNmE2NThiMGFkYzEyM2VjNTc0NzNh
15
- MjQyMWI2MTFiOGIxYTgzNmEzZTEwYjc0NTNmOTVjYjcwZGMwNDk=
13
+ Zjk1ZDViZGZkOGI2YmE4ZGM2N2ZjMzFkNmNhMDNmMzFkZDY1YzAwYTU1ZmU5
14
+ MjUwYjRlNjhkYmM5ZmQwZWNmYjM4YmExZDllNzhlZWMwNjZjMjhiZTk5YjVl
15
+ NzA1NTkyM2FkZjk3ZGQ4ZjRmOWYzNmFmZTMwMTgwM2NlN2YzNGQ=
@@ -1,4 +1,3 @@
1
-
2
1
  module TreasureData
3
2
 
4
3
  require 'td/client/api'
@@ -55,17 +54,17 @@ class Client
55
54
  # => [Database]
56
55
  def databases
57
56
  m = @api.list_databases
58
- m.map {|db_name,(count,created_at,updated_at,org)|
59
- Database.new(self, db_name, nil, count, created_at, updated_at, org)
57
+ m.map {|db_name,(count, created_at, updated_at, org, permission)|
58
+ Database.new(self, db_name, nil, count, created_at, updated_at, org, permission)
60
59
  }
61
60
  end
62
61
 
63
62
  # => Database
64
63
  def database(db_name)
65
64
  m = @api.list_databases
66
- m.each {|name,(count,created_at,updated_at,org)|
65
+ m.each {|name,(count, created_at, updated_at, org, permission)|
67
66
  if name == db_name
68
- return Database.new(self, name, nil, count, created_at, updated_at, org)
67
+ return Database.new(self, name, nil, count, created_at, updated_at, org, permission)
69
68
  end
70
69
  }
71
70
  raise NotFoundError, "Database '#{db_name}' does not exist"
@@ -129,24 +128,28 @@ class Client
129
128
  def query(db_name, q, result_url=nil, priority=nil, retry_limit=nil, opts={})
130
129
  # for compatibility, assume type is hive unless specifically specified
131
130
  type = opts[:type] || opts['type'] || :hive
132
- raise ArgumentError, "The specified query type is not supported: #{type}" unless [:hive, :pig, :impala, :presto].include? type
131
+ raise ArgumentError, "The specified query type is not supported: #{type}" unless [:hive, :pig, :impala, :presto].include?(type)
133
132
  job_id = @api.query(q, type, db_name, result_url, priority, retry_limit, opts)
134
133
  Job.new(self, job_id, type, q)
135
134
  end
136
135
 
137
136
  # => [Job]
138
137
  def jobs(from=nil, to=nil, status=nil, conditions=nil)
139
- result = @api.list_jobs(from, to, status, conditions)
140
- result.map {|job_id, type, status, query, start_at, end_at, cpu_time, result_url, priority, retry_limit, org, db|
141
- Job.new(self, job_id, type, query, status, nil, nil, start_at, end_at, cpu_time, nil, result_url, nil, priority, retry_limit, org, db)
138
+ results = @api.list_jobs(from, to, status, conditions)
139
+ results.map {|job_id, type, status, query, start_at, end_at, cpu_time,
140
+ result_size, result_url, priority, retry_limit, org, db|
141
+ Job.new(self, job_id, type, query, status, nil, nil, start_at, end_at, cpu_time,
142
+ result_size, nil, result_url, nil, priority, retry_limit, org, db)
142
143
  }
143
144
  end
144
145
 
145
146
  # => Job
146
147
  def job(job_id)
147
148
  job_id = job_id.to_s
148
- type, query, status, url, debug, start_at, end_at, cpu_time, result_url, hive_result_schema, priority, retry_limit, org, db = @api.show_job(job_id)
149
- Job.new(self, job_id, type, query, status, url, debug, start_at, end_at, cpu_time, nil, result_url, hive_result_schema, priority, retry_limit, org, db)
149
+ type, query, status, url, debug, start_at, end_at, cpu_time,
150
+ result_size, result_url, hive_result_schema, priority, retry_limit, org, db = @api.show_job(job_id)
151
+ Job.new(self, job_id, type, query, status, url, debug, start_at, end_at, cpu_time,
152
+ result_size, nil, result_url, hive_result_schema, priority, retry_limit, org, db)
150
153
  end
151
154
 
152
155
  # => status:String
@@ -160,8 +163,8 @@ class Client
160
163
  end
161
164
 
162
165
  # => result:String
163
- def job_result_format(job_id, format, io=nil)
164
- @api.job_result_format(job_id, format, io)
166
+ def job_result_format(job_id, format, io=nil, &block)
167
+ @api.job_result_format(job_id, format, io, &block)
165
168
  end
166
169
 
167
170
  # => nil
@@ -169,6 +172,11 @@ class Client
169
172
  @api.job_result_each(job_id, &block)
170
173
  end
171
174
 
175
+ # => nil
176
+ def job_result_each_with_compr_size(job_id, &block)
177
+ @api.job_result_each_with_compr_size(job_id, &block)
178
+ end
179
+
172
180
  # => former_status:String
173
181
  def kill(job_id)
174
182
  @api.kill(job_id)
@@ -351,7 +359,7 @@ class Client
351
359
 
352
360
  # => true
353
361
  def remove_apikey(user, apikey)
354
- @api.remove_apikey(user, apikey)
362
+ @api.remove_apikey(user, g)
355
363
  end
356
364
 
357
365
  # => true
@@ -388,5 +396,4 @@ class Client
388
396
  end
389
397
  end
390
398
 
391
-
392
- end
399
+ end # module TreasureData
@@ -2,19 +2,26 @@ require 'td/client/version'
2
2
 
3
3
  module TreasureData
4
4
 
5
+ class ParameterValidationError < StandardError
6
+ end
5
7
 
8
+ # Generic API error
6
9
  class APIError < StandardError
7
10
  end
8
11
 
9
- class ParameterValidationError < StandardError
12
+ # 401 API errors
13
+ class AuthError < APIError
10
14
  end
11
15
 
12
- class AuthError < APIError
16
+ # 403 API errors, used for database permissions
17
+ class ForbiddenError < APIError
13
18
  end
14
19
 
20
+ # 409 API errors
15
21
  class AlreadyExistsError < APIError
16
22
  end
17
23
 
24
+ # 404 API errors
18
25
  class NotFoundError < APIError
19
26
  end
20
27
 
@@ -154,8 +161,8 @@ class API
154
161
  if name.length < 3
155
162
  name += "_" * (3 - name.length)
156
163
  end
157
- if 256 < name.length
158
- name = name[0,254] + "__"
164
+ if 255 < name.length
165
+ name = name[0, 253] + "__"
159
166
  end
160
167
  name = name.downcase
161
168
  name = name.gsub(/[^a-z0-9_]/, '_')
@@ -248,7 +255,8 @@ class API
248
255
  count = m['count']
249
256
  created_at = m['created_at']
250
257
  updated_at = m['updated_at']
251
- result[name] = [count, created_at, updated_at, nil] # set nil to org for API compatibiilty
258
+ permission = m['permission']
259
+ result[name] = [count, created_at, updated_at, nil, permission] # set nil to org for API compatibiilty
252
260
  }
253
261
  return result
254
262
  end
@@ -419,10 +427,12 @@ class API
419
427
  start_at = m['start_at']
420
428
  end_at = m['end_at']
421
429
  cpu_time = m['cpu_time']
430
+ result_size = m['result_size'] # compressed result size in msgpack.gz format
422
431
  result_url = m['result']
423
432
  priority = m['priority']
424
433
  retry_limit = m['retry_limit']
425
- result << [job_id, type, status, query, start_at, end_at, cpu_time, result_url, priority, retry_limit, nil, database] # same as database
434
+ result << [job_id, type, status, query, start_at, end_at, cpu_time,
435
+ result_size, result_url, priority, retry_limit, nil, database]
426
436
  }
427
437
  return result
428
438
  end
@@ -445,7 +455,8 @@ class API
445
455
  start_at = js['start_at']
446
456
  end_at = js['end_at']
447
457
  cpu_time = js['cpu_time']
448
- result = js['result'] # result URL
458
+ result_size = js['result_size'] # compressed result size in msgpack.gz format
459
+ result = js['result'] # result target URL
449
460
  hive_result_schema = (js['hive_result_schema'] || '')
450
461
  if hive_result_schema.empty?
451
462
  hive_result_schema = nil
@@ -478,8 +489,8 @@ class API
478
489
  end
479
490
  priority = js['priority']
480
491
  retry_limit = js['retry_limit']
481
- return [type, query, status, url, debug, start_at, end_at, cpu_time, result,
482
- hive_result_schema, priority, retry_limit, nil, database]
492
+ return [type, query, status, url, debug, start_at, end_at, cpu_time,
493
+ result_size, result, hive_result_schema, priority, retry_limit, nil, database]
483
494
  end
484
495
 
485
496
  def job_status(job_id)
@@ -505,14 +516,38 @@ class API
505
516
  return result
506
517
  end
507
518
 
508
- def job_result_format(job_id, format, io=nil)
519
+ # block is optional and must accept 1 parameter
520
+ def job_result_format(job_id, format, io=nil, &block)
509
521
  if io
510
522
  code, body, res = get("/v3/job/result/#{e job_id}", {'format'=>format}) {|res|
511
523
  if res.code != "200"
512
524
  raise_error("Get job result failed", res)
513
525
  end
526
+
527
+ if ce = res.header['Content-Encoding']
528
+ require 'zlib'
529
+ res.extend(DeflateReadBodyMixin)
530
+ res.gzip = true if ce == 'gzip'
531
+ else
532
+ res.extend(DirectReadBodyMixin)
533
+ end
534
+
535
+ res.extend(DirectReadBodyMixin)
536
+ if ce = res.header['Content-Encoding']
537
+ if ce == 'gzip'
538
+ infl = Zlib::Inflate.new(Zlib::MAX_WBITS + 16)
539
+ else
540
+ infl = Zlib::Inflate.new
541
+ end
542
+ end
543
+
544
+ total_compr_size = 0
514
545
  res.each_fragment {|fragment|
546
+ total_compr_size += fragment.size
547
+ # uncompressed if the 'Content-Enconding' header is set in response
548
+ fragment = infl.inflate(fragment) if ce
515
549
  io.write(fragment)
550
+ block.call(total_compr_size) if block_given?
516
551
  }
517
552
  }
518
553
  nil
@@ -525,20 +560,57 @@ class API
525
560
  end
526
561
  end
527
562
 
563
+ # block is optional and must accept 1 argument
528
564
  def job_result_each(job_id, &block)
529
565
  require 'msgpack'
530
566
  get("/v3/job/result/#{e job_id}", {'format'=>'msgpack'}) {|res|
531
567
  if res.code != "200"
532
568
  raise_error("Get job result failed", res)
533
569
  end
534
- u = MessagePack::Unpacker.new
535
- res.each_fragment {|fragment|
536
- u.feed_each(fragment, &block)
570
+
571
+ # default to decompressing the response since format is fixed to 'msgpack'
572
+ res.extend(DeflateReadBodyMixin)
573
+ res.gzip = (res.header['Content-Encoding'] == 'gzip')
574
+ upkr = MessagePack::Unpacker.new
575
+ res.each_fragment {|inflated_fragment|
576
+ upkr.feed_each(inflated_fragment, &block)
537
577
  }
538
578
  }
539
579
  nil
540
580
  end
541
581
 
582
+ # block is optional and must accept 1 argument
583
+ def job_result_each_with_compr_size(job_id, &block)
584
+ require 'zlib'
585
+ require 'msgpack'
586
+
587
+ get("/v3/job/result/#{e job_id}", {'format'=>'msgpack'}) {|res|
588
+ if res.code != "200"
589
+ raise_error("Get job result failed", res)
590
+ end
591
+
592
+ res.extend(DirectReadBodyMixin)
593
+ if res.header['Content-Encoding'] == 'gzip'
594
+ infl = Zlib::Inflate.new(Zlib::MAX_WBITS + 16)
595
+ else
596
+ infl = Zlib::Inflate.new
597
+ end
598
+ upkr = MessagePack::Unpacker.new
599
+ begin
600
+ total_compr_size = 0
601
+ res.each_fragment {|fragment|
602
+ total_compr_size += fragment.size
603
+ upkr.feed_each(infl.inflate(fragment)) {|unpacked|
604
+ block.call(unpacked, total_compr_size) if block_given?
605
+ }
606
+ }
607
+ ensure
608
+ infl.close
609
+ end
610
+ }
611
+ nil
612
+ end
613
+
542
614
  def job_result_raw(job_id, format)
543
615
  code, body, res = get("/v3/job/result/#{e job_id}", {'format'=>format})
544
616
  if code != "200"
@@ -816,7 +888,7 @@ class API
816
888
  end
817
889
 
818
890
  def update_schedule(name, params)
819
- code, body, res = get("/v3/schedule/update/#{e name}", params)
891
+ code, body, res = post("/v3/schedule/update/#{e name}", params)
820
892
  if code != "200"
821
893
  raise_error("Update schedule failed", res)
822
894
  end
@@ -1116,21 +1188,20 @@ class API
1116
1188
  return status
1117
1189
  end
1118
1190
 
1119
-
1120
1191
  private
1121
1192
  module DeflateReadBodyMixin
1122
1193
  attr_accessor :gzip
1123
1194
 
1124
1195
  def each_fragment(&block)
1125
1196
  if @gzip
1126
- infl = Zlib::Inflate.new(Zlib::MAX_WBITS+16)
1197
+ infl = Zlib::Inflate.new(Zlib::MAX_WBITS + 16)
1127
1198
  else
1128
1199
  infl = Zlib::Inflate.new
1129
1200
  end
1130
1201
  begin
1131
- read_body do |fragment|
1202
+ read_body {|fragment|
1132
1203
  block.call infl.inflate(fragment)
1133
- end
1204
+ }
1134
1205
  ensure
1135
1206
  infl.close
1136
1207
  end
@@ -1165,16 +1236,9 @@ class API
1165
1236
  end
1166
1237
 
1167
1238
  if block
1168
- response = http.request(request) do |res|
1169
- if ce = res.header['Content-Encoding']
1170
- require 'zlib'
1171
- res.extend(DeflateReadBodyMixin)
1172
- res.gzip = true if ce == 'gzip'
1173
- else
1174
- res.extend(DirectReadBodyMixin)
1175
- end
1239
+ response = http.request(request) {|res|
1176
1240
  block.call(res)
1177
- end
1241
+ }
1178
1242
  else
1179
1243
  response = http.request(request)
1180
1244
  end
@@ -1190,7 +1254,7 @@ class API
1190
1254
  if ce = response.header['content-encoding']
1191
1255
  require 'zlib'
1192
1256
  if ce == 'gzip'
1193
- infl = Zlib::Inflate.new(Zlib::MAX_WBITS+16)
1257
+ infl = Zlib::Inflate.new(Zlib::MAX_WBITS + 16)
1194
1258
  begin
1195
1259
  body = infl.inflate(body)
1196
1260
  ensure
@@ -1330,6 +1394,8 @@ class API
1330
1394
  raise AlreadyExistsError, "#{msg}: #{error_msg}"
1331
1395
  elsif status_code == "401"
1332
1396
  raise AuthError, "#{msg}: #{error_msg}"
1397
+ elsif status_code == "403"
1398
+ raise ForbiddenError, "#{msg}: #{error_msg}"
1333
1399
  else
1334
1400
  raise APIError, "#{status_code}: #{msg}: #{error_msg}"
1335
1401
  end
@@ -1343,6 +1409,8 @@ class API
1343
1409
  raise AlreadyExistsError, "#{msg}: #{res.body}"
1344
1410
  elsif status_code == "401"
1345
1411
  raise AuthError, "#{msg}: #{res.body}"
1412
+ elsif status_code == "403"
1413
+ raise ForbiddenError, "#{msg}: #{res.body}"
1346
1414
  else
1347
1415
  raise APIError, "#{status_code}: #{msg}: #{res.body}"
1348
1416
  end
@@ -1374,6 +1442,4 @@ class API
1374
1442
  end
1375
1443
  end
1376
1444
 
1377
-
1378
- end
1379
-
1445
+ end # module TreasureData
@@ -28,29 +28,33 @@ class Account < Model
28
28
  end
29
29
 
30
30
  def storage_size_string
31
- if @storage_size <= 1024*1024
31
+ if @storage_size <= 1024 * 1024
32
32
  return "0.0 GB"
33
- elsif @storage_size <= 60*1024*1024
33
+ elsif @storage_size <= 60 * 1024 * 1024
34
34
  return "0.01 GB"
35
- elsif @storage_size <= 60*1024*1024*1024
36
- "%.1f GB" % (@storage_size.to_f / (1024*1024*1024))
35
+ elsif @storage_size <= 60 * 1024 * 1024 * 1024
36
+ "%.1f GB" % (@storage_size.to_f / (1024 * 1024 * 1024))
37
37
  else
38
- "%d GB" % (@storage_size.to_f / (1024*1024*1024)).to_i
38
+ "%d GB" % (@storage_size.to_f / (1024 * 1024 * 1024)).to_i
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
43
  class Database < Model
44
- def initialize(client, db_name, tables=nil, count=nil, created_at=nil, updated_at=nil, org_name=nil)
44
+ PERMISSIONS = [:administrator, :full_access, :import_only, :query_only]
45
+ PERMISSION_LIST_TABLES = [:administrator, :full_access]
46
+
47
+ def initialize(client, db_name, tables=nil, count=nil, created_at=nil, updated_at=nil, org_name=nil, permission=nil)
45
48
  super(client)
46
49
  @db_name = db_name
47
50
  @tables = tables
48
51
  @count = count
49
52
  @created_at = created_at
50
53
  @updated_at = updated_at
54
+ @permission = permission.to_sym
51
55
  end
52
56
 
53
- attr_reader :org_name
57
+ attr_reader :org_name, :permission, :count
54
58
 
55
59
  def name
56
60
  @db_name
@@ -81,8 +85,6 @@ class Database < Model
81
85
  @client.query(@db_name, q)
82
86
  end
83
87
 
84
- attr_reader :count
85
-
86
88
  def created_at
87
89
  @created_at && !@created_at.empty? ? Time.parse(@created_at) : nil
88
90
  end
@@ -93,12 +95,19 @@ class Database < Model
93
95
 
94
96
  def update_tables!
95
97
  @tables = @client.tables(@db_name)
98
+ # provide Table objects with a reference to the parent Database to avoid
99
+ # requesting the Database information (such as permission) every time
100
+ @tables.each {|table|
101
+ table.database = self
102
+ }
96
103
  end
104
+
97
105
  end
98
106
 
99
107
  class Table < Model
100
108
  def initialize(client, db_name, table_name, type, schema, count, created_at=nil, updated_at=nil, estimated_storage_size=nil, last_import=nil, last_log_timestamp=nil, expire_days=nil, primary_key=nil, primary_key_type=nil)
101
109
  super(client)
110
+ @database = nil
102
111
  @db_name = db_name
103
112
  @table_name = table_name
104
113
  @type = type
@@ -119,6 +128,10 @@ class Table < Model
119
128
  alias database_name db_name
120
129
  alias name table_name
121
130
 
131
+ def database=(database)
132
+ @database = database if database.instance_of?(Database)
133
+ end
134
+
122
135
  def created_at
123
136
  @created_at && !@created_at.empty? ? Time.parse(@created_at) : nil
124
137
  end
@@ -140,7 +153,13 @@ class Table < Model
140
153
  end
141
154
 
142
155
  def database
143
- @client.database(@db_name)
156
+ update_database! unless @database
157
+ @database
158
+ end
159
+
160
+ # get the database's permission as if they were the table's
161
+ def permission
162
+ database.permission
144
163
  end
145
164
 
146
165
  def identifier
@@ -174,6 +193,10 @@ class Table < Model
174
193
  "%d GB" % (@estimated_storage_size.to_f / (1024*1024*1024)).to_i
175
194
  end
176
195
  end
196
+
197
+ def update_database!
198
+ @database = @client.database(@db_name)
199
+ end
177
200
  end
178
201
 
179
202
  class Schema
@@ -237,7 +260,9 @@ class Job < Model
237
260
  STATUS_KILLED = "killed"
238
261
  FINISHED_STATUS = [STATUS_SUCCESS, STATUS_ERROR, STATUS_KILLED]
239
262
 
240
- def initialize(client, job_id, type, query, status=nil, url=nil, debug=nil, start_at=nil, end_at=nil, cpu_time=nil, result=nil, result_url=nil, hive_result_schema=nil, priority=nil, retry_limit=nil, org_name=nil, db_name=nil)
263
+ def initialize(client, job_id, type, query, status=nil, url=nil, debug=nil, start_at=nil, end_at=nil, cpu_time=nil,
264
+ result_size=nil, result=nil, result_url=nil, hive_result_schema=nil, priority=nil, retry_limit=nil,
265
+ org_name=nil, db_name=nil)
241
266
  super(client)
242
267
  @job_id = job_id
243
268
  @type = type
@@ -248,6 +273,7 @@ class Job < Model
248
273
  @start_at = start_at
249
274
  @end_at = end_at
250
275
  @cpu_time = cpu_time
276
+ @result_size = result_size
251
277
  @result = result
252
278
  @result_url = result_url
253
279
  @hive_result_schema = hive_result_schema
@@ -307,6 +333,11 @@ class Job < Model
307
333
  @hive_result_schema
308
334
  end
309
335
 
336
+ def result_size
337
+ update_status! unless @result_size || finished?
338
+ @result_size
339
+ end
340
+
310
341
  def result
311
342
  unless @result
312
343
  return nil unless finished?
@@ -315,9 +346,18 @@ class Job < Model
315
346
  @result
316
347
  end
317
348
 
318
- def result_format(format, io=nil)
349
+ def result_format(format, io=nil, &block)
319
350
  return nil unless finished?
320
- @client.job_result_format(@job_id, format, io)
351
+ @client.job_result_format(@job_id, format, io, &block)
352
+ end
353
+
354
+ def result_each_with_compr_size(&block)
355
+ if @result
356
+ @result.each(&block)
357
+ else
358
+ @client.job_result_each_with_compr_size(@job_id, &block)
359
+ end
360
+ nil
321
361
  end
322
362
 
323
363
  def result_each(&block)
@@ -364,7 +404,9 @@ class Job < Model
364
404
  end
365
405
 
366
406
  def update_status!
367
- type, query, status, url, debug, start_at, end_at, cpu_time, result_url, hive_result_schema, priority, retry_limit, org_name, db_name = @client.api.show_job(@job_id)
407
+ type, query, status, url, debug, start_at, end_at, cpu_time,
408
+ result_size, result_url, hive_result_schema, priority, retry_limit,
409
+ org_name, db_name = @client.api.show_job(@job_id)
368
410
  @query = query
369
411
  @status = status
370
412
  @url = url
@@ -372,6 +414,7 @@ class Job < Model
372
414
  @start_at = start_at
373
415
  @end_at = end_at
374
416
  @cpu_time = cpu_time
417
+ @result_size = result_size
375
418
  @result_url = result_url
376
419
  @hive_result_schema = hive_result_schema
377
420
  @priority = priority
@@ -395,7 +438,8 @@ end
395
438
 
396
439
 
397
440
  class Schedule < Model
398
- def initialize(client, name, cron, query, database=nil, result_url=nil, timezone=nil, delay=nil, next_time=nil, priority=nil, retry_limit=nil, org_name=nil)
441
+ def initialize(client, name, cron, query, database=nil, result_url=nil, timezone=nil, delay=nil, next_time=nil,
442
+ priority=nil, retry_limit=nil, org_name=nil)
399
443
  super(client)
400
444
  @name = name
401
445
  @cron = cron