Polars database reader/writer record file metadata, so SQL lineage is missing
I maintainer di solito rispondono entro 2 giorni
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Related: #1720
PolarsDatabaseReader and PolarsDatabaseWriter (in both polars_post_1_0_0_extensions.py and polars_pre_1_0_0_extension.py) describe database I/O with get_file_and_dataframe_metadata. They pass the SQL query or table name in where a file path is expected:
# PolarsDatabaseReader.load_data
metadata = utils.get_file_and_dataframe_metadata(self.query, df)
# PolarsDatabaseWriter.save_data
return utils.get_file_and_dataframe_metadata(self.table_name, data)
This happens whatever connection is passed, including a SQLAlchemy Engine.
Effects
- The metadata has no
sql_metadatablock. So theOpenLineageAdaptercan't identify the tables, andsql_dataset_identity="datasource"(from #1720) resolves nothing:sql_datasets()returnsSQL datasource is unknown; no dataset emitted. - Lineage treats database I/O as filesystem I/O:
- a read becomes an input dataset named after the node (e.g.
orders_df), withstorageLayer="FileSystem"and the SQL text as itsdataSourceURI; - a write becomes an output dataset named after the table, also marked
FileSystem; - no
sqljob facet is emitted.
- a read becomes an input dataset named after the node (e.g.
file_metadatacarries meaningless values, e.g.path: "SELECT * FROM orders",scheme: "", and a note that the file does not exist.
Reproduction
import polars as pl
from sqlalchemy import create_engine
from hamilton.plugins.polars_post_1_0_0_extensions import PolarsDatabaseReader
engine = create_engine("sqlite:///a.db") # with a table `orders`
df, md = PolarsDatabaseReader(query="SELECT * FROM orders", connection=engine).load_data(pl.DataFrame)
print(sorted(md)) # ['dataframe_metadata', 'file_metadata']
print(md["file_metadata"]["path"]) # 'SELECT * FROM orders'
Proposed fix
- In both Polars database classes, record
get_sql_metadata(query_or_table, results, db_connection=self.connection, operation="read" | "write")plusget_dataframe_metadata, asPandasSqlReaderandPandasSqlWriterdo. SQLAlchemy URLs, Engines and Connections, andsqlite3connections, then get full datasource identity. - Extend
get_sql_sourceto recognise the other connections Polars accepts (ADBC connections, connectorx URI strings, cursors). Until then these are left out of lineage with a note, which is safe but gives no lineage. - Add Polars read and write tests against SQLite, mirroring the pandas SQL lineage tests.
Compatibility
Metadata for Polars database I/O changes from file_metadata to sql_metadata. Default-mode ("legacy") OpenLineage output changes with it: the fake filesystem datasets are replaced by the legacy SQL datasets. Anyone consuming file_metadata from these classes would be affected, so this probably deserves a changelog entry.
- Lingua principale
- Jupyter Notebook
- Stelle
- 2.6k
- Fork
- 218
- Merge medio
- 2g 1m
- PR unite (30g)
- 17
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/hamilton
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 2 giorni
-
Engine crashes when client sends nan or inf float to UIForse di nuovo libera @Exudev l’ha presa 234 giorni fa e non c’è nessuna pull request aperta. Apertabug SDK
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
apache/hamilton#1458 · 5 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
More detailed type annotations in graph visualizationsForse di nuovo libera @Nishant-Manocha l’ha presa 369 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
apache/hamilton#1383 · 4 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Documentation: add explainer for FastAPIForse di nuovo libera @Aditya-Deshwal23 l’ha presa 188 giorni fa e non c’è nessuna pull request aperta. Apertadocumentation
Difficoltà 2/5 1-2 giorni Idoneità per principianti 65/100
apache/hamilton#1304 · 5 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Link back to github from reference API docsForse già presa @naikvaib l’ha presa 26 giorni fa. Apertadocumentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/hamilton#572 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni