2026-03-12 20:23:15
This commit is contained in:
69
Kevin_Meade/showgencardinalitycheckcode.sql
Normal file
69
Kevin_Meade/showgencardinalitycheckcode.sql
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
|
||||
@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 1
|
||||
@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 2
|
||||
@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 3
|
||||
@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 4
|
||||
|
||||
|
||||
use this to get a starting point for best combination of columns based on distinct
|
||||
note this still have the NULLS issue maybe (how do we handle columns with large % of null values)
|
||||
but ignoring this, the technique is pretty solid
|
||||
|
||||
generate code and run it to find out how distinct different combinations of columns are
|
||||
give some list of columns generate the possible combinations of columns restricted to a limited number (exp. combinations of N things taken M at a time)
|
||||
results should point you to a good starting set of columns for an index given you list of columns you are intersted in
|
||||
from this you use GENCARDINALITYCHECKCODE2.SQL
|
||||
|
||||
*/
|
||||
|
||||
with
|
||||
table_data as (
|
||||
select owner,table_name
|
||||
from dba_tables
|
||||
where owner = upper('&&1')
|
||||
and table_name = upper('&&2')
|
||||
)
|
||||
, column_list as (
|
||||
select dba_tab_columns.owner,dba_tab_columns.table_name,dba_tab_columns.column_name
|
||||
from dba_tab_columns
|
||||
,table_data
|
||||
where dba_tab_columns.owner = table_data.owner
|
||||
and dba_tab_columns.table_name = table_data.table_name
|
||||
and instr(','||upper('&&3')||',',','||dba_tab_columns.column_name||',') > 0
|
||||
)
|
||||
, column_expression as (
|
||||
select a.*
|
||||
,length(sys_connect_by_path(a.column_name,','))-length(replace(sys_connect_by_path(a.column_name,','),',')) column_count
|
||||
,substr(sys_connect_by_path(a.column_name,'||'',''||'),8) column_expression
|
||||
from column_list a
|
||||
connect by prior a.column_name < a.column_name
|
||||
)
|
||||
select 'clear columns' from dual union all
|
||||
select 'col column_count newline' from dual union all
|
||||
select 'col COLUMN_EXPRESSION format a800' from dual union all
|
||||
select 'set linesize 999' from dual union all
|
||||
select 'set pagesize 0' from dual union all
|
||||
select 'set trimspool on' from dual union all
|
||||
select 'set trimout on' from dual union all
|
||||
--select 'set feedback off' from dual union all
|
||||
--select 'set timing off' from dual union all
|
||||
--select 'set time off' from dual union all
|
||||
select '--owner table_name rowcount number_of_columns column_combo_cardinality column_expression' from dual union all
|
||||
select 'select '''||table_data.owner||''' owner,'''||table_data.table_name||''' table_name,count(*) table_rowcount'
|
||||
from table_data
|
||||
union all
|
||||
select *
|
||||
from (
|
||||
select ' ,'||column_expression.column_count||' column_count,count(distinct '||column_expression.column_expression||') expression_rowcount,'''||replace(column_expression.column_expression,chr(39),chr(39)||chr(39))||''' column_expression'
|
||||
from column_expression
|
||||
where column_count <= &&4
|
||||
order by column_count,column_expression
|
||||
)
|
||||
union all
|
||||
select 'from '||table_data.owner||'.'||table_data.table_name
|
||||
from table_data
|
||||
union all
|
||||
select '/'
|
||||
from table_data
|
||||
/
|
||||
Reference in New Issue
Block a user