PageSourceSearch

https://docs.dataedo.com/assets/js/821b8271.41dd5e6e.js

js dataedo.com collected 2026-09-24 18:09:07 UTC 15,575 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkdataedo=self.webpackChunkdataedo||[]).push([["10569"],{96363:function(e,a,t){t.r(a),t.d(a,{frontMatter:()=>d,default:()=>m,toc:()=>x,metadata:()=>s,assets:()=>p,contentTitle:()=>h});var s=JSON.parse('{"id":"data-sources/databases/oracle/data-quality-oracle","title":"Oracle - Data Quality","description":"Learn how to improve data quality in your Oracle","source":"@site/docs/data-sources/databases/oracle/oracle-quality.mdx","sourceDirName":"data-sources/databases/oracle","slug":"/data-sources/databases/oracle/data-quality-oracle","permalink":"/data-sources/databases/oracle/data-quality-oracle","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedAt":1783588744000,"sidebarPosition":5,"frontMatter":{"id":"data-quality-oracle","title":"Oracle - Data Quality","draft":false,"slug":"/data-sources/databases/oracle/data-quality-oracle","description":"Learn how to improve data quality in your Oracle","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Oracle - Data Profiling","permalink":"/data-sources/databases/oracle/oracle-profiling"},"next":{"title":"Oracle - Foreign Keys","permalink":"/data-sources/databases/oracle/foreign-keys"}}'),r=t(85893),l=t(50065),n=t(88046),i=t(47902),o=t(5525);function u(e){let a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsxs)(a.h1,{id:"propssourcenamedata-quality",children:[e.sourceName,"\u2014Data Quality"]})}),"\n",(0,r.jsx)(a.p,{children:"With Data Quality, you can define quality checks, choose from 80+ predefined rules, monitor failed rows over time, and schedule automated checks. This feature allows your teams to maintain high data quality and quickly address quality issues once they arise."}),"\n",(0,r.jsx)(a.h2,{id:"create-rule-instances",children:"Create rule instances"}),"\n",(0,r.jsxs)(a.p,{children:["Data Quality ",(0,r.jsx)(a.strong,{children:"rules"})," define the criteria for acceptable data, while ",(0,r.jsx)(a.strong,{children:"instances"})," represent the application of those rules to columns. You can create rule instances in three ways:"]}),"\n",(0,r.jsxs)(i.Z,{className:"custom-tabs",queryString:"rule-instances",children:[(0,r.jsxs)(o.Z,{value:"method-1-from-a-column",label:"From a column",children:[(0,r.jsxs)(a.ol,{children:["\n",(0,r.jsx)(a.li,{children:"Find the table you're interested in."}),"\n",(0,r.jsxs)(a.li,{children:["Navigate to its ",(0,r.jsx)(a.strong,{children:"Data Quality"})," tab."]}),"\n",(0,r.jsxs)(a.li,{children:["Click the ",(0,r.jsx)(a.strong,{children:"Create rule instance"})," button."]}),"\n",(0,r.jsx)(a.li,{children:"Select a column from the table, then choose the rule you want to apply."}),"\n"]}),(0,r.jsx)(n.Z,{src:"/img/data-quality/assign-rule.png",width:"80%",alt:"assign rule"})]}),(0,r.jsxs)(o.Z,{value:"method-2-from-a-table",label:"From a table",children:[(0,r.jsxs)(a.ol,{children:["\n",(0,r.jsxs)(a.li,{children:["Navigate to the ",(0,r.jsx)(a.strong,{children:"Data Quality"})," tab in the main menu."]}),"\n",(0,r.jsxs)(a.li,{children:["Go to the ",(0,r.jsx)(a.strong,{children:"Rule Instances"})," tab."]}),"\n",(0,r.jsxs)(a.li,{children:["Click the ",(0,r.jsx)(a.strong,{children:"Create rule instance"})," button."]}),"\n",(0,r.jsx)(a.li,{children:"A popup will guide you through selecting a data source, table, and column, followed by choosing a rule."}),"\n"]}),(0,r.jsx)(n.Z,{src:"/img/data-quality/assign-rule-tables.png",width:"80%",alt:"assign rule tables"})]}),(0,r.jsxs)(o.Z,{value:"from-the-data-quality-tab",label:"From the Data Quality tab",children:[(0,r.jsx)(a.p,{children:"After selecting a column, the first step is to choose a rule. Each rule has the following attributes:"}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Name and description:"})," Explains what the rule checks."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Library:"})," The rule belongs to a specific library. In the future, you'll be able to create your custom rule library."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Applicable column types:"}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"All:"})," Can be assigned to any column type."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Text:"})," For string-type columns only."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Date:"})," For date-type columns only."]}),"\n"]}),"\n"]}),"\n"]}),(0,r.jsx)(n.Z,{src:"/img/data-quality/assign-rule-dq.png",width:"80%",alt:"assign rules data quality tab"})]})]}),"\n",(0,r.jsx)(a.h2,{id:"assigning-a-rule",children:"Assigning a rule"}),"\n",(0,r.jsxs)(i.Z,{className:"custom-tabs",queryString:"rule-configuration",children:[(0,r.jsxs)(o.Z,{value:"select-rule",label:"Step 1: Select a Rule",children:[(0,r.jsx)(a.p,{children:"Choose a rule for the selected column. Each rule has:"}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Name & description"})," \u2013 Explains what it checks."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Library"})," \u2013 Where the rule belongs."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Applicable column types"})," \u2013 Defines where it can be used (All, Text, Date)."]}),"\n"]}),(0,r.jsx)(a.admonition,{type:"infotoast",children:(0,r.jsx)(a.p,{children:"Warnings (such as compatibility issues) will be displayed here."})}),(0,r.jsx)(n.Z,{src:"/img/data-quality/select-rule.png",width:"80%",alt:"Select a rule"})]}),(0,r.jsxs)(o.Z,{value:"parameters-filters",label:"Step 2: Parameters & Filters",children:[(0,r.jsx)(a.p,{children:"Some rules require additional inputs:"}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Not null"})," \u2013 No parameters needed."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Allowed values"})," \u2013 Define valid values."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Value range"})," \u2013 Set min/max limits."]}),"\n"]}),(0,r.jsxs)(a.p,{children:["Optionally, apply ",(0,r.jsx)(a.strong,{children:"filters"})," to check only specific records (e.g., invoices marked as high priority)."]}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:["Filter syntax depends on your connector (e.g., ",(0,r.jsx)(a.code,{children:"[priority] = 1"})," for SQL Server)."]}),"\n"]}),(0,r.jsx)(a.p,{children:"You can also preview queries:"}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Raw rule query"})," \u2013 With placeholders."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Instance rule query"})," \u2013 With applied parameters."]}),"\n"]}),(0,r.jsx)(n.Z,{src:"/img/data-quality/filters.png",width:"80%",alt:"Parameters and Filters"})]}),(0,r.jsxs)(o.Z,{value:"failed-rows",label:"Step 3: Failed Rows",children:[(0,r.jsx)(a.p,{children:"By default, Dataedo collects numeric statistics. Enable failed row collection (up to 1,000 rows) to review issues. You'll need:"}),(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"ID column(s)"})," \u2013 To uniquely identify failed rows (defaults to Primary Key)."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Additional columns"})," \u2013 For extra details."]}),"\n"]}),(0,r.jsx)(n.Z,{src:"/img/data-quality/failed-rows.png",width:"80%",alt:"Failed Rows"})]}),(0,r.jsxs)(o.Z,{value:"settings",label:"Step 4: Settings",children:[(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Active"})," \u2013 Runs during scheduled checks."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Draft"})," \u2013 Inactive until manually enabled."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Severity"})," \u2013 Defines rule priority (e.g., critical rules run daily)."]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.strong,{children:"Description"})," \u2013 Useful for noting applied filters or rule scope."]}),"\n"]}
1),(0,r.jsx)(n.Z,{src:"/img/data-quality/settings.png",width:"80%",alt:"Settings"})]})]}),"\n",(0,r.jsx)(a.h2,{id:"browse-results",children:"Browse results"}),"\n",(0,r.jsx)(a.p,{children:"Dataedo lets you track data quality across columns and tables. You can see data quality scores, check rule instances with severity and status details, and review historical trends. The Data Quality tab lists all rule instances, showing tested rows, failures, and execution timestamps."}),"\n",(0,r.jsx)(a.p,{children:"Data Quality dashboards show key metrics, rule counts, and status breakdowns, helping you spot issues and track trends. Whether checking individual rule instances or assessing overall data health, these tools give you a clear view of data quality."}),"\n",(0,r.jsx)(a.admonition,{type:"tiptoast",children:(0,r.jsxs)(a.p,{children:["Check the ",(0,r.jsx)(a.a,{href:"/data-quality",children:"Data Quality documentation"})," to learn more."]})}),"\n",(0,r.jsx)(a.h2,{id:"run-data-quality",children:"Run data quality"}),"\n",(0,r.jsxs)(a.p,{children:["Data Quality runs through ",(0,r.jsx)(a.a,{href:"/configure-and-manage/scheduler/",children:"Dataedo scheduler"}),", and you can find detailed setup instructions in this document."]}),"\n",(0,r.jsx)(a.p,{children:"It is a standalone task you can select, similar to scheduling imports or profiling. The key difference is that you can schedule runs based on the severity of the instances. This allows you to prioritize higher-severity instances, running Data Quality checks more frequently for critical issues, while lower-severity instances can be scheduled separately to run less often."}),"\n",(0,r.jsx)(n.Z,{src:"/img/data-quality/run-quality-1.png",width:"80%",alt:"run data quality step 1"}),"\n",(0,r.jsx)(a.p,{children:"The rest of the scheduling process is the same. You can test your connection, specify how often the task should run, and adjust the Data Quality tasks to include instances based on their severity."}),"\n",(0,r.jsx)(n.Z,{src:"/img/data-quality/run-quality-2.png",width:"80%",alt:"run data quality step 2"})]})}function c(e={}){let{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}let d={id:"data-quality-oracle",title:"Oracle - Data Quality",draft:!1,slug:"/data-sources/databases/oracle/data-quality-oracle",description:"Learn how to improve data quality in your Oracle",sidebar_position:5},h=void 0,p={},x=[{value:"Create rule instances",id:"create-rule-instances",level:2},{value:"Assigning a rule",id:"assigning-a-rule",level:2},{value:"Browse results",id:"browse-results",level:2},{value:"Run data quality",id:"run-data-quality",level:2}];function y(e){return(0,r.jsx)(c,{sourceName:"Oracle Database"})}function m(e={}){let{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(y,{...e})}):y(e)}},5525:function(e,a,t){t.d(a,{Z:()=>l});var s=t(85893);t(67294);var r=t(67026);function l({children:e,hidden:a,className:t}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)("tabItem_Ymn6",t),hidden:a,children:e})}},47902:function(e,a,t){t.d(a,{Z:()=>j});var s=t(85893),r=t(67294),l=t(67026),n=t(69599),i=t(16550),o=t(32e3),u=t(4520),c=t(38341),d=t(76009);function h(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){let{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p({value:e,tabValues:a}){return a.some(a=>a.value===e)}var x=t(7227);function y({className:e,block:a,selectedValue:t,selectValue:r,tabValues:i}){let o=[],{blockElementScrollPositionUntilNextRender:u}=(0,n.o5)(),c=e=>{let a=e.currentTarget,s=i[o.indexOf(a)].value;s!==t&&(u(a),r(s))},d=e=>{let a=null;switch(e.key){case"Enter":c(e);break;
1case"ArrowRight":{let t=o.indexOf(e.currentTarget)+1;a=o[t]??o[0];break}case"ArrowLeft":{let t=o.indexOf(e.currentTarget)-1;a=o[t]??o[o.length-1]}}a?.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},e),children:i.map(({value:e,label:a,attributes:r})=>(0,s.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{o.push(e)},onKeyDown:d,onClick:c,...r,className:(0,l.Z)("tabs__item","tabItem_LNqP",r?.className,{"tabs__item--active":t===e}),children:a??e},e))})}function m({lazy:e,children:a,selectedValue:t}){let n=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){let e=n.find(e=>e.props.value===t);return e?(0,r.cloneElement)(e,{className:(0,l.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:n.map((e,a)=>(0,r.cloneElement)(e,{key:a,hidden:e.props.value!==t}))})}function g(e){let a=function(e){let{defaultValue:a,queryString:t=!1,groupId:s}=e,l=function(e){let{values:a,children:t}=e;return(0,r.useMemo)(()=>{let e=a??h(t).map(({props:{value:e,label:a,attributes:t,default:s}})=>({value:e,label:a,attributes:t,default:s})),s=(0,c.lx)(e,(e,a)=>e.value===a.value);if(s.length>0)throw Error(`Docusaurus error: Duplicate values "${s.map(e=>e.value).join(", ")}" found in <Tabs>. Every value needs to be unique.`);return e},[a,t])}(e),[n,x]=(0,r.useState)(()=>(function({defaultValue:e,tabValues:a}){if(0===a.length)throw Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!p({value:e,tabValues:a}))throw Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}let t=a.find(e=>e.default)??a[0];if(!t)throw Error("Unexpected error: 0 tabValues");return t.value})({defaultValue:a,tabValues:l})),[y,m]=function({queryString:e=!1,groupId:a}){let t=(0,i.k6)(),s=function({queryString:e=!1,groupId:a}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,u._X)(s),(0,r.useCallback)(e=>{if(!s)return;let a=new URLSearchParams(t.location.search);a.set(s,e),t.replace({...t.location,search:a.toString()})},[s,t])]}({queryString:t,groupId:s}),[g,j]=function({groupId:e}){let a=e?`docusaurus.tab.${e}`:null,[t,s]=(0,d.Nk)(a);return[t,(0,r.useCallback)(e=>{a&&s.set(e)},[a,s])]}({groupId:s}),f=(()=>{let e=y??g;return p({value:e,tabValues:l})?e:null})();return(0,o.Z)(()=>{f&&x(f)},[f]),{selectedValue:n,selectValue:(0,r.useCallback)(e=>{if(!p({value:e,tabValues:l}))throw Error(`Can't select invalid tab value=${e}`);x(e),m(e),j(e)},[m,j,l]),tabValues:l}}(e);return(0,s.jsxs)("div",{className:(0,l.Z)("tabs-container","tabList__CuJ"),children:[(0,s.jsx)(y,{...a,...e}),(0,s.jsx)(m,{...a,...e})]})}function j(e){let a=(0,x.Z)();return(0,s.jsx)(g,{...e,children:h(e.children)},String(a))}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.