Extract/Get table 名称及其在 BigQuery 查询的视图中使用的相应列
Extract/Get the table name and their respective columns used in a view from a query in BigQuery
让我们采用以下 MYSQL BigQuery 中编写的用于创建视图的查询。
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
基本上我必须准备一个文档,其中将包含创建的视图的所有信息以及其中使用的表及其各自的列。
我已经为我这边的用法创建了一个脚本,您可以根据自己的需要调整正则表达式
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
我可以复制代码。我建议您使用 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:
让我们采用以下 MYSQL BigQuery 中编写的用于创建视图的查询。
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
基本上我必须准备一个文档,其中将包含创建的视图的所有信息以及其中使用的表及其各自的列。
我已经为我这边的用法创建了一个脚本,您可以根据自己的需要调整正则表达式
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
我可以复制代码。我建议您使用 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: