1

Ich benutze node.js bigquery Client-Bibliothek und muss eine Liste von Tabellen aus einem Dataset ohne Partitionierungsblock abrufen.Wie bekomme ich alle Tabellen-IDs von bigquery ohne Partitionierung?

Zum Beispiel habe ich eine Reihe von partitionierten Tabellen:

  • table1_20170101
  • table1_20170102
  • ...
  • table1_20170131
  • table2_20170101
  • table2_20170102
  • ...
  • table2_20170131

Ich brauche [table1, table2] als Ergebnis zu erhalten, aber unter Verwendung von getTables Methode, die ich bekommen [table1_20170101, table1_20170102 ...]

Script Beispiel unten:

dataset.getTables(function (err, tables) { 
    let result = []; 

    for (let key in tables) { 
     result.push(tables[key].id); 
    } 
    console.log(result); 
    res.send(result); 
}); 

Gibt es eine verfügbare Methode, um "unpartitioned" Tabellennamen zu erhalten?

Alle Tabellen mit _date erhalten, teilen und einzigartig machen, scheint sehr langsam zu sein, wenn es viele partitionierte Tabellen gibt.

Antwort

1

Sie eine Abfrage der __TABLES_SUMMARY__ Tabelle durchführen könnte, anstatt die getTables Verfahren zur Verwendung.

Das folgende Beispiel ruft alle Tabellen in einem Dataset ab, teilt den Namen auf das _-Zeichen auf und nimmt den ersten Teil. Es erstellt dann eine eindeutige Liste.

bigquery.query({ 
    query: [ 
    'SELECT DISTINCT SPLIT(table_id,"_")[ORDINAL(1)] as tableName', 
    'FROM `DATASETNAME.__TABLES_SUMMARY__`;' 
    ].join(' '), 

    params: [] 
}, function(err, rows) { 
    let result = []; 

    for (row of rows) { 
    result.push(row.tableName); 
    } 
    console.log(result); 
}); 
0

Sie könnten eine Meta-Abfrage verwenden:

select * from `wr_live.__TABLES_SUMMARY__`