Função RANGE

Calcula uma matriz de números inteiros, de um inteiro inicial a um inteiro final (de parada), utilizando um terceiro parâmetro.

OBSERVAÇÃO: se a função gerar mais de 100.000 valores para uma célula, a saída será um valor nulo.

Uso básico

Exemplo de literal numérico:

derive type:single value: RANGE(0,3,1 ) as: 'threeSteps'

Saída: gera uma coluna contendo a seguinte matriz:

[0,1,2]

Exemplo de referência de coluna:

derive type:single value: RANGE(0,MaxValue,stepValue) as: 'mySteps'

Saída: gera a coluna mySteps, que contém matrizes de valores de zero ao valor da coluna MaxValue, utilizando o valor da coluna stepValue.

Sintaxe

derive type:single value: RANGE(column_integer_start, column _integer_end, column_integer_step)

ArgumentoObrigatório?Tipo de dadosDescrição
column_integer_startSstring ou número inteiroNome da coluna ou inteiro literal que representa o início do intervalo
column_integer_endSstring ou número inteiroNome da coluna ou inteiro literal que representa o fim do intervalo
column_integer_stepSstring ou número inteiroNome da coluna ou inteiro literal que representa as etapas em números inteiros entre valores no intervalo

Para mais informações sobre os padrões de sintaxe, consulte Notas de sintaxe da documentação da linguagem.

column_integer_start

Nome da coluna ou valor do inteiro inicial usado para computar o intervalo.

OBSERVAÇÃO: esse valor sempre será incluído, a menos que seja igual ao valor de col-integer-stop, o que resultará em uma matriz em branco.

  • Valores de entrada ausentes geram resultados ausentes.
  • Colunas e caracteres curinga múltiplos não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimInteiro0

column_integer_end

Nome da coluna ou valor do inteiro final usado para computar o intervalo.

OBSERVAÇÃO: este valor não está incluído na saída.

  • Valores de entrada ausentes geram resultados ausentes.
  • Colunas e caracteres curinga múltiplos não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimInteiro20

column_integer_step

Nome da coluna ou valor do inteiro utilizado para computar o intervalo de números inteiros (etapa) entre cada valor no intervalo.

OBSERVAÇÃO: este valor tem de ser um inteiro positivo. Se col-integer-start for maior do que col-integer-stop, as etapas serão valores negativos desse parâmetro.

  • Valores de entrada ausentes geram resultados ausentes.
  • Colunas e caracteres curinga múltiplos não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimNúmero inteiro2

Exemplos

Exemplo: distribuição de mensagens de registro

Fonte:

O conjunto de dados contém dados de registro que são coletados a cada minuto, mas cada entrada pode conter várias mensagens de erro em uma matriz. Os campos principais podem ser semelhantes aos seguintes:

Carimbo de data/horaErros
16/02/16 15:31["Não foi possível conectar", "Arquivo não encontrado", "Proxy inativo", "Tempo limite de conexão"]
16/02/16 15:30[]
16/02/16 15:29["Acesso proibido", "Senha inválida"]

Transformação:

Você pode usar as seguintes etapas para dividir os valores da matriz em linhas separadas. A seguinte transformação gera uma coluna contendo o número de elementos na matriz Errors de cada linha.

derive type:single value:ARRAYLEN(Errors) as:'arraylength_Errors'

Esta transformação exclui linhas que não contêm erros:

delete row:(arraylength_Errors == 0)

Para as linhas restantes, você pode gerar uma coluna contendo uma matriz de números para corresponder à contagem de mensagens de erro:

derive type:single value:RANGE(0,arraylength_Errors,1) as:'range_Errors'

Você pode, então, usar a função ARRAYZIP para compactar as duas matrizes em uma única:

derive type:single value:ARRAYZIP([range_Errors,Errors]) as:'zipped_Errors'

A transformação unnest usa os valores em uma coluna de matriz como valores-chave para distribuir linhas no conjunto de dados:

unnest col:zipped_Errors

Você pode renomear o valor acima como individual_Errors. Para limpar o conjunto de dados, agora você pode excluir as seguintes colunas:

  • arraylength_Errors
  • range_Errors
  • zipped_Errors

Resultados:

Carimbo de data/horaErroserros_Individuais
16/02/16 15:31["Não foi possível conectar", "Arquivo não encontrado", "Proxy inativo", "Tempo limite de conexão"][0, "Não foi possível conectar"]
16/02/16 15:31["Não foi possível conectar", "Arquivo não encontrado", "Proxy inativo", "Tempo limite de conexão"][1, "Arquivo não encontrado"]
16/02/16 15:31["Não foi possível conectar", "Arquivo não encontrado", "Proxy inativo", "Tempo limite de conexão"][2, "Proxy inativo"]
16/02/16 15:31["Não foi possível conectar", "Arquivo não encontrado", "Proxy inativo", "Tempo limite de conexão"][3, "tempo limite de conexão"]
16/02/16 15:29["Acesso proibido", "Senha inválida"][0, "Acesso proibido"]
16/02/16 15:29["Acesso proibido", "Senha inválida"][1, "Senha inválida"]

Exemplo - desaninhar pontuações de teste

O exemplo a seguir inclui uma amostra de range para definir uma nova matriz de índice.

Fonte:

Você tem dados sobre as pontuações dos testes dos alunos. As pontuações individuais são armazenadas na matriz Scores, e você precisa acompanhar cada teste em uma linha exclusivamente identificável. Este exemplo tem dois objetivos:

  1. Uma linha para cada teste de aluno.
  2. Um identificador exclusivo para cada combinação aluno-pontuação.
LastNameFirstNameScores
AdamsAllen[81,87,83,79]
BurnsBonnie[98,94,92,85]
CannonCharles[88,81,85,78]

Transformação:

Quando os dados são importados no formato CSV, é necessário adicionar uma transformação header e remover as aspas da coluna Scores:

header

replace col:Scores with:'' on:`"` global:true

Validar a data do teste: para começar, verifique se você tem a quantidade adequada de pontuações de teste para cada aluno. Use a seguinte transformação para calcular a diferença entre o número esperado de elementos na matriz Scores (4) e o número real:

derive type:single value: (4 - ARRAYLEN(Scores)) as: 'numMissingTests'

Quando a transformação for visualizada, será possível ver, no conjunto de dados da amostra, que todos os testes foram incluídos. Você decide se quer ou não incluir essa coluna no conjunto de dados final, já que pode identificar testes ausentes quando a receita é executada em escala.

Identificador exclusivo de linha: é preciso dividir a matriz Scores em linhas individuais para cada teste. No entanto, não há um identificador exclusivo para que a linha faça o rastreamento dos testes individuais. Em teoria, você poderia usar a combinação dos valores LastName-FirstName-Scores para fazer isso, mas, se um aluno tiver gravado o mesmo resultado duas vezes, o conjunto de dados ficará com linhas duplicadas. Na transformação a seguir, você cria uma matriz paralela chamada Tests, que contém uma matriz de índice para o número de valores na coluna Scores. Os valores do índice começam em 0.

derive type:single value:RANGE(0,ARRAYLEN(Scores)) as:'Tests'

Além disso, criaremos um identificador para a linha de origem usando a função SOURCEROWNUMBER:

derive type:single value:SOURCEROWNUMBER() as:'orderIndex'

Uma linha para cada teste de aluno: seus dados terão esta aparência:

LastNameFirstNameScoresTestsorderIndex
AdamsAllen[81,87,83,79][0,1,2,3]2
BurnsBonnie[98,94,92,85][0,1,2,3]3
CannonCharles[88,81,85,78][0,1,2,3]4

Agora, reúna as matrizes Tests e Scores em uma única matriz aninhada usando a função ARRAYZIP:

derive type:single value:ARRAYZIP([Tests,Scores])

O conjunto de dados foi alterado:

LastNameFirstNameScoresTestsorderIndexcolumn1
AdamsAllen[81,87,83,79][0,1,2,3]2[[0,81],[1,87],[2,83],[3,79]]
AdamsBonnie[98,94,92,85][0,1,2,3]3[[0,98],[1,94],[2,92],[3,85]]
CannonCharles[88,81,85,78][0,1,2,3]4[[0,88],[1,81],[2,85],[3,78]]

Com a transformação flatten, é possível descompactar a matriz aninhada:

flatten col: column1

Cada combinação teste-pontuação agora é dividida em uma linha separada. As combinações teste-pontuação aninhadas precisam ser divididas em colunas separadas com o uso de unnest:

unnest col:column1 keys:'[0]','[1]'

Depois de excluir a column1, que não é mais necessária, renomeie as duas colunas geradas:

rename mapping:[column_0,'TestNum']

rename mapping:[column_1,'TestScore']

Identificador exclusivo de linha: é possível executar mais uma etapa para criar identificadores exclusivos de teste, identificando o teste específico para cada aluno. Veja a seguir como o identificador de linha original OrderIndex é usado como um identificador para o aluno, e o valor TestNumber para criar o valor da coluna TestId:

derive type:single value: (orderIndex * 10) + TestNum as: 'TestId'

Os valores acima são números inteiros. Para melhorar a aparência dos seus identificadores, adicione o texto a seguir:

merge col:'TestId00','TestId'


Extensão:
pode ser útil gerar algumas informações estatísticas resumidas nesse conjunto de dados. Por exemplo, você pode estar interessado em calcular a pontuação média dos testes de cada aluno. Nesta etapa, é necessário descobrir como agrupar adequadamente os valores dos testes. Nesse caso, não é possível agrupar pelo valor LastName e, quando executado em escala, poderá haver colisões entre os nomes quando essa receita for executada dessa forma. Portanto, talvez seja necessário criar um tipo de chave primária usando:

merge col:'LastName','FirstName' with:'-' as:'studentId'

Agora, use isto como um parâmetro de agrupamento para seu cálculo:

derive type:single value:AVERAGE(TestScore) group:studentId as:'avg_TestScore'

Resultados:

Depois de excluir as colunas desnecessárias e mover as outras, o conjunto de dados será semelhante ao seguinte:

TestIdLastNameFirstNameTestNumTestScorestudentIdavg_TestScore
TestId0021AdamsAllen081Adams-Allen82,5
TestId0022AdamsAllen187Adams-Allen82,5
TestId0023AdamsAllen283Adams-Allen82,5
TestId0024AdamsAllen379Adams-Allen82,5
TestId0031AdamsBonnie098Adams-Bonnie92,25
TestId0032AdamsBonnie194Adams-Bonnie92,25
TestId0033AdamsBonnie292Adams-Bonnie92,25
TestId0034AdamsBonnie385Adams-Bonnie92,25
TestId0041CannonChris088Cannon-Chris83
TestId0042CannonChris181Cannon-Chris83
TestId0043CannonChris285Cannon-Chris83
TestId0044CannonChris378Cannon-Chris83

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.