Создать несколько представлений в сценарии оболочки или большом запросе - PullRequest
0 голосов
/ 27 апреля 2018

Когда я экспортирую данные из MySQL в BigQuery, некоторые данные дублируются. Чтобы исправить это, я подумал о создании представлений этих таблиц с использованием номера строки. Запрос для этого показан ниже. Проблема в том, что многие таблицы в моем наборе данных дублируются, и, возможно, когда я добавляю новые таблицы и экспортирую их в большой запрос, они будут иметь дублированные данные, и я не хочу создавать этот тип запроса каждый раз, когда я добавляю новая таблица в моем наборе данных (я хочу, чтобы в момент экспорта новой таблицы было создано представление этой таблицы). Возможно ли это сделать в цикле в запросе (например, «для каждой таблицы в моем наборе данных сделать это»)? Возможно ли это сделать в сценарии оболочки (при экспорте таблицы в большой запрос создайте представление для этой таблицы)? В последнем случае это возможно сделать в 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 голосов
/ 28 апреля 2018

Это определенно можно сделать в 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()
...