【问题标题】:Extract/Get the table name and their respective columns used in a view from a query in BigQuery从 BigQuery 中的查询中提取/获取视图中使用的表名及其各自的列
【发布时间】:2021-11-16 03:15:50
【问题描述】:

让我们使用 BigQuery 编写的以下 MYSQL 查询来创建视图。

SELECT a.col1,
       a.col2,
       a.col3,
       b.col1,
       b.col2,
       b.col3,
       c.col1,
       c.col2
FROM project_name_dataset_table_a a
INNER JOIN project_name_dataset_table_b b ON a.col1 = b.col1
INNER JOIN project_name_dataset_table_c c ON a.col2 = c.col2

以下是所需的输出格式或类似格式。 Final Format Required or any similar will be fine

基本上我必须准备一个文档,其中将包含创建的视图的所有信息以及其中使用的表和它们各自的列。

【问题讨论】:

  • 我希望您正在寻找的答案在这里stackoverflow.com/questions/69225843/…
  • 不,在这种情况下,我必须实际运行查询。但我想要一个解决方案,只需将我的查询字符串转换为所需的结果

标签: mysql sql database google-bigquery data-warehouse


【解决方案1】:

我已经创建了一个脚本供我使用,你可以根据你的需要调整正则表达式

import re

query = """
SELECT a.col1, a.col2, a.col3, b.col1, b.col2, b.col3, c.col1, c.col2 
FROM `project_name.dataset.table_a` a
JOIN `project_name.dataset.table_b` b
ON ...
JOIN `project_name.dataset.table_c` c
ON ...
"""
tabsandcols = re.findall(r'([A-Za-z0-9\-\_]*)\.([a-zA-Z0-9\.\_]*)', query)

alias_names = re.findall(r'\`([A-Za-z\-\_]*)\.([a-zA-Z\.\_]*)\` ([a-z]{1,3})', query)

dic = {}

print(alias_names)

for i, j, k in alias_names:
    if k in dic:
        pass
    else:
        dic[k] = j

l = set()
for i, j in tabsandcols:
    if i != "project_name" and dic.get(i, "") != "":
        l.add(dic.get(i, "") + " " + j)

for i in l:
    print("project_name", i)

它将提供以下输出

project_name dataset.table_a col1
project_name dataset.table_b col2
project_name dataset.table_c col1
project_name dataset.table_c col2
project_name dataset.table_a col3
project_name dataset.table_a col2
project_name dataset.table_b col1
project_name dataset.table_b col3

【讨论】:

    【解决方案2】:

    我可以复制代码。我建议您使用 BigQuery (INFORMATION_SCHEMA.COLUMNS) 中的此命令。 此命令为您提供所需的信息。

    这是一个示例代码:

    SELECT A.table_catalog, CONCAT(A.table_schema, '.' , A.table_name) as table,A.column_name
    FROM myproject_name.mydataset_name.INFORMATION_SCHEMA.COLUMNS A
    where A.table_catalog=myproject_name
    

    如果您需要有关此命令的更多信息,您可以click here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多