【发布时间】:2021-10-05 01:11:26
【问题描述】:
我正在连接到 BigQuery 以获取 Tableau 中的桑基图的信息。但是,我从 2 个不同的数据集中获取此信息:“观众退出”和“观众进入”。我正在使用用户 ID 和原始时间戳来加入 2 个数据集。但是,时间戳采用日期时间格式,并且考虑到用户可以在凌晨 2 点退出受众并仅在凌晨 4 点进入新受众,因此这些时间在数据集之间并不一致。因此,我使用“FORMAT_DATETIME”删除原始时间戳上的时间,即:从“2021/07/07 23:32”到“2021-Jul-7”,如下面的SQL代码所示:
SELECT `audience_exited`.`active_customers` AS `active_customers`,
`audience_exited`.`audience_key` AS `audience_key`,
FORMAT_DATETIME("%Y-%b-%d",auience_exited`.`original_timestamp`) AS `original_timestamp`,
`audience_exited`.`received_at` AS `received_at`,
`audience_exited`.`user_id` AS `user_id`,
`audience_entered`.`active_customers` AS `active_customers__audience_entered_`,
`audience_entered`.`audience_key` AS `audience_key__audience_entered_`,
FORMAT_DATETIME("%Y-%b-%d",`audience_entered`.`original_timestamp`) AS `original_timestamp__audience_entered_`,
`audience_entered`.`received_at` AS `received_at__audience_entered_`,
`audience_entered`.`user_id` AS `user_id__audience_entered_`,
"audience_key" AS Vizside
FROM `dial-a-delivery-ke.personas_personas_prod`.`audience_exited` `audience_exited`
FULL JOIN `dial-a-delivery-ke.personas_personas_prod`.`audience_entered` `audience_entered` ON ((`audience_exited`.`user_id` = `audience_entered`.`user_id`) AND (`audience_exited`.`original_timestamp` = `audience_entered`.`original_timestamp`))
我在 Tableau 中运行时收到以下错误:
与数据源通信时出错
错误代码:015CFBE6 Google BigQuery 服务无法编译 查询。语法错误:应为“)”,但在 [5:46] 获得标识符
.
我不知道该怎么做,因为我觉得一切都很好。请您帮忙解决这个错误?
【问题讨论】:
-
双引号分隔名称,而不是字符串文字。所以你可能应该使用
'%Y-%b-%d'。但是,如果你只是想从一个日期时间到它的日期,我建议使用DATE函数:date(audience_entered.original_timestamp)。 -
但这不应该放在比较日期的
ON子句中,而不是放在SELECT子句中吗?还是我误解了这个问题? -
附带说明:我认为几乎所有的反引号只是查询中的噪音。您可以删除它们。但有些名称需要它们(例如
dial-a-delivery-ke,因为没有反引号,这些名称将被视为四个单独的列名和一些减法)。但是在那里我宁愿更改数据库中的名称,这样它们就不需要这些丑陋的反引号。最后:你真的需要一个完整的外部连接吗?您想同时选择来过但从未离开过的人和离开过但从未来过的人吗? -
@ThorstenKettner,太棒了,非常感谢。 “日期”选项解决了我的问题,老实说,我不知道为什么我没想到这一点。请让您的评论成为答案,以便我接受。
-
我没有太多时间。我建议你写一个答案并在那里发布你的最终工作查询,然后接受你自己的答案,这样它可能会帮助未来的读者解决同样的问题。
标签: mysql sql google-bigquery tableau-api tableau-desktop