{"id":2875,"date":"2023-07-12T05:30:41","date_gmt":"2023-07-12T10:30:41","guid":{"rendered":"https:\/\/www.dpriver.com\/blog\/?p=2875"},"modified":"2023-07-12T05:30:42","modified_gmt":"2023-07-12T10:30:42","slug":"ingest-postgresql-metadata-on-datahub","status":"publish","type":"post","link":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/","title":{"rendered":"Ingest PostgreSQL metadata on Datahub"},"content":{"rendered":"\n<p><a href=\"https:\/\/datahubproject.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Datahub<\/a>&nbsp;is an open-source metadata platform for the modern data stack. We have integrated the SQLFlow into Datahub so that the SQLFlow data lineage is enabled in the Datahub UI. Check this&nbsp;<a href=\"https:\/\/www.dpriver.com\/blog\/2023\/07\/07\/sqlflow-datahub\/\" target=\"_blank\" rel=\"noreferrer noopener\">blog<\/a>&nbsp;for how to integrate SQLFlow into Datahub.<\/p>\n\n\n\n<p>There are three ways to ingest your PostgreSQL metadata to Datahub:<\/p>\n\n\n\n<ul><li>Datahub UI (v0.10.4 is used in this blog)<\/li><li>Command Line<\/li><li>Rest API (Java\/Python sdk are available. This approach is ideal for metadata without a fixed format or any other sources not supported by DataHub)<\/li><\/ul>\n\n\n\n<p>This blog will introduce how to ingest the PostgreSQL metadata to Datahub with the first two approaches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>Install the following plugins on the Datahub server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip3 install 'acryl-datahub&#091;datahub-rest]' \npip3 install 'acryl-datahub&#091;postgres]'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Ingest metadata from Datahub UI<\/h2>\n\n\n\n<p>a. Click\u00a0<code>Ingestion<\/code>\u00a0on the DataHub menu bar <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"669\" height=\"486\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image.png\" alt=\"\" class=\"wp-image-2876\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image.png 669w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-300x218.png 300w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/figure>\n\n\n\n<p>b. Select&nbsp;<code>Sources<\/code>&nbsp;and click&nbsp;<code>Create new source<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"771\" height=\"586\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-2.png\" alt=\"\" class=\"wp-image-2880\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-2.png 771w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-2-300x228.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-2-768x584.png 768w\" sizes=\"(max-width: 771px) 100vw, 771px\" \/><\/figure>\n\n\n\n<p>c. Choose PostgreSQL in the source list<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"788\" height=\"819\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-3.png\" alt=\"\" class=\"wp-image-2881\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-3.png 788w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-3-289x300.png 289w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-3-768x798.png 768w\" sizes=\"(max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<p>d. Configure the database connection<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"986\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-5.png\" alt=\"\" class=\"wp-image-2883\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-5.png 1024w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-5-300x289.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-5-768x740.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>e. Click\u00a0<code>next<\/code>\u00a0to configure the schedule Ingestion. If you need to update metadata periodically, you can configure schedule Ingestion. It can greatly reduce the workload of manual import.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"738\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-6.png\" alt=\"\" class=\"wp-image-2884\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-6.png 1024w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-6-300x216.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-6-768x554.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>f. Give a name to the source<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"476\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-7.png\" alt=\"\" class=\"wp-image-2885\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-7.png 1024w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-7-300x139.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-7-768x357.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>g. The source is created when you click\u00a0<code>Save<\/code>. Click\u00a0<code>Edit<\/code>\u00a0to change the configuration and\u00a0<code>EXECUTE<\/code>\u00a0to run the ingestion.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"953\" height=\"518\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-8.png\" alt=\"\" class=\"wp-image-2886\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-8.png 953w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-8-300x163.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-8-768x417.png 768w\" sizes=\"(max-width: 953px) 100vw, 953px\" \/><\/figure>\n\n\n\n<p>h. After clicking\u00a0<code>EXECUTE<\/code>, the task will be executed immediately. if a schedule task is configured, the import will be automatically triggered when the scheduling condition is met.\u00a0<code>Last Status<\/code>\u00a0will show the execution status of the last ingestion.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"945\" height=\"614\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-9.png\" alt=\"\" class=\"wp-image-2887\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-9.png 945w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-9-300x195.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-9-768x499.png 768w\" sizes=\"(max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p>i. Click the\u00a0<code>+<\/code>\u00a0at the beginning of each source to expand and view the execution records corresponding to the source. If the status is\u00a0<code>Failed<\/code>, you can check the logs with the\u00a0<code>DETAILS<\/code>\u00a0button.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"945\" height=\"590\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-10.png\" alt=\"\" class=\"wp-image-2888\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-10.png 945w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-10-300x187.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-10-768x479.png 768w\" sizes=\"(max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p>When Status is\u00a0<code>Succeeded<\/code>, you will have the MySQL icon in the Datahub home page.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"845\" height=\"802\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-11.png\" alt=\"\" class=\"wp-image-2889\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-11.png 845w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-11-300x285.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-11-768x729.png 768w\" sizes=\"(max-width: 845px) 100vw, 845px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ingest via Command Line<\/h2>\n\n\n\n<p>a. Edit the config file and upload that to your datahub server<\/p>\n\n\n\n<p>Check https:\/\/datahubproject.io\/docs\/generated\/ingestion\/sources\/mysql\/#cli-based-ingestion for the config structure.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"790\" height=\"630\" src=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-12.png\" alt=\"\" class=\"wp-image-2890\" srcset=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-12.png 790w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-12-300x239.png 300w, https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image-12-768x612.png 768w\" sizes=\"(max-width: 790px) 100vw, 790px\" \/><\/figure>\n\n\n\n<p>b. Run the following command to read the config file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>datahub ingest -c \/home\/datahub\/PostgreSQL.yaml<\/code><\/pre>\n\n\n\n<p><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Datahub&nbsp;is an open-source metadata platform for the modern data stack. We have integrated the SQLFlow into Datahub so that the SQLFlow data lineage is enabled in the Datahub UI. Check this&nbsp;blog&nbsp;for how to integrate SQLFlow into Datahub. There are three ways to ingest your PostgreSQL metadata to Datahub: Datahub UI (v0.10.4 is used in this blog) Command Line Rest API (Java\/Python sdk are available. This approach is ideal for metadata without a fixed format or any other sources not supported by DataHub) This blog will introduce how to ingest the PostgreSQL metadata to Datahub with the first two approaches. Prerequisites\u2026<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"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>Ingest PostgreSQL metadata on Datahub<\/title>\n<meta name=\"description\" content=\"Ingest PostgreSQL metadata on Datahub\" \/>\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\/ingest-postgresql-metadata-on-datahub\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ingest PostgreSQL metadata on Datahub\" \/>\n<meta property=\"og:description\" content=\"Ingest PostgreSQL metadata on Datahub\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-12T10:30:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-12T10:30:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image.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=\"4 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\/ingest-postgresql-metadata-on-datahub\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/\",\"name\":\"Ingest PostgreSQL metadata on Datahub\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2023-07-12T10:30:41+00:00\",\"dateModified\":\"2023-07-12T10:30:42+00:00\",\"description\":\"Ingest PostgreSQL metadata on Datahub\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ingest PostgreSQL metadata on Datahub\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/\"},\"author\":{\"name\":\"leo gu\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14\"},\"headline\":\"Ingest PostgreSQL metadata on Datahub\",\"datePublished\":\"2023-07-12T10:30:41+00:00\",\"dateModified\":\"2023-07-12T10:30:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/\"},\"wordCount\":325,\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"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":"Ingest PostgreSQL metadata on Datahub","description":"Ingest PostgreSQL metadata on Datahub","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\/ingest-postgresql-metadata-on-datahub\/","og_locale":"en_US","og_type":"article","og_title":"Ingest PostgreSQL metadata on Datahub","og_description":"Ingest PostgreSQL metadata on Datahub","og_url":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/","og_site_name":"SQL and Data Blog","article_published_time":"2023-07-12T10:30:41+00:00","article_modified_time":"2023-07-12T10:30:42+00:00","og_image":[{"url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2023\/07\/image.png"}],"author":"leo gu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"leo gu","Est. reading time":"4 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\/ingest-postgresql-metadata-on-datahub\/","url":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/","name":"Ingest PostgreSQL metadata on Datahub","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2023-07-12T10:30:41+00:00","dateModified":"2023-07-12T10:30:42+00:00","description":"Ingest PostgreSQL metadata on Datahub","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ingest PostgreSQL metadata on Datahub"}]},{"@type":"Article","@id":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/#article","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/"},"author":{"name":"leo gu","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/9e80d249b6da4e572bd8590b0789bc14"},"headline":"Ingest PostgreSQL metadata on Datahub","datePublished":"2023-07-12T10:30:41+00:00","dateModified":"2023-07-12T10:30:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dpriver.com\/blog\/ingest-postgresql-metadata-on-datahub\/"},"wordCount":325,"publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"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\/2875"}],"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=2875"}],"version-history":[{"count":2,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2875\/revisions"}],"predecessor-version":[{"id":2891,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/2875\/revisions\/2891"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=2875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/categories?post=2875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/tags?post=2875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}