Comportamento bizzarro con regexp_match in Google Big Query
-
21-12-2019 - |
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?
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'.
:)