当我将数据从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
答案 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()