Função FIND

Esta função retorna o valor do índice na string de entrada em que uma string correspondente especificada está localizada. A pesquisa é feita da esquerda para a direita.

É possível especificar a entrada como uma referência de coluna ou um literal de string, mas o uso desse literal é raro.

  • Uma referência de coluna pode mencionar uma coluna do tipo String, Object ou Array, o que torna a função FIND útil para filtrar os dados antes de serem completamente desaninhados em dados tabulares.
  • O valor retornado é desde o início da string, independentemente do valor do índice da string.
  • Se nenhuma correspondência for encontrada, a função retornará um valor nulo.
  • Caso seja necessário determinar se um valor está ou não em uma matriz, você poderá usar a função MATCHES, que retorna uma resposta verdadeira/falsa. Veja a Função MATCHES.

Também é possível pesquisar uma string da direita. Para mais informações, veja Função RIGHTFIND.

Uso básico

Exemplo de referência de coluna:

derive type:single value: FIND(MyName,'find this',true,0)

Saída: é feita uma pesquisa no valor da coluna MyName para encontrar a string find this, começando pelo início do valor. A diferença entre maiúscula e minúscula é ignorada. Se for encontrada uma correspondência, o valor do índice onde a string está localizada será gravado na nova coluna.

Exemplo de literal de string:

derive type:single value: FIND('Hello, World','lo',false,2)

Saída é feita uma pesquisa na string Hello, World para encontrar a string lo, diferenciando maiúsculas e minúsculas e começando pelo terceiro caractere. Quando a correspondência é encontrada no quarto caractere, o valor 3 é gravado na nova coluna.

Exemplo de If:

derive type:single value: IF(FIND(SearchPool,'FindIt') >= 0, 'found it', '') as: 'Finds'

Saída: é feita uma pesquisa no valor da coluna SearchPool para encontrar a string FindIt, começando pelo início do valor (padrão). O comportamento padrão é não ignorar a capitalização. Se a string for encontrada, a nova coluna Finds conterá o valor found it. Caso contrário, a coluna estará vazia.

Sintaxe

derive type:single value:FIND(column_string,string_pattern,[ignore_case], [start_index])

ArgumentoObrigatório?Tipo de dadosDescrição
column_stringSstringNome da coluna ou literal de string a ser aplicado à função
string_patternSstringLiteral ou padrão de string a ser encontrado
ignore_caseNbooleanoSe true, será executada uma correspondência indiferente a maiúsculas. O padrão é false.
start_indexNnúmero inteiro (positivo)

Se especificado, esse valor identificará o índice inicial dos dados de origem para procurar uma correspondência

Se não for especificado, a string inteira é pesquisada.

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

column_string

Nome do item a ser pesquisado. Veja a seguir os valores válidos:

  • Os literais de string precisam estar entre aspas simples ('Hello, World').
  • Referência de coluna a qualquer tipo que possa ser inferido como uma string, englobando todos os valores.

Os valores ausentes geram o parâmetro de índice inicial.

  • Vários valores e caracteres curinga não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimLiteral de string ou referência de coluna (String, Array ou Object)myColumn

string_pattern

Literal ou padrão de string a ser encontrado. Esse valor pode ser um literal de string, um padrão do Cloud Dataprep ou uma expressão regular.

  • Os valores ausentes de string ou de coluna geram o parâmetro de índice inicial.
    • Os literais de string precisam estar entre aspas simples ('Hello, World').
  • Vários valores e caracteres curinga não são aceitos.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimLiteral ou padrão de string'Hello'

ignore_case

Se true, a função FIND ignorará maiúsculas ao tentar corresponder o valor do literal ou do padrão de string.

O valor padrão é false, o que significa que é realizada por padrão a correspondência que diferencia maiúsculas de minúsculas.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
NãoBooleanotrue

start_index

O índice do caractere no valor da coluna ou do literal de string pelo qual iniciar a pesquisa. Por exemplo, um valor de 2 instrui a função FIND a começar a pesquisar pelo terceiro caractere no valor da coluna ou da string.

OBSERVAÇÃO: os valores de índice começam em 0. Se não for especificado, o valor padrão será 0, que pesquisa toda a string.

  • O valor precisa ser um número inteiro positivo.

  • Se esse valor for maior que o comprimento da string, nenhuma correspondência será possível.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
NãoNúmero inteiro (não negativo)2

Exemplos

Exemplo: localizar compras de produtos no fluxo de transações

Origem:

Você tem o fluxo de transações simplificado listado a seguir, em que as informações principais sobre uma transação (TransactionId e CustomerId) são pareadas com as informações detalhadas do pedido, que são transferidas para o aplicativo como uma matriz na coluna OrderDetail. A coluna da matriz contém informações sobre ID do produto, quantidade e tipo de transação.

TransactionIdCustomerIdOrderDetail
12312312100023[{"ProdId":"54321","Qty":"5","TransType":"PURCHASE"}]
12312313100045[{"ProdId":"94105","Qty":"12","TransType":"PURCHASE"}]
12312314100066[{"ProdId":"54321","Qty":"1","TransType":"TEST"}]
12312315100068[{"ProdId":"85858","Qty":"9","TransType":"PURCHASE"}]

O fluxo inclui transações de teste, que são identificadas pelo valor TEST em TransType na coluna de detalhes. Você quer remover essas transações no início do processo, o que deve simplificar o conjunto de dados e acelerar o processamento.

Transformação:

Primeiramente, você precisa identificar os registros que contêm o valor da transação de teste. A seguinte transformação gera uma nova coluna com os valores verdadeiro/falso, no caso de o valor "TEST" aparecer na transformação OrderDetail.

Dica: se os outros campos na matriz tiverem alguma versão do valor TEST, coloque-o entre aspas duplas. As aspas duplas precisam do caractere de escape, conforme mostrado no valor a seguir.

derive type:single value:FIND(OrderDetail, '\"TEST\"', false, 0)

Quando a etapa é adicionada à receita, a coluna find_OrderDetail é gerada, contendo o valor do índice retornado pela função FIND. Neste caso, há somente uma linha com um valor: 42 para a terceira transação.

Em seguida, você pode adicionar a etapa abaixo para manter as linhas onde a função FIND retornou um valor nulo na coluna find_OrderDetail:

keep row:ISNULL(find_OrderDetail)

Resultados:

TransactionIdCustomerIdOrderDetailfind_OrderDetail
12312312100023[{"ProdId":"54321","Qty":"5","TransType":"PURCHASE"}]
12312313100045[{"ProdId":"94105","Qty":"12","TransType":"PURCHASE"}]
12312315100068[{"ProdId":"85858","Qty":"9","TransType":"PURCHASE"}]

Agora, é possível excluir a coluna find_OrderDetail.

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.