Class: Iceberg::Catalog

Inherits:
Object
  • Object
show all
Defined in:
lib/iceberg/catalog.rb

Instance Method Summary collapse

Instance Method Details

#create_namespace(namespace, properties: {}, if_not_exists: nil) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/iceberg/catalog.rb', line 7

def create_namespace(namespace, properties: {}, if_not_exists: nil)
  @catalog.create_namespace(namespace, properties)
rescue Error => e
  # ideally all catalogs would use NamespaceAlreadyExistsError
  if !if_not_exists || (e.message != "Cannot create namespace" && !e.message.include?("already exists"))
    raise e
  end
  nil
end

#create_table(table_name, schema: nil, location: nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/iceberg/catalog.rb', line 43

def create_table(table_name, schema: nil, location: nil)
  if !schema.nil? && block_given?
    raise ArgumentError, "Must pass schema or block"
  end

  if block_given?
    table_definition = TableDefinition.new
    yield table_definition
    schema = Schema.new(table_definition.fields)
  elsif schema.is_a?(Hash) || (defined?(Polars::Schema) && schema.is_a?(Polars::Schema))
    fields =
      schema.to_h.map.with_index do |(k, v), i|
        {
          id: i + 1,
          name: k.is_a?(Symbol) ? k.to_s : k,
          type: v,
          required: false
        }
      end
    schema = Schema.new(fields)
  elsif schema.nil?
    schema = Schema.new([])
  end

  Table.new(@catalog.create_table(table_name, schema, location), @catalog)
end

#drop_namespace(namespace, if_exists: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/iceberg/catalog.rb', line 29

def drop_namespace(namespace, if_exists: nil)
  @catalog.drop_namespace(namespace)
rescue Error => e
  # ideally all catalogs would use NamespaceNotFoundError
  if !if_exists || (e.message != "Tried to drop a namespace that does not exist" && !e.message.include?("No such namespace") && !e.message.include?("The specified namespace does not exist") && !e.message.include?("not found"))
    raise e
  end
  nil
end

#drop_table(table_name, if_exists: nil) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/iceberg/catalog.rb', line 74

def drop_table(table_name, if_exists: nil)
  @catalog.drop_table(table_name)
rescue Error => e
  # ideally all catalogs would use TableNotFoundError
  if !if_exists || (e.message != "Tried to drop a table that does not exist" && !e.message.include?("No such table") && !e.message.include?("The specified table does not exist") && !e.message.include?("not found"))
    raise e
  end
  nil
end

#inspectObject

hide internal state



106
107
108
# File 'lib/iceberg/catalog.rb', line 106

def inspect
  to_s
end

#list_namespaces(parent = nil) ⇒ Object



3
4
5
# File 'lib/iceberg/catalog.rb', line 3

def list_namespaces(parent = nil)
  @catalog.list_namespaces(parent)
end

#list_tables(namespace) ⇒ Object



39
40
41
# File 'lib/iceberg/catalog.rb', line 39

def list_tables(namespace)
  @catalog.list_tables(namespace)
end

#load_table(table_name) ⇒ Object



70
71
72
# File 'lib/iceberg/catalog.rb', line 70

def load_table(table_name)
  Table.new(@catalog.load_table(table_name), @catalog)
end

#namespace_exists?(namespace) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/iceberg/catalog.rb', line 17

def namespace_exists?(namespace)
  @catalog.namespace_exists?(namespace)
end

#namespace_properties(namespace) ⇒ Object



21
22
23
# File 'lib/iceberg/catalog.rb', line 21

def namespace_properties(namespace)
  @catalog.namespace_properties(namespace)
end

#register_table(table_name, metadata_location) ⇒ Object



94
95
96
# File 'lib/iceberg/catalog.rb', line 94

def register_table(table_name, )
  @catalog.register_table(table_name, )
end

#rename_table(table_name, new_name) ⇒ Object



90
91
92
# File 'lib/iceberg/catalog.rb', line 90

def rename_table(table_name, new_name)
  @catalog.rename_table(table_name, new_name)
end

#sql(sql) ⇒ Object

Raises:



98
99
100
101
102
103
# File 'lib/iceberg/catalog.rb', line 98

def sql(sql)
  # requires datafusion feature
  raise Todo unless @catalog.respond_to?(:sql)

  @catalog.sql(sql)
end

#table_exists?(table_name) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
87
88
# File 'lib/iceberg/catalog.rb', line 84

def table_exists?(table_name)
  @catalog.table_exists?(table_name)
rescue NamespaceNotFoundError
  false
end

#update_namespace(namespace, properties:) ⇒ Object



25
26
27
# File 'lib/iceberg/catalog.rb', line 25

def update_namespace(namespace, properties:)
  @catalog.update_namespace(namespace, properties)
end