将 Google Data Studio 社区连接器与 BigQuery 结合使用时的时间戳查询问题
Posted
技术标签:
【中文标题】将 Google Data Studio 社区连接器与 BigQuery 结合使用时的时间戳查询问题【英文标题】:Timestamp query issue when using Google Data Studio community connector with BigQuery 【发布时间】:2020-08-31 18:26:18 【问题描述】:我遇到了一个问题,即 Google Data Studio 向我的社区连接器发送了错误的时间戳数据,因此当我尝试过滤某个日期时,我收到了错误消息。我有两个 BigQuery TIMESTAMP
类型字段(命名为 timestamp
和 created_at
),它们都未经修改就被传递到我的社区连接器。一旦我将日期过滤器添加到报告中(为了进行时间序列或常规过滤),如下所示:
然后我来自连接器的查询(在我的 BigQuery 项目历史中查看)开始失败,如下所示:
Could not cast literal "20200825" to type TIMESTAMP at [1:677]
BigQuery 中的查询如下所示:
SELECT t0.created_at, SUM(t0.sum_metric) AS t0_qt_1z4br3iwbc FROM (SELECT field1, field2, field3) from data_name.table_name where user_identifier in (2)) AS t0 WHERE (t0.created_at >= '20200825' AND t0.created_at <= '20200831') GROUP BY t0.created_at ORDER BY t0.created_at ASC;
这真的感觉像是社区连接器关于 BigQuery 的一个错误。有没有办法解决这个问题?我只是做错了我没有看到的事情吗?
【问题讨论】:
我尝试删除“created_at”字段,所以我只有一个时间戳,但它不起作用。请注意,当日期带有连字符时,相同的查询也有效,例如:2020-08-25
【参考方案1】:
好的,我解决了这个问题。在您的社区连接器中,您需要将其添加到您的配置中:
config.setDateRangeRequired(true);
这将在您的 getData 请求中发送 startDate 和 endDate 参数(默认为 28 天)。在getData()
中访问它们,如下所示:
var startDate = request.dateRange.startDate;
var endDate = request.dateRange.endDate
然后根据需要在查询中使用它们。
附带说明,如果您在 Google Data Studio 中存储 timestamp
字段并创建社区连接器,则需要设置一个计算字段,以便报告对其进行适当处理(显示人类可读的日期而不是时间戳)。我首先从数据库中读取时间戳字段作为字符串,例如:STRING(timestamp, 'UTC') AS timestamp
,然后使用该值创建维度。这是在如下架构中完成的(如果不同,请使用适合您的字段的解析):
fields.newDimension()
.setId('date_timestamp')
.setName('date_timestamp')
.setDescription('Timestamp as a date.')
.setFormula("TODATE($timestamp, '%Y-%m-%d %H:%M:%S%z', '%Y%m%d')")
.setType(types.YEAR_MONTH_DAY)
【讨论】:
以上是关于将 Google Data Studio 社区连接器与 BigQuery 结合使用时的时间戳查询问题的主要内容,如果未能解决你的问题,请参考以下文章
Google Data Studio 连接器获取报告 URL
Google Data Studio:使用 Google BigQuery 数据连接器应用自定义维度作为过滤器
Google Data Studio:如何使用 2 KEYS 为 API 连接器启用身份验证