#google-bigquery
#google-bigquery
Вопрос:
Я пытаюсь протестировать некоторую логику, используя фиктивную таблицу и данные в BigQuery. Я успешно делал это с помощью
WITH dummy AS (SELECT 1 AS a)
SELECT a FROM dummy
И, используя более сложный оператор WITH, я могу попробовать другую логику в этой фиктивной таблице.
Теперь я упираюсь в стену, поскольку у меня есть некоторые данные в разных разделах, которые я хочу протестировать. Используя стандартный SQL, я могу сделать что-то вроде:
SELECT a
FROM
`dummy_*`
WHERE
_TABLE_SUFFIX BETWEEN '20161001' AND '20161003'
Однако мне бы очень хотелось иметь возможность сделать то же самое для подзапросов в предложении WITH:
WITH
dummy_20161001 AS (SELECT 1 AS a UNION ALL SELECT 4 AS a),
dummy_20161002 AS (SELECT 7 AS a UNION ALL SELECT 10 AS a)
SELECT a FROM dummy_*
WHERE
_TABLE_SUFFIX BETWEEN '20161001' AND '20161003'
Есть ли что-нибудь, чем я могу заменить _TABLE_SUFFIX для этого, или есть какой-либо другой способ создать это фиктивное представление разделов таблицы?
Ответ №1:
Мне кажется, что приведенное ниже может удовлетворить ваши потребности в тестировании. По крайней мере, это вариант: o)
WITH
dummy_20161001 AS (SELECT 1 AS a UNION ALL SELECT 2 AS a),
dummy_20161002 AS (SELECT 3 AS a UNION ALL SELECT 4 AS a),
dummy_20161003 AS (SELECT 5 AS a UNION ALL SELECT 6 AS a),
dummy_20161004 AS (SELECT 7 AS a UNION ALL SELECT 8 AS a),
`dummy_*` as (
SELECT *, '20161001' as _TABLE_SUFFIX FROM dummy_20161001 UNION ALL
SELECT *, '20161002' as _TABLE_SUFFIX FROM dummy_20161002 UNION ALL
SELECT *, '20161003' as _TABLE_SUFFIX FROM dummy_20161003 UNION ALL
SELECT *, '20161004' as _TABLE_SUFFIX FROM dummy_20161004
)
SELECT a
FROM `dummy_*`
WHERE
_TABLE_SUFFIX BETWEEN '20161001' AND '20161003'
Комментарии:
1. Это выглядит хорошо 🙂 Я запустил это, и это сработало. Можете ли вы просто уточнить,
dummy_*
таблица не создается в BQ, поэтому мне не нужно удалять после?
Ответ №2:
_TABLE_SUFFIX
Псевдоколонок и (если вы используете секционированные таблицы — _PARTITIONTIME
) работают только с таблицами, управляемыми BigQuery.
Возможно ли записать ваши образцы данных в несколько таблиц или в одну разделенную таблицу (используя SELECT query с destination_table)? После этого вы сможете использовать псевдоколонки.