...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package schema
18
19 import (
20 "fmt"
21 "strings"
22
23 "github.com/apache/arrow/go/v15/parquet"
24 format "github.com/apache/arrow/go/v15/parquet/internal/gen-go/parquet"
25 )
26
27
28
29
30
31
32 type Column struct {
33 pnode *PrimitiveNode
34
35
36 maxDefLvl int16
37
38
39
40
41 maxRepLvl int16
42 }
43
44
45
46 func NewColumn(n *PrimitiveNode, maxDefinitionLvl, maxRepetitionLvl int16) *Column {
47 return &Column{n, maxDefinitionLvl, maxRepetitionLvl}
48 }
49
50
51 func (c *Column) Name() string { return c.pnode.Name() }
52
53
54 func (c *Column) ColumnPath() parquet.ColumnPath { return c.pnode.columnPath() }
55
56
57 func (c *Column) Path() string { return c.pnode.Path() }
58
59
60 func (c *Column) TypeLength() int { return c.pnode.TypeLength() }
61
62 func (c *Column) MaxDefinitionLevel() int16 { return c.maxDefLvl }
63 func (c *Column) MaxRepetitionLevel() int16 { return c.maxRepLvl }
64 func (c *Column) PhysicalType() parquet.Type { return c.pnode.PhysicalType() }
65 func (c *Column) ConvertedType() ConvertedType { return c.pnode.convertedType }
66 func (c *Column) LogicalType() LogicalType { return c.pnode.logicalType }
67 func (c *Column) ColumnOrder() parquet.ColumnOrder { return c.pnode.ColumnOrder }
68 func (c *Column) String() string {
69 var bld strings.Builder
70 bld.WriteString("column descriptor = {\n")
71 fmt.Fprintf(&bld, " name: %s,\n", c.Name())
72 fmt.Fprintf(&bld, " path: %s,\n", c.Path())
73 fmt.Fprintf(&bld, " physical_type: %s,\n", c.PhysicalType())
74 fmt.Fprintf(&bld, " converted_type: %s,\n", c.ConvertedType())
75 fmt.Fprintf(&bld, " logical_type: %s,\n", c.LogicalType())
76 fmt.Fprintf(&bld, " max_definition_level: %d,\n", c.MaxDefinitionLevel())
77 fmt.Fprintf(&bld, " max_repetition_level: %d,\n", c.MaxRepetitionLevel())
78 if c.PhysicalType() == parquet.Types.FixedLenByteArray {
79 fmt.Fprintf(&bld, " length: %d,\n", c.TypeLength())
80 }
81 if c.ConvertedType() == ConvertedTypes.Decimal {
82 fmt.Fprintf(&bld, " precision: %d,\n scale: %d,\n", c.pnode.decimalMetaData.Precision, c.pnode.decimalMetaData.Scale)
83 }
84 bld.WriteString("}")
85 return bld.String()
86 }
87
88
89
90 func (c *Column) Equals(rhs *Column) bool {
91 return c.pnode.Equals(rhs.pnode) &&
92 c.MaxRepetitionLevel() == rhs.MaxRepetitionLevel() &&
93 c.MaxDefinitionLevel() == rhs.MaxDefinitionLevel()
94 }
95
96
97 func (c *Column) SchemaNode() Node {
98 return c.pnode
99 }
100
101
102
103 func (c *Column) SortOrder() SortOrder {
104 if c.LogicalType() != nil {
105 return GetLogicalSortOrder(c.LogicalType(), format.Type(c.pnode.PhysicalType()))
106 }
107 return GetSortOrder(c.ConvertedType(), format.Type(c.pnode.PhysicalType()))
108 }
109
View as plain text