在shell脚本或大查询中创建多个视图

时间:2018-04-26 22:46:24

标签: python google-bigquery sh

当我将数据从MySQL导出到BigQuery时,一些数据被复制了。作为解决此问题的一种方法,我想到了使用行号创建此表的视图。执行此操作的查询如下所示。问题是我的数据集中的很多表都是重复的,可能当我添加新表并将它们导出到大查询时,它们会有重复的数据,我不希望每次添加时都创建这种类型的查询我的数据集中的新表(我想要的是,在我导出新表的那一刻,创建了该表的视图)。这可以在查询的循环中完成(比如'对于我的数据集中的每个表,执行此操作')?这可以在shell脚本中执行(将表导出到大查询时,为此表创建一个视图)?在最后一种情况下,这可以在python中做吗?

SELECT
  * EXCEPT (ROW_NUMBER)
FROM 
(
  SELECT
    *, ROW_NUMBER() OVER (PARTITION BY id order by updated_at desc) ROW_NUMBER
  FROM dataset1.table1
)
WHERE ROW_NUMBER = 1

1 个答案:

答案 0 :(得分:1)

绝对可以在python中完成。 我建议使用gcloud python库https://github.com/GoogleCloudPlatform/google-cloud-python

所以我认为你的脚本应该是这样的

from google.cloud import bigquery
from google.cloud.bigquery import Dataset

client = bigquery.Client()

dataset_ref = client.dataset('dataset_name')
tables = list(client.list_tables(dataset_ref))

for tab in tables:
     table = dataset.table("v_{}".format(tab.name))
     table.view_query = "select * from `my-project.my.dataset.{}`".format(tab.name)
     #if creating legacy view comment out next line
     table.view_query_legacy_sql = False
     table.create()