如何查看SQL表中都存在哪些约束?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查看SQL表中都存在哪些约束?相关的知识,希望对你有一定的参考价值。

比如查看数据库中存在哪些表可以用 use master select * FROM SYSOBJECTS;
那么查询表A都有哪些约束,该如何查找?求教,谢谢!

参考技术A select c.* from sys.sysobjects o,sys.sysconstraints c where o.name='A' and o.id=c.id 参考技术B select c.* from sys.sysobjects o,sys.sysconstraints c where o.name='A' and o.id=c.id 参考技术C alt+F1就可以查看该表的表结构以及各种约束 参考技术D SQL语句是没有的 只有通过工具来查看 第5个回答  2011-11-28 打开数据库设计就看到了啊

如何知道我的表中都有哪些属于 bigQuery 的长期存储?

【中文标题】如何知道我的表中都有哪些属于 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,但可能的解决方案是使用 bqtool。描述表将返回长期存储字节数 (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

【讨论】:

以上是关于如何查看SQL表中都存在哪些约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sqlplus中查看库中都有哪些表

SQL数据库中如何查看约束?有那些方法?求指教。

如何在SQL表中的性别进行check约束?

sql语句,怎么查看一个表中的所有约束

hive中如何查看A库中都有哪些表?这表里都有哪些列?

如何查看mysql数据库中都有哪些表?