Converter TSV para Parquet

Aqui você converte TSV para Parquet de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.

  • Onde roda No seu navegador. O arquivo nunca é enviado.
  • Sem perdas Nada é descartado. O Parquet guarda exatamente o que o TSV guardava.
  • Limite de tamanho Até 100 MB por arquivo, de graça e sem conta.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

As tabelas separadas por tabulação que ferramentas de análise produzem

Boa parte da saída científica e analítica é separada por tabulação por convenção em vez de escolha: matrizes de expressão gênica, tabelas de variante, tabelas de anotação, logs de instrumento, exportações de plataforma de anúncio. A tabulação foi escolhida porque as colunas descritivas costumam estar cheias de vírgulas e ponto-e-vírgula.

É um formato ruim para computar repetidamente contra ele. Toda leitura interpreta todo byte, toda ferramenta re-deriva os tipos de coluna de um jeito ligeiramente diferente, e uma tabela que vai ser filtrada cem vezes paga o custo de análise cem vezes. Converter uma vez para um arquivo colunar tipado move esse trabalho para o início.

NA, um ponto solto e um traço: os sentinelas que retipam uma coluna

Uma coluna Parquet guarda um tipo só para todos os valores. O gravador aqui lê a coluna inteira antes de decidir, e a regra é deliberadamente rígida: se todo valor não vazio é booleano, a coluna é BOOLEAN; se são todos inteiros dentro do intervalo de 32 bits, é INT32; se são todos números, é DOUBLE; e se um único valor não é nenhum desses, a coluna inteira é string.

Tabelas de análise estão cheias de valores que não são nenhum desses. NA é a convenção do R. Um ponto solto é a convenção VCF e GTF para campo ausente. -, n/a, NULL, #N/A e -- aparecem dependendo de qual programa escreveu o arquivo. Qualquer um deles em qualquer linha transforma uma coluna de dez milhões de números numa coluna de dez milhões de strings.

Por que o gravador se recusa a descartar o valor em vez disso

A alternativa tentadora é tipar a coluna a partir da primeira linha, ou das primeiras mil, e escrever qualquer coisa que discorde como nulo. A maioria das ferramentas faz exatamente isso. Produz um arquivo válido, carrega sem aviso, e apagou silenciosamente toda linha onde o marcador aparecia.

Ninguém descobre isso até uma contagem voltar menor que o esperado. Uma coluna string é barulhenta: aparece no momento em que você olha o esquema, pode ser convertida numa expressão só, e a conversão vai dizer exatamente quais valores não puderam ser convertidos.

Achando o sentinela antes de converter

Leva um comando. cut -f7 tabela.tsv | sort -u | head -50 imprime os valores distintos da sétima coluna, e o marcador vai estar óbvio entre eles. Fazer isso em toda coluna de uma tabela larga é um loop; fazer nas três colunas que você realmente filtra costuma bastar.

O conserto é na origem, não no conversor: substitua o marcador por um campo genuinamente vazio. Nulos são excluídos da inferência de tipo, então uma coluna de números com lacunas reais chega como uma coluna numérica com nulos nela.

Uma tabela com duas mil colunas de largura

Tabelas largas são onde o layout colunar mais se paga. Uma matriz de expressão com uma linha por gene e uma coluna por amostra, ou uma tabela de característica com uma coluna por medida, é armazenada uma coluna após a outra em vez de uma linha após a outra — então uma consulta nomeando quatro colunas lê só o equivalente a quatro colunas de bytes.

Contra um arquivo separado por tabulação, a mesma consulta precisa ler todo byte de toda linha para achar os campos que quer, porque o único jeito de localizar o décimo sétimo campo de uma linha é contar dezessete tabulações. Essa diferença não diminui conforme a tabela cresce; ela aumenta.

Precisão, e por que números inteiros podem acabar como DOUBLE

O gravador emite INT32 só onde todo valor da coluna cabe dentro do intervalo de 32 bits. Além disso a coluna vira DOUBLE em vez de INT64, o que surpreende quem sabe que o Parquet tem um tipo inteiro de 64 bits.

O motivo é honestidade sobre o que chegou. Valores passam por números JavaScript no caminho de entrada, que carregam 53 bits de precisão inteira, então uma coordenada genômica ou um identificador de evento além desse ponto já foi arredondado antes de o gravador vê-lo.

O que fica registrado sobre a sua tabela

O rodapé do arquivo guarda os nomes das colunas como o cabeçalho os escreveu, o tipo de cada uma, e a contagem de linhas. Este site não passa nenhuma opção de codec de compressão para o gravador, então qual algoritmo comprime cada coluna é uma decisão da biblioteca por baixo, e não algo que esta página vá te prometer.

O que fica claro de qualquer forma é onde o tamanho tende a ir numa tabela de análise. Uma coluna de cromossomo, um identificador de amostra, uma categoria — cada uma tem um punhado de valores distintos repetidos ao longo de milhões de linhas, e é exatamente o tipo de coluna que um formato colunar sabe encolher bem.

Consultando o resultado no DuckDB sem carregá-lo

O DuckDB lê o arquivo no lugar: uma cláusula FROM nomeando o caminho basta, sem passo de importação e sem definição de tabela. DESCRIBE SELECT * FROM "tabela.parquet" imprime o esquema inferido, a primeira coisa a olhar e o jeito mais rápido de achar uma coluna que chegou como texto.

O pandas lê num único chamado e o Spark trata como formato de tabela nativo. Nos três, o movimento correto depois de uma surpresa é consultar os valores ofensores em vez de converter às cegas.

Onde a conversão acontece e quão grande a tabela pode ser

As duas metades rodam nesta página: o interpretador separado por tabulação é JavaScript puro e o gravador Parquet é uma biblioteca carregada sob demanda. Nada é enviado, o que importa para um conjunto de resultados não publicado ou uma medição sob embargo.

A tabela inteira fica em memória enquanto é transposta em colunas, então dezenas de megabytes converte sem cerimônia e várias centenas é onde uma aba do navegador começa a forçar. Uma matriz de vários gigabytes pertence ao DuckDB.

Quando o arquivo separado por tabulação deveria continuar como está

Mantenha se uma pessoa ou script precisa ler como texto. Parquet é binário, não é editável, e o registro aponta seu suporte como irregular — um colaborador sem a ferramenta certa não consegue abrir de jeito nenhum.

Mantenha também se o arquivo é um artefato publicado. Tabelas separadas por tabulação são o que revistas, repositórios e conjuntos de dados públicos aceitam. Converta para Parquet para a cópia de trabalho — a que você filtra, junta e agrega repetidamente — e mantenha o original como registro.

Como converter TSV para Parquet

  1. Solte o seu arquivo TSV nesta página, ou clique para escolher um.
  2. Escolha Parquet como destino. A conversão acontece no seu navegador e o arquivo não é enviado.
  3. Baixe o arquivo Parquet pronto.

TSV ou Parquet: o que muda

TSV comparado com Parquet
TSVParquet
Nome completoTab-Separated ValuesApache Parquet
Extensão do arquivo.tsv, .tab.parquet
Tipo de mídiatext/tab-separated-valuesapplication/vnd.apache.parquet
CompressãoSem perdas — nada é descartado
Publicado pela primeira vez19932013
Publicado porApache Software Foundation
EspecificaçãoIANA text/tab-separated-values
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarCSV, JSONCSV, JSON

O que se mantém

Nada é descartado. TSV e Parquet guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Abrir o resultado

pandas lê tanto TSV quanto Parquet, então dá para comparar o resultado com o original sem um segundo programa.

Para que serve cada formato

TSV foi publicado em 1993. Está descrito em IANA text/tab-separated-values, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.

Parquet vem da Apache Software Foundation é de 2013. pandas, Apache Spark e DuckDB leem o formato.

TSV foi publicado em 1993 e Parquet em 2013. O mais antigo costuma ser o arquivo mais seguro para entregar; o mais novo faz o mesmo com menos bytes.

De TSV para Parquet: perguntas frequentes

Meu arquivo TSV é enviado para algum lugar?

Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo. O motor deste par específico é parquet-wasm, uma compilação em WebAssembly do leitor do Apache Arrow; seu navegador baixa isso uma vez e guarda.

Converter TSV para Parquet é grátis?

É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez. parquet-wasm é baixado para a sua máquina e roda lá, e por isso não há contador.

Perde qualidade ao converter TSV para Parquet?

Não. Parquet guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original.

A conversão de TSV para Parquet é sem perda?

Nada é descartado. TSV e Parquet guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Mais sobre esses formatos