2013-10-16 7 views
5

Diciamo che ho una tabella in BigQuery contenente 2 colonne. La prima colonna rappresenta un nome e la seconda è un elenco delimitato di valori, di lunghezza arbitraria. Esempio:Divisione di una colonna di stringhe in BigQuery

Name | Scores 
-----+------- 
Bob |10;20;20 
Sue |14;12;19;90 
Joe |30;15 

voglio trasformare in colonne in cui il primo è il nome, e il secondo è un valore singolo punteggio, in questo modo:

Name,Score 
Bob,10 
Bob,20 
Bob,20 
Sue,14 
Sue,12 
Sue,19 
Sue,90 
Joe,30 
Joe,15 

si può fare in BigQuery da solo?

risposta

8

Buone notizie a tutti! BigQuery ora può SPLIT()!


guardare "find all two word phrases that appear in more than one row in a dataset".

Non esiste un modo corrente per dividere() un valore in BigQuery per generare più righe da una stringa, ma è possibile utilizzare un'espressione regolare per cercare le virgole e trovare il primo valore. Quindi eseguire una query simile per trovare il 2 ° valore e così via. Possono essere tutti uniti in un'unica query, utilizzando lo schema presentato nell'esempio precedente (UNION tramite virgole).

+0

Nizza - Questo è impressionante! Ci sono dei parametri per specificare un intervallo di elementi da estrarre dall'array risultante? –

+0

Non sono sicuro di aver capito. Posta una nuova domanda? Vedi http://stackoverflow.com/a/24172995/132438 –

6

Se qualcuno è ancora alla ricerca di una risposta

select Name,split(Scores,';') as Score 
from (
     # replace the inner custome select with your source table 
     select * 
     from 
     (select 'Bob' as Name ,'10;20;20' as Scores), 
     (select 'Sue' as Name ,'14;12;19;90' as Scores), 
     (select 'Joe' as Name ,'30;15' as Scores) 
); 
Problemi correlati