Referências de metadados de origem

O Wrangle é compatível com um conjunto de variáveis, que podem ser usadas para referenciar programaticamente aspectos do conjunto de dados ou os dados de origem. Essas referências de metadados permitem criar transformações individuais com muito mais escopo e flexibilidade.

Dica: algumas etapas de transformação impossibilitam o acesso a metadados sobre a fonte de dados original. É melhor usar essas referências, quando possível, no início do seu roteiro. Veja mais informações a seguir.

Dica: é possível usar $filepath e $sourcerownumber para criar uma chave primária a fim de identificar informações de origem de qualquer linha dos conjuntos de dados baseados em arquivo.

$filepath

Essa referência recupera o caminho completo para uma linha de dados proveniente de um arquivo. Como você está trabalhando com um conjunto de dados no aplicativo, pode ser útil saber onde o arquivo de cada linha de dados foi originado. Usando a função $filepath, é possível gerar colunas de dados no início do roteiro para reter essas informações úteis.

As transformações a seguir podem tornar inválidas ou indisponíveis as informações do caminho do arquivo:

  • pivot
  • join
  • unnest

OBSERVAÇÃO: esta referência retorna valores nulos para valores de origens de bancos de dados relacionais.

OBSERVAÇÃO: esta referência retorna o caminho do arquivo. Ela não inclui o esquema ou as informações de autoridade do URI. Portanto, os identificadores de protocolo, como http://, não estão disponíveis na saída.

OBSERVAÇÃO: para origens Avro, o caminho da pasta será retornado, caso você tenha importado uma pasta contendo vários arquivos Avro. O caminho completo é retornado para arquivos Avro únicos e para outros conjuntos de dados de vários arquivos.

Formatos de arquivos compatíveis

Formatos de arquivo base:

Formato de arquivo Compatível? Observações
CSVSim
JSONSim
ExcelLimitado

O caminho completo (local temporário) para o arquivo CSV convertido no armazenamento de dados de back-end é retornado. O caminho do arquivo XLSX original não está disponível.

Arquivos compactados (Gzip, Bzip2 etc)LimitadoCompatível apenas com arquivos únicos. O caminho completo é retornado apenas se o arquivo contém um único arquivo.
pastasSimO caminho completo para o arquivo é retornado. É possível modificar a coluna de saída para retornar apenas o caminho da pasta.

Formatos de arquivo adicionais:

Formato de arquivo Compatível? Observações
AvroSim
ParquetNão

Outros tipos de fontes:

Formato Compatível? Observações
Tabelas relacionaisNão

Limitações

  • A função FILEPATH produz um valor nulo para qualquer amostra coletada antes do recurso ser ativado, já que as informações não estavam disponíveis. Para ver essas informações de linhagem, alterne para a amostra inicial ou colete uma nova amostra.
  • Depois que essa função é ativada, as amostras não iniciais coletadas no futuro são ligeiramente menores em tamanho, devido ao espaço consumido pelas informações de linhagem de caminho de arquivo, que é rastreado como parte da amostra. É possível ver uma mudança no número de linhas em sua amostra.

Exemplo 1: gerar coluna do nome de arquivo

O exemplo a seguir gera uma coluna contendo as informações do caminho de arquivo para cada linha no conjunto de dados:

derive type: single value: $filepath as: 'src_filepath'

É possível usar as seguintes etapas adicionais para extrair o nome do arquivo da coluna src_filepath acima:

derive type: single value: RIGHTFIND(src_filepath, '\/', false, 0) as: 'rightfind__src_filepath'

derive type: single value: SUBSTRING(src_filepath, rightfind_src_filepath + 1, LEN(src_filepath)) as: 'filename'

drop col: rightfind_src_filepath action: Drop

Exemplo 2: número da linha de origem no conjunto de dados com parâmetros

Ao importar um conjunto de dados com parâmetros, o valor $sourcerownumber retorna um número de linha continuamente crescente em todos os arquivos do conjunto de dados, criando uma chave primária efetivamente. Usando o exemplo abaixo, você pode criar uma nova coluna para registrar o número da linha de origem nos arquivos individuais.

Fonte:

Estes são alguns exemplos dos dados espalhados em três arquivos após a importação, que usam um só conjunto de dados com parâmetros.

column2column3
line1-col1line1-col2
line2-col1line2-col2
line3-col1line3-col2
line1-col1line1-col2
line2-col1line2-col2
line3-col1line3-col2
line1-col1line1-col2
line2-col1line2-col2
line3-col1line3-col2

Como você pode ver, é difícil é determinar a linhagem nos arquivos.

Transformação

Colete as informações de caminho de arquivo e número da linha de origem em duas novas colunas:

derive type: single value: $filepath as: 'filepath'

derive type: single value: $sourcerownumber as: 'source_row_number'

Crie uma nova coluna chamada start_of_file_offset, que contém o valor de posição da primeira linha do arquivo. Na primeira instrução, marque o valor $sourcerownumber para a primeira linha do arquivo, deixando as outras linhas do arquivo em branco:

derive type: multiple value: IF(PREV($filepath, 1) == $filepath, NULL(), $sourcerownumber) order: $sourcerownumber as: 'start_of_file_offset'

Crie uma nova coluna que contenha os valores da coluna anterior, com as linhas em branco preenchidas com o último valor anterior, que é o $sourcerownumber da primeira linha do arquivo atual:

derive type: multiple value: FILL(start_of_file_offset, -1, 0) order: $sourcerownumber as: 'filled_start_file_offset'

Crie uma nova coluna que calcule o número da linha de origem baseada em arquivo como a diferença entre o número bruto da linha de origem e o valor de início da posição do arquivo, calculado na etapa anterior. Esse valor gerado será o número da linha de origem para uma linha em seu próprio arquivo:

derive type: single value: ($sourcerownumber - filled_start_file_offset) + 1 as: 'source_row_number_per_file'

Exclua as colunas usadas para os cálculos intermediários:

drop col: filled_start_file_offset,start_of_file_offset action: Drop

Resultados:

column2column3filepathsource_row_numbersource_row_number_per_file
line1-col1line1-col2/myPath/file001.txt11
line2-col1line2-col2/myPath/file001.txt22
line3-col1line3-col2/myPath/file001.txt33
line1-col1line1-col2/myPath/file002.txt41
line2-col1line2-col2/myPath/file002.txt52
line3-col1line3-col2/myPath/file002.txt63
line1-col1line1-col2/myPath/file003.txt71
line2-col1line2-col2/myPath/file003.txt82
line3-col1line3-col2/myPath/file003.txt93

$sourcerownumber

A variável $sourcerownumber é uma referência ao número original da linha atual na origem dos dados.

Dica: se as informações da linha de origem ainda estiverem disponíveis, será possível passar o cursor do mouse sobre o lado esquerdo de uma linha na grade de dados para ver o número da linha de origem nos dados originais.


Limitações:

  • As transformações a seguir podem tornar inválidas ou indisponíveis as informações da linha original. Nestes casos, a referência retorna valores nulos:
    • pivot
    • flatten
    • join
    • lookup
    • union
    • unnest
    • unpivot
  • Ao trabalhar com conjuntos de dados com parâmetros, a referência $sourcerownumber não funciona com arquivos Avro nem Parquet.

  • Ao trabalhar com conjuntos de dados provenientes de arquivos Avro, a referência $sourcerownumber não é compatível.

  • Ao trabalhar com conjuntos de dados provenientes de arquivos Parquet, a referência $sourcerownumber não é compatível.

Exemplo:

O exemplo a seguir gera uma nova coluna contendo o número da linha de origem para cada linha no conjunto de dados, se disponível:

derive type: single value: $sourcerownumber as: 'src_rownumber'

Se você já usou a referência $filepath, como no exemplo anterior, é possível combinar essas duas colunas para criar uma chave exclusiva para a origem de cada linha:

derive type: single value: MERGE([src_filename,src_rownumber],'-') as: 'src_key'

$col

A variável $col é uma referência à coluna que está sendo avaliada no momento. Essa variável faz referência ao estado do conjunto de dados atual, em vez da fonte original.

OBSERVAÇÃO: essa referência só funciona para a transformação edit with formula (transformação set).

No exemplo a seguir, todas as colunas no conjunto de dados do tipo "String" são convertidas em maiúsculas:

set col: * value: IF(ISMISMATCHED($col, ['String']), $col, UPPER($col))

Acima, o curinga aplica a edição a cada coluna. Cada coluna é testada para ver se corresponde ao o tipo de dados "String". Se não for correspondido, o valor na coluna ($col) será gravado. Caso contrário, o valor na coluna será convertido em maiúsculas (UPPER($col)).

Dica: $col é útil para transformações de várias colunas.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Google Cloud Dataprep
Precisa de ajuda? Acesse nossa página de suporte.