2013-07-11 11 views
8

Ho uno schema che contiene più campi ripetuti che non sono nidificati.Interrogazione di più campi ripetuti in BigQuery

Sto cercando di interrogare il prodotto incrociato, ma ottengo un errore: "non può interrogare il prodotto vettoriale dei campi ripetuti ..."

Se interrogo solo 2 campi ripetuti, posso appiattire uno di loro. Tuttavia, sono interessato a interrogare più di 2 campi ripetuti, e non riesco a capire come la sintassi FLATTEN supporti questo.

Ad esempio, dire la struttura della tabella è: a1, annotazione (ripetuto): a1.b1, integer a2, registrare (ripetuto): a2.b1, integer a3, registrare (ripetuto): a3.b1 , intero

voglio interrogare: selezionare (*) da scheda

risposta

13

È possibile utilizzare un sub-SELECT nidificato all'interno del FLATTEN. Richiede un paren aggiuntivo attorno all'istruzione select. (la sintassi è piuttosto brutta, sfortunatamente). per esempio.

SELECT 
    ... 
FROM (
    FLATTEN((
     SELECT 
     ... 
     FROM (
      FLATTEN((
      SELECT 
       ... 
      FROM 
       table), 
      f1) 
     ) 
     ), 
     f2) 
    ) 
) 
+0

funziona come un fascino! Vorrei specificare i campi per selezionare solo una volta, nella selezione più interna, e scrivere selezionare * su tutte le altre selezioni nidificate. Ma poi non posso specificare una clausola order by, poiché l'ordine richiede che il campo appaia nei campi select. – Lior

7

Se non è necessario fare nulla di specifico all'interno di selezione interna, Si può semplicemente utilizzare

(FLATTEN(FLATTEN(table, a1), a2))

+0

Anche questo funziona bene. –

Problemi correlati