mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-22 07:19:59 +00:00
* tmp pass dialect when building ORM * Format
This commit is contained in:
parent
49c089e4a3
commit
792be37cb2
@ -16,9 +16,6 @@ from sqlalchemy import column
|
|||||||
from sqlalchemy.ext.compiler import compiles
|
from sqlalchemy.ext.compiler import compiles
|
||||||
from sqlalchemy.sql.functions import FunctionElement
|
from sqlalchemy.sql.functions import FunctionElement
|
||||||
|
|
||||||
from metadata.generated.schema.entity.services.databaseService import (
|
|
||||||
DatabaseServiceType,
|
|
||||||
)
|
|
||||||
from metadata.orm_profiler.metrics.core import CACHE, StaticMetric, _label
|
from metadata.orm_profiler.metrics.core import CACHE, StaticMetric, _label
|
||||||
from metadata.orm_profiler.orm.registry import Dialects, is_quantifiable
|
from metadata.orm_profiler.orm.registry import Dialects, is_quantifiable
|
||||||
from metadata.orm_profiler.utils import logger
|
from metadata.orm_profiler.utils import logger
|
||||||
|
@ -14,14 +14,14 @@ Converter logic to transform an OpenMetadata Table Entity
|
|||||||
to an SQLAlchemy ORM class.
|
to an SQLAlchemy ORM class.
|
||||||
"""
|
"""
|
||||||
from functools import singledispatch
|
from functools import singledispatch
|
||||||
from typing import Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from sqlalchemy.orm import DeclarativeMeta, declarative_base
|
from sqlalchemy.orm import DeclarativeMeta, declarative_base
|
||||||
|
|
||||||
from metadata.generated.schema.entity.data.database import Database
|
from metadata.generated.schema.entity.data.database import Database
|
||||||
from metadata.generated.schema.entity.data.table import Column, DataType, Table
|
from metadata.generated.schema.entity.data.table import Column, DataType, Table
|
||||||
from metadata.orm_profiler.orm.registry import CustomTypes
|
from metadata.orm_profiler.orm.registry import CustomTypes, Dialects
|
||||||
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
@ -84,7 +84,9 @@ def build_orm_col(idx: int, col: Column) -> sqlalchemy.Column:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def ometa_to_orm(table: Table, database: Union[Database, str]) -> DeclarativeMeta:
|
def ometa_to_orm(
|
||||||
|
table: Table, database: Union[Database, str], dialect: Optional[str] = None
|
||||||
|
) -> DeclarativeMeta:
|
||||||
"""
|
"""
|
||||||
Given an OpenMetadata instance, prepare
|
Given an OpenMetadata instance, prepare
|
||||||
the SQLAlchemy DeclarativeMeta class
|
the SQLAlchemy DeclarativeMeta class
|
||||||
@ -93,6 +95,7 @@ def ometa_to_orm(table: Table, database: Union[Database, str]) -> DeclarativeMet
|
|||||||
We are building the class dynamically using
|
We are building the class dynamically using
|
||||||
`type` and passing SQLAlchemy `Base` class
|
`type` and passing SQLAlchemy `Base` class
|
||||||
as the bases tuple for inheritance.
|
as the bases tuple for inheritance.
|
||||||
|
TODO: Remove the dialect once we solve the hierarchy service.db.schema.table. Check #3529
|
||||||
"""
|
"""
|
||||||
|
|
||||||
cols = {
|
cols = {
|
||||||
@ -107,7 +110,7 @@ def ometa_to_orm(table: Table, database: Union[Database, str]) -> DeclarativeMet
|
|||||||
{
|
{
|
||||||
"__tablename__": str(table.name.__root__),
|
"__tablename__": str(table.name.__root__),
|
||||||
"__table_args__": {
|
"__table_args__": {
|
||||||
"schema": get_db_name(database),
|
"schema": get_db_name(database, dialect),
|
||||||
"extend_existing": True, # Recreates the table ORM object if it already exists. Useful for testing
|
"extend_existing": True, # Recreates the table ORM object if it already exists. Useful for testing
|
||||||
},
|
},
|
||||||
**cols,
|
**cols,
|
||||||
@ -121,7 +124,7 @@ def ometa_to_orm(table: Table, database: Union[Database, str]) -> DeclarativeMet
|
|||||||
|
|
||||||
|
|
||||||
@singledispatch
|
@singledispatch
|
||||||
def get_db_name(arg) -> str:
|
def get_db_name(arg, *_) -> str:
|
||||||
"""
|
"""
|
||||||
Return the database name to pass the table schema info
|
Return the database name to pass the table schema info
|
||||||
to the ORM object.
|
to the ORM object.
|
||||||
@ -133,7 +136,7 @@ def get_db_name(arg) -> str:
|
|||||||
|
|
||||||
|
|
||||||
@get_db_name.register
|
@get_db_name.register
|
||||||
def _(arg: str) -> str:
|
def _(arg: str, *_) -> str:
|
||||||
"""
|
"""
|
||||||
Return string as is
|
Return string as is
|
||||||
|
|
||||||
@ -144,11 +147,17 @@ def _(arg: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
@get_db_name.register
|
@get_db_name.register
|
||||||
def _(arg: Database) -> str:
|
def _(arg: Database, dialect: Optional[str] = None) -> str:
|
||||||
"""
|
"""
|
||||||
Get the db name from the database entity
|
Get the db name from the database entity
|
||||||
|
|
||||||
:param arg: database
|
:param arg: database
|
||||||
|
:param dialect: Database dialect. Just for snowflake cleaning
|
||||||
:return: db name
|
:return: db name
|
||||||
"""
|
"""
|
||||||
return str(arg.name.__root__)
|
name = str(arg.name.__root__)
|
||||||
|
|
||||||
|
if dialect == Dialects.Snowflake:
|
||||||
|
return "_".join(name.split("_")[1:])
|
||||||
|
|
||||||
|
return name
|
||||||
|
@ -15,9 +15,6 @@ Define Concat function
|
|||||||
from sqlalchemy.ext.compiler import compiles
|
from sqlalchemy.ext.compiler import compiles
|
||||||
from sqlalchemy.sql.functions import FunctionElement
|
from sqlalchemy.sql.functions import FunctionElement
|
||||||
|
|
||||||
from metadata.generated.schema.entity.services.databaseService import (
|
|
||||||
DatabaseServiceType,
|
|
||||||
)
|
|
||||||
from metadata.orm_profiler.metrics.core import CACHE
|
from metadata.orm_profiler.metrics.core import CACHE
|
||||||
from metadata.orm_profiler.orm.registry import Dialects
|
from metadata.orm_profiler.orm.registry import Dialects
|
||||||
from metadata.orm_profiler.utils import logger
|
from metadata.orm_profiler.utils import logger
|
||||||
|
@ -19,9 +19,6 @@ data.
|
|||||||
from sqlalchemy.ext.compiler import compiles
|
from sqlalchemy.ext.compiler import compiles
|
||||||
from sqlalchemy.sql.functions import FunctionElement
|
from sqlalchemy.sql.functions import FunctionElement
|
||||||
|
|
||||||
from metadata.generated.schema.entity.services.databaseService import (
|
|
||||||
DatabaseServiceType,
|
|
||||||
)
|
|
||||||
from metadata.orm_profiler.metrics.core import CACHE
|
from metadata.orm_profiler.metrics.core import CACHE
|
||||||
from metadata.orm_profiler.orm.registry import Dialects
|
from metadata.orm_profiler.orm.registry import Dialects
|
||||||
from metadata.orm_profiler.utils import logger
|
from metadata.orm_profiler.utils import logger
|
||||||
|
@ -466,7 +466,9 @@ class OrmProfilerProcessor(Processor[Table]):
|
|||||||
database = self.metadata.get_by_id(
|
database = self.metadata.get_by_id(
|
||||||
entity=Database, entity_id=record.database.id
|
entity=Database, entity_id=record.database.id
|
||||||
)
|
)
|
||||||
orm_table = ometa_to_orm(table=record, database=database)
|
orm_table = ometa_to_orm(
|
||||||
|
table=record, database=database, dialect=self.session.bind.dialect.name
|
||||||
|
)
|
||||||
|
|
||||||
entity_profile = self.profile_entity(orm_table, record)
|
entity_profile = self.profile_entity(orm_table, record)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user