web-dev-qa-db-ja.com

BigQuery:エポックをTIMESTAMPに変換する

私は2つのテーブルを範囲結合しようとしています

_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_は適切なTIMESTAMPsです。

上記は失敗します

_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)でラップすることもできません。 BigQueryの標準SQL方言で2つを同等にするにはどうすればよいですか?

12
RoyalTS

タイムスタンプ変換関数TIMESTAMP_SECONDSTIMESTAMP_MILLISTIMESTAMP_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  
21

standardsqlを使用すると、精度に応じてこれらのいずれかを使用できます。

  • DATE_FROM_UNIX_DATE-エポック日から日付まで
  • TIMESTAMP_SECONDS-エポック秒からタイムスタンプまで
  • TIMESTAMP_MILLIS-エポックミリ秒からタイムスタンプまで
  • TIMESTAMP_MICROS-マイクロ秒エポックからタイムスタンプまで

こちらのドキュメントをご覧ください: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#timestamp_seconds

legacysqlを使用すると、TIMESTAMP関数を使用し、1000で乗算または除算して、必要なエポックタイプにすることができます。

SELECT 
  TIMESTAMP(Epoch_in_millis / 1000) AS datetime
FROM 
  my_table
6
Bulat