Class: RBHive::TableSchema

Inherits:
Object
  • Object
show all
Defined in:
lib/rbhive/table_schema.rb

Defined Under Namespace

Classes: Column

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, comment = nil, options = {}, &blk) ⇒ TableSchema

Returns a new instance of TableSchema


5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/rbhive/table_schema.rb', line 5

def initialize(name, comment=nil, options={}, &blk)
  @name, @comment = name, comment
  @location = options[:location] || nil
  @field_sep = options[:field_sep] || "\t"
  @line_sep = options[:line_sep] || "\n"
  @collection_sep = options[:collection_sep] || "|"
  @stored_as = options[:stored_as] || :textfile
  @columns = []
  @partitions = []
  @serde_name = nil
  @serde_properties = {}
  instance_eval(&blk) if blk
end

Instance Attribute Details

#columnsObject (readonly)

Returns the value of attribute columns


4
5
6
# File 'lib/rbhive/table_schema.rb', line 4

def columns
  @columns
end

#nameObject

Returns the value of attribute name


3
4
5
# File 'lib/rbhive/table_schema.rb', line 3

def name
  @name
end

#partitionsObject (readonly)

Returns the value of attribute partitions


4
5
6
# File 'lib/rbhive/table_schema.rb', line 4

def partitions
  @partitions
end

Instance Method Details

#add_columns_statementObject


72
73
74
# File 'lib/rbhive/table_schema.rb', line 72

def add_columns_statement
  alter_columns_statement("ADD")
end

#column(name, type, comment = nil) ⇒ Object


19
20
21
# File 'lib/rbhive/table_schema.rb', line 19

def column(name, type, comment=nil)
  @columns << Column.new(name, type, comment)
end

#create_table_statementObject


32
33
34
35
36
37
# File 'lib/rbhive/table_schema.rb', line 32

def create_table_statement()
  %[CREATE #{external}TABLE #{table_statement}
  ROW FORMAT #{row_format_statement}
  STORED AS #{stored_as}
  #{location}]
end

#delimited_statementObject


51
52
53
54
55
56
# File 'lib/rbhive/table_schema.rb', line 51

def delimited_statement
  %(DELIMITED
  FIELDS TERMINATED BY '#{@field_sep}'
  COLLECTION ITEMS TERMINATED BY '#{@collection_sep}'
  LINES TERMINATED BY '#{@line_sep}')
end

#partition(name, type, comment = nil) ⇒ Object


23
24
25
# File 'lib/rbhive/table_schema.rb', line 23

def partition(name, type, comment=nil)
  @partitions << Column.new(name, type, comment)
end

#replace_columns_statementObject


68
69
70
# File 'lib/rbhive/table_schema.rb', line 68

def replace_columns_statement
  alter_columns_statement("REPLACE")
end

#row_format_statementObject


43
44
45
46
47
48
49
# File 'lib/rbhive/table_schema.rb', line 43

def row_format_statement
  if @serde_name
    serde_statement
  else
    delimited_statement
  end
end

#serde(name, properties = {}) ⇒ Object


27
28
29
30
# File 'lib/rbhive/table_schema.rb', line 27

def serde(name, properties={})
  @serde_name = name
  @serde_properties = properties
end

#serde_properties_statementObject


62
63
64
65
66
# File 'lib/rbhive/table_schema.rb', line 62

def serde_properties_statement
  return '' unless @serde_properties.any?
  kvs = @serde_properties.map { |k,v| %("#{k}" = "#{v}") }.join(",\n")
  %(WITH SERDEPROPERTIES (#{kvs}))
end

#serde_statementObject


58
59
60
# File 'lib/rbhive/table_schema.rb', line 58

def serde_statement
  %(SERDE '#{@serde_name}'\n#{serde_properties_statement})
end

#stored_asObject


39
40
41
# File 'lib/rbhive/table_schema.rb', line 39

def stored_as
  @stored_as.to_s.upcase
end

#to_sObject


76
77
78
# File 'lib/rbhive/table_schema.rb', line 76

def to_s
  table_statement
end