Skip to content

Commit

Permalink
fix(ingestion): add output converters for ODBC unsuported datatype in… (
Browse files Browse the repository at this point in the history
#6134)

Co-authored-by: Pavel Klammert | LOGEX <Pavel.Klammert@logex.com>
  • Loading branch information
LavinaVRovine and Pavel Klammert | LOGEX authored Nov 15, 2022
1 parent fc26cf3 commit 9862eff
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions metadata-ingestion/src/datahub/ingestion/source/sql/mssql.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,22 @@ def __init__(self, config: SQLServerConfig, ctx: PipelineContext):
for inspector in self.get_inspectors():
db_name: str = self.get_db_name(inspector)
with inspector.engine.connect() as conn:
if self.config.use_odbc:
self._add_output_converters(conn)
self._populate_table_descriptions(conn, db_name)
self._populate_column_descriptions(conn, db_name)

@staticmethod
def _add_output_converters(conn: Connection) -> None:
def handle_sql_variant_as_string(value):
return value.decode('utf-16le')
# see https://stackoverflow.com/questions/45677374/pandas-pyodbc-odbc-sql-type-150-is-not-yet-supported
# and https://stackoverflow.com/questions/11671170/adding-output-converter-to-pyodbc-connection-in-sqlalchemy
try:
conn.connection.add_output_converter(-150, handle_sql_variant_as_string)
except AttributeError as e:
logger.debug(f"Failed to mount output converter for MSSQL data type -150 due to {e}")

def _populate_table_descriptions(self, conn: Connection, db_name: str) -> None:
# see https://stackoverflow.com/questions/5953330/how-do-i-map-the-id-in-sys-extended-properties-to-an-object-name
# also see https://www.mssqltips.com/sqlservertip/5384/working-with-sql-server-extended-properties/
Expand Down

0 comments on commit 9862eff

Please sign in to comment.