# #postgresql #google-bigquery
Вопрос:
У меня есть легальный запрос Postgre, и мне нужно преобразовать его в скрипт BigQuery, потому что теперь все данные основаны на BQ.
SELECT to_timestamp(call.date_time, 'YYYY-MM-DD HH24:MI:SS'::text) AS call_ts, call.call_type AS typez, call.jk AS call_nb_name, call.sale_type AS cost, call.partner AS call_partner, call.call_state AS call_sell_status, to_timestamp(click.event_timestamp, 'YYYY-MM-DD HH24:MI:SS'::text) AS click_ts, click.campaign, click.medium, click.source, click."OS" AS device_category, click.event_name AS event_label, NULL::text AS event_category, CASE WHEN regexp_match(click.region, 'MOSOBL'::text) IS NOT NULL THEN 'MOS'::text WHEN regexp_match(click.region, 'LENOBL'::text) IS NOT NULL THEN 'SP'::text ELSE NULL::text END AS click_region, call.city AS call_region, click."newBuilding_name" AS click_nb_name FROM "username"."lost_calls" call LEFT JOIN "username"."call_track" click ON to_timestamp(call.date_time, 'YYYY-MM-DD HH24:MI:SS'::text) gt; to_timestamp(click.event_timestamp, 'YYYY-MM-DD HH24:MI:SS'::text) AND to_timestamp(click.event_timestamp, 'YYYY-MM-DD HH24:MI:SS'::text) gt; (to_timestamp(call.date_time, 'YYYY-MM-DD HH24:MI:SS'::text) - '02:00:00'::interval) WHERE click.medium !~~ 'test%'::text AND call.partner !~~ '%VAS%'::text
Мне удалось переписать некоторые из них, но все равно получить нулевые результаты Вот что у меня есть сейчас
SELECT timestamp(call.date_time) AS call_ts, call.call_type AS typez, call.jk AS call_nb_name, call.sale_type AS cost, call.partner AS call_partner, call.call_state AS call_sell_status, timestamp(click.event_timestamp) AS click_ts, click.campaign, click.medium, click.source, click.OS AS device_category, click.event_name AS event_label, NULL AS event_category, CASE WHEN REGEXP_CONTAINS(click.region, 'MOSOBL') IS NOT NULL THEN 'MOS' WHEN REGEXP_CONTAINS(click.region, 'LENOBL') IS NOT NULL THEN 'SP' ELSE NULL END AS click_region, call.city AS call_region, click.newBuilding_name AS click_nb_name FROM `myproject.dataset.lost_calls` as call LEFT JOIN `myproject.dataset.call_track` as click ON call.date_time gt; click.event_timestamp AND click.event_timestamp = call.date_time AND TIMESTAMP(click.event_timestamp) gt; TIMESTAMP_ADD(TIMESTAMP(call.date_time), interval 2 HOUR) WHERE click.medium LIKE 'test%' AND call.partner LIKE '%VAS%'
Держу пари, что проблема в ЛЕВОМ СОЕДИНЕНИИ, но мой узел в sql-это не лучший способ разобраться в этом. Также нужно упомянуть, что теперь все даты уже в YYYY-MM-DD HH24:MI:SS
формате, но схема говорит, что это строка
Комментарии:
1. В своем запросе Postgres вы используете
!~~
то, что я интерпретирую какNOT LIKE
, но вы используетеLIKE
в своем запросе BQ.2. Сработал ли для вас приведенный выше комментарий? Если нет, можете ли вы предоставить полный образец данных, чтобы сообщество могло легко воспроизвести проблемы?