AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 118290
Accepted
Juan Velez
Juan Velez
Asked: 2015-10-17 10:16:18 +0800 CST2015-10-17 10:16:18 +0800 CST 2015-10-17 10:16:18 +0800 CST

SSIS - Ferramenta/técnica de mapeamento de arquivo simples de largura fixa

  • 772

Eu estou querendo saber se existe uma ferramenta (ou uma técnica especial) que alguém usou para mapear arquivos simples de largura fixa em gerenciadores de conexão de arquivo simples SSIS?

Normalmente, eu apenas uso o Editor do Gerenciador de Conexões de Arquivo Simples (guia Avançado) e começo a adicionar as informações da coluna (nome, largura, tipo de dados etc.) para todas as colunas 1 por 1.

Isso funcionou bem para mim no passado, mas agora tenho que mapear um arquivo de largura fixa com cerca de 500 colunas...

Estou pensando (esperando) que deve haver uma ferramenta ou técnica que eu possa usar que me permita realizar o mapeamento de uma forma mais simplificada...

Usando o dicionário de dados que me foi fornecido para o arquivo, eu poderia criar facilmente um documento do Excel (ou texto), por exemplo, com algumas colunas que incluem as informações necessárias que o SSIS precisa (nome da coluna, delimitador, largura da coluna de entrada, largura da coluna de saída, tipo de dados) para mapear o arquivo .

Gostaria de saber se existe uma ferramenta ou componente SSIS que possa ler este arquivo e criar automaticamente os mapeamentos no Flat File Connection Manager para mim...

Se não existe essa ferramenta, alguém tem algum truque ou dica que possa me ajudar a mapear o arquivo da maneira mais eficiente?

Estou me perguntando se talvez eu possa modificar o arquivo xml do pacote SSIS de uma maneira que eu possa criar algum código que crie um script com as informações da coluna para todas as colunas no formato xml e, em seguida, eu possa copiá-lo e colá-lo manualmente no xml do pacote arquivo ... não tenho certeza se isso funcionaria ....

Obs: Após mapear o arquivo no SSIS, ele será carregado em uma tabela do SQL Server

Editor do Gerenciador de Conexões de Arquivo Simples

sql-server ssis
  • 1 1 respostas
  • 8623 Views

1 respostas

  • Voted
  1. Best Answer
    billinkc
    2015-10-17T11:50:59+08:002015-10-17T11:50:59+08:00

    Duas opções vêm à mente, ambas são recursos do BIDS Helper que não pode dizer coisas boas o suficiente sobre esta ferramenta gratuita .

    Criar colunas de largura fixa

    O primeiro é o recurso Criar colunas de largura fixa . É tão simples quanto criar um gerenciador de arquivos simples apontando para o arquivo correto e definir 1 coluna.

    Feito isso, clique com o botão direito do mouse novamente no Connection Manager e use o recurso sensível ao contexto de "Criar colunas de largura fixa ..."

    insira a descrição da imagem aqui

    Na próxima janela, cole a lista delimitada por tabulações (Excel) no editor

    insira a descrição da imagem aqui

    Oh sim, é simples. Se você precisar fazer alguns ajustes nos tipos de coluna e outros, entre e altere-os normalmente com a edição.

    biml

    Eu gosto do Business Intelligence Markup Language para o meu desenvolvimento SSIS. Há muitos benefícios nisso, mas em um nível mais básico, use-o para coisas como arquivos simples, especialmente quando eles não fornecem linhas de cabeçalho (estou olhando para vocês, seus mainframes).

    Muitas vezes, minha experiência ao lidar com sistemas legados é que eles têm suas definições de arquivo em copybooks COBOL. Esses desenvolvedores me enviarão arquivos do Excel com o layout da coluna como

    DATABASE FIELD NAME    START LOC   LENGTH
    SEND.DT                 1          STRING(08)
    SEND.TIME               9          STRING(08)
    DT                     17          STRING(08)
    TERM                   25          STRING(04)
    %ZONE                  29          STRING(01)
    

    Não é sofisticado, mas as fórmulas do Excel simplificaram o trabalho. Então, eu criaria 4 novas colunas com base no acima.

    Nome sanitizado (caracteres inválidos removidos para nomes de colunas)

    =SUBSTITUTE(SUBSTITUTE(B3, ".", "_"), "%", "PCT_")
    

    Comprimento (extraído os números, observe que ainda tem um 0 à esquerda, mas não prejudica)

    =MID(E3,LEN("STRING(")+1,LEN(E3)-LEN("STRING(")-1)
    

    XML (isso cria o XML real para uma definição de arquivo simples)

    =CONCATENATE("<Column Name=""",F3,""" Length=""",G3,"""  DataType=""AnsiString""  ColumnType=""FixedWidth""  CodePage=""1252"" />")
    

    DDL (é melhor construir a tabela de destino enquanto estou nisso)

    =CONCATENATE(",   ", F3, " varchar(", G3, ")")
    

    A primeira coluna do DDL obtém a vírgula principal descartada e, em seguida, agrupada comCREATE TABLE dbo.FOO()

    Em última análise, esse XML resulta em algo que é colocado em uma FlatFileFormattag e, em seguida, é uma simples questão de criar a coleção Connections e, finalmente, o próprio pacote. Parece muito, mas na verdade é bem simples, uma vez que você tenha um padrão.

    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
    
        <FileFormats>
            <FlatFileFormat
                Name="FFF Pickup"
                CodePage="1252"
                RowDelimiter="CRLF"
                IsUnicode="false"
                FlatFileType="RaggedRight">
                <Columns>
                    <Column Name="SEND_DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="SEND_TIME" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="TERM" Length="04"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <!--
                    ad nauseum
                    --> 
                    <Column Name="RPRTD_PU_PCS" Length="5"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                </Columns>
            </FlatFileFormat>
        </FileFormats>
    
        <Connections>
            <FlatFileConnection
                Name="FF Pickup"
                FileFormat="FFF Pickup"
                FilePath="C:\ssisdata\Operations\Input\Pickup Report Pickups.txt"
                CreateInProject="false"
            />
        </Connections>
    
    <Packages>
        <Package Name="PickupLoad" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
            <Tasks>
                <Dataflow Name="DFT Load Pickups" >
                    <Transformations>
                        <FlatFileSource 
                            Name="OLE_SRC Pickup" 
                            ConnectionName="FF Pickup" 
                            RetainNulls="true">
                        </FlatFileSource>
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
    

    Ah, e uma pergunta semelhante do SO com uma resposta perturbadoramente semelhante. Gostaria de ter olhado os comentários de Skinner antes de reescrever esta resposta.

    • 11

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve