Data Lake
3. Importar ou Exportar
3.2. Extração metadados SQL-Server
É 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 SQL-Server, selecionar as tabelas de metadados do SQL-Server 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 SQL-Server e a partir dela gerar um arquivo no formato formato CSV para para ser importada como explica a capítulo anterior.
select UPPER(COLUMNS.TABLE_NAME) AS TABLE_INTERNALNAME,
UPPER(COLUMNS.TABLE_NAME) AS TABLE_NAME,
'' AS TABLE_COMMENT,
'' AS TABLE_TAGS,
UPPER(COLUMN_NAME) AS COLUMN_INTERNALNAME,
UPPER(COLUMN_NAME) AS COLUMN_NAME,
CONVERT(VARCHAR,P.value) AS COLUMN_COMMENT,
'' AS COLUMN_TAGS,
CASE
DATA_TYPE
WHEN 'bigint' THEN 9
WHEN 'float' THEN 8
WHEN 'bit' THEN 1
WHEN 'char' THEN 1
WHEN 'date' THEN 7
WHEN 'datetime' THEN 3
WHEN 'datetime2' THEN 3
WHEN 'decimal' THEN 4
WHEN 'money' THEN 4
WHEN 'numeric' THEN 4
WHEN 'int' THEN 2
WHEN 'nchar' THEN 1
WHEN 'NTEXT' THEN 1
WHEN 'text' THEN 1
WHEN 'nvarchar' THEN 1
WHEN 'smalldatetime' THEN 3
WHEN 'smallint' THEN 2
WHEN 'tinyint' THEN 2
WHEN 'uniqueidentifier' THEN 1
WHEN 'varbinary' THEN 1
WHEN 'varchar' THEN 1
WHEN 'boolean' THEN 1
WHEN 'timestamp' THEN 1 END AS COLUMN_DATATYPE,
CASE
WHEN DATA_TYPE = 'nvarchar' THEN coalesce(character_maximum_length,4000)
WHEN DATA_TYPE = 'varchar' and CHARACTER_MAXIMUM_LENGTH = '-1' THEN 4000
WHEN DATA_TYPE = 'NTEXT' THEN 65535
WHEN DATA_TYPE = 'uniqueidentifier' THEN 36
WHEN DATA_TYPE = 'timestamp' THEN 36
WHEN DATA_TYPE = 'boolean' THEN 1
WHEN DATA_TYPE = 'bit' THEN 1
WHEN DATA_TYPE = 'varbinary' THEN coalesce(character_maximum_length,4000)
WHEN DATA_TYPE = 'decimal' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'bigint' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'int' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'smallint' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'tinyint' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'money' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN DATA_TYPE = 'numeric' THEN CONVERT(VARCHAR,NUMERIC_PRECISION)
WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ''
ELSE CHARACTER_MAXIMUM_LENGTH END AS COLUMN_SIZE,
CASE
WHEN NUMERIC_SCALE IS NULL THEN ''
WHEN DATA_TYPE = 'decimal' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'bigint' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'int' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'tinyint' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'smallint' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'money' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
WHEN DATA_TYPE = 'numeric' THEN CONVERT(VARCHAR,NUMERIC_SCALE)
ELSE '' END AS COLUMN_PRECISION,
CASE
IS_NULLABLE WHEN 'NO' THEN 0
WHEN 'YES' THEN 1 END AS COLUMN_NULLABLE,
'0' AS COLUMN_PARTITIONED
FROM INFORMATION_SCHEMA.COLUMNS
LEFT JOIN sys.extended_properties p
ON (p.major_id = OBJECT_ID(COLUMNS.TABLE_NAME) AND p.minor_id = COLUMNPROPERTY(p.major_id, COLUMNS.COLUMN_NAME, 'ColumnID') and p.name = 'MS_Description')
WHERE COLUMNS.TABLE_CATALOG = 'CATALOGO 1' -- substitua aqui o nome do catalogo a ser extraido
AND TABLE_NAME in ('TABLE 1', 'TABLE 2') -- substitua aqui a lista das tabelas para recuperar o catalogo
Order by COLUMNS.TABLE_NAME,ORDINAL_POSITION