Name | sql-datalineage JSON |
Version |
0.0.14
JSON |
| download |
home_page | None |
Summary | A project to build and visualize data lineage from SQL written in python. It supports column level lineage and can combine with metadata retriever for better result. |
upload_time | 2024-12-07 06:31:55 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT |
keywords |
column-level-lineage
data
lineage
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<div align="center">
<br>
<h1>SQL Data Lineage</h1>
<p>
<a href="https://github.com/viplazylmht/sql-datalineage/actions/workflows/python-package.yml">
<img src="https://img.shields.io/github/actions/workflow/status/viplazylmht/sql-datalineage/python-package.yml">
</a>
<a href="https://github.com/viplazylmht/sql-datalineage/actions/workflows/python-publish.yml">
<img src="https://img.shields.io/github/actions/workflow/status/viplazylmht/sql-datalineage/python-publish.yml?label=publish">
</a>
<a href="https://pypi.org/project/sql-datalineage">
<img src="https://img.shields.io/pypi/v/sql-datalineage?color=cyan">
</a>
</p>
</div>
Introducing SQL Data Lineage, a powerful package designed to simplify SQL query analysis. This versatile tool parses data lineage from individual SQL queries or builds comprehensive lineage from multiple queries. It offers both an interactive command-line interface and programmatic integration, making it easy to incorporate into your Python projects.
SQL Data Lineage performs detailed column-level analysis, tracing data flows step-by-step through tables, CTEs, subqueries, and more. It generates user-friendly lineage graphs that clearly show how columns move and transform across SQL components.
You can easily enhance your lineage insights by retrieving and customizing metadata to fit your specific requirements.
We welcome and encourage contributions to the SQL Data Lineage project!
# Installation
```bash
pip install sql-datalineage
```
# Usage
## CLI usage
Show help of CLI commands.
```bash
datalineage --help
```
Generate data lineage of a sql file, output type is mermaid.
```bash
$> datalineage -i docs/example/test-query.sql --schema-path docs/example/test-schema.json -r mermaid
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
graph LR
subgraph 2420861448752 ["Table: catalog.schema1.customer AS customer"]
2420861447168["id"]
2420861446976["name"]
2420861448464["phone"]
2420860590112["address"]
2420861446304["location"]
end
subgraph 2420861448224 ["CTE: cte1 AS t1"]
2420861448848["id"]
2420861449040["name"]
2420861448272["phone"]
2420861449184["address"]
end
2420861447168 --> 2420861448848
2420861446976 --> 2420861449040
2420861448464 --> 2420861448272
2420860590112 --> 2420861449184
....
```
> [!TIP]
> The output of the above command is truncated. You
> can optionally save the command's result to a file
> using the `-o` option.
> ```bash
> datalineage -i /docs/example/test-query.sql --schema-path docs/example/test-schema.json -o docs/example/output.mermaid -r mermaid
> ```
> [!NOTE]
> Currently, the results are generated dynamically, so
> each run will produce different IDs. However, rest
> assured that the lineage remains deterministic.
You can preview the above result using [Mermaid Live Editor](https://mermaid.live/view#pako:eNqdV1Fv2zYQ_iuCgAAdkDoUJVKUHwYEWd_WDWjyMKwqBFqibW2ypErU1sDwf--RslLzQgfD_GSRH8m77767I49h2VUqXIc3N8e6rfU6OObhtun-Lfdy0Hlovyu1lVOjP6m2UoMazGgequbvPDydgtPNTd7uBtnvg18_5e04beYPmlAieJQkImU0-JyHT3LTqHVQSi2bbrcay706yGhVTqPuDmoI7h-D5X8efsnblw3SiAtYX1fuMM9SDsOtPCh3QiQ8gYl-37WXM4RlJIoozMiqGtQ4ou1iYlY1HRhYd62dBIfz1usTpYnx6eHpA3ikVWSs1xGyQyQ-uzOSEL_dNKUeu82SSCTIbmuaQ1Hw_v3PgXM4IssFGDMQaWgHMAdxh3YAq67Qk0T8jZBPoxqKSh06u6wuR8Peq0FEQUITH5mM-snMeGTUIXd4PKbCTzJPY7Ni0WDxV7dBS1Ornl4OqtVv6yOLU_6iD33oC9CIlcj8Fx0sBPG5xq2MX7sGxFOfa2lmHUCuxcwuID7XXBEZit0IG8sQ2UgCYCMi3QWYoxH7LsAYjYLwA7DYfkVlKXGSkFqGqUtKzLzFIxNE-HUjmF831AbJpxtu89nPqWHQddgYhKKMOAXTULQxgHEUdgSgL2FbGERx5YmfU0ZNlv__Yp2JNLH8uXzDMKE-McOEEN58zIC4-EqxhlXcltb_VKwZiYXVyaNqVAkd7rGUjRwCAH6d1PDs7kxSW2oP8ltx9uEyoPN8ob71nwH08f6PdwsLq7r6CeBfgGj4BQ4e0XMZiwXgLSJECGv32dB1UHwtCMr5mT4s7zM_iG7CCSEZ98qYRYImV3ojI8y22u3UNIUnZeYUM5R50sYGEeY8bM5dCtUDcAg1SwTgTmMzXeoCcHYR9U5nB-spcm6J6MPvvz3cP73T0cq4eQvVxP7xRHZe95alrwCQ128DgMdLacHhwKfvbAtFRQuVAAcwpwCqETG9UlZFxi_Tpegm3U-6cCVBCff0Yxal1FtXWcRiv_CSNPZfyhiD3IivCY_BlYdT4RWeXTnX8WvCMzJzg2EcQhmEZAOuoUxCAHbZyqzMkHTjy2Zow_8DsLiLBHEBOHuMsgvtYHtDeBtCSTrIuoKb_TFvA7iva6jgar66l88bNfRTCxf4vD0BWE66e3xuy3Cth0ndhkM37fbLx9RXUqtfagk6OSyDvWz_7Dr43MpmfAF9qGrdDS-DTSfhwRCuj6F-7s0jY1ePGo4ru3Zb78z4NDQwvNe6H9d3d2Z6tav1ftqsyu5wN9aVeYXs_8n4HadcSBoruCBIFsdVuYHauaVJtK1SElEJT5HbUNnzP84vGvuwOX0HCJN90Q), here is the result:

## Interactive usage
You can import datalineage into your project and generate the lineage tree directly.
```python
>>> from datalineage.lineage import lineage
>>> sql = """select
id, name, phone, address
from (
select id, name, phone, address,
row_number() over(partition by phone order by name) as rn
from `catalog.schema1.customer`) data
where data.rn = 1
"""
>>> schema = None # we will infer the schema of table when no schema are provided
>>> dialect = "bigquery"
>>> tree = lineage(sql, dialect, schema)
>>> tree
Node<{"name": "myroot", "expression": "ANCHOR",...
```
You can traversal and print out the lineage tree in this way:
```python
>>> def print_node(node):
>>> print("Node:", node.name)
>>> list(map(lambda c: print("Column:", c.name), node.children))
>>> for node in tree.walk():
... print_node(node)
...
Node: myroot
Node: _output_
Column: id
Column: name
Column: phone
Column: address
Node: data
Column: id
Column: name
Column: phone
Column: address
Column: rn
Node: "catalog"."schema1"."customer" AS "customer"
Column: id
Column: name
Column: phone
Column: address
```
Or you can render the tree to a format you like, for example, mermaid.
```python
>>> from datalineage.renderer import MermaidRenderer
>>> renderer = MermaidRenderer()
>>> print(renderer.render(tree))
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
graph LR
subgraph 1434247920720 ["Table: catalog.schema1.customer AS customer"]
1434247920624["id"]
1434247921104["name"]
1434247919568["phone"]
1434247921200["address"]
end
subgraph 1434247919280 ["Subquery: data"]
1434247920816["id"]
1434247919856["name"]
1434247917696["phone"]
1434247917744["address"]
1434247918224["rn"]
end
1434247920624 --> 1434247920816
1434247921104 --> 1434247919856
1434247919568 --> 1434247917696
1434247921200 --> 1434247917744
1434247919568 --> 1434247918224
1434247921104 --> 1434247918224
subgraph 1434247918032 ["Select: _output_"]
1434247921392["id"]
1434247921344["name"]
1434247921152["phone"]
1434247920912["address"]
end
1434247920816 --> 1434247921392
1434247919856 --> 1434247921344
1434247917696 --> 1434247921152
1434247917744 --> 1434247920912
>>>
```
> [!TIP]
> You can render to json format using `datalineage.renderer.JsonRenderer` class, or customize your own renderer.
>
> Here is the flow-chart of the above result:
> ```mermaid
> %%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
> graph LR
> subgraph 1434247920720 ["Table: catalog.schema1.customer AS customer"]
> 1434247920624["id"]
> 1434247921104["name"]
> 1434247919568["phone"]
> 1434247921200["address"]
> end
>
> subgraph 1434247919280 ["Subquery: data"]
> 1434247920816["id"]
> 1434247919856["name"]
> 1434247917696["phone"]
> 1434247917744["address"]
> 1434247918224["rn"]
> end
> 1434247920624 --> 1434247920816
> 1434247921104 --> 1434247919856
> 1434247919568 --> 1434247917696
> 1434247921200 --> 1434247917744
> 1434247919568 --> 1434247918224
> 1434247921104 --> 1434247918224
>
> subgraph 1434247918032 ["Select: _output_"]
> 1434247921392["id"]
> 1434247921344["name"]
> 1434247921152["phone"]
> 1434247920912["address"]
> end
> 1434247920816 --> 1434247921392
> 1434247919856 --> 1434247921344
> 1434247917696 --> 1434247921152
> 1434247917744 --> 1434247920912
> ```
# Contribution
### Setup Environment
We use [uv](https://github.com/astral-sh/uv) to manage the project. Please follow [the official document](https://docs.astral.sh/uv/getting-started/installation/#installation-methods) to install uv to your environment.
> [!TIP]
> Your environment does not require any python or pip installed, but if you already have pip, you can quickly install uv like this:
>
> ```bash
> pip install uv
> ```
Install pre-commit to your local git hooks.
```bash
make install-pre-commit
```
### Run Lint
```bash
make style
```
### Run Tests
```bash
make test
```
### Run Lint and Tests
```bash
make check
```
### Run from local development
```bash
uv run --no-project -- datalineage --help
```
Raw data
{
"_id": null,
"home_page": null,
"name": "sql-datalineage",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "column-level-lineage, data, lineage",
"author": null,
"author_email": "Duy Ha <viplazylmt@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/f2/30/84c87963f1205e7bb98c369a8366dcef7671a8c210d65d7af7aee51d7f18/sql_datalineage-0.0.14.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n<br>\n<h1>SQL Data Lineage</h1>\n<p>\n <a href=\"https://github.com/viplazylmht/sql-datalineage/actions/workflows/python-package.yml\">\n <img src=\"https://img.shields.io/github/actions/workflow/status/viplazylmht/sql-datalineage/python-package.yml\">\n </a>\n <a href=\"https://github.com/viplazylmht/sql-datalineage/actions/workflows/python-publish.yml\">\n <img src=\"https://img.shields.io/github/actions/workflow/status/viplazylmht/sql-datalineage/python-publish.yml?label=publish\">\n </a>\n <a href=\"https://pypi.org/project/sql-datalineage\">\n <img src=\"https://img.shields.io/pypi/v/sql-datalineage?color=cyan\">\n </a>\n</p>\n</div>\n\nIntroducing SQL Data Lineage, a powerful package designed to simplify SQL query analysis. This versatile tool parses data lineage from individual SQL queries or builds comprehensive lineage from multiple queries. It offers both an interactive command-line interface and programmatic integration, making it easy to incorporate into your Python projects.\n\nSQL Data Lineage performs detailed column-level analysis, tracing data flows step-by-step through tables, CTEs, subqueries, and more. It generates user-friendly lineage graphs that clearly show how columns move and transform across SQL components.\n\nYou can easily enhance your lineage insights by retrieving and customizing metadata to fit your specific requirements.\n\nWe welcome and encourage contributions to the SQL Data Lineage project!\n\n\n# Installation\n```bash\npip install sql-datalineage\n```\n\n# Usage\n\n## CLI usage\n\nShow help of CLI commands.\n```bash\ndatalineage --help\n```\n\nGenerate data lineage of a sql file, output type is mermaid.\n```bash\n$> datalineage -i docs/example/test-query.sql --schema-path docs/example/test-schema.json -r mermaid\n\n%%{init: {\"flowchart\": {\"defaultRenderer\": \"elk\"}} }%%\ngraph LR\nsubgraph 2420861448752 [\"Table: catalog.schema1.customer AS customer\"]\n2420861447168[\"id\"]\n2420861446976[\"name\"]\n2420861448464[\"phone\"]\n2420860590112[\"address\"]\n2420861446304[\"location\"]\nend\n\nsubgraph 2420861448224 [\"CTE: cte1 AS t1\"]\n2420861448848[\"id\"]\n2420861449040[\"name\"]\n2420861448272[\"phone\"]\n2420861449184[\"address\"]\nend\n2420861447168 --> 2420861448848\n2420861446976 --> 2420861449040\n2420861448464 --> 2420861448272\n2420860590112 --> 2420861449184\n\n....\n```\n\n> [!TIP]\n> The output of the above command is truncated. You\n> can optionally save the command's result to a file\n> using the `-o` option.\n> ```bash\n> datalineage -i /docs/example/test-query.sql --schema-path docs/example/test-schema.json -o docs/example/output.mermaid -r mermaid\n> ```\n\n> [!NOTE]\n> Currently, the results are generated dynamically, so\n> each run will produce different IDs. However, rest\n> assured that the lineage remains deterministic.\n\n\nYou can preview the above result using [Mermaid Live Editor](https://mermaid.live/view#pako:eNqdV1Fv2zYQ_iuCgAAdkDoUJVKUHwYEWd_WDWjyMKwqBFqibW2ypErU1sDwf--RslLzQgfD_GSRH8m77767I49h2VUqXIc3N8e6rfU6OObhtun-Lfdy0Hlovyu1lVOjP6m2UoMazGgequbvPDydgtPNTd7uBtnvg18_5e04beYPmlAieJQkImU0-JyHT3LTqHVQSi2bbrcay706yGhVTqPuDmoI7h-D5X8efsnblw3SiAtYX1fuMM9SDsOtPCh3QiQ8gYl-37WXM4RlJIoozMiqGtQ4ou1iYlY1HRhYd62dBIfz1usTpYnx6eHpA3ikVWSs1xGyQyQ-uzOSEL_dNKUeu82SSCTIbmuaQ1Hw_v3PgXM4IssFGDMQaWgHMAdxh3YAq67Qk0T8jZBPoxqKSh06u6wuR8Peq0FEQUITH5mM-snMeGTUIXd4PKbCTzJPY7Ni0WDxV7dBS1Ornl4OqtVv6yOLU_6iD33oC9CIlcj8Fx0sBPG5xq2MX7sGxFOfa2lmHUCuxcwuID7XXBEZit0IG8sQ2UgCYCMi3QWYoxH7LsAYjYLwA7DYfkVlKXGSkFqGqUtKzLzFIxNE-HUjmF831AbJpxtu89nPqWHQddgYhKKMOAXTULQxgHEUdgSgL2FbGERx5YmfU0ZNlv__Yp2JNLH8uXzDMKE-McOEEN58zIC4-EqxhlXcltb_VKwZiYXVyaNqVAkd7rGUjRwCAH6d1PDs7kxSW2oP8ltx9uEyoPN8ob71nwH08f6PdwsLq7r6CeBfgGj4BQ4e0XMZiwXgLSJECGv32dB1UHwtCMr5mT4s7zM_iG7CCSEZ98qYRYImV3ojI8y22u3UNIUnZeYUM5R50sYGEeY8bM5dCtUDcAg1SwTgTmMzXeoCcHYR9U5nB-spcm6J6MPvvz3cP73T0cq4eQvVxP7xRHZe95alrwCQ128DgMdLacHhwKfvbAtFRQuVAAcwpwCqETG9UlZFxi_Tpegm3U-6cCVBCff0Yxal1FtXWcRiv_CSNPZfyhiD3IivCY_BlYdT4RWeXTnX8WvCMzJzg2EcQhmEZAOuoUxCAHbZyqzMkHTjy2Zow_8DsLiLBHEBOHuMsgvtYHtDeBtCSTrIuoKb_TFvA7iva6jgar66l88bNfRTCxf4vD0BWE66e3xuy3Cth0ndhkM37fbLx9RXUqtfagk6OSyDvWz_7Dr43MpmfAF9qGrdDS-DTSfhwRCuj6F-7s0jY1ePGo4ru3Zb78z4NDQwvNe6H9d3d2Z6tav1ftqsyu5wN9aVeYXs_8n4HadcSBoruCBIFsdVuYHauaVJtK1SElEJT5HbUNnzP84vGvuwOX0HCJN90Q), here is the result:\n\n\n\n\n## Interactive usage\n\nYou can import datalineage into your project and generate the lineage tree directly.\n\n```python\n>>> from datalineage.lineage import lineage\n>>> sql = \"\"\"select \n id, name, phone, address\n from (\n select id, name, phone, address,\n row_number() over(partition by phone order by name) as rn \n from `catalog.schema1.customer`) data\n where data.rn = 1\n\"\"\"\n>>> schema = None # we will infer the schema of table when no schema are provided\n>>> dialect = \"bigquery\"\n>>> tree = lineage(sql, dialect, schema)\n>>> tree\nNode<{\"name\": \"myroot\", \"expression\": \"ANCHOR\",...\n```\n\nYou can traversal and print out the lineage tree in this way:\n```python\n>>> def print_node(node):\n>>> print(\"Node:\", node.name)\n>>> list(map(lambda c: print(\"Column:\", c.name), node.children))\n>>> for node in tree.walk():\n... print_node(node)\n... \nNode: myroot\nNode: _output_\nColumn: id\nColumn: name\nColumn: phone\nColumn: address\nNode: data\nColumn: id\nColumn: name\nColumn: phone\nColumn: address\nColumn: rn\nNode: \"catalog\".\"schema1\".\"customer\" AS \"customer\"\nColumn: id\nColumn: name\nColumn: phone\nColumn: address\n```\n\nOr you can render the tree to a format you like, for example, mermaid.\n```python\n>>> from datalineage.renderer import MermaidRenderer\n>>> renderer = MermaidRenderer()\n>>> print(renderer.render(tree))\n%%{init: {\"flowchart\": {\"defaultRenderer\": \"elk\"}} }%%\ngraph LR\nsubgraph 1434247920720 [\"Table: catalog.schema1.customer AS customer\"]\n1434247920624[\"id\"]\n1434247921104[\"name\"]\n1434247919568[\"phone\"]\n1434247921200[\"address\"]\nend\n\nsubgraph 1434247919280 [\"Subquery: data\"]\n1434247920816[\"id\"]\n1434247919856[\"name\"]\n1434247917696[\"phone\"]\n1434247917744[\"address\"]\n1434247918224[\"rn\"]\nend\n1434247920624 --> 1434247920816\n1434247921104 --> 1434247919856\n1434247919568 --> 1434247917696\n1434247921200 --> 1434247917744\n1434247919568 --> 1434247918224\n1434247921104 --> 1434247918224\n\nsubgraph 1434247918032 [\"Select: _output_\"]\n1434247921392[\"id\"]\n1434247921344[\"name\"]\n1434247921152[\"phone\"]\n1434247920912[\"address\"]\nend\n1434247920816 --> 1434247921392\n1434247919856 --> 1434247921344\n1434247917696 --> 1434247921152\n1434247917744 --> 1434247920912\n>>>\n```\n> [!TIP]\n> You can render to json format using `datalineage.renderer.JsonRenderer` class, or customize your own renderer.\n> \n> Here is the flow-chart of the above result:\n> ```mermaid\n> %%{init: {\"flowchart\": {\"defaultRenderer\": \"elk\"}} }%%\n> graph LR\n> subgraph 1434247920720 [\"Table: catalog.schema1.customer AS customer\"]\n> 1434247920624[\"id\"]\n> 1434247921104[\"name\"]\n> 1434247919568[\"phone\"]\n> 1434247921200[\"address\"]\n> end\n> \n> subgraph 1434247919280 [\"Subquery: data\"]\n> 1434247920816[\"id\"]\n> 1434247919856[\"name\"]\n> 1434247917696[\"phone\"]\n> 1434247917744[\"address\"]\n> 1434247918224[\"rn\"]\n> end\n> 1434247920624 --> 1434247920816\n> 1434247921104 --> 1434247919856\n> 1434247919568 --> 1434247917696\n> 1434247921200 --> 1434247917744\n> 1434247919568 --> 1434247918224\n> 1434247921104 --> 1434247918224\n> \n> subgraph 1434247918032 [\"Select: _output_\"]\n> 1434247921392[\"id\"]\n> 1434247921344[\"name\"]\n> 1434247921152[\"phone\"]\n> 1434247920912[\"address\"]\n> end\n> 1434247920816 --> 1434247921392\n> 1434247919856 --> 1434247921344\n> 1434247917696 --> 1434247921152\n> 1434247917744 --> 1434247920912\n> ```\n\n\n# Contribution\n\n### Setup Environment\nWe use [uv](https://github.com/astral-sh/uv) to manage the project. Please follow [the official document](https://docs.astral.sh/uv/getting-started/installation/#installation-methods) to install uv to your environment. \n\n\n> [!TIP]\n> Your environment does not require any python or pip installed, but if you already have pip, you can quickly install uv like this: \n> \n> ```bash\n> pip install uv\n> ```\n\n\nInstall pre-commit to your local git hooks.\n```bash\nmake install-pre-commit\n```\n\n### Run Lint\n```bash\nmake style\n```\n\n### Run Tests\n```bash\nmake test\n```\n\n\n### Run Lint and Tests\n```bash\nmake check\n```\n\n### Run from local development\n```bash\nuv run --no-project -- datalineage --help\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A project to build and visualize data lineage from SQL written in python. It supports column level lineage and can combine with metadata retriever for better result.",
"version": "0.0.14",
"project_urls": {
"Homepage": "https://github.com/viplazylmht/sql-datalineage",
"Issues": "https://github.com/viplazylmht/sql-datalineage/issues",
"Source": "https://github.com/viplazylmht/sql-datalineage"
},
"split_keywords": [
"column-level-lineage",
" data",
" lineage"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "16366ec7e341577887c8df6535104990a5dc28515a6b875bbd12702bcd7a906c",
"md5": "3c952eee47d771a6d0934cd98a948810",
"sha256": "7572e35bac76e6a77316f45b7e3e79ef19af275835d10319177b73178b314dc0"
},
"downloads": -1,
"filename": "sql_datalineage-0.0.14-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3c952eee47d771a6d0934cd98a948810",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 16365,
"upload_time": "2024-12-07T06:31:53",
"upload_time_iso_8601": "2024-12-07T06:31:53.782732Z",
"url": "https://files.pythonhosted.org/packages/16/36/6ec7e341577887c8df6535104990a5dc28515a6b875bbd12702bcd7a906c/sql_datalineage-0.0.14-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f23084c87963f1205e7bb98c369a8366dcef7671a8c210d65d7af7aee51d7f18",
"md5": "7ea65dee94563674f2699729d9df8c61",
"sha256": "2a0e291423ecea13117d4fbb8ec0478fbe5f22862b8d0da58eb4ed66a265243b"
},
"downloads": -1,
"filename": "sql_datalineage-0.0.14.tar.gz",
"has_sig": false,
"md5_digest": "7ea65dee94563674f2699729d9df8c61",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 56512,
"upload_time": "2024-12-07T06:31:55",
"upload_time_iso_8601": "2024-12-07T06:31:55.460726Z",
"url": "https://files.pythonhosted.org/packages/f2/30/84c87963f1205e7bb98c369a8366dcef7671a8c210d65d7af7aee51d7f18/sql_datalineage-0.0.14.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-07 06:31:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "viplazylmht",
"github_project": "sql-datalineage",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "sql-datalineage"
}