Sha256: fb824f8f0abf5abd199a58c3d34a52a0b1e16f18fb2437281a3ac133ac904bfd

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

module Blazer
  module Adapters
    class BigQueryAdapter < BaseAdapter
      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.all.map(&:values)
          else
            error = Blazer::TIMEOUT_MESSAGE
          end
        rescue => e
          error = e.message
        end

        [columns, rows, error]
      end

      def tables
        table_refs.map { |t| "#{t.project_id}.#{t.dataset_id}.#{t.table_id}" }
      end

      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

      def preview_statement
        "SELECT * FROM `{table}` LIMIT 10"
      end

      private

      def bigquery
        @bigquery ||= begin
          require "google/cloud/bigquery"
          Google::Cloud::Bigquery.new(
            project: settings["project"],
            keyfile: settings["keyfile"]
          )
        end
      end

      def table_refs
        bigquery.datasets.map(&:tables).flat_map { |table_list| table_list.map(&:table_ref) }
      end

      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
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
blazer-2.5.0 lib/blazer/adapters/bigquery_adapter.rb
blazer-2.4.8 lib/blazer/adapters/bigquery_adapter.rb
blazer-2.4.7 lib/blazer/adapters/bigquery_adapter.rb
blazer-2.4.6 lib/blazer/adapters/bigquery_adapter.rb