Выбрать столбец раздела из нескольких таблиц - PullRequest
0 голосов
/ 14 января 2020

У меня есть несколько таблиц, которые имеют временную метку, разделенную на столбец, который я указал. К сожалению, имена столбцов отличаются, и таблицы слишком велики / дороги, чтобы воспроизводить их только для изменения имени столбца. Есть ли способ ссылки на разделенный столбец?

Например, если у меня было две таблицы, и первая была разделена на столбец A, а вторая была разделена на столбец B, есть ли способ сделать это: SELECT max (PARTITIONED_COLUMN) FROM Table_A, Table_B

Ответы [ 2 ]

0 голосов
/ 16 января 2020

После внимательного прочтения вами комментариев о ваших фиктивных данных и о том, что вы ожидали. Я могу предложить вам использовать псевдостолбец _PARTITIONTIME . Согласно документации :

При создании секционированной таблицы времени приема в таблицу добавляются два псевдостолбца: псевдостолбец _PARTITIONTIME и псевдостолбец _PARTITIONDATE. Псевдостолбец _PARTITIONTIME содержит основанную на дате метку времени для данных, загружаемых в таблицу. Псевдостолбец _PARTITIONDATE содержит представление даты. Оба псевдоколонка имен зарезервированы, это означает, что вы не можете создать столбец с любым именем в любой из ваших таблиц.

Поэтому вы можете выбрать MAX (_PARTITIONTIME) для каждой таблицы, используя псевдостолбец. Я использовал набор данных publi c, чтобы показать, как он работает.

Сначала я записал свои результаты в секционированную таблицу времени приема:

bq query \
--destination_table your_project:your_dataset.partitioned_table \
--time_partitioning_type=DAY \
--use_legacy_sql=false \
'SELECT
   name,
   number
 FROM
   `bigquery-public-data`.usa_names.usa_1910_current
 WHERE
   gender = "M"
 ORDER BY
   number DESC'

Затем в консоли я использовал созданную секционированную таблицу времени для выбора MAX (_PARTITIONTIME) .

SELECT
  MAX(_PARTITIONTIME) AS max_part_date
FROM
  `your_project.your_dataset.partitioned_table`
WHERE
  DATE(_PARTITIONTIME) = "2020-01-16"
LIMIT
  1000

И вывод:

enter image description here

Надеюсь, это поможет.

0 голосов
/ 14 января 2020

Да, допустим, столбец таблицы А, которую вы хотите изменить, это неправильное имя.

SELECT 
   coalesce(A.col1, B.col1) as col1 
FROM 
  Table A, Table B
WHERE **...;

Ваш второй вопрос - как ссылаться на столбец раздела, см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...