2017-02-17 11 views
0

Я стараюсь сделать запрос, чтобы получить объединение двух таблиц событий с использованием legacySQL, поскольку standardSQL еще не поддерживается в студии данных.UNION из таблиц с использованием bigquery LegacySQL

В standardSQL, что будет что-то вроде:

SELECT 
    * 
FROM 
`com_myapp_ANDROID.app_events_*`, 
`com_myapp_IOS.app_events_*` 

Однако в legacySQL я получаю сообщение об ошибке при попытке передать app_events_ *. Как включить все таблицы моих событий, чтобы впоследствии я мог отфильтровать их в студии данных, если я не могу использовать шаблон?

Я пытался что-то вроде:

select * from (TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events_"')) 

Но не уверен, что это правильный подход, я получаю:

не может выводить несколько независимо повторяющиеся поля одновременно. Найдено user_dim_user_properties_value_index и event_dim_date

Edit: в конце концов, это результат запроса, так как вы не можете использовать непосредственно Свести с TABLE_QUERY:

select 
    * 
from 
    FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events"')),user_dim.user_properties), 
    FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_IOS, 'table_id CONTAINS "app_events"')),user_dim.user_properties) 

ответ

1

Этот конкретный вопрос, вы испытываете не UNION связаны - вы увидите то же сообщение об ошибке, даже с помощью всего одной таблицы, если таблица имеет несколько независимо повторяющиеся поля и вы пытаетесь вывести их сразу. Этот сценарий специфичен для Legacy SQL и может быть разрешен с использованием FLATTEN clause
В то же время, скорее всего, вы фактически не используете SELECT *, которые заставляют эти повторяющиеся поля одновременно выводиться.Если вы можете сузить список выходных данных - у вас есть небольшая возможность обратиться к нему, но если все еще несколько независимых повторяющихся полей находятся на выходе, вы можете использовать метод FLATTEN

+0

Возможно, мой подход ошибочен, но все, что я пытаюсь сделать, - получить запрос со всеми доступными данными, которые будут использоваться в качестве источника данных в студии данных, так же, как при выборе одной таблицы в качестве источника данных, но с объединением двух таблиц, поэтому Мне нужны все значения, а затем, когда вы используете виджет студии данных, выберите, какие из них отображать на каждом графике. – Strnm

+0

Кроме того, я считаю, что не могу использовать FLATTEN с TABLE_QUERY? – Strnm

2

В legacySQL оператор объединение таблицы является comma

select * from [table1],[table2] 

Для TABLE_QUERY вы бы включать имя набора данных в качестве первых пар, и выражение для второго

select * from (TABLE_QUERY([dataset], 'table_id CONTAINS "event"')) 

, чтобы узнать больше, как отлаживать TABLE_QUERY прочитать linked answer

Веб-интерфейс автоматически сглаживает вам результаты, но когда есть независимые повторные поля, нужно придавить с Свести обертке.

Он принимает два Params, стол, и повторяющееся поле, например: FLATTEN(table, tags)

Кроме того, если TABLE_QUERY участвует вам нужно подвыборки, вероятно, как

select 
    * 
from 
    FLATTEN((SELECT * FROM TABLE_QUERY(com_myapp_ANDROID, 'table_id CONTAINS "app_events"')),user_dim.user_properties) 
+0

Да, но если я это сделаю, я получаю сообщение об ошибке I не попадайте на standardSQL, см. мой отредактированный вопрос – Strnm

+1

Да, это еще одна концепция, она называется FLATTEN. Всегда старайтесь запускать простой запрос, например selectin field, а не всю таблицу. – Pentium10

3

Таблица символов подстановки не работают в старой версии SQL, как вы угадали, поэтому вам необходимо использовать функцию TABLE_QUERY().

Ваш подход является правильным, но первым параметром в функции TABLE_QUERY должен быть набора данных не именем первой части таблицы имени. Если предположить, что имя набора данных является app_events, который будет выглядеть следующим образом:

TABLE_QUERY(app_events,'table_id CONTAINS "app_events"')