2013-06-11 3 views
1

У меня есть таблица с несколькими датированными моментальными снимками для каждого пользователя и таблица с последней датой моментального снимка для каждого пользователя (сгенерированная с помощью запроса).BigQuery subselect в JOIN не распознает поля

Я пробовал несколько вариантов, чтобы получить простое соединение этих двух, но мне не повезло. Я хочу выбрать все записи из таблицы моментальных снимков, которые соответствуют идентификатору пользователя и дате из другой таблицы.

Я Гет различных ошибок, но это является последним (суб-выбирает и переименовывает были сделаны для отладки, что поле могут быть причиной проблемы):

SELECT t1.uuid, t1.username, t1.d 
    FROM (SELECT uuid, username, date AS d FROM [Activity.user_snapshots]) as t1 
    JOIN EACH (SELECT uuid, date AS dg FROM [Activity.latest_snapshots]) as t2 
    ON t1.uuid = t2.uuid AND t1.d = t2.dg; 

Отклик ошибки, которую я получаю в этот случай:

Error: Field 'dg' not found in table '__S0'. 

Когда я попробовал гораздо более прямой вперед запрос:

SELECT t1.uuid, t1.username, t1.date 
    FROM [Activity.user_snapshots] as t1 
    JOIN EACH [Activity.latest_snapshots] as t2 
    ON t1.uuid = t2.uuid AND t1.date = t2.date; 

Я получаю эту ошибку:

Error: Field date from table __S0 is not a leaf field. 

Любые идеи?

ответ

0

В случае, если это полезно кому-либо еще. Проблема, с которой я столкнулась, заключалась в том, что когда я создал таблицу latest_snapshots, так как мне пришлось преобразовать поле даты STRING в метку времени, чтобы сделать на ней оператор MAX, она была сохранена в результирующей таблице как объект временной метки.

Таким образом, сообщения об ошибках вводят в заблуждение. Раздражающе, мне пришлось создать новую таблицу, где я преобразовал временную метку обратно в строковый объект, поскольку в предложении JOIN-ON не было никакого способа сделать это.

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

Обратите внимание, что вопрос о присоединении к timestamp был исправлен в предыдущем выпуске; сообщите нам, если вы продолжаете видеть проблемы с ним.

2

Существует ошибка, связанная с значениями метки времени. Если вы принуждаете их к своим основным микросекундным значениям, вы должны быть хорошими. Этот запрос должен работать:

SELECT t1.uuid, t1.username, USEC_TO_TIMESTAMP(t1.d) 
    FROM (
    SELECT uuid, username, TIMESTAMP_TO_USEC(date) AS d 
    FROM [Activity.user_snapshots]) as t1 
    JOIN EACH (
    SELECT uuid, TIMESTAMP_TO_USEC(date) AS dg 
    FROM [Activity.latest_snapshots]) as t2 
    ON t1.uuid = t2.uuid AND t1.d = t2.dg; 
+0

Исправлена ​​ли эта ошибка? У меня возникли проблемы с выполнением ORDER BY с полем timestamp. – mungojerie

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