Source code for ads.feature_store.query.join

#!/usr/bin/env python
# -*- coding: utf-8; -*-

# Copyright (c) 2023 Oracle and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/

import copy
from typing import List

from ads.feature_store.common.enums import JoinType
from ads.jobs.builders.base import Builder


[docs] class Join(Builder): """ The Join class is used to join two tables or datasets. Args ---- query: The table or dataset to join. left_on: A list of column names from the left table to join on. right_on: A list of column names from the right table to join on. join_type (JoinType): The type of join to perform. Defaults to INNER join. Methods ------- with_query(query: "Query") -> "Join": Sets the query attribute. with_left_on(left_on: List[str]) -> "Join": Sets the left_on attribute. with_right_on(right_on: List[str]) -> "Join": Sets the right_on attribute. with_join_type(join_type: JoinType) -> "Join": Sets the join_type attribute. to_dict() -> dict: Returns the Join as a dictionary. """ CONST_QUERY = "query" CONST_LEFT_ON = "leftOn" CONST_RIGHT_ON = "rightOn" CONST_JOIN_TYPE = "joinType" CONST_ON = "on" def __init__( self, query, on, left_on, right_on, join_type: JoinType = JoinType.INNER ): super().__init__() self.with_on(on) self.with_sub_query(query) self.with_left_on(left_on) self.with_right_on(right_on) self.with_join_type(join_type) @property def sub_query(self) -> "Query": return self.get_spec(self.CONST_QUERY) @sub_query.setter def sub_query(self, value: "Query"): self.with_sub_query(value)
[docs] def with_sub_query(self, sub_query: "Query") -> "Join": """Sets the query. Parameters ---------- sub_query: Query The query . Returns ------- Join The Join instance (self) """ return self.set_spec(self.CONST_QUERY, sub_query)
@property def on(self) -> "List[str]": return self.get_spec(self.CONST_ON)
[docs] def with_on(self, on: List[str] = []): """Sets the query. Parameters ---------- on: List[str] The on clause . Returns ------- Join The Join instance (self) """ return self.set_spec(self.CONST_ON, on)
@property def left_on(self) -> list: return self.get_spec(self.CONST_LEFT_ON) @left_on.setter def left_on(self, features: List[str]): self.with_left_on(features)
[docs] def with_left_on(self, left_on: List[str]) -> "Join": """Sets the left feature details. Parameters ---------- left_on: List[str] The left feature to join on Returns ------- Join The Join instance (self) """ return self.set_spec(self.CONST_LEFT_ON, left_on)
@property def right_on(self) -> list: return self.get_spec(self.CONST_RIGHT_ON) @right_on.setter def right_on(self, features: List[str]): self.with_left_on(features)
[docs] def with_right_on(self, right_on: List[str]) -> "Join": """Sets the left feature details. Parameters ---------- right_on: List[str] The right feature to join on Returns ------- Join The Join instance (self) """ return self.set_spec(self.CONST_RIGHT_ON, right_on)
@property def join_type(self) -> list: return self.get_spec(self.CONST_JOIN_TYPE) @join_type.setter def join_type(self, join_type: JoinType): self.with_join_type(join_type)
[docs] def with_join_type(self, join_type: JoinType) -> "Join": """Sets the left feature details. Parameters ---------- join_type: JoinType The join type: Defaults to INNER Returns ------- Join The Join instance (self) """ return self.set_spec(self.CONST_JOIN_TYPE, join_type.value)
[docs] def to_dict(self): """Returns the Join as dictionary.""" query = copy.deepcopy(self._spec) return query