1

J'utilise la bibliothèque client node.js bigquery et j'ai besoin d'obtenir une liste de tables à partir d'un ensemble de données sans bloc de partitionnement.Comment obtenir tous les ID de table de bigquery sans partitionnement?

Par exemple, j'ai un certain nombre de tables partitionnées:

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

Je dois obtenir [table1, table2] comme résultat, mais en utilisant getTables méthode que je reçois [table1_20170101, table1_20170102 ...]

exemple de script ci-dessous:

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

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

Existe-t-il une méthode disponible pour obtenir des noms de table "non partitionnés"?

Obtenir toutes les tables avec _date, diviser et rendre unique semble être très lent s'il y a beaucoup de tables partitionnées.

Répondre

1

Vous pouvez effectuer une requête sur la table __TABLES_SUMMARY__, au lieu d'utiliser la méthode getTables.

L'exemple ci-dessous récupère toutes les tables d'un jeu de données, divise le nom sur le caractère _ et prend la première partie. Il crée ensuite une liste distincte.

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

Vous pouvez utiliser une méta requête:

select * from `wr_live.__TABLES_SUMMARY__`