One of Prequel’s core promises is the guarantee that data in the source will be accurately replicated in the destination. Every row will be transferred, no row will be dropped, and the destination will get all changes to existing rows.We want every user to build that confidence for themselves instead of having to take our word for it. This is why we surface data integrity checks, a way to audit the integrity of the data present in the destination, and compare it to what’s in the source.
Data integrity checks return a range of information about the underlying destination table. Some results are informational, while others denote data integrity issues.
Field
Action needed if greater than 0
Meaning
sampling_rate
None, this is expected.
Bounded from 0 to 1. A value of 1.0 indicates that no sampling was used. This number represents the percentage of (primary key, last_modified_at) tuples compared within partitions with differing hashes.
total_rows_compared
None, this is expected.
Indicates the number of (primary key, last_modified_at) tuples in the source that were compared with the destination.
total_rows_pending
None, this is expected.
The number of rows present in the source that will be inserted into the destination with the next transfer.
total_rows_stale
None, this is expected.
The number of rows present in the source that have changed since they were last modified in the destination, and that will be updated in the destination with the next transfer
total_rows_missing
Full refresh the destination and contact Prequel support.
The number of rows present in the source that should exist in the destination but do not.
total_rows_incorrect
Full refresh the destination and contact Prequel support.
The number of rows present in the source that exist in the destination but do not have the correct last_modified_at value.
total_rows_orphaned
None.
The number of rows that are present in the destination but not in the source. This is usually the result of hard deletes in the source, or of foreign data having been introduced in the destination by the recipient.
Data integrity checks work by comparing hashes of certain values between the source and the destination. This allows them to be relatively compute and bandwidth efficient. In order to work across systems and in a way that doesn’t put undue load on those systems at scale, they are subject to a handful of limitations.
Data integrity checks are supported when both the source and the destination are one of the following systems:
Athena
Aurora Postgres
BigQuery
ClickHouse
Databricks
Delta Lake
Google Cloud Storage (beta)
MotherDuck
MySQL
Postgres
Redshift
Redshift Serverless
S3 (beta)
S3 compatible (beta)
Snowflake
SQL Server
Beta support for object storage destinationsData integrity checks on S3, Google Cloud Storage, and S3 compatible destinations are currently in beta.For Google Cloud Storage, only destinations using HMAC key authentication support data integrity checks today.
Data integrity checks only ensure the integrity of primary keys and last_modified_at timestamps. This is sufficient to build assurance of integrity.
On large tables, integrity checks leverage random sampling to build probabilistic confidence in the integrity of the data. This prevents the checks from overloading either system, and allows them to run in a finite time.
Automated sampling will likely occur on tables receiving more than 1B rows per day in volume.
You can also leverage manual sampling and specify a set of primary keys to compare across systems (regardless of table size).
Data Integrity jobs will not run at the same time as transfers to the same destination and vice versa. This is to prevent overloading the resources of the source or destination. This is also to ensure that integrity measurements are not taken on a “moving target”. If a data integrity check is in progress, all transfers to that destination will remain in PENDING state until the integrity check is complete.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Prequel","colors":{"primary":"#1FA85C","light":"#3FEB81","dark":"#1A8C4C"},"logo":{"light":"https://mintcdn.com/prequel-b74c9795/GIDgQY27cFgo9W63/logo/light.svg?fit=max\u0026auto=format\u0026n=GIDgQY27cFgo9W63\u0026q=85\u0026s=7ca8780ef3a6776aa05de0e4daa0c51a","dark":"https://mintcdn.com/prequel-b74c9795/GIDgQY27cFgo9W63/logo/dark.svg?fit=max\u0026auto=format\u0026n=GIDgQY27cFgo9W63\u0026q=85\u0026s=0648bcadd5b55b240fe84c18de1832c1"},"favicon":"https://mintcdn.com/prequel-b74c9795/pfYOzAx0UgxqSRzZ/favicon.svg?fit=max\u0026auto=format\u0026n=pfYOzAx0UgxqSRzZ\u0026q=85\u0026s=66730c8124243bde70460d6f7255c48b","api":{"playground":{"proxy":false}},"navbar":{"links":[{"href":"mailto:support@prequel.co","label":"Support"}],"primary":{"type":"button","label":"Login","href":"https://app.prequel.co"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/prequel-co","website":"https://prequel.co"}},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"list","href":"https://prequel.co/changelog"},{"anchor":"Blog","icon":"newspaper","href":"https://prequel.co/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"prequel-b74c9795","hasAudioNarration":false,"actualSubdomain":"prequel-b74c9795","customDomains":["docs.prequel.co"],"gitSource":{"type":"github","owner":"prequel-co","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad912b01790b168a2ba2acf","collectionId":"97afc9da-7b4e-40dc-aa73-89017b1f3730","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad912b01790b168a2ba2acf"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad912b01790b168a2ba2acf","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Prequel Export","count":187},{"language":"default","tag":"API reference","count":187},{"language":"default","tag":"Endpoints","count":151},{"language":"default","tag":"Guides","count":150},{"language":"default","tag":"Prequel Import","count":150},{"language":"default","tag":"Sources","count":62},{"language":"default","tag":"Destinations","count":52},{"language":"default","tag":"Provider-scoped endpoints","count":32},{"language":"default","tag":"Features","count":20},{"language":"default","tag":"Core concepts","count":18}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar .sidebar-title{font-size:1.375rem;font-weight:500;text-transform:none;letter-spacing:-.015em}#sidebar div.lg\\:mt-8{margin-top:1.75rem!important}#sidebar div.lg\\:mt-8+div.lg\\:mt-8 .sidebar-title{margin-top:0;padding-top:1.75rem;border-top:1px solid rgba(0,0,0,.08)}:not(pre)>code{white-space:nowrap}a code,a>code{background-color:transparent!important;border:0!important;color:inherit!important;padding-left:0!important;padding-right:0!important;white-space:inherit!important}[class~=size-7][class~=rounded-full]{width:2.25rem!important;height:2.25rem!important;font-size:.95rem!important;font-weight:600!important;border:1px solid rgba(0,0,0,.12)!important}[data-component-part=step-title]{font-size:1.25rem!important;font-weight:600!important;letter-spacing:-.01em}table th{font-weight:700!important}a.group.space-x-3{padding:.85rem 1.1rem;border:1px solid rgba(0,0,0,.08);border-radius:.75rem;background-color:#fff;transition:background-color .15s ease,border-color .15s ease}a.group.space-x-3:hover{background-color:#fafafa;border-color:rgba(0,0,0,.16)}a.group.space-x-3>span{display:flex;flex-direction:column;line-height:1.3}a.group.space-x-3>span::before{font-size:.75rem;font-weight:600;letter-spacing:.01em;color:#1fa85c;margin-bottom:.1rem}a.group.space-x-3:not(.ml-auto)>span::before{content:\"Previous\"}a.group.space-x-3.ml-auto>span::before{content:\"Next\"}a.group.space-x-3.ml-auto>span{text-align:right;align-items:flex-end}[data-component-part=callout-content]>[data-as=p]:first-child:not(:only-child),[data-component-part=callout-content]>p:first-child:not(:only-child){display:block;font-size:.9375rem;font-weight:700;margin-bottom:.25rem}svg.icon[style*=\"/check.svg\"]{background-color:#1fa85c!important}svg.icon[style*=\"/xmark.svg\"]{background-color:#e5484d!important}td:has(>svg.icon:only-child){vertical-align:middle}"}],"page":{"pagePath":"export/features/data-integrity-checks","slug":"/export/features/data-integrity-checks","pageMetadata":{"title":"Data integrity checks","description":"Auditing the data sent to your destinations","href":"/export/features/data-integrity-checks"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Auditing the data sent to your destinations\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`One of Prequel’s core promises is the guarantee that data in the source will be accurately replicated in the destination. Every row will be transferred, no row will be dropped, and the destination will get all changes to existing rows.`}),`\n`,_jsx(_components.p,{children:`We want every user to build that confidence for themselves instead of having to take our word for it. This is why we surface data integrity checks, a way to audit the integrity of the data present in the destination, and compare it to what’s in the source.`}),`\n`,_jsx(Heading,{level:`2`,id:`results`,children:`Results`}),`\n`,_jsx(_components.p,{children:`Data integrity checks return a range of information about the underlying destination table. Some results are informational, while others denote data integrity issues.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Field`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Action needed if greater than 0`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`sampling_rate`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`None, this is expected.`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Bounded from 0 to 1. A value of 1.0 indicates that no sampling was used. This number represents the percentage of (primary key, `,_jsx(_components.code,{children:`last_modified_at`}),`) tuples compared within partitions with differing hashes.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_compared`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`None, this is expected.`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Indicates the number of (primary key, `,_jsx(_components.code,{children:`last_modified_at`}),`) tuples in the source that were compared with the destination.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_pending`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`None, this is expected.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The number of rows present in the source that will be inserted into the destination with the next transfer.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_stale`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`None, this is expected.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The number of rows present in the source that have changed since they were last modified in the destination, and that will be updated in the destination with the next transfer`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_missing`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Full refresh the destination and contact Prequel support.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The number of rows present in the source that should exist in the destination but do not.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_incorrect`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Full refresh the destination and contact Prequel support.`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`The number of rows present in the source that exist in the destination but do not have the correct `,_jsx(_components.code,{children:`last_modified_at`}),` value.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`total_rows_orphaned`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`None.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The number of rows that are present in the destination but not in the source. This is usually the result of hard deletes in the source, or of foreign data having been introduced in the destination by the recipient.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`limitations`,children:`Limitations`}),`\n`,_jsx(_components.p,{children:`Data integrity checks work by comparing hashes of certain values between the source and the destination. This allows them to be relatively compute and bandwidth efficient. In order to work across systems and in a way that doesn’t put undue load on those systems at scale, they are subject to a handful of limitations.`}),`\n`,_jsx(Heading,{level:`3`,id:`supported-systems`,children:`Supported systems`}),`\n`,_jsx(_components.p,{children:`Data integrity checks are supported when both the source and the destination are one of the following systems:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Athena`}),`\n`,_jsx(_components.li,{children:`Aurora Postgres`}),`\n`,_jsx(_components.li,{children:`BigQuery`}),`\n`,_jsx(_components.li,{children:`ClickHouse`}),`\n`,_jsx(_components.li,{children:`Databricks`}),`\n`,_jsx(_components.li,{children:`Delta Lake`}),`\n`,_jsx(_components.li,{children:`Google Cloud Storage (beta)`}),`\n`,_jsx(_components.li,{children:`MotherDuck`}),`\n`,_jsx(_components.li,{children:`MySQL`}),`\n`,_jsx(_components.li,{children:`Postgres`}),`\n`,_jsx(_components.li,{children:`Redshift`}),`\n`,_jsx(_components.li,{children:`Redshift Serverless`}),`\n`,_jsx(_components.li,{children:`S3 (beta)`}),`\n`,_jsx(_components.li,{children:`S3 compatible (beta)`}),`\n`,_jsx(_components.li,{children:`Snowflake`}),`\n`,_jsx(_components.li,{children:`SQL Server`}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Beta support for object storage destinations`})}),_jsx(_components.p,{children:`Data integrity checks on S3, Google Cloud Storage, and S3 compatible destinations are currently in beta.`}),_jsx(_components.p,{children:`For Google Cloud Storage, only destinations using HMAC key authentication support data integrity checks today.`})]}),`\n`,_jsx(Heading,{level:`3`,id:`other-limitations`,children:`Other limitations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Data integrity checks only ensure the integrity of primary keys and `,_jsx(_components.code,{children:`last_modified_at`}),` timestamps. This is sufficient to build assurance of integrity.`]}),`\n`,_jsxs(_components.li,{children:[`On large tables, integrity checks leverage random sampling to build probabilistic confidence in the integrity of the data. This prevents the checks from overloading either system, and allows them to run in a finite time.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Automated sampling will likely occur on tables receiving more than 1B rows per day in volume.`}),`\n`,_jsx(_components.li,{children:`You can also leverage manual sampling and specify a set of primary keys to compare across systems (regardless of table size).`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`Data Integrity jobs will not run at the same time as transfers to the same destination and vice versa. This is to prevent overloading the resources of the source or destination. This is also to ensure that integrity measurements are not taken on a “moving target”. If a data integrity check is in progress, all transfers to that destination will remain in PENDING state until the integrity check is complete.`}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Data integrity checks","description":"Auditing the data sent to your destinations","href":"/export/features/data-integrity-checks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Results","slug":"results","depth":2,"children":[]},{"title":"Limitations","slug":"limitations","depth":2,"children":[{"title":"Supported systems","slug":"supported-systems","depth":3,"children":[]},{"title":"Other limitations","slug":"other-limitations","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/prequel-b74c9795/48bdb02730fb87b5/linkedin-insight-tag.js","/_mintlify/custom/prequel-b74c9795/212c5cb9da25df33/analytics.js"],"subdomain":"prequel-b74c9795","siteName":"Prequel","title":"Data integrity checks - Prequel","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T19:11:15.192Z","originalFileLocation":"export/features/data-integrity-checks.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Auditing the data sent to your destinations\">\u003cmeta data-mint-head name=\"application-name\" content=\"Prequel\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Data integrity checks - Prequel\">\u003cmeta data-mint-head property=\"og:description\" content=\"Auditing the data sent to your destinations\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Prequel\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.prequel.co/export/features/data-integrity-checks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://prequel-b74c9795.mintlify.app/_mintlify/api/og/v2?division=Features\u0026amp;title=Data+integrity+checks\u0026amp;description=Auditing+the+data+sent+to+your+destinations\u0026amp;theme=8fbbc0ebacc898c89d90b45b\u0026amp;signature=e09a6f985f215874e359830bd783d7dbed141a6cf447eddc97fb487a688cfdda\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Data integrity checks - Prequel\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Auditing the data sent to your destinations\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://prequel-b74c9795.mintlify.app/_mintlify/api/og/v2?division=Features\u0026amp;title=Data+integrity+checks\u0026amp;description=Auditing+the+data+sent+to+your+destinations\u0026amp;theme=8fbbc0ebacc898c89d90b45b\u0026amp;signature=e09a6f985f215874e359830bd783d7dbed141a6cf447eddc97fb487a688cfdda\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/prequel-b74c9795/aTpbmI4IZULmR9Sx/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Prequel\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1FA85C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.prequel.co/export/features/data-integrity-checks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/export/features/data-integrity-checks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.prequel.co/#organization\",\"name\":\"Prequel\",\"url\":\"https://docs.prequel.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/prequel-b74c9795/GIDgQY27cFgo9W63/logo/light.svg?fit=max\u0026auto=format\u0026n=GIDgQY27cFgo9W63\u0026q=85\u0026s=7ca8780ef3a6776aa05de0e4daa0c51a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.prequel.co#website\",\"name\":\"Prequel\",\"url\":\"https://docs.prequel.co\",\"publisher\":{\"@id\":\"https://docs.prequel.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.prequel.co/export/features/data-integrity-checks#webpage\",\"url\":\"https://docs.prequel.co/export/features/data-integrity-checks\",\"name\":\"Data integrity checks\",\"description\":\"Auditing the data sent to your destinations\",\"dateModified\":\"2026-10-15T19:11:15.192Z\",\"isPartOf\":{\"@id\":\"https://docs.prequel.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.prequel.co/export/features/data-integrity-checks#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.prequel.co/export/features/data-integrity-checks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.prequel.co/export/features/change-detection\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data integrity checks\",\"item\":\"https://docs.prequel.co/export/features/data-integrity-checks\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.prequel.co/export/features/data-integrity-checks#article\",\"headline\":\"Data integrity checks\",\"name\":\"Data integrity checks\",\"description\":\"Auditing the data sent to your destinations\",\"url\":\"https://docs.prequel.co/export/features/data-integrity-checks\",\"mainEntityOfPage\":{\"@id\":\"https://docs.prequel.co/export/features/data-integrity-checks#webpage\"},\"dateModified\":\"2026-10-15T19:11:15.192Z\",\"publisher\":{\"@id\":\"https://docs.prequel.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.prequel.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Prequel\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Prequel","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"list","href":"https://prequel.co/changelog"},{"anchor":"Blog","icon":"newspaper","href":"https://prequel.co/blog"}]},"products":[{"product":"Prequel Export","tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/export"},{"title":"How Prequel Export works","href":"/export/getting-started/how-prequel-export-works"},{"title":"Quickstart guide","href":"/export/getting-started/quickstart"},{"title":"Building your customer experience","href":"/export/getting-started/building-your-customer-experience"}]},{"group":"Core concepts","pages":[{"title":"Sources","href":"/export/concepts/sources"},{"group":"Models","expanded":false,"pages":[{"title":"Models","href":"/export/concepts/models"},{"title":"Data types","href":"/export/concepts/data-types"}]},{"title":"Products","href":"/export/concepts/products"},{"title":"Recipients","href":"/export/concepts/recipients"},{"title":"Destinations","href":"/export/concepts/destinations"},{"title":"Transfers","href":"/export/concepts/transfers"}]},{"group":"Features","pages":[{"title":"Change detection","href":"/export/features/change-detection"},{"title":"Schema evolution","description":"How Prequel evolves destination schemas safely as your data model changes","href":"/export/features/schema-evolution"},{"title":"Data integrity checks","href":"/export/features/data-integrity-checks"},{"title":"Orchestration","description":"How Prequel schedules transfers and how to tune frequency per destination.","href":"/export/features/orchestration"},{"title":"Source queries","href":"/export/features/custom-queries"},{"title":"Windowed transfers","href":"/export/features/windowed-transfers"},{"title":"Append-only mode","href":"/export/features/append-only-mode"},{"title":"Usage data","href":"/export/features/usage-data"},{"title":"Partner attribution","href":"/export/features/partner-attribution"},{"title":"Environments","href":"/export/concepts/environments"},{"title":"Tenancy options","href":"/export/concepts/multi-tenancy"},{"group":"Change tracking","expanded":false,"pages":[{"title":"Change tracking","href":"/export/features/change-tracking"},{"title":"Transfer status table","href":"/export/features/transfer-status-table"},{"title":"Manifest files for object storage","href":"/export/features/manifest-files-for-object-storage"}]}]},{"group":"Deploying Prequel","pages":[{"title":"Deployment options","href":"/export/deployment/cloud-hosted"},{"title":"Prequel IPs","href":"/export/deployment/prequel-ips"},{"title":"Observability for self-hosted","href":"/export/deployment/logs-for-self-hosted"}]},{"group":"Logging, Monitoring, and Observability","pages":[{"title":"Overview","href":"/export/monitoring/overview"},{"title":"Logging","href":"/export/monitoring/monitoring"},{"title":"Webhooks","href":"/export/monitoring/webhooks"},{"group":"Error handling","expanded":false,"pages":[{"title":"Coded error handling","href":"/export/error-handling/error-handling"},{"title":"Prequel error codes","href":"/export/error-handling/error-codes"},{"title":"Sensitive trace webhooks","href":"/export/error-handling/sensitive-trace-webhook"}]}]},{"group":"Integrations","pages":[{"title":"GitHub Actions","href":"/export/integrations/github-action"},{"title":"Datadog","href":"/export/monitoring/datadog"},{"title":"Slack","href":"/export/monitoring/slack"}]},{"group":"Developer SDKs","pages":[{"group":"React SDK","expanded":false,"pages":[{"title":"Overview","href":"/export/sdks/react/overview"},{"title":"Authentication","href":"/export/sdks/react/authentication"},{"title":"Hooks","href":"/export/sdks/react/hooks"},{"title":"Example app","href":"/export/sdks/react/sample-app"},{"group":"Tutorials","expanded":false,"pages":[{"title":"Building an \"Add Destination\" connection form","href":"/export/sdks/react/tutorials/building-an-add-destination-connection-form"},{"title":"Viewing existing destinations","href":"/export/sdks/react/tutorials/viewing-existing-destinations"},{"title":"Viewing destination transfers","href":"/export/sdks/react/tutorials/viewing-destination-transfers"},{"title":"Building an \"Edit Destination\" connection form","href":"/export/sdks/react/tutorials/building-an-edit-destination-connection-form"},{"title":"Deleting destinations","href":"/export/sdks/react/tutorials/deleting-destinations"}]}]}]},{"group":"Sources","pages":[{"title":"Overview","href":"/export/sources/overview"},{"title":"Snowflake","href":"/export/sources/snowflake"},{"title":"BigQuery","href":"/export/sources/bigquery"},{"title":"Redshift","href":"/export/sources/redshift"},{"title":"Athena","href":"/export/sources/athena"},{"group":"ClickHouse","expanded":false,"pages":[{"title":"ClickHouse","href":"/export/sources/clickhouse"},{"title":"Generic ClickHouse","href":"/export/sources/clickhouse-generic"}]},{"title":"Databricks","href":"/export/sources/databricks"},{"title":"MongoDB","href":"/export/sources/mongodb"},{"title":"MySQL","href":"/export/sources/mysql"},{"title":"Oracle","href":"/export/sources/oracle"},{"group":"Postgres","expanded":false,"pages":[{"title":"Postgres","href":"/export/sources/postgres"},{"title":"AWS Aurora","href":"/export/sources/postgres-aws-aurora"},{"title":"AWS RDS","href":"/export/sources/postgres-aws-rds"},{"title":"GCP","href":"/export/sources/postgres-gcp"}]},{"title":"SQL Server","href":"/export/sources/sql-server"},{"group":"Additional options","expanded":false,"pages":[{"title":"Additional options","href":"/export/sources/additional-options/additional-options"},{"title":"AWS SSH tunneling","href":"/export/sources/additional-options/ssh-tunneling"},{"title":"Azure SSH tunneling","href":"/export/sources/additional-options/azure-ssh-tunneling"},{"title":"GCP SSH tunneling","href":"/export/sources/additional-options/gcp-ssh-tunneling"},{"title":"S3 staging bucket","href":"/export/sources/additional-options/s3-staging-bucket"},{"title":"Google Cloud Storage staging bucket","href":"/export/sources/additional-options/google-cloud-storage-staging-bucket"},{"title":"Azure Blob Storage staging bucket","href":"/export/sources/additional-options/azure-blob-storage-staging-bucket"},{"title":"Create and rotate a service principal PAT (Azure Databricks)","href":"/export/sources/additional-options/databricks-service-principal-pat"}]}]},{"group":"Destinations","pages":[{"title":"Overview","href":"/export/destinations/overview"},{"group":"Snowflake","expanded":false,"pages":[{"title":"Snowflake","href":"/export/destinations/snowflake"},{"title":"Snowflake destination FAQs","href":"/export/destinations/snowflake-faq"},{"title":"Preparing for Snowflake password deprecation","href":"/export/destinations/migrating-snowflake-authentication-to-key-pair"}]},{"title":"BigQuery","href":"/export/destinations/bigquery"},{"title":"Databricks","href":"/export/destinations/databricks"},{"title":"Athena","href":"/export/destinations/athena"},{"title":"Redshift","href":"/export/destinations/redshift"},{"title":"Redshift Serverless","href":"/export/destinations/redshift-serverless"},{"title":"Delta Lake","href":"/export/destinations/delta-lake"},{"title":"Apache Iceberg","href":"/export/destinations/iceberg"},{"title":"Google Cloud Storage","href":"/export/destinations/gcs"},{"group":"S3","expanded":false,"pages":[{"title":"S3","href":"/export/destinations/s3"},{"title":"S3 compatible","href":"/export/destinations/s3-compatible"}]},{"title":"Azure Blob Storage","href":"/export/destinations/abs"},{"title":"ClickHouse","href":"/export/destinations/clickhouse"},{"title":"Google Sheets","href":"/export/destinations/google-sheets"},{"title":"Materialize","href":"/export/destinations/materialize"},{"title":"MongoDB","href":"/export/destinations/mongodb"},{"title":"MotherDuck","href":"/export/destinations/motherduck"},{"group":"MySQL","expanded":false,"pages":[{"title":"Generic MySQL","href":"/export/destinations/mysql"},{"title":"Aurora MySQL","href":"/export/destinations/aurora-mysql"}]},{"title":"Oracle","href":"/export/destinations/oracle"},{"group":"Postgres","expanded":false,"pages":[{"title":"Generic Postgres","href":"/export/destinations/postgres"},{"title":"AWS RDS \u0026 AWS Aurora","href":"/export/destinations/aurora-postgres"},{"title":"GCP Postgres","href":"/export/destinations/postgres-gcp"}]},{"title":"SFTP","href":"/export/destinations/sftp"},{"title":"SQL Server","href":"/export/destinations/sql-server"},{"group":"Additional options","expanded":false,"pages":[{"title":"S3 staging bucket","href":"/export/destinations/staging-s3"},{"title":"Google Cloud Storage staging bucket","href":"/export/destinations/staging-gcs"},{"title":"Azure Blob Storage staging bucket","href":"/export/destinations/staging-abs"},{"title":"Configuring AWS to GCP role assumption","href":"/export/destinations/aws-to-gcp-role-assumption"}]},{"group":"SSH tunneling","expanded":false,"pages":[{"title":"AWS SSH tunneling","href":"/export/destinations/ssh-tunneling"},{"title":"GCP SSH tunneling","href":"/export/destinations/gcp-ssh-tunneling"},{"title":"Azure SSH tunneling","href":"/export/destinations/azure-ssh-tunneling"}]}]},{"group":"Security \u0026 compliance","pages":[{"title":"Overview","href":"/export/security/overview"},{"title":"Safeguarding user data","href":"/export/security/safeguarding-user-data"},{"title":"Connection modalities","href":"/export/features/connection-modalities"},{"title":"AWS role assumption","href":"/export/deployment/iam-role-assumption"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/export/api-reference/overview"}]}]},{"product":"Prequel Import","pages":[{"title":"Prequel Import","href":"/import"}]}]},"title":"Data integrity checks - Prequel","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}