ath 0.1.4 → 0.1.5
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 +1 -0
- data/ath.gemspec +1 -0
- data/exe/ath +2 -0
- data/lib/ath.rb +1 -0
- data/lib/ath/driver.rb +22 -6
- data/lib/ath/query.rb +28 -1
- data/lib/ath/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2e657482ca868e38e2823974acf2d99a7291bc0
|
4
|
+
data.tar.gz: fe8561a1ce77cbcee7decdb892ccbde7a0938b95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b80a39f2864d34af1c7c301e64419419b36215a9f04ec48e6bcf7721ab57dd0c68247df901e64d83af5ba1300ca2ecd71116f282102620b241a65bc01b255d6
|
7
|
+
data.tar.gz: 718f99c07022cf0305cda6434715f768a13ca11e3e6283f23986d43b200901e9b12b9c87a11dfa408c9cdce319eb1bd0851521fdc56a29843e6a9c6135e43b45
|
data/README.md
CHANGED
data/ath.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
24
|
spec.add_dependency 'aws-sdk', '>= 2.9.21', '< 3'
|
25
|
+
spec.add_dependency 'ruby-progressbar'
|
25
26
|
spec.add_development_dependency 'bundler'
|
26
27
|
spec.add_development_dependency 'rake'
|
27
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
data/exe/ath
CHANGED
@@ -10,6 +10,7 @@ Version = Ath::VERSION
|
|
10
10
|
options = {
|
11
11
|
database: 'default',
|
12
12
|
output_location: ENV['ATH_OUTPUT_LOCATION'],
|
13
|
+
progress: true,
|
13
14
|
debug: false,
|
14
15
|
}
|
15
16
|
|
@@ -30,6 +31,7 @@ ARGV.options do |opt|
|
|
30
31
|
opt.on('-d', '--database DATABASE') {|v| options[:database] = v }
|
31
32
|
opt.on('-e', '--execute QUERY') {|v| query = v }
|
32
33
|
opt.on('-f', '--file QUERY_FILR') {|v| query_file = v }
|
34
|
+
opt.on('', '--[no-]progress') {|v| options[:progress] = v }
|
33
35
|
opt.on('' , '--debug') { options[:debug] = true }
|
34
36
|
opt.parse!
|
35
37
|
|
data/lib/ath.rb
CHANGED
data/lib/ath/driver.rb
CHANGED
@@ -18,24 +18,40 @@ class Ath::Driver
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get_query_execution_result(query_execution_id:)
|
21
|
-
|
22
|
-
output_location = query_execution.result_configuration.output_location
|
23
|
-
bucket, key = output_location.sub(%r{\As3://}, '').split('/', 2)
|
21
|
+
bucket, key = get_query_execution_result_output_location(query_execution_id: query_execution_id)
|
24
22
|
tmp = Tempfile.create('ath')
|
25
23
|
|
26
|
-
|
27
|
-
|
24
|
+
if block_given?
|
25
|
+
@s3.get_object(bucket: bucket, key: key) do |chunk|
|
26
|
+
yield(chunk)
|
27
|
+
tmp.write(chunk)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
@s3.get_object(bucket: bucket, key: key) do |chunk|
|
31
|
+
tmp.write(chunk)
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
tmp.flush
|
31
36
|
tmp
|
32
37
|
end
|
33
38
|
|
39
|
+
def head_query_execution_result(query_execution_id:)
|
40
|
+
bucket, key = get_query_execution_result_output_location(query_execution_id: query_execution_id)
|
41
|
+
@s3.head_object(bucket: bucket, key: key)
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_query_execution_result_output_location(query_execution_id:)
|
45
|
+
query_execution = @athena.get_query_execution(query_execution_id: query_execution_id).query_execution
|
46
|
+
output_location = query_execution.result_configuration.output_location
|
47
|
+
output_location.sub(%r{\As3://}, '').split('/', 2)
|
48
|
+
end
|
49
|
+
|
34
50
|
def start_query_execution(query_string:)
|
35
51
|
@athena.start_query_execution(
|
36
52
|
query_string: query_string,
|
37
53
|
query_execution_context: {database: @database},
|
38
|
-
result_configuration: {
|
54
|
+
result_configuration: {output_location: @output_location})
|
39
55
|
end
|
40
56
|
|
41
57
|
def stop_query_execution(query_execution_id:)
|
data/lib/ath/query.rb
CHANGED
@@ -15,8 +15,13 @@ class Ath::Query
|
|
15
15
|
abort_waiting = false
|
16
16
|
orig_handler = trap(:INT, proc { abort_waiting = true })
|
17
17
|
query_execution = nil
|
18
|
+
running_progressbar = nil
|
18
19
|
|
19
20
|
begin
|
21
|
+
if @shell.options[:progress]
|
22
|
+
running_progressbar = ProgressBar.create(title: 'Running', total: nil, output: $stderr)
|
23
|
+
end
|
24
|
+
|
20
25
|
until abort_waiting
|
21
26
|
query_execution = @shell.driver.get_query_execution(query_execution_id: query_execution_id)
|
22
27
|
|
@@ -24,9 +29,11 @@ class Ath::Query
|
|
24
29
|
break
|
25
30
|
end
|
26
31
|
|
32
|
+
running_progressbar.increment if running_progressbar
|
27
33
|
sleep 1
|
28
34
|
end
|
29
35
|
ensure
|
36
|
+
running_progressbar.clear if running_progressbar
|
30
37
|
trap(:INT, orig_handler)
|
31
38
|
end
|
32
39
|
|
@@ -35,7 +42,27 @@ class Ath::Query
|
|
35
42
|
end
|
36
43
|
|
37
44
|
if query_execution.status.state == 'SUCCEEDED'
|
38
|
-
@shell.driver.
|
45
|
+
head = @shell.driver.head_query_execution_result(query_execution_id: query_execution_id)
|
46
|
+
download_progressbar = nil
|
47
|
+
|
48
|
+
begin
|
49
|
+
if @shell.options[:progress]
|
50
|
+
download_progressbar = ProgressBar.create(
|
51
|
+
title: 'Download',
|
52
|
+
total: head.content_length,
|
53
|
+
output: $stderr)
|
54
|
+
end
|
55
|
+
|
56
|
+
@shell.driver.get_query_execution_result(query_execution_id: query_execution_id) do |chunk|
|
57
|
+
begin
|
58
|
+
download_progressbar.progress += chunk.length if download_progressbar
|
59
|
+
rescue ProgressBar::InvalidProgressError
|
60
|
+
# nothing to do
|
61
|
+
end
|
62
|
+
end
|
63
|
+
ensure
|
64
|
+
download_progressbar.clear if download_progressbar
|
65
|
+
end
|
39
66
|
else
|
40
67
|
"QueryExecution #{query_execution_id}: #{query_execution.status.state_change_reason}"
|
41
68
|
end
|
data/lib/ath/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- winebarrel
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ruby-progressbar
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: bundler
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|