Data Lake
3. Importar ou Exportar
3.1. Extração metadados Oracle
É possível utilizar o Pentaho Data Integration para importar os metadados, criamos um plug-in que facilita esta ação. Desta forma basta criar uma conexão com o Banco de dados Oracle, selecionar as tabelas de metadados do Oracle e executar a transformação. Utilize o Link para baixar um exemplo desta transformação pronta.
Abaixo uma query de como extrair as informações do metadados do Oracle e a partir dela gerar um arquivo no formato formato CSV para para ser importada como explica a capítulo anterior.
SELECT trim(UPPER(COL.TABLE_NAME)) AS TABLE_INTERNALNAME, trim(UPPER(COL.TABLE_NAME)) AS TABLE_NAME, TAB_COMN.COMMENTS AS TABLE_COMMENT, '' AS TABLE_TAGS, trim(UPPER(COL.COLUMN_NAME)) AS COLUMN_INTERNALNAME, trim(UPPER(COL.COLUMN_NAME)) AS COLUMN_NAME, COL_COMN.COMMENTS AS COLUMN_COMMENT, '' AS COLUMN_TAGS, CASE WHEN DATA_TYPE IN ('VARCHAR2','CHAR','CLOB') THEN '1' --> String WHEN DATA_TYPE IN ('NUMBER') AND DATA_SCALE = 0 AND DATA_PRECISION <= 9 then '2' --> Int (Number, Não possui casas decimais e é menor que oito pocisões) WHEN DATA_TYPE IN ('NUMBER') AND DATA_SCALE = 0 then '9' --> Bigint (Number, Não possui casas decimais e é maior que oito pocisões) WHEN DATA_TYPE IN ('NUMBER') AND (DATA_PRECISION-DATA_SCALE) <= 17 THEN '4' --Number WHEN DATA_TYPE IN ('NUMBER') THEN '8' --BigNumber WHEN DATA_TYPE IN ('DATE') THEN '3' --DateTime WHEN DATA_TYPE IN ('TIMESTAMP(6)') THEN '3' --> Date Time WHEN DATA_TYPE IN ('INTERVAL DAY(2) TO SECOND(6)') THEN '1' -- STRING END AS COLUMN_DATATYPE, --> Data Type CASE WHEN DATA_TYPE IN ('VARCHAR2','CHAR','CLOB') THEN TO_CHAR(DATA_LENGTH) WHEN DATA_TYPE IN ('NUMBER') AND DATA_SCALE = 0 THEN '0' --> Int ou Bigint (não é necessário especificar o tamanho do campo) WHEN DATA_TYPE IN ('NUMBER') AND DATA_PRECISION IS NOT NULL THEN TO_CHAR(DATA_PRECISION) WHEN DATA_TYPE IN ('NUMBER') AND DATA_PRECISION IS NULL THEN TO_CHAR(DATA_LENGTH) WHEN DATA_TYPE IN ('DATE') THEN TO_CHAR(DATA_LENGTH) WHEN DATA_TYPE IN ('TIMESTAMP(6)') THEN '' WHEN DATA_TYPE IN ('INTERVAL DAY(2) TO SECOND(6)') THEN '20' -- STRING 20 END AS COLUMN_SIZE, --> Tamanho do campo CASE WHEN DATA_TYPE IN ('NUMBER') AND DATA_SCALE IS NOT NULL THEN TO_CHAR(DATA_SCALE) WHEN DATA_TYPE IN ('NUMBER') AND DATA_SCALE IS NULL THEN '0' ELSE '0' END AS COLUMN_PRECISION, --> Casas decimais CASE NULLABLE WHEN 'N' THEN '0' WHEN 'Y' THEN '1' END AS COLUMN_NULLABLE, '0' COLUMN_PARTITIONED FROM ALL_TAB_COLUMNS COL LEFT JOIN all_TAB_comments TAB_COMN ON (COL.OWNER = TAB_COMN.OWNER AND COL.TABLE_NAME = TAB_COMN.TABLE_NAME) LEFT join all_COL_comments COL_COMN ON (COL.OWNER = COL_COMN.OWNER AND COL.TABLE_NAME = COL_COMN.TABLE_NAME AND COL.COLUMN_NAME = COL_COMN.COLUMN_NAME) WHERE COL.TABLE_NAME in ('TABLE 1','TABLE 2') --> Substitua aqui a lista das tabelas a serem importadas and col.owner in ('OWNER 1','OWNER 2') --> Substitua aqui a lista de Owners a serem importados order by UPPER(COL.TABLE_NAME), COL.COLUMN_ID