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
# 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] || "|"
  @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



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

def add_columns_statement
  alter_columns_statement("ADD")
end

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



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

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

#create_table_statementObject



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

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

#delimited_statementObject



46
47
48
49
50
51
# File 'lib/rbhive/table_schema.rb', line 46

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



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

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

#replace_columns_statementObject



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

def replace_columns_statement
  alter_columns_statement("REPLACE")
end

#row_format_statementObject



38
39
40
41
42
43
44
# File 'lib/rbhive/table_schema.rb', line 38

def row_format_statement
  if @serde_name
    serde_statement
  else
    delimited_statement
  end
end

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



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

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

#serde_properties_statementObject



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

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



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

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

#to_sObject



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

def to_s
  table_statement
end