bigquery_migration 0.1.2 → 0.1.3

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85f03f29febe10514da940bbd913562c67746211
4
- data.tar.gz: c2d37cfceb775b429f5c5eac8bfe4ccac4db7785
3
+ metadata.gz: 0fc953326453253906c139453f2bd5b7b95e09fd
4
+ data.tar.gz: e8e2d924b197c6f2b6ddbd4dc162c765396d13ff
5
5
  SHA512:
6
- metadata.gz: b21c0a5be60c12a92df59eedcaa874ba054e9ea7bd6391ec90267a1c47f0f7d8520b4db124be9a9254ca18b034fc15507fc2168090ba6dbbb78407ee5f644442
7
- data.tar.gz: 8b26abdeff14898c3d815ec8b37f976c7eb4dfdff51f5c1ad57ac4bc9cdd9cc5ddd36fded4c348be6cddf5a70760b2110323f44cbd5e2892eb940b85d0352665
6
+ metadata.gz: 4e207d801d7b5a20e241e95c76d391ddc8863cf42c319016ed84e97e226cf2247ad4bd0a452c09ec342725fdd1c92a39353032adb282ca218b2eb1cd4e211663
7
+ data.tar.gz: a6a6c3932945426f65641eebbc93cb0bda24150a33fd4456a5ebe4b372ab985312131e92c1eab5d9e122db4165682233f0a3f9341ceb8e57112fdf91f1418021
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.1.3 (2016/04/22)
2
+
3
+ Enhancements:
4
+
5
+ * Support new BYTES types
6
+ * Add exe/bq-migrate as an alias to exe/bq_migrate
7
+
1
8
  # 0.1.2 (2016/04/14)
2
9
 
3
10
  Changes:
data/README.md CHANGED
@@ -76,6 +76,10 @@ migrator.migrate_table(columns: columns)
76
76
  # migrator.migrate_table(schema_file: '/path/to/schema.json')
77
77
  ```
78
78
 
79
+ ## Further Details
80
+
81
+ * See [BigQueryテーブルのスキーマを変更する - sonots:blog](http://blog.livedoor.jp/sonots/archives/47294596.html) (Japanese)
82
+
79
83
  ## Development
80
84
 
81
85
  ### Run example:
@@ -15,6 +15,7 @@ actions:
15
15
  fields:
16
16
  - { name: 'string', type: 'STRING' }
17
17
  - { name: 'integer', type: 'INTEGER' }
18
+ - { name: 'bytes', type: 'BYTES' }
18
19
  - action: migrate_table
19
20
  <<: *bigquery
20
21
  schema_file: example/schema.json
@@ -0,0 +1,23 @@
1
+ bigquery: &bigquery
2
+ json_keyfile: example/your-project-000.json
3
+ dataset: your_dataset_name
4
+ table: your_table_name
5
+
6
+ actions:
7
+ - action: create_dataset
8
+ <<: *bigquery
9
+ - action: migrate_table
10
+ <<: *bigquery
11
+ columns:
12
+ - { name: 'timestamp', type: 'TIMESTAMP' }
13
+ - name: 'record'
14
+ type: 'RECORD'
15
+ fields:
16
+ - { name: 'string', type: 'STRING' }
17
+ - { name: 'integer', type: 'INTEGER' }
18
+ - action: table_info
19
+ table: your_table_name
20
+ <<: *bigquery
21
+ - action: table_info
22
+ prefix: your_table_name
23
+ <<: *bigquery
data/exe/bq-migrate ADDED
@@ -0,0 +1 @@
1
+ bq_migrate
@@ -41,6 +41,7 @@ class BigqueryMigration
41
41
  preview
42
42
  insert_select
43
43
  copy_table
44
+ table_info
44
45
  ])
45
46
  end
46
47
 
@@ -102,5 +103,23 @@ class BigqueryMigration
102
103
  write_disposition: config[:write_disposition],
103
104
  )
104
105
  end
106
+
107
+ def table_info
108
+ if config[:prefix]
109
+ tables = client.list_tables[:tables].select {|table| table.start_with?(config[:prefix]) }
110
+ table_infos = tables.map do |table|
111
+ result = client.get_table(table: table)
112
+ result.delete(:responses)
113
+ result
114
+ end
115
+ result = {
116
+ sum_num_bytes: table_infos.map {|info| info[:num_bytes].to_i }.inject(:+),
117
+ sum_num_rows: table_infos.map {|info| info[:num_rows].to_i }.inject(:+),
118
+ table_infos: table_infos,
119
+ }
120
+ else
121
+ client.get_table
122
+ end
123
+ end
105
124
  end
106
125
  end
@@ -182,8 +182,20 @@ class BigqueryMigration
182
182
  response = {status_code: e.status_code, message: e.message, error_class: e.class}
183
183
  raise Error, "Failed to get_table(#{project}, #{dataset}, #{table}), response:#{response}"
184
184
  end
185
-
186
- { responses: { get_table: response } }
185
+
186
+ result = {}
187
+ if response
188
+ result = {
189
+ table_id: response.id,
190
+ creation_time: response.creation_time.to_i, # millisec
191
+ last_modified_time: response.last_modified_time.to_i, # millisec
192
+ location: response.location,
193
+ num_bytes: response.num_bytes.to_i,
194
+ num_rows: response.num_rows.to_i,
195
+ }
196
+ end
197
+
198
+ result.merge!({ responses: { get_table: response } })
187
199
  end
188
200
 
189
201
  def insert_table(dataset: nil, table: nil, columns: )
@@ -262,7 +274,7 @@ class BigqueryMigration
262
274
  end
263
275
  rescue Google::Apis::ServerError, Google::Apis::ClientError, Google::Apis::AuthorizationError => e
264
276
  if e.status_code == 404 && /Not found:/ =~ e.message
265
- railse NotFoundError, "Dataset #{project}:#{dataset} is not found"
277
+ raise NotFoundError, "Dataset #{project}:#{dataset} is not found"
266
278
  end
267
279
 
268
280
  response = {status_code: e.status_code, message: e.message, error_class: e.class}
@@ -4,7 +4,7 @@ require_relative 'error'
4
4
 
5
5
  class BigqueryMigration
6
6
  class Schema < ::Array
7
- ALLOWED_FIELD_TYPES = Set.new(['STRING', 'INTEGER', 'FLOAT', 'BOOLEAN', 'RECORD', 'TIMESTAMP'])
7
+ ALLOWED_FIELD_TYPES = Set.new(['STRING', 'INTEGER', 'FLOAT', 'BOOLEAN', 'RECORD', 'TIMESTAMP', 'BYTES'])
8
8
  ALLOWED_FIELD_MODES = Set.new(['NULLABLE', 'REQUIRED', 'REPEATED'])
9
9
 
10
10
  def initialize(columns = [])
@@ -1,3 +1,3 @@
1
1
  class BigqueryMigration
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bigquery_migration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-14 00:00:00.000000000 Z
11
+ date: 2016-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-api-client
@@ -126,6 +126,7 @@ description: Migrate BigQuery table schema.
126
126
  email:
127
127
  - sonots@gmail.com
128
128
  executables:
129
+ - bq-migrate
129
130
  - bq_migrate
130
131
  extensions: []
131
132
  extra_rdoc_files: []
@@ -147,6 +148,8 @@ files:
147
148
  - example/insert_select.yml
148
149
  - example/migrate_table.yml
149
150
  - example/schema.json
151
+ - example/table_info.yml
152
+ - exe/bq-migrate
150
153
  - exe/bq_migrate
151
154
  - lib/bigquery_migration.rb
152
155
  - lib/bigquery_migration/action.rb