如何在没有分区的情况下从bigquery获取所有表id?

时间:2017-10-18 11:23:45

标签: node.js google-api google-bigquery google-cloud-platform

我正在使用node.js bigquery客户端库,需要从数据集中获取一个没有分区块的表列表。

例如,我有许多分区表:

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

我需要得到 [table1,table2] ,但是使用 getTables 方法我得到 [table1_20170101,table1_20170102 ...]

下面的脚本示例:

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

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

是否有任何可用的方法来获取“未分区”的表名?

如果有很多分区表,那么使用 _date 获取所有表,拆分并使其唯一似乎非常慢。

2 个答案:

答案 0 :(得分:1)

您可以针对__TABLES_SUMMARY__表执行查询,而不是使用getTables方法。

下面的示例获取数据集中的所有表,在_字符上拆分名称并获取第一部分。然后它会创建一个不同的列表。

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);
});

答案 1 :(得分:0)

您可以使用元查询:

select * from  `wr_live.__TABLES_SUMMARY__`