{"id":6968,"date":"2023-06-09T00:00:00","date_gmt":"2023-06-09T04:00:00","guid":{"rendered":"https:\/\/www.sisense.com\/exact-row-counts-for-every-database-table\/"},"modified":"2024-10-14T09:44:07","modified_gmt":"2024-10-14T13:44:07","slug":"exact-row-counts-for-every-database-table","status":"publish","type":"post","link":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/","title":{"rendered":"Exact row counts for all tables in MySQL and Postgres"},"content":{"rendered":"<p>Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get.<\/p>\n<p>Databases keep row counts in their stats tables for planning query execution, but the results are only approximate and can be badly out of date. You can get exact counts by running a count query for every table, but this can be tedious and require external scripting.<\/p>\n<p>Instead, you can get exact row counts with a single query. This query is not going to be fast: It will take as long as running select count(1) from foo on every table in your database.<\/p>\n<p>Our end result will be a table of schema, table, and row counts:<\/p>\n<figure class=\"wp-block-image size-full fancybox\"><img decoding=\"async\" class=\"wp-image-80823\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/image-01-28.png\" alt=\"Schema, table, and row counts\" \/><\/figure>\n<h2>Exact row counts in Postgres<\/h2>\n<p>To start getting our row counts, we\u2019ll need a list of our SQL tables. We can get this easily with:<\/p>\n<pre class=\"wp-block-code\"><code>select table_schema, table_name\r\nfrom information_schema.tables\r\nwhere \r\n  table_schema not in ('pg_catalog', 'information_schema') \r\n  and table_type='BASE TABLE'<\/code><\/pre>\n<p>From here, we need a way to turn the names of tables like &#8216;users&#8217; into an executable SQL statement. While we can trivially concatenate on &#8216;select count(1) from &#8216; to each table name, we need a way to actually run this constructed query.<\/p>\n<p>Fortunately, postgres has the wondrous eval which executes strings of SQL. It\u2019s only available from stored procedures, so we\u2019ll write a custom function that invokes eval.<\/p>\n<p>We\u2019ll want our custom function to take a table name and return the number of rows in the query. Here\u2019s how to write a count_rows function:<\/p>\n<pre class=\"wp-block-code\"><code>create or replace function \r\ncount_rows(schema text, tablename text) returns integer\r\nas\r\n$body$\r\ndeclare\r\n  result integer;\r\n  query varchar;\r\nbegin\r\n  query := 'SELECT count(1) FROM ' || schema || '.' || tablename;\r\n  execute query into result;\r\n  return result;\r\nend;\r\n$body$\r\nlanguage plpgsql;<\/code><\/pre>\n<p>We can invoke this function like any other postgres function with count_rows(&#8216;users&#8217;). Adding our count_rows function to the original query will get us row counts for each table:<\/p>\n<pre class=\"wp-block-code\"><code>select \r\n  table_schema,\r\n  table_name, \r\n  count_rows(table_schema, table_name)\r\nfrom information_schema.tables\r\nwhere \r\n  table_schema not in ('pg_catalog', 'information_schema') \r\n  and table_type='BASE TABLE'\r\norder by 3 desc<\/code><\/pre>\n<p>With this definition and query combined we\u2019ll have the row count table we were aiming for.<\/p>\n<h2>MySQL<\/h2>\n<p>The same trick works in MySQL, but user defined functions aren\u2019t an option for everyone. For those with this restriction, we\u2019ll build a single query with a union per table and eval the entire string.<\/p>\n<p>The query uses group_concat which packs multiple rows into a single string. This is needed to turn a list of table names into a string of many counts connected by unions.<\/p>\n<p>Finally, we can execute a string as a prepared statement. This is the simplest way to run a string as a query in MySQL.<\/p>\n<p>We\u2019ll start with creating all of the select statements we want to run:<\/p>\n<pre class=\"wp-block-code\"><code>select\r\n  concat(\r\n    'select ', \r\n    quote(db), ' db, ', \r\n    quote(tablename), ' tablename, '\r\n    'count(1) \"rowcount\" ' ,\r\n    'from ', db, '.', tablename) as sql_statements\r\nfrom (\r\n  select \r\n    table_schema db,\r\n    table_name tablename\r\n  from information_schema.tables \r\n  where table_schema not in \r\n    ('performance_schema', 'mysql', 'information_schema')\r\n) t;<\/code><\/pre>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"wp-image-80829\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/image-02-27.png\" alt=\"SQL statements\" \/><\/figure>\n<p>We can expand that query to concatenate the select statements, and save the results with into @sql. Once saved, we can run it as a prepared statement.<\/p>\n<pre class=\"wp-block-code\"><code>select\r\n  -- Sort the tables by count\r\n  concat( \r\n    'select * from (',\r\n    -- Aggregate rows into a single string connected by unions\r\n    group_concat(\r\n      -- Build a \"select count(1) from db.tablename\" per table\r\n      concat('select ', \r\n        quote(db), ' db, ', \r\n        quote(tablename), ' tablename, '\r\n        'count(1) \"rowcount\" ',\r\n       'from ', db, '.', tablename) \r\n      separator ' union ')\r\n    , ') t order by 3 desc')\r\ninto @sql \r\nfrom (\r\n  select \r\n    table_schema db,\r\n    table_name tablename\r\n  from information_schema.tables \r\n  where table_schema not in \r\n    ('performance_schema', 'mysql', 'information_schema')\r\n) t;\r\n-- Execute @sql\r\nprepare s from @sql; execute s; deallocate prepare s;<\/code><\/pre>\n<p>This yields the same results as the approach we demonstrated for Postgres users.<\/p>\n<h2>Choices<\/h2>\n<p>We\u2019ve given you a couple of tools to choose from for getting exact row counts. The user defined function is more readable, extensible, and reuseable. However, the group_concat approach is helpful if you do not have permission to create user defined functions, or if your database does not support them.<\/p>\n<h2>Go forth and count!<\/h2>\n<p>You now have a couple of ways to get exact row counts in the most common databases, and a few new SQL techniques to play with. Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get. Databases keep row counts in their stats tables for planning query execution, but the results are only approximate&#8230;<\/p>\n","protected":false},"author":4,"featured_media":7180,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[44],"tags":[472],"application":[10],"buyer-role":[],"buyer-stage":[],"department":[],"industry":[],"topic":[73],"class_list":["post-6968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-talk","tag-data-team","application-cloud-data-teams","topic-sql-superstar"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Exact Row Counts for All Tables in MySQL and Postgres<\/title>\n<meta name=\"description\" content=\"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get.\" \/>\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.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exact row counts for all tables in MySQL and Postgres\" \/>\n<meta property=\"og:description\" content=\"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get. Databases keep row\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\" \/>\n<meta property=\"og:site_name\" content=\"Sisense\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-09T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-14T13:44:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-exact-blog-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sisense Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-exact-blog-min.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@sisense\" \/>\n<meta name=\"twitter:site\" content=\"@sisense\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sisense Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\"},\"author\":{\"name\":\"Sisense Team\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\"},\"headline\":\"Exact row counts for all tables in MySQL and Postgres\",\"datePublished\":\"2023-06-09T04:00:00+00:00\",\"dateModified\":\"2024-10-14T13:44:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\"},\"wordCount\":533,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg\",\"keywords\":[\"data team\"],\"articleSection\":[\"Tech Talk\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\",\"url\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\",\"name\":\"Exact Row Counts for All Tables in MySQL and Postgres\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg\",\"datePublished\":\"2023-06-09T04:00:00+00:00\",\"dateModified\":\"2024-10-14T13:44:07+00:00\",\"description\":\"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg\",\"width\":1200,\"height\":628,\"caption\":\"featured exact blog min\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sisense.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exact row counts for all tables in MySQL and Postgres\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sisense.com\/#website\",\"url\":\"https:\/\/www.sisense.com\/\",\"name\":\"Sisense\",\"description\":\"Build your business with anywhere-analytics\",\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sisense.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.sisense.com\/#organization\",\"name\":\"Sisense\",\"url\":\"https:\/\/www.sisense.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"width\":1200,\"height\":600,\"caption\":\"Sisense\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/sisense\",\"https:\/\/www.linkedin.com\/company\/sisense\",\"https:\/\/github.com\/sisense\/\"],\"description\":\"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users.\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\",\"name\":\"Sisense Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"caption\":\"Sisense Team\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Exact Row Counts for All Tables in MySQL and Postgres","description":"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get.","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.sisense.com\/blog\/exact-row-counts-for-every-database-table\/","og_locale":"en_US","og_type":"article","og_title":"Exact row counts for all tables in MySQL and Postgres","og_description":"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get. Databases keep row","og_url":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/","og_site_name":"Sisense","article_published_time":"2023-06-09T04:00:00+00:00","article_modified_time":"2024-10-14T13:44:07+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-exact-blog-min.jpg","type":"image\/jpeg"}],"author":"Sisense Team","twitter_card":"summary_large_image","twitter_image":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-exact-blog-min.jpg","twitter_creator":"@sisense","twitter_site":"@sisense","twitter_misc":{"Written by":"Sisense Team","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#article","isPartOf":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/"},"author":{"name":"Sisense Team","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115"},"headline":"Exact row counts for all tables in MySQL and Postgres","datePublished":"2023-06-09T04:00:00+00:00","dateModified":"2024-10-14T13:44:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/"},"wordCount":533,"commentCount":0,"publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg","keywords":["data team"],"articleSection":["Tech Talk"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/","url":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/","name":"Exact Row Counts for All Tables in MySQL and Postgres","isPartOf":{"@id":"https:\/\/www.sisense.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg","datePublished":"2023-06-09T04:00:00+00:00","dateModified":"2024-10-14T13:44:07+00:00","description":"Keeping track of your row counts can be helpful for budgeting and capacity planning, yet accurate counts are surprisingly hard to get.","breadcrumb":{"@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#primaryimage","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2015\/03\/10161527\/featured-exact-blog-min.jpg","width":1200,"height":628,"caption":"featured exact blog min"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sisense.com\/blog\/exact-row-counts-for-every-database-table\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sisense.com\/"},{"@type":"ListItem","position":2,"name":"Exact row counts for all tables in MySQL and Postgres"}]},{"@type":"WebSite","@id":"https:\/\/www.sisense.com\/#website","url":"https:\/\/www.sisense.com\/","name":"Sisense","description":"Build your business with anywhere-analytics","publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sisense.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.sisense.com\/#organization","name":"Sisense","url":"https:\/\/www.sisense.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","width":1200,"height":600,"caption":"Sisense"},"image":{"@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/sisense","https:\/\/www.linkedin.com\/company\/sisense","https:\/\/github.com\/sisense\/"],"description":"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users."},{"@type":"Person","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115","name":"Sisense Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","caption":"Sisense Team"}}]}},"_links":{"self":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/6968"}],"collection":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/comments?post=6968"}],"version-history":[{"count":0,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/6968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media\/7180"}],"wp:attachment":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media?parent=6968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/categories?post=6968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/tags?post=6968"},{"taxonomy":"application","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/application?post=6968"},{"taxonomy":"buyer-role","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-role?post=6968"},{"taxonomy":"buyer-stage","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-stage?post=6968"},{"taxonomy":"department","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/department?post=6968"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/industry?post=6968"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/topic?post=6968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}