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  }