MINOR: [SAP ERP Connector] Added column dtype displaynames and precision/scale values (#17240)

This commit is contained in:
Onkar Ravgan 2024-08-01 12:49:34 +05:30 committed by GitHub
parent 5100f46db3
commit fe7922c13c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 34 additions and 21 deletions

View File

@ -8,7 +8,7 @@ source:
apiKey: api_key apiKey: api_key
databaseName: databaseName databaseName: databaseName
databaseSchema: databaseSchema databaseSchema: databaseSchema
paginationLimit: 10 paginationLimit: 100
sourceConfig: sourceConfig:
config: config:
type: DatabaseMetadata type: DatabaseMetadata

View File

@ -59,7 +59,7 @@ class SapErpClient:
api_version="v1", api_version="v1",
allow_redirects=True, allow_redirects=True,
retry_codes=[500, 504], retry_codes=[500, 504],
retry_wait=5, retry_wait=2,
verify=get_verify_ssl(config.sslConfig), verify=get_verify_ssl(config.sslConfig),
) )
self.client = REST(client_config) self.client = REST(client_config)

View File

@ -12,7 +12,7 @@
SAP ERP source module SAP ERP source module
""" """
import traceback import traceback
from typing import Iterable, List, Optional from typing import Iterable, List, Optional, Tuple
from metadata.generated.schema.api.data.createTable import CreateTableRequest from metadata.generated.schema.api.data.createTable import CreateTableRequest
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
@ -127,23 +127,20 @@ class SaperpSource(CommonDbSourceService):
) )
def _check_col_length( # pylint: disable=arguments-differ def _check_col_length( # pylint: disable=arguments-differ
self, datatype: str, col_length: Optional[str] self, datatype: str, col_length: Optional[str], col_decimals: Optional[str]
) -> Optional[int]: ) -> Tuple[Optional[int], Optional[int]]:
""" """
return the column length for the dataLength attribute return the column length for the dataLength attribute
""" """
try: try:
if datatype and datatype.upper() in { return (
"CHAR", int(col_length) if col_length else None,
"VARCHAR", int(col_decimals) if col_decimals else None,
"BINARY", )
"VARBINARY",
}:
return int(col_length) if col_length else None
except Exception as exc: except Exception as exc:
logger.debug(traceback.format_exc()) logger.debug(traceback.format_exc())
logger.warning(f"Failed to fetch column length: {exc}") logger.warning(f"Failed to fetch column length: {exc}")
return None return None, None
def _get_table_constraints( def _get_table_constraints(
self, columns: Optional[List[Column]] self, columns: Optional[List[Column]]
@ -190,14 +187,21 @@ class SaperpSource(CommonDbSourceService):
return Constraint.NOT_NULL if column.notnull == "X" else Constraint.NULL return Constraint.NOT_NULL if column.notnull == "X" else Constraint.NULL
def _get_display_datatype( # pylint: disable=arguments-differ def _get_display_datatype( # pylint: disable=arguments-differ
self, column_type: str, col_data_length: Optional[int] self,
column_type: str,
col_data_length: Optional[int],
decimals: Optional[int],
sap_column_type: Optional[str],
) -> str: ) -> str:
""" """
Method to get the display datatype Method to get the display datatype
""" """
column_type_name = sap_column_type if sap_column_type else column_type
if col_data_length and decimals:
return f"{column_type_name}({str(col_data_length)},{str(decimals)})"
if col_data_length: if col_data_length:
return f"{column_type}({str(col_data_length)})" return f"{column_type_name}({str(col_data_length)})"
return column_type return column_type_name
def get_columns_and_constraints( # pylint: disable=arguments-differ def get_columns_and_constraints( # pylint: disable=arguments-differ
self, table_name: str self, table_name: str
@ -211,8 +215,10 @@ class SaperpSource(CommonDbSourceService):
for sap_column in sap_columns or []: for sap_column in sap_columns or []:
try: try:
column_type = ColumnTypeParser.get_column_type(sap_column.datatype) column_type = ColumnTypeParser.get_column_type(sap_column.datatype)
col_data_length = self._check_col_length( col_data_length, col_decimal_length = self._check_col_length(
datatype=column_type, col_length=sap_column.leng datatype=column_type,
col_length=sap_column.leng,
col_decimals=sap_column.decimals,
) )
column_name = ( column_name = (
f"{sap_column.fieldname}({sap_column.precfield})" f"{sap_column.fieldname}({sap_column.precfield})"
@ -226,7 +232,10 @@ class SaperpSource(CommonDbSourceService):
f"Unknown type {repr(sap_column.datatype)}: {sap_column.fieldname}" f"Unknown type {repr(sap_column.datatype)}: {sap_column.fieldname}"
) )
data_type_display = self._get_display_datatype( data_type_display = self._get_display_datatype(
column_type, col_data_length column_type,
col_data_length,
col_decimal_length,
sap_column.datatype,
) )
col_data_length = 1 if col_data_length is None else col_data_length col_data_length = 1 if col_data_length is None else col_data_length
om_column = Column( om_column = Column(
@ -251,6 +260,9 @@ class SaperpSource(CommonDbSourceService):
) )
if column_type == DataType.ARRAY.value: if column_type == DataType.ARRAY.value:
om_column.arrayDataType = DataType.UNKNOWN om_column.arrayDataType = DataType.UNKNOWN
if col_data_length and col_decimal_length:
om_column.precision = col_data_length
om_column.scale = col_decimal_length
om_columns.append(om_column) om_columns.append(om_column)
except Exception as exc: except Exception as exc:
logger.debug(traceback.format_exc()) logger.debug(traceback.format_exc())

View File

@ -45,6 +45,7 @@ class SapErpColumn(BaseModel):
i_ddtext: Optional[str] = None i_ddtext: Optional[str] = None
dd_text: Optional[str] = None dd_text: Optional[str] = None
leng: Optional[str] = None leng: Optional[str] = None
decimals: Optional[str] = None
class SapErpTableList(BaseModel): class SapErpTableList(BaseModel):

View File

@ -152,10 +152,10 @@ EXPECTED_TABLES_AND_COLUMNS = [
displayName="Client", displayName="Client",
dataType="INT", dataType="INT",
arrayDataType=None, arrayDataType=None,
dataLength=1, dataLength=3,
precision=None, precision=None,
scale=None, scale=None,
dataTypeDisplay="INT", dataTypeDisplay="CLNT(3)",
description=Markdown(root="Client"), description=Markdown(root="Client"),
fullyQualifiedName=None, fullyQualifiedName=None,
tags=None, tags=None,