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