【问题标题】:dbc.columns in Teradata vs INFORMATION_SCHEMA.COLUMNS in BigQueryTeradata 中的 dbc.columns 与 BigQuery 中的 INFORMATION_SCHEMA.COLUMNS
【发布时间】:2021-11-12 11:23:27
【问题描述】:

有人可以建议,如何借助 BigQuery 中的列名查找对象名称?

在 Teradata 中,我们可以使用 dbc.columnsv 获取对象(在所有数据库中)在哪些特定列中使用。 我们可以在 BigQuery 中使用 dataset.INFORMATION_SCHEMA.COLUMNS 来找出这样的对象列表。但是,它将给出属于一个特定数据库的对象名称。所以,我的问题是如何在 所有数据库 中找到 BigQuery 中使用了一个特定列的所有对象?

提前致谢。

【问题讨论】:

    标签: google-cloud-platform google-bigquery teradata teradatasql


    【解决方案1】:

    这应该可以工作

    DECLARE
      col_to_search string DEFAULT "col1";
    DECLARE
      sql_stmts string;
    SET
      sql_stmts = (
      SELECT
        ARRAY_TO_STRING((
          SELECT
            ARRAY (
            SELECT
              CONCAT("SELECT * FROM `",sc.catalog_name,"`.",schema_name,".INFORMATION_SCHEMA.COLUMNS WHERE column_name = ","'",col_to_search,"'")
            FROM
              `planar-effect-325211`.INFORMATION_SCHEMA.SCHEMATA sc ))," UNION ALL ") );
    
    EXECUTE IMMEDIATE sql_stmts;
    

    【讨论】:

    • 感谢您的回答。但是,我不熟悉 PL/SQL 块。你能告诉我这个'sql_statmts'是什么意思吗?
    • 上面代码中的 "sql_stmts" 是一个字符串变量,存储了 SQL 查询生成的字符串。下面是用于了解脚本中包含的 EXECUTE IMMEDIATE 和 Array 函数的大查询文档链接。 [链接]cloud.google.com/bigquery/docs/reference/standard-sql/… [链接]cloud.google.com/bigquery/docs/reference/standard-sql/…
    • 如果是您要找的,请标记为答案。
    • 在 IMMEDIATE 关键字之后我必须提供什么“sql_statmts”?
    • 声明 sql_stmts 字符串;上面这行代码是一个变量声明,这个变量存储了来自select的结果。即 SET sql_stmts = ( SELECT ARRAY_TO_STRING(..... 所以,sql_stamts 只不过是一个保存要运行的 SQL 查询的变量。而 Execute imediate 会为您动态运行这些 sql 查询。
    猜你喜欢
    • 2019-03-07
    • 2021-02-16
    • 2021-05-14
    • 1970-01-01
    • 2022-11-24
    • 2012-01-04
    • 1970-01-01
    • 2015-10-22
    • 2010-10-31
    相关资源
    最近更新 更多