Class: Google::Cloud::Bigquery::External::BigtableSource::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/bigquery/external.rb

Overview

BigtableSource::Column

A Bigtable column to expose in the table schema along with its types.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.rowkey_as_string = true
  bt.add_family "user" do |u|
    u.add_string "name"
    u.add_string "email"
    u.add_integer "age"
    u.add_boolean "active"
  end
end

data = bigquery.query "SELECT * FROM my_ext_table",
                      external: { my_ext_table: bigtable_table }

# Iterate over the first page of results
data.each do |row|
  puts row[:name]
end
# Retrieve the next page of results
data = data.next if data.next?

Instance Method Summary collapse

Instance Method Details

#encodingString

The encoding of the values when the type is not STRING.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_bytes "name" do |col|
      col.encoding = "TEXT"
      col.encoding # "TEXT"
    end
  end
end

Returns:

  • (String)


2188
2189
2190
# File 'lib/google/cloud/bigquery/external.rb', line 2188

def encoding
  @gapi.encoding
end

#encoding=(new_encoding) ⇒ Object

Set the encoding of the values when the type is not STRING. Acceptable encoding values are:

  • TEXT - indicates values are alphanumeric text strings.
  • BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden on a column.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_bytes "name" do |col|
      col.encoding = "TEXT"
      col.encoding # "TEXT"
    end
  end
end

Parameters:

  • new_encoding (String)

    New encoding value



2218
2219
2220
2221
# File 'lib/google/cloud/bigquery/external.rb', line 2218

def encoding= new_encoding
  frozen_check!
  @gapi.encoding = new_encoding
end

#field_nameString

If the qualifier is not a valid BigQuery field identifier (does not match [a-zA-Z][a-zA-Z0-9_]*) a valid identifier must be provided as the column field name and is used as field name in queries.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "001_name", as: "user" do |col|
      col.field_name # "user"
      col.field_name = "User"
      col.field_name # "User"
    end
  end
end

Returns:

  • (String)


2247
2248
2249
# File 'lib/google/cloud/bigquery/external.rb', line 2247

def field_name
  @gapi.field_name
end

#field_name=(new_field_name) ⇒ Object

Sets the identifier to be used as the column field name in queries when the qualifier is not a valid BigQuery field identifier (does not match [a-zA-Z][a-zA-Z0-9_]*).

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "001_name", as: "user" do |col|
      col.field_name # "user"
      col.field_name = "User"
      col.field_name # "User"
    end
  end
end

Parameters:

  • new_field_name (String)

    New field_name value



2274
2275
2276
2277
# File 'lib/google/cloud/bigquery/external.rb', line 2274

def field_name= new_field_name
  frozen_check!
  @gapi.field_name = new_field_name
end

#latestBoolean

Whether only the latest version of value in this column are exposed. Can also be set at the column family level. However, this value takes precedence when set at both levels.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.latest = true
      col.latest # true
    end
  end
end

Returns:

  • (Boolean)


2301
2302
2303
# File 'lib/google/cloud/bigquery/external.rb', line 2301

def latest
  @gapi.only_read_latest
end

#latest=(new_latest) ⇒ Object

Set whether only the latest version of value in this column are exposed. Can also be set at the column family level. However, this value takes precedence when set at both levels.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.latest = true
      col.latest # true
    end
  end
end

Parameters:

  • new_latest (Boolean)

    New latest value



2327
2328
2329
2330
# File 'lib/google/cloud/bigquery/external.rb', line 2327

def latest= new_latest
  frozen_check!
  @gapi.only_read_latest = new_latest
end

#qualifierString

Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it will be represented as a UTF-8 string. Otherwise, it will represented as a ASCII-8BIT string.

If the qualifier is not a valid BigQuery field identifier (does not match [a-zA-Z][a-zA-Z0-9_]*) a valid identifier must be provided as field_name.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.qualifier # "user"
      col.qualifier = "User"
      col.qualifier # "User"
    end
  end
end

Returns:

  • (String)


2119
2120
2121
# File 'lib/google/cloud/bigquery/external.rb', line 2119

def qualifier
  @gapi.qualifier_string || Base64.strict_decode64(@gapi.qualifier_encoded.to_s)
end

#qualifier=(new_qualifier) ⇒ Object

Set the qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. Values that are valid UTF-8 strings will be treated as such. All other values will be treated as BINARY.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.qualifier # "user"
      col.qualifier = "User"
      col.qualifier # "User"
    end
  end
end

Parameters:

  • new_qualifier (String)

    New qualifier value



2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
# File 'lib/google/cloud/bigquery/external.rb', line 2147

def qualifier= new_qualifier
  frozen_check!
  raise ArgumentError if new_qualifier.nil?

  utf8_qualifier = new_qualifier.encode Encoding::UTF_8
  if utf8_qualifier.valid_encoding?
    @gapi.qualifier_string = utf8_qualifier
    if @gapi.instance_variables.include? :@qualifier_encoded
      @gapi.remove_instance_variable :@qualifier_encoded
    end
  else
    @gapi.qualifier_encoded = Base64.strict_encode64 new_qualifier
    if @gapi.instance_variables.include? :@qualifier_string
      @gapi.remove_instance_variable :@qualifier_string
    end
  end
rescue EncodingError
  @gapi.qualifier_encoded = Base64.strict_encode64 new_qualifier
  @gapi.remove_instance_variable :@qualifier_string if @gapi.instance_variables.include? :@qualifier_string
end

#typeString

The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. The following BigQuery types are allowed:

  • BYTES
  • STRING
  • INTEGER
  • FLOAT
  • BOOLEAN

Default type is BYTES. Can also be set at the column family level. However, this value takes precedence when set at both levels.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.type # "STRING"
    end
  end
end

Returns:

  • (String)


2364
2365
2366
# File 'lib/google/cloud/bigquery/external.rb', line 2364

def type
  @gapi.type
end

#type=(new_type) ⇒ Object

Set the type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. The following BigQuery types are allowed:

  • BYTES
  • STRING
  • INTEGER
  • FLOAT
  • BOOLEAN

Default type is BYTES. Can also be set at the column family level. However, this value takes precedence when set at both levels.

Examples:

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new

bigtable_url = "https://googleapis.com/bigtable/projects/..."
bigtable_table = bigquery.external bigtable_url do |bt|
  bt.add_family "user" do |u|
    u.add_string "name" do |col|
      col.type # "STRING"
      col.type = "BYTES"
      col.type # "BYTES"
    end
  end
end

Parameters:

  • new_type (String)

    New type value



2402
2403
2404
2405
# File 'lib/google/cloud/bigquery/external.rb', line 2402

def type= new_type
  frozen_check!
  @gapi.type = new_type
end