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