2014-12-18 13 views
5

Ho una tabella nidificata A in BigQuery con uno schema come segue:Come creare nuova tabella con lo schema annidata interamente in BigQuery

{ 
    "name": "page_event", 
    "mode": "repeated", 
    "type": "RECORD", 
    "fields": [ 
     { 
      "name": "id", 
      "type": "STRING" 
     } 
    ] 
    } 

Vorrei arricchire la tabella A con i dati provenienti da altra tabella e salva il risultato come una nuova tabella nidificata. Diciamo che vorrei aggiungere il campo "descrizione" di tabella A (la creazione di tabella B), quindi il mio schema sarà il seguente:

{ 
    "name": "page_event", 
    "mode": "repeated", 
    "type": "RECORD", 
    "fields": [ 
     { 
      "name": "id", 
      "type": "STRING" 
     }, 
     { 
      "name": "description", 
      "type": "STRING" 
     } 
    ] 
    } 

Come faccio a fare questo in BigQuery? Sembra che non ci siano funzioni per la creazione di strutture nidificate in SQL BigQuery (tranne le funzioni NEST, che produce un elenco - ma questa funzione non sembra funzionare, in mancanza di errore imprevisto)

L'unico modo per farlo mi viene in mente, è quello di:

  • funzioni utilizzo concatenazione di stringhe per produrre tabella B con il singolo campo chiamato "json" con il contenuto essendo i dati arricchiti da a, convertito in stringa jSON
  • esportazione B a GCS come set di file F
  • carico F come tabella C

C'è un modo più semplice per farlo?

risposta

1

per arricchire schema della tabella esistente si può utilizzare le tabelle di patch API
https://cloud.google.com/bigquery/docs/reference/v2/tables/patch

richiesta sarà simile sotto

PATCH https://www.googleapis.com/bigquery/v2/projects/{project_id}/datasets/{dataset_id}/tables/{table_id}?key={YOUR_API_KEY} 

{ 
"schema": { 
    "fields": [ 
    { 
    "name": "page_event", 
    "mode": "repeated", 
    "type": "RECORD", 
    "fields": [ 
    { 
     "name": "id", 
     "type": "STRING" 
    }, 
    { 
     "name": "description", 
     "type": "STRING" 
    } 
    ] 
    } 
    ] 
} 
} 

Prima Patch

enter image description here

Dopo Patch

+0

Importante su SO, 'La prima cosa che dovresti fare dopo aver letto la risposta di qualcuno alla tua domanda è votare sulla risposta, come fa qualsiasi altro utente (con una reputazione sufficiente). Vota le risposte che ti sono utili e accetta la risposta che ritieni più utile per te. Ci sono altri ... Puoi controllare cosa fare quando qualcuno risponde alla tua domanda - http://stackoverflow.com/help/someone-answers e http://meta.stackexchange.com/questions/5234/how-does -accepting-an-risposta-lavoro # 5235 –