{"id":2599,"date":"2023-01-08T03:06:48","date_gmt":"2023-01-08T08:06:48","guid":{"rendered":"https:\/\/www.dpriver.com\/blog\/?p=2599"},"modified":"2023-01-15T02:50:00","modified_gmt":"2023-01-15T07:50:00","slug":"get-data-lineage-from-an-internal-database-with-sqlflow","status":"publish","type":"post","link":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/","title":{"rendered":"Get data lineage from an internal database with SQLFlow"},"content":{"rendered":"\n<p>Gudu SQLFlow is an automated data lineage tool that specializes in analyzing SQL queries to discover and visualize data lineage that shows the complete data cycle. You can refer to <a href=\"https:\/\/www.dpriver.com\/blog\/2022\/08\/20\/introduction-of-gudu-sqlflow\/\">this blog<\/a> for the introduction.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"451\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1024x451.png\" alt=\"\" class=\"wp-image-2604\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1024x451.png 1024w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-300x132.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-768x338.png 768w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1536x676.png 1536w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image.png 1888w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>                                                                        SQLFLow UI site<\/figcaption><\/figure>\n\n\n\n<p>The <a href=\"https:\/\/sqlflow.gudusoft.com\">SQLFlow UI site<\/a> process thousands of SQL every day and generates data lineages. It is able to read the data source from the online SQL editor, from the SQL scripts uploaded or from client&#8217;s database.<\/p>\n\n\n\n<p class=\"has-text-align-left\">One of the most frequent asked is how to use SQLFlow to retrieve data<strong> from an internal database where no external network is available<\/strong>. This is a typical usage scenario for our industry customers.<\/p>\n\n\n\n<p>One of the most obvious solutions for the above question is apparently to use Gudu SQLFlow On-Premise on your own server. To archive that, you will need to install and deploy the SQLFlow. <\/p>\n\n\n\n<p>However, what if you prefer not to install any third party software on your internal server? <\/p>\n\n\n\n<p>SQLFlow-Ingester is a tool that helps you to extract metadata from various database. Thanks to SQLFlow-Ingester, we can easily export the database metadata file. The metadata file can be used by Dlineage tool  or you can upload the metadata file to <a href=\"https:\/\/sqlflow.gudusoft.com\">SQLFlow UI site<\/a> to generate data lineage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Retrieve metadata file<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">SQLFlow-Ingester script<\/h4>\n\n\n\n<p>Let&#8217;s say your server is on Linux:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo bash exporter.sh \n  -host 127.0.0.1 \n  -port 1521 \n  -db orcl \n  -user your_username\n  -pwd your_password \n  -save \/tmp\/sqlflow-ingester \n  -dbVendor dbvoracle<\/code><\/pre>\n\n\n\n<p>After the execution of the script, you will have your internal database metadata file in the <code>\/tmp\/sqlflow-ingester<\/code> folder. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"289\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1-1024x289.png\" alt=\"\" class=\"wp-image-2614\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1-1024x289.png 1024w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1-300x85.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1-768x217.png 768w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1-1536x434.png 1536w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1.png 1831w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>                                                                    sqlflow-ingester<\/figcaption><\/figure>\n\n\n\n<p>If the database server is on Windows, the command is similar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exporter.bat \n  -host 127.0.0.1 \n  -port 1521 \n  -db orcl \n  -user scott \n  -pwd tiger \n  -save c:\\tmp\\sqlflow-ingester \n  -dbVendor dbvoracle<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Embed the SQLFlow-Ingester in your Java code<\/h4>\n\n\n\n<p>If you intend to analyze the database and get the data lineage on code level, you can embed the SQLFlow-Ingester in your Java programme:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/1.import the following Ingester library \nimport com.gudu.sqlflow.ingester.exporter.SqlflowExporter;\nimport com.gudu.sqlflow.ingester.library.domain.DataSource;\nimport com.gudu.sqlflow.ingester.library.domain.DbVendor;\nimport com.gudu.sqlflow.ingester.library.domain.sqlflow.SQLFlow;\nimport com.gudu.sqlflow.ingester.library.result.Result;\n\n\/\/2.Give the database parameters before invoking the Ingester\nDataSource source = new DataSource();\n\/\/database host name (ip address or domain name) \nsource.setHostname(\"localhost\");\n\/\/port\nsource.setPort(\"3306\");\n\/\/database name\nsource.setDatabase(\"test\");\n\/\/user namer\nsource.setAccount(\"root\");\n\/\/database password\nsource.setPassword(\"123456\");\n\/\/Database type and version number, Check \"List of Supported dbVerdors\" section for a full list of the supported databases.\n\/\/The second parameter can be null if no specific version need to be provided\nDbVendor dbVendor = new DbVendor(\"dbvmysql\", \"5.7\");\nsource.setDbVendor(dbVendor);\n\/\/Export the metadata, the result can be in object\/json string.\nSqlflowExporter exec = new SqlflowExporter();\n\/\/Take the result in SQLFLow object\nResult&lt;SQLFlow&gt; result1 = exec.exporterMetadata(source);\n\/\/Take the result in json string\nResult&lt;String&gt; result2 = exec.exporterMetadataString(source);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Jar package<\/h4>\n\n\n\n<p>The SQLFlow-Ingester is in Java so you can directly execute the .jar package if you have Java installed on your server, the jar packages are under the <code>.\/lib<\/code> folder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar sqlflow-exporter-1.0.jar  -host 106.54.xx.xx-port 1521 -db orcl -user username -pwd password -save d:\/ -dbVendor dbvoracle<\/code><\/pre>\n\n\n\n<p>Following are the description for the parameters we support with the tool.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-dbVendor: Database type, Check here for a full list of the supported databases. Use colon to split dbVendor and version if specific version is required. (&lt;dbVendor&gt;:&lt;version&gt;, such as dbvmysql:5.7) \n-host: Database host name (ip address or domain name) \n-port: Port number\n-db: Database name\n-user: User name \n-pwd: User password \n-save: Destination folder path where we put the exported metadata json file. The exported file will be in name as metadata.json. \n-extractedDbsSchemas: Export metadata under the specific schema. Use comma to split if multiple schema required (such as &lt;schema1&gt;,&lt;schema2&gt;). We can use this flag to improve the export performance.\n-excludedDbsSchemas:  Exclude metadata under the specific schema during the export. Use comma to split if multiple schema required (such as &lt;schema1&gt;,&lt;schema2&gt;). We can use this flag to improve the export performance.\n-extractedViews: Export metadata under the specific view. Use comma to split if multiple views required (such as &lt;view1&gt;,&lt;view2&gt;). We can use this flag to improve the export performance. \n-merge: Merge the metadata results which are exported in different process. Use comma to split files to merge. Check here for more details.<\/code><\/pre>\n\n\n\n<p>You will receive the message if the export is succeeded:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exporter metadata success: \/home\/leo\/workspace\/tmp\/gudu_ingester\/metadata.json<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"851\" height=\"73\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-2.png\" alt=\"\" class=\"wp-image-2619\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-2.png 851w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-2-300x26.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-2-768x66.png 768w\" sizes=\"(max-width: 851px) 100vw, 851px\" \/><figcaption>                                                                       export success<\/figcaption><\/figure>\n\n\n\n<h2 class=\"has-large-font-size wp-block-heading\">Get data lineage from the metadata file<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">SQLFlow UI<\/h4>\n\n\n\n<p>With the exported <code>metadata.json<\/code>, we are now ready to retrieve data lineage.<\/p>\n\n\n\n<p>Open your browser and go to our <a href=\"https:\/\/sqlflow.gudusoft.com\/#\/\">SQLFlow UI<\/a>. Create a Job with the <code>Job Source<\/code> as <code>upload file<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"599\" height=\"792\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-3.png\" alt=\"\" class=\"wp-image-2620\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-3.png 599w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-3-227x300.png 227w\" sizes=\"(max-width: 599px) 100vw, 599px\" \/><figcaption>                                                        create job<\/figcaption><\/figure>\n\n\n\n<p>Check the lineage overview\/detail once the job is finished.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"389\" height=\"258\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-4.png\" alt=\"\" class=\"wp-image-2621\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-4.png 389w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-4-300x199.png 300w\" sizes=\"(max-width: 389px) 100vw, 389px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Dlineage Tool<\/h4>\n\n\n\n<p>An alternative way to get the data lineage from the metadata file is to use Dlienage tool:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar gudusoft.dlineage.jar \/t oracle \/f metadata.json<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>We can use sqlflow-ingester to export the metadata file from an internal database. The metadata file can be later used in <a href=\"https:\/\/sqlflow.gudusoft.com\/#\/\">SQLFlow UI<\/a> or Dlineage tool to retrieve the data lineage.<\/p>\n\n\n\n<p>SQLFlow-Ingester download address: https:\/\/github.com\/sqlparser\/sqlflow_public\/releases <\/p>\n\n\n\n<p>Check https:\/\/www.gudusoft.com\/ for more information and find more extraordinary features of Gudu SQLFlow<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gudu SQLFlow is an automated data lineage tool that specializes in analyzing SQL queries to discover and visualize data lineage that shows the complete data cycle. You can refer to this blog for the introduction. The SQLFlow UI site process thousands of SQL every day and generates data lineages. It is able to read the data source from the online SQL editor, from the SQL scripts uploaded or from client&#8217;s database. One of the most frequent asked is how to use SQLFlow to retrieve data from an internal database where no external network is available. This is a typical usage\u2026<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[66,93],"tags":[35,27,115],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Get data lineage from an internal database with SQLFlow<\/title>\n<meta name=\"description\" content=\"Get data lineage from an internal database with SQLFlow\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Get data lineage from an internal database with SQLFlow\" \/>\n<meta property=\"og:description\" content=\"Get data lineage from an internal database with SQLFlow\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-08T08:06:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-15T07:50:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1024x451.png\" \/>\n<meta name=\"author\" content=\"leo gu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"leo gu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\",\"name\":\"SQL and Data Blog\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"contentUrl\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"width\":251,\"height\":72,\"caption\":\"SQL and Data Blog\"},\"image\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"name\":\"SQL and Data Blog\",\"description\":\"SQL related blog for database professional\",\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\",\"name\":\"Get data lineage from an internal database with SQLFlow\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2023-01-08T08:06:48+00:00\",\"dateModified\":\"2023-01-15T07:50:00+00:00\",\"description\":\"Get data lineage from an internal database with SQLFlow\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get data lineage from an internal database with SQLFlow\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\"},\"author\":{\"name\":\"leo gu\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14\"},\"headline\":\"Get data lineage from an internal database with SQLFlow\",\"datePublished\":\"2023-01-08T08:06:48+00:00\",\"dateModified\":\"2023-01-15T07:50:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/\"},\"wordCount\":464,\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"keywords\":[\"Data Lineage Tool\",\"Gudu SQLFlow\",\"sqlflow-ingester\"],\"articleSection\":[\"Data Governance\",\"SQLFlow\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14\",\"name\":\"leo gu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/24976e2e4ca7dd476652bb26bd09392b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/24976e2e4ca7dd476652bb26bd09392b?s=96&d=mm&r=g\",\"caption\":\"leo gu\"},\"url\":\"https:\/\/www.dpriver.com\/blog\/author\/guyuanhao\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Get data lineage from an internal database with SQLFlow","description":"Get data lineage from an internal database with SQLFlow","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/","og_locale":"en_US","og_type":"article","og_title":"Get data lineage from an internal database with SQLFlow","og_description":"Get data lineage from an internal database with SQLFlow","og_url":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/","og_site_name":"SQL and Data Blog","article_published_time":"2023-01-08T08:06:48+00:00","article_modified_time":"2023-01-15T07:50:00+00:00","og_image":[{"url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/01\/image-1024x451.png"}],"author":"leo gu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"leo gu","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.dpriver.com\/blog\/#organization","name":"SQL and Data Blog","url":"https:\/\/www.dpriver.com\/blog\/","sameAs":[],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","contentUrl":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","width":251,"height":72,"caption":"SQL and Data Blog"},"image":{"@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.dpriver.com\/blog\/#website","url":"https:\/\/www.dpriver.com\/blog\/","name":"SQL and Data Blog","description":"SQL related blog for database professional","publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/","url":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/","name":"Get data lineage from an internal database with SQLFlow","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2023-01-08T08:06:48+00:00","dateModified":"2023-01-15T07:50:00+00:00","description":"Get data lineage from an internal database with SQLFlow","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Get data lineage from an internal database with SQLFlow"}]},{"@type":"Article","@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/#article","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/"},"author":{"name":"leo gu","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14"},"headline":"Get data lineage from an internal database with SQLFlow","datePublished":"2023-01-08T08:06:48+00:00","dateModified":"2023-01-15T07:50:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dpriver.com\/blog\/2023\/01\/get-data-lineage-from-an-internal-database-with-sqlflow\/"},"wordCount":464,"publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"keywords":["Data Lineage Tool","Gudu SQLFlow","sqlflow-ingester"],"articleSection":["Data Governance","SQLFlow"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14","name":"leo gu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/24976e2e4ca7dd476652bb26bd09392b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/24976e2e4ca7dd476652bb26bd09392b?s=96&d=mm&r=g","caption":"leo gu"},"url":"https:\/\/www.dpriver.com\/blog\/author\/guyuanhao\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2599"}],"collection":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/comments?post=2599"}],"version-history":[{"count":20,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2599\/revisions"}],"predecessor-version":[{"id":2625,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2599\/revisions\/2625"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=2599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/categories?post=2599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/tags?post=2599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}