如何在没有分区的情况下从bigquery获取所有表ID?
问题描述:
我正在使用node.js bigquery客户端库,并且需要从没有分区块的数据集中获取表的列表。如何在没有分区的情况下从bigquery获取所有表ID?
例如,我有一些分区表:
- table1_20170101
- table1_20170102
- ...
- table1_20170131
- table2_20170101
- table2_20170102
- ...
- table2_20170131
我需要得到[表1,表2]结果,但使用的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的表,如果拆分并使其唯一似乎非常缓慢。
答
你可以对__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);
});
答
你可以使用一个元查询:
select * from `wr_live.__TABLES_SUMMARY__`