mirror of
https://gitlab.com/cief-data/dbt_cloud.git
synced 2026-08-19 04:14:00 +00:00
114 lines
3.6 KiB
SQL
114 lines
3.6 KiB
SQL
--IMPORT
|
|
WITH messages AS (
|
|
SELECT * FROM {{ ref('stg_crisp__messages') }}
|
|
ORDER BY conversation_id, created_datetime, message_id
|
|
),
|
|
|
|
conversations AS (
|
|
SELECT * FROM {{ ref('stg_crisp__conversations') }}
|
|
),
|
|
|
|
--LOGIC
|
|
mark_first_dialog_message AS (
|
|
SELECT
|
|
CASE
|
|
WHEN LAG(event_type) OVER (ORDER BY conversation_id, created_datetime, message_id) = 'state:resolved'
|
|
THEN 1
|
|
ELSE 0
|
|
END AS first_dialog_message_flag,
|
|
*
|
|
|
|
FROM messages
|
|
),
|
|
|
|
message_with_dialog_id AS (
|
|
SELECT
|
|
(SUM(first_dialog_message_flag) OVER (ORDER BY conversation_id, created_datetime, message_id ROWS UNBOUNDED PRECEDING))+1 AS dialog_id,
|
|
*
|
|
|
|
FROM mark_first_dialog_message
|
|
ORDER BY conversation_id, created_datetime
|
|
),
|
|
|
|
--FINAL
|
|
message_with_dialog_id_get_user_id AS (
|
|
SELECT
|
|
message_with_dialog_id.dialog_id,
|
|
message_with_dialog_id.message_id,
|
|
|
|
message_with_dialog_id.conversation_id,
|
|
|
|
CASE
|
|
WHEN message_with_dialog_id.message_from_side = 'operator' THEN message_with_dialog_id.user_id
|
|
WHEN message_with_dialog_id.message_from_side = 'user' and conversations.user_id IS NOT NULL THEN conversations.user_id
|
|
WHEN message_with_dialog_id.message_from_side = 'user' and conversations.user_id IS NULL THEN null
|
|
ELSE 'ERROR please contact DATA team'
|
|
END AS user_id,
|
|
|
|
message_with_dialog_id.user_name,
|
|
message_with_dialog_id.message_from_side,
|
|
|
|
CASE
|
|
WHEN message_with_dialog_id.message_from_side = 'user' AND message_with_dialog_id.user_id IS NOT NULL THEN 'user'
|
|
WHEN message_with_dialog_id.message_from_side = 'operator' AND message_with_dialog_id.user_id IS NOT NULL THEN 'operator'
|
|
WHEN message_with_dialog_id.message_from_side = 'operator' AND message_with_dialog_id.user_id IS NULL THEN 'bot'
|
|
ELSE 'ERROR please contact DATA team'
|
|
END AS message_generated_by,
|
|
|
|
message_with_dialog_id.message_generated_platform,
|
|
message_with_dialog_id.message_delivered_platform,
|
|
message_with_dialog_id.message_read_platform,
|
|
message_with_dialog_id.message_format,
|
|
message_with_dialog_id.event_type,
|
|
message_with_dialog_id.event_message,
|
|
message_with_dialog_id.message,
|
|
message_with_dialog_id.is_edited_message,
|
|
message_with_dialog_id.attachment_type,
|
|
message_with_dialog_id.attachment_name,
|
|
message_with_dialog_id.attachment_url,
|
|
message_with_dialog_id.created_datetime,
|
|
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
|
|
|
|
FROM message_with_dialog_id
|
|
LEFT JOIN conversations
|
|
ON (message_with_dialog_id.user_id = conversations.conversation_id) --The user_id will become conversation_id if message_from_side is user
|
|
|
|
),
|
|
|
|
-- FINAL
|
|
final__int_crisp__messages_generate_dialog_ids AS (
|
|
SELECT
|
|
-- ids
|
|
dialog_id,
|
|
message_id,
|
|
conversation_id,
|
|
user_id,
|
|
|
|
-- dimensions
|
|
user_name,
|
|
message_from_side,
|
|
message_generated_by,
|
|
message_generated_platform,
|
|
message_delivered_platform,
|
|
message_read_platform,
|
|
message_format,
|
|
event_type,
|
|
event_message,
|
|
message,
|
|
is_edited_message,
|
|
attachment_type,
|
|
attachment_name,
|
|
attachment_url,
|
|
|
|
-- measures
|
|
|
|
-- date/times
|
|
created_datetime,
|
|
|
|
-- metadata
|
|
_dbt_ran_datetime
|
|
|
|
FROM message_with_dialog_id_get_user_id
|
|
)
|
|
|
|
SELECT * FROM final__int_crisp__messages_generate_dialog_ids |