github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/metastore/hive/converter.go (about) 1 package hive 2 3 import ( 4 "github.com/treeverse/lakefs/pkg/metastore" 5 "github.com/treeverse/lakefs/pkg/metastore/hive/gen-go/hive_metastore" 6 ) 7 8 func serDeHiveToLocal(g *hive_metastore.SerDeInfo) *metastore.SerDeInfo { 9 if g == nil { 10 return nil 11 } 12 return &metastore.SerDeInfo{ 13 Name: g.Name, 14 SerializationLib: g.SerializationLib, 15 Parameters: g.Parameters, 16 } 17 } 18 19 func skewedHiveToLocal(g *hive_metastore.SkewedInfo) *metastore.SkewedInfo { 20 if g == nil { 21 return &metastore.SkewedInfo{} 22 } 23 return &metastore.SkewedInfo{ 24 SkewedColNames: g.SkewedColNames, 25 SkewedColValues: g.SkewedColValues, 26 SkewedColValueLocationMaps: g.SkewedColValueLocationMaps, 27 } 28 } 29 30 func sortColumnsHiveToLocal(columns []*hive_metastore.Order) []*metastore.Order { 31 res := make([]*metastore.Order, len(columns)) 32 for i, column := range columns { 33 res[i] = &metastore.Order{ 34 Col: column.Col, 35 Order: int(column.Order), 36 } 37 } 38 return res 39 } 40 41 func columnsHiveToLocal(columns []*hive_metastore.FieldSchema) []*metastore.FieldSchema { 42 res := make([]*metastore.FieldSchema, len(columns)) 43 for i, column := range columns { 44 res[i] = &metastore.FieldSchema{ 45 Name: column.Name, 46 Type: column.Type, 47 Comment: column.Comment, 48 } 49 } 50 return res 51 } 52 53 func TableHiveToLocal(hiveTable *hive_metastore.Table) *metastore.Table { 54 sd := SDHiveToLocal(hiveTable.Sd) 55 ht := &metastore.Table{ 56 TableName: hiveTable.TableName, 57 DBName: hiveTable.DbName, 58 Owner: hiveTable.Owner, 59 CreateTime: int64(hiveTable.CreateTime), 60 LastAccessTime: int64(hiveTable.LastAccessTime), 61 Retention: int(hiveTable.Retention), 62 Sd: sd, 63 PartitionKeys: columnsHiveToLocal(hiveTable.PartitionKeys), 64 Parameters: hiveTable.Parameters, 65 ViewOriginalText: hiveTable.ViewOriginalText, 66 ViewExpandedText: hiveTable.ViewExpandedText, 67 TableType: hiveTable.TableType, 68 Temporary: hiveTable.Temporary, 69 RewriteEnabled: hiveTable.RewriteEnabled, 70 } 71 return ht 72 } 73 74 func serDeLocalToHive(info *metastore.SerDeInfo) *hive_metastore.SerDeInfo { 75 if info == nil { 76 return nil 77 } 78 return &hive_metastore.SerDeInfo{ 79 Name: info.Name, 80 SerializationLib: info.SerializationLib, 81 Parameters: info.Parameters, 82 } 83 } 84 85 func skewedLocalToHive(info *metastore.SkewedInfo) *hive_metastore.SkewedInfo { 86 if info == nil { 87 return &hive_metastore.SkewedInfo{} 88 } 89 return &hive_metastore.SkewedInfo{ 90 SkewedColNames: info.SkewedColNames, 91 SkewedColValues: info.SkewedColValues, 92 SkewedColValueLocationMaps: info.SkewedColValueLocationMaps, 93 } 94 } 95 96 func sortColumnsLocalToHive(columns []*metastore.Order) []*hive_metastore.Order { 97 res := make([]*hive_metastore.Order, len(columns)) 98 for i, column := range columns { 99 res[i] = &hive_metastore.Order{ 100 Col: column.Col, 101 Order: int32(column.Order), 102 } 103 } 104 return res 105 } 106 107 func columnsLocalToHive(columns []*metastore.FieldSchema) []*hive_metastore.FieldSchema { 108 res := make([]*hive_metastore.FieldSchema, len(columns)) 109 for i, column := range columns { 110 res[i] = &hive_metastore.FieldSchema{ 111 Name: column.Name, 112 Type: column.Type, 113 Comment: column.Comment, 114 } 115 } 116 return res 117 } 118 119 func TableLocalToHive(table *metastore.Table) *hive_metastore.Table { 120 sd := SDLocalToHive(table.Sd) 121 privileges, _ := table.Privileges.(*hive_metastore.PrincipalPrivilegeSet) 122 123 ht := &hive_metastore.Table{ 124 DbName: table.DBName, 125 TableName: table.TableName, 126 Owner: table.Owner, 127 CreateTime: int32(table.CreateTime), 128 LastAccessTime: int32(table.LastAccessTime), 129 Retention: int32(table.Retention), 130 Sd: sd, 131 132 PartitionKeys: columnsLocalToHive(table.PartitionKeys), 133 Parameters: table.Parameters, 134 ViewOriginalText: table.ViewOriginalText, 135 ViewExpandedText: table.ViewExpandedText, 136 TableType: table.TableType, 137 Privileges: privileges, 138 Temporary: table.Temporary, 139 RewriteEnabled: table.RewriteEnabled, 140 } 141 return ht 142 } 143 144 func PartitionHiveToLocal(hivePartition *hive_metastore.Partition) *metastore.Partition { 145 sd := SDHiveToLocal(hivePartition.Sd) 146 partition := &metastore.Partition{ 147 Values: hivePartition.Values, 148 DBName: hivePartition.DbName, 149 TableName: hivePartition.TableName, 150 CreateTime: int(hivePartition.CreateTime), 151 LastAccessTime: int(hivePartition.LastAccessTime), 152 Sd: sd, 153 Parameters: hivePartition.Parameters, 154 } 155 return partition 156 } 157 func PartitionsHiveToLocal(gluePartitions []*hive_metastore.Partition) []*metastore.Partition { 158 partitions := make([]*metastore.Partition, len(gluePartitions)) 159 for i, partition := range gluePartitions { 160 partitions[i] = PartitionHiveToLocal(partition) 161 } 162 return partitions 163 } 164 165 func DatabaseLocalToHive(db *metastore.Database) *hive_metastore.Database { 166 privileges, _ := db.HivePrivileges.(*hive_metastore.PrincipalPrivilegeSet) 167 ownerType, _ := db.HiveOwnerType.(*hive_metastore.PrincipalType) 168 return &hive_metastore.Database{ 169 Name: db.Name, 170 Description: db.Description, 171 LocationUri: db.LocationURI, 172 Parameters: db.Parameters, 173 Privileges: privileges, 174 OwnerName: db.OwnerName, 175 OwnerType: ownerType, 176 } 177 } 178 179 func DatabaseHiveToLocal(db *hive_metastore.Database) *metastore.Database { 180 return &metastore.Database{ 181 Name: db.Name, 182 Description: db.Description, 183 LocationURI: db.LocationUri, 184 Parameters: db.Parameters, 185 } 186 } 187 188 func PartitionLocalToHive(partition *metastore.Partition) *hive_metastore.Partition { 189 sd := SDLocalToHive(partition.Sd) 190 privileges, _ := partition.Privileges.(*hive_metastore.PrincipalPrivilegeSet) 191 ht := &hive_metastore.Partition{ 192 Values: partition.Values, 193 DbName: partition.DBName, 194 TableName: partition.TableName, 195 CreateTime: int32(partition.CreateTime), 196 LastAccessTime: int32(partition.LastAccessTime), 197 Sd: sd, 198 Parameters: partition.Parameters, 199 Privileges: privileges, 200 } 201 return ht 202 } 203 204 func SDLocalToHive(sd *metastore.StorageDescriptor) *hive_metastore.StorageDescriptor { 205 if sd == nil { 206 return nil 207 } 208 return &hive_metastore.StorageDescriptor{ 209 Cols: columnsLocalToHive(sd.Cols), 210 Location: sd.Location, 211 InputFormat: sd.InputFormat, 212 OutputFormat: sd.OutputFormat, 213 Compressed: sd.Compressed, 214 NumBuckets: int32(sd.NumBuckets), 215 SerdeInfo: serDeLocalToHive(sd.SerdeInfo), 216 BucketCols: sd.BucketCols, 217 SortCols: sortColumnsLocalToHive(sd.SortCols), 218 Parameters: sd.Parameters, 219 SkewedInfo: skewedLocalToHive(sd.SkewedInfo), 220 StoredAsSubDirectories: sd.StoredAsSubDirectories, 221 } 222 } 223 224 func SDHiveToLocal(sd *hive_metastore.StorageDescriptor) *metastore.StorageDescriptor { 225 if sd == nil { 226 return nil 227 } 228 return &metastore.StorageDescriptor{ 229 Cols: columnsHiveToLocal(sd.Cols), 230 Location: sd.Location, 231 InputFormat: sd.InputFormat, 232 OutputFormat: sd.OutputFormat, 233 Compressed: sd.Compressed, 234 NumBuckets: int(sd.NumBuckets), 235 SerdeInfo: serDeHiveToLocal(sd.SerdeInfo), 236 BucketCols: sd.BucketCols, 237 SortCols: sortColumnsHiveToLocal(sd.SortCols), 238 Parameters: sd.Parameters, 239 SkewedInfo: skewedHiveToLocal(sd.SkewedInfo), 240 StoredAsSubDirectories: sd.StoredAsSubDirectories, 241 } 242 } 243 func PartitionsLocalToHive(partitions []*metastore.Partition) []*hive_metastore.Partition { 244 gluePartitions := make([]*hive_metastore.Partition, len(partitions)) 245 for i, partition := range partitions { 246 gluePartitions[i] = PartitionLocalToHive(partition) 247 } 248 return gluePartitions 249 }