class Blazer::Adapters::BigQueryAdapter
Public Instance Methods
preview_statement()
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 41 def preview_statement "SELECT * FROM `{table}` LIMIT 10" end
run_statement(statement, comment)
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 4 def run_statement(statement, comment) columns = [] rows = [] error = nil begin results = bigquery.query(statement) # complete? was removed in google-cloud-bigquery 0.29.0 # code is for backward compatibility if !results.respond_to?(:complete?) || results.complete? columns = results.first.keys.map(&:to_s) if results.size > 0 rows = results.map(&:values) else error = Blazer::TIMEOUT_MESSAGE end rescue => e error = e.message end [columns, rows, error] end
schema()
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 31 def schema table_refs.map do |table_ref| { schema: table_ref.dataset_id, table: table_ref.table_id, columns: table_columns(table_ref) } end end
tables()
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 27 def tables table_refs.map { |t| "#{t.project_id}.#{t.dataset_id}.#{t.table_id}" } end
Private Instance Methods
bigquery()
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 47 def bigquery @bigquery ||= begin require "google/cloud/bigquery" Google::Cloud::Bigquery.new( project: settings["project"], keyfile: settings["keyfile"] ) end end
table_columns(table_ref)
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 61 def table_columns(table_ref) schema = bigquery.service.get_table(table_ref.dataset_id, table_ref.table_id).schema return [] if schema.nil? schema.fields.map { |field| {name: field.name, data_type: field.type} } end
table_refs()
click to toggle source
# File lib/blazer/adapters/bigquery_adapter.rb, line 57 def table_refs bigquery.datasets.map(&:tables).flat_map { |table_list| table_list.map(&:table_ref) } end