2016-06-16 5 views
1

Я пытаюсь ранжировать-соединить две таблицы, как такBigQuery: преобразование эпохи в TIMESTAMP

SELECT * 
FROM main_table h 
INNER JOIN 
    test.delay_pairs d 
ON 
    d.interval_start_time_utc < h.visitStartTime 
    AND h.visitStartTime < d.interval_end_time_utc 

где h.visitStartTime является INT64 эпоха и d.interval_start_time_utc и d.interval_end_time_utc являются собственными TIMESTAMP s.

выше терпит неудачу с

No matching signature for operator < for argument types: TIMESTAMP, INT64. Supported signature: ANY < ANY 

Ни оберточной h.visitStartTime в TIMESTAMP() ни CAST(d.interval_start_time_utc AS INT64) работы. Как сделать два сопоставимых в диалоговом окне стандартного SQL-запроса BigQuery?

ответ

6

Вы можете использовать timestamp conversion functions как TIMESTAMP_SECONDS, TIMESTAMP_MILLIS, TIMESTAMP_MICROS

, например, предполагается, что ваш h.visitStartTime является микросекунд с начала эпохи Unix

SELECT * 
FROM main_table h 
INNER JOIN test.delay_pairs d 
ON d.interval_start_time_utc < TIMESTAMP_MICROS(h.visitStartTime) 
AND TIMESTAMP_MICROS(h.visitStartTime) < d.interval_end_time_utc 
+0

'visitStartTime' в секундах с начала эпохи на самом деле (' Https : //support.google.com/analytics/answer/3437719? hl = en'), но да, это работает! – RoyalTS

+0

oh. я не понял, что это данные Google Analytics: o) –

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