【问题标题】:Using FORMAT_DATETIME with Tableau and BigQuery将 FORMAT_DATETIME 与 Tableau 和 BigQuery 结合使用
【发布时间】: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


【解决方案1】:

TRY BELOW CODE

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`))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2019-02-24
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多