Pular para o conteúdo principal
Uma ferramenta simples para ofuscação de dados de tabelas. Ela lê uma tabela de entrada e produz uma tabela de saída, que preserva algumas propriedades da entrada, mas contém dados diferentes. Ela permite publicar dados de produção quase reais para uso em benchmarks. Ela foi projetada para preservar as seguintes propriedades dos dados:
  • cardinalidades dos valores (número de valores distintos) para cada coluna e cada tupla de colunas;
  • cardinalidades condicionais: número de valores distintos de uma coluna sob a condição do valor de outra coluna;
  • distribuições de probabilidade do valor absoluto de inteiros; o sinal de inteiros com sinal; expoente e sinal de números de ponto flutuante;
  • distribuições de probabilidade do comprimento de strings;
  • probabilidade de valores numéricos zero; strings e arrays vazios; NULLs;
  • taxa de compressão dos dados quando comprimidos com LZ77 e codecs da família de entropia;
  • continuidade (magnitude da diferença) dos valores de tempo ao longo da tabela; continuidade dos valores de ponto flutuante;
  • componente de data de valores DateTime;
  • validade UTF-8 dos valores de string;
  • os valores de string parecem naturais.
A maior parte das propriedades acima é útil para testes de desempenho: a leitura de dados, a filtragem, a agregação e a ordenação funcionarão quase na mesma velocidade que nos dados originais, devido às cardinalidades, magnitudes, taxas de compressão etc. preservadas. Ela funciona de forma determinística: você define um valor de seed, e a transformação é determinada pelos dados de entrada e pela seed. Algumas transformações são um para um e podem ser revertidas, então você precisa usar uma seed grande e mantê-la em segredo. Ela usa algumas primitivas criptográficas para transformar os dados, mas, do ponto de vista criptográfico, não faz isso corretamente; por isso, você não deve considerar o resultado seguro, a menos que tenha outro motivo para isso. O resultado pode preservar alguns dados que você não quer publicar. Ela sempre deixa exatamente como nos dados de origem os números 0, 1 e -1, as datas, os comprimentos de arrays e os sinalizadores de nulo. Por exemplo, se você tem uma coluna IsMobile na sua tabela com valores 0 e 1, nos dados transformados ela terá os mesmos valores. Assim, o usuário poderá calcular a proporção exata de tráfego móvel. Vamos dar outro exemplo. Quando você tem alguns dados privados na sua tabela, como o e-mail do usuário, e não quer publicar nenhum endereço de e-mail individual. Se sua tabela for grande o suficiente, contiver vários e-mails diferentes e nenhum e-mail tiver uma frequência muito maior que os demais, ela anonimizará todos os dados. Mas, se você tiver um pequeno número de valores diferentes em uma coluna, ela poderá reproduzir alguns deles. Você deve analisar como o algoritmo desta ferramenta funciona e ajustar seus parâmetros de linha de comando. Esta ferramenta funciona bem apenas com pelo menos uma quantidade moderada de dados (pelo menos milhares de linhas).
Última modificação em 12 de junho de 2026