Domanda

Sto vedendo un comportamento molto bizzaro con la funzione REGEXP_MATCH in Google Big Query.La funzione sembra funzionare perfettamente bene per i dati pubblici, ma non funziona sul mio set di dati.Ho un set di dati importato dal CSV con le prime due righe (prima è la riga di intestazione che diventa tutto lo schema in cui tutto è una stringa), c'è molto di più, ma quanto segue è gli unici dati rilevanti per questo caso.

"id","common_name","botanical_name","low_hardiness_zone","high_hardiness_zone","type","exposure_min","exposure_max","moisture_min","moisture_max"
"plant1","Abelia","Abelia zanderi 'Conti (Confetti)'","5b","9a","Shrub","Partial Sun","Full Sun","Dry","Dry"
.

Quando eseguo la query:

SELECT * FROM [PlantLink_Plant_Types.plant_data_set] 
WHERE REGEXP_MATCH('common_name',r'.*')
.

ottengo ogni risultato.

Tuttavia, quando eseguo la query:

SELECT * FROM [PlantLink_Plant_Types.plant_data_set] 
WHERE REGEXP_MATCH('common_name',r'A.*')
.

Non ottengo risultati, che è davvero strano perché il nome comune dell'impianto Abelia inizia con un A.

Ora la mia magia Regex non è così forte, ma sono abbastanza sicuro che il modello non sia in errore.Inoltre ho eseguito le query dei test del set di dati pubbliche con REGEXP_MATCH e funzionano correttamente.Qualcuno ha qualsiasi indizio Perché REGEXP_MATCH non funzionerebbe sempre come pubblicizzato?

È stato utile?

Soluzione

Nota:

    .
  • regexp_match ('common_name', r '. *') corrisponde alla stringa 'common_name'

while

    .
  • regexp_match (common_name, r '. *') corrisponde a un campo nella tabella chiamato common_name

Il 1 ° è sempre vero e quindi ottieni tutti i risultati. Immagino che tu volessi fare riferimento al contenuto del campo, quindi è necessario utilizzare il secondo.

    .
  • regexp_match (common_name, r'a. * ') dovrebbe restituire tutti i record che campo common_name contiene "A".

Spero che questo aiuti.

Altri suggerimenti

Problema è la stringa 'common_name' non si avvia con 'a'.

Verifica questo:

    .
  • REGEXP_MATCH('common_name',r'.*'): tutti i risultati.
  • REGEXP_MATCH('common_name',r'A.*'): nessun risultato.
  • REGEXP_MATCH('common_name',r'c.*'): tutti i risultati.
  • REGEXP_MATCH(common_name,r'A.*'): tutti i risultati che da qualche parte hanno un 'A'.

:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top