2017-01-18 3 views

ответ

4

Вы можете сделать это, используя условие на _TABLE_SUFFIX в standard SQL. Например,

SELECT * 
FROM `my-dataset.mytable` 
WHERE IF(condition, 
     _TABLE_SUFFIX BETWEEN '20170101' AND '20170117', 
     _TABLE_SUFFIX BETWEEN '20160101' AND '20160117'); 

Одна вещь, чтобы иметь в виду, что, так как соответствующий таблица суффиксы, вероятно, определяется динамически (на основании чего-то в вашей таблице), вы будете платить за полный просмотр таблицы.

1

Для BigQuery Legacy SQL (какой код в вашем вопросе больше похож) вы можете использовать функцию подстановочных знаков TABLE_QUERY для достижения этой цели.

Смотрите пример ниже:

SELECT 
    ... 
FROM 
    TABLE_QUERY([mydataset], 
    "CASE WHEN ... = ... 
      THEN REPLACE(table_id, 'mytable_', '') BETWEEN '20170101' AND '20170117' 
      ELSE REPLACE(table_id, 'mytable_', '') BETWEEN '20160101' AND '20160117' 
    ") 

или с IF()

SELECT 
    ... 
FROM 
    TABLE_QUERY([mydataset], 
    "IF(... = ..., REPLACE(table_id, 'mytable_', '') BETWEEN '20170101' AND '20170117', 
       REPLACE(table_id, 'mytable_', '') BETWEEN '20160101' AND '20160117') 
    ") 

Между тем, когда это возможно, рассмотреть migrating to BigQuery Standard SQL

Смежные вопросы