%PDF- %PDF-
Direktori : /backups/router/usr/local/lib/python3.11/site-packages/duckdb/experimental/spark/sql/ |
Current File : //backups/router/usr/local/lib/python3.11/site-packages/duckdb/experimental/spark/sql/catalog.py |
from typing import List, NamedTuple, Optional from .session import SparkSession class Database(NamedTuple): name: str description: Optional[str] locationUri: str class Table(NamedTuple): name: str database: Optional[str] description: Optional[str] tableType: str isTemporary: bool class Column(NamedTuple): name: str description: Optional[str] dataType: str nullable: bool isPartition: bool isBucket: bool class Function(NamedTuple): name: str description: Optional[str] className: str isTemporary: bool class Catalog: def __init__(self, session: SparkSession): self._session = session def listDatabases(self) -> List[Database]: res = self._session.conn.sql('select database_name from duckdb_databases()').fetchall() def transform_to_database(x) -> Database: return Database(name=x[0], description=None, locationUri='') databases = [transform_to_database(x) for x in res] return databases def listTables(self) -> List[Table]: res = self._session.conn.sql('select table_name, database_name, sql, temporary from duckdb_tables()').fetchall() def transform_to_table(x) -> Table: return Table(name=x[0], database=x[1], description=x[2], tableType='', isTemporary=x[3]) tables = [transform_to_table(x) for x in res] return tables def listColumns(self, tableName: str, dbName: Optional[str] = None) -> List[Column]: query = f""" select column_name, data_type, is_nullable from duckdb_columns() where table_name = '{tableName}' """ if dbName: query += f" and database_name = '{dbName}'" res = self._session.conn.sql(query).fetchall() def transform_to_column(x) -> Column: return Column(name=x[0], description=None, dataType=x[1], nullable=x[2], isPartition=False, isBucket=False) columns = [transform_to_column(x) for x in res] return columns def listFunctions(self, dbName: Optional[str] = None) -> List[Function]: raise NotImplementedError def setCurrentDatabase(self, dbName: str) -> None: raise NotImplementedError __all__ = ["Catalog", "Table", "Column", "Function", "Database"]