Converter Parquet para TSV

Aqui você converte Parquet para TSV 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 TSV guarda exatamente o que o Parquet 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.

Um arquivo Parquet não é algo que dá para simplesmente olhar

É um contêiner binário. O comando head nele imprime os quatro bytes PAR1 e depois uma tela de ruído, o grep não encontra nada confiável porque os valores são comprimidos e codificados por dicionário, e wc -l reporta um número sem relação com a contagem de linhas. O arquivo foi feito para ser lido por um motor de consulta, e sem um instalado na máquina, ele é opaco.

É essa a situação para a qual esta conversão serve: um extrato Parquet num servidor, um notebook sem permissão de administrador, um contêiner sem nada instalado, ou um arquivo que alguém mandou com uma pergunta que precisa de resposta nos próximos dois minutos. Transformar em linhas é o caminho mais rápido para conseguir responder qualquer coisa sobre ele.

Por que a tabulação é o separador certo para um pipeline

Valores num extrato de dados estão cheios de vírgulas — endereços, nomes de produto, texto livre, números escritos em formato europeu. Um arquivo separado por vírgula precisa envolver tudo isso em aspas, e todo consumidor do arquivo precisa implementar aspas, aspas escapadas e quebras de linha embutidas corretamente antes de conseguir achar uma fronteira de coluna.

Tabulações são quase ausentes desse tipo de dado, então o separador deixa de competir com o conteúdo. Depois desta conversão, cut -f3 acha a terceira coluna, awk -F"\t" acha, e sort -t$'\t' -k2 ordena pela segunda. Nada precisa ser interpretado; as coisas só precisam ser divididas.

O único valor que ainda quebra uma ferramenta posicional

Uma tabulação dentro de um valor é a exceção. É mais rara em dados vindos de um Parquet que em dados vindos de uma planilha, mas acontece — campos de texto livre carregam o que quer que tenha sido colado ali originalmente. Quando isso acontece, o conversor escreve esse campo entre aspas duplas, porque a alternativa seria uma linha que silenciosamente ganha uma coluna a mais.

Essa saída está correta e um interpretador de verdade lida com ela. O cut -f não lida: conta caracteres de tabulação e nunca ouviu falar de aspas, então a partir dessa linha ele vê um campo a mais e tudo depois fica deslocado. Se um pipeline produz resultados desalinhados numa fração das linhas, grep -c '"' output.tsv mostra em um segundo se é esse o motivo.

Carimbos de tempo saem numa forma que ordena

Uma coluna de carimbo de tempo é escrita como string ISO 8601 — 2024-03-11T09:30:00.000Z — a única resposta sensata num formato sem tipo de data. Ela tem uma propriedade que importa muito num shell: ordena cronologicamente sob uma ordenação léxica comum, porque os campos vão do mais significativo ao menos significativo.

sort -k4 numa coluna de data, portanto, faz o que você queria, uniq -c nos primeiros dez caracteres conta linhas por dia, e um filtro de intervalo é uma comparação de string. Nada disso funciona numa data formatada por região, e nada funciona num número de época sem aritmética.

Colunas aninhadas chegam como JSON, e o jq assume a partir daí

Parquet guarda listas, structs e mapas nativamente. Uma linha de texto não guarda, então uma coluna aninhada é escrita como JSON dentro do campo: uma lista chega como ["a","b"], um struct como um objeto com os nomes dos membros.

Isso é deliberadamente o formato que outra coisa consegue ler. cut -f5 output.tsv | jq ".[0]" pega o primeiro elemento de cada lista, e o aninhamento sobrevive à viagem em vez de ser achatado em colunas cujos nomes você precisaria descobrir. Colunas binárias sem anotação de texto são escritas em hexadecimal minúsculo por um motivo parecido: é reversível, não contém separador, e ninguém confundirá com prosa.

Nulos viram campos vazios, e o que isso esconde

Um nulo é escrito como campo vazio. Toda linha mantém o mesmo número de tabulações, então o arquivo permanece retangular e ferramentas posicionais continuam alinhadas, que é o comportamento necessário.

Também apaga uma distinção que o arquivo de origem fazia com cuidado. Parquet registra nulidade por coluna e distingue um nulo de uma string vazia; na saída os dois são os mesmos zero caracteres entre duas tabulações. Se você está contando valores ausentes, awk -F"\t" '$3==""' conta os dois juntos e nenhum comando de shell os separa de novo.

O schema não está no texto, então leia primeiro

Tudo que o arquivo Parquet sabia sobre suas colunas — o tipo de cada uma, a contagem de linhas, as estatísticas por coluna — vive num rodapé, e nada disso sobrevive num arquivo separado por tabulação. A saída tem uma linha de cabeçalho com os nomes e depois são só caracteres.

Se você tem algum jeito de ler o schema, leia antes de converter e anote. DESCRIBE SELECT * FROM "arquivo.parquet" no DuckDB imprime tudo numa instrução. Onde não há nada disponível, o texto em si é a única evidência, e o gesto sensato é conferir alguns valores distintos por coluna com cut -f2 | sort -u | head em vez de presumir que uma coluna de dígitos é uma quantidade.

Quanto texto um Parquet pequeno produz

Parquet é comprimido e codificado por dicionário, então o texto que ele expande costuma ser várias vezes o tamanho do arquivo, e frequentemente bem mais que isso. Uma coluna de códigos de status repetidos custou quase nada na origem e custa uma cópia completa por linha na saída.

Vale estimar isso antes de converter um arquivo que você ainda não olhou, porque a tabela expandida fica na memória durante a conversão. Um extrato de cem megabytes pode produzir bem mais que cem megabytes de texto, e o teto aqui chega antes do que o tamanho do arquivo em disco sugere.

O extrato é lido aqui e nada é enviado

O leitor de Parquet é uma biblioteca carregada sob demanda por esta página, e a escrita é JavaScript comum. Nenhuma requisição carrega o arquivo, então um extrato do meio de uma plataforma de dados — geralmente a versão não agregada e não mascarada — não vira uma cópia no servidor de outra pessoa só para ser lido.

Não há fila nem cadastro, e o teto é 100 MB por arquivo. Para um arquivo grande demais, a resposta é um motor de consulta, não um conversor maior, e é uma resposta melhor de qualquer forma, porque permite pegar só as colunas que interessavam.

Como converter Parquet para TSV

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

Parquet ou TSV: o que muda

Parquet comparado com TSV
ParquetTSV
Nome completoApache ParquetTab-Separated Values
Extensão do arquivo.parquet.tsv, .tab
Tipo de mídiaapplication/vnd.apache.parquettext/tab-separated-values
CompressãoSem perdas — nada é descartado
Publicado pela primeira vez20131993
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. Parquet e TSV 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.

O que o formato de destino acrescenta

TSV é formato de trabalho e Parquet é formato pronto. Volta texto editável em vez de uma imagem da página, o que costuma ser o motivo da conversão e também o seu limite.

Abrir o resultado

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

Para que serve cada formato

TSV e de 1993, descrito em IANA text/tab-separated-values. Microsoft Excel, LibreOffice Calc e pandas 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 Parquet para TSV: perguntas frequentes

Meu arquivo Parquet é 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 Parquet para TSV é 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 Parquet para TSV?

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

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

Nada é descartado. Parquet e TSV 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.

O arquivo TSV pode ser editado depois?

TSV é formato de trabalho e Parquet é formato pronto. Volta texto editável em vez de uma imagem da página, o que costuma ser o motivo da conversão e também o seu limite.

Mais sobre esses formatos