私は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
_は適切な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)
でラップすることもできません。 BigQueryの標準SQL方言で2つを同等にするにはどうすればよいですか?
タイムスタンプ変換関数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
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