如何知道我的表中都有哪些属于 bigQuery 的长期存储?
Posted
技术标签:
【中文标题】如何知道我的表中都有哪些属于 bigQuery 的长期存储?【英文标题】:How to know which among my tables falls under long term storage in bigQuery?如何知道我的表中有哪些属于 bigQuery 的长期存储? 【发布时间】:2019-10-31 13:49:03 【问题描述】:我目前在一个项目中有多个数据集,我想知道是否有办法一次性知道过去 90 天内未更新的表是什么,这意味着它属于长期存储桶大查询。有一些 sql 语法吗?
谢谢
【问题讨论】:
这能回答你的问题吗? Get the Last Modified date for all BigQuery tables in a BigQuery Project 谢谢,我实际上是在寻找更详细的结果,因为我有例如 50 个数据集,每个数据集有 20 个表,我必须逐个检查每个数据集。如果有任何方法一次检查所有数据集中的所有表,以了解它们的大小以及上次修改的时间 【参考方案1】:不是 SQL,但可能的解决方案是使用 bq
tool。描述表将返回长期存储字节数 (numLongTermBytes
):
$ bq show --format=prettyjson dataset.table
...
"kind": "bigquery#table",
"lastModifiedTime": "1534845362446",
"location": "US",
"numBytes": "56",
"numLongTermBytes": "56",
"numRows": "3",
...
因此,您可以将其扩展为列出每个数据集中的所有表,并从每个表中获取所需的信息。基于this 我做了一个简单的例子:
#!/bin/bash
project=PROJECT_ID
dataset=DATASET_NAME
max_results=100
# get list of tables
tables=$(bq ls --max_results $max_results "$project:$dataset" | awk 'print $1' | tail -n +3)
# get LTS bytes for each table
for table in $tables
do
printf '%-35s %-50s\n' "$table" "$(bq show --format prettyjson $project:$dataset.$table | grep numLongTermBytes)"
done
你会得到类似的输出:
Dfp "numLongTermBytes": "0",
SO_55506947 "numLongTermBytes": "144",
SO_55506947_bis "numLongTermBytes": "144",
a "numLongTermBytes": "7",
a1 "numLongTermBytes": "399",
aaa "numLongTermBytes": "8",
adaptive "numLongTermBytes": "1085",
adaptive_view "numLongTermBytes": "0",
audience_segment_map_exp_test "numLongTermBytes": "300",
b "numLongTermBytes": "7",
...
【讨论】:
使用 datasets=$( bq ls | tail -n +3) 和 for/do 循环遍历所有数据集【参考方案2】:我有同样的问题,但在给定项目的所有数据集中都需要它。我接受了@Guillem Xercavins 的回答并将其包装在另一个 for 循环中,并使项目成为命令行输入。
#!/bin/bash
project=$1
max_results=1000
# Get the datasets
datasets=$(bq ls --datasets=true --project_id=$project | awk 'print $1' | tail -n +3)
for dataset in $datasets
do
# get list of tables
# The tail -n +3 strips off the header lines
tables=$(bq ls --max_results $max_results "$project:$dataset" | awk 'print $1' | tail -n +3)
# get LTS bytes for each table
for table in $tables
do
printf '%-35s %-50s\n' "$table" "$(bq show --format prettyjson $project:$dataset.$table | grep numLongTermBytes)"
done
done
【讨论】:
以上是关于如何知道我的表中都有哪些属于 bigQuery 的长期存储?的主要内容,如果未能解决你的问题,请参考以下文章