标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回

Posted

技术标签:

【中文标题】标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回【英文标题】:Standard SQL query returning correct results in BigQuery but not in Data Studio 【发布时间】:2020-01-13 09:43:38 【问题描述】:

我需要返回一个名称列表,其中包含两个日期之间的参数。作为数据验证的一部分,我已经硬编码了两个日期。我在 BigQuery 中的 sql 查询如下:

declare DS_START_DATE FLOAT64;
declare DS_END_DATE FLOAT64;

SET DS_START_DATE = 1578390532050;
SET DS_END_DATE =  1578391211289;

SELECT DISTINCT
  Name AS block_names
FROM
  my_data_source
LEFT JOIN
  UNNEST (holes) AS n_holes
ON
  1=1
  WHERE
  (n_holes.LastModifiedHoleDate ) > CAST(DS_START_DATE as FLOAT64)
  AND n_holes.LastModifiedHoleDate < CAST(DS_END_DATE as FLOAT64)

注意:DS_START_DATE 和 DS_END_DATE 都是 UNIX 时间。

所以基本上,我查询的是 1 月 7 日修改的结果,它只会返回一个结果。

上面的查询只返回一个结果,是正确的。

我稍微更改了查询的格式,以便我可以在从 Data Studio 连接到 BigQuery 中的表时使用它:

SELECT DISTINCT
  Name AS block_names,
n_holes.LastModifiedHoleDate as LM
FROM
  my_data_source
LEFT JOIN
  UNNEST (holes) AS n_holes
ON
  1=1
  WHERE
  (n_holes.LastModifiedHoleDate ) >= CAST(@DS_START_DATE as FLOAT64)
  AND n_holes.LastModifiedHoleDate <= CAST(@DS_END_DATE as FLOAT64)

我已在我的 Data Studio 数据源中启用日期参数,并已完成数据源的创建。

然后,我使用上述报告数据源制作了一份测试报告。我的报告中只有一个日期范围控件和一个图表。

无论我在日期范围上选择什么范围,我都会在图表上得到两个结果,而我应该只得到一个。

我在数据洞察中使用的表格和图表通常可以选择一个日期范围维度,该维度将数据链接到日期时间选择器上选择的日期范围:

我添加到此报告中的表格没有这样的选项。我假设这是正确的,因为我们使用的数据源需要开始和结束日期?

图表中的参数选项里面什么都没有:

再次,我假设 Data Studio 不需要指定参数,因为我使用的是开始日期和结束日期。

我错过了什么,我的日期范围选择器不会影响图表中显示的数据?好像是自动链接到图表的,但是结果是错误的。

非常感谢!

【问题讨论】:

我注意到在您的 BQ 查询中您使用 > 和 = 和 嘿。感谢您指出了这一点。我更改了 DataStudio 查询以匹配 BigQuery 查询,但它仍然返回不正确的结果。 你应该在 unix 时代使用int64 【参考方案1】:

如果要将@DS_START_DATE 和@DS_END_DATE 与它们进行比较,则需要将它们转换为Unix 时间戳。对我来说,这成功了:

WHERE
n_holes.LastModifiedHoleDate >= UNIX_MILLIS(PARSE_TIMESTAMP('%Y%m%d', @DS_START_DATE))
AND n_holes.LastModifiedHoleDate <= UNIX_MILLIS(PARSE_TIMESTAMP('%Y%m%d', @DS_END_DATE))

我希望它也对你有用!

【讨论】:

以上是关于标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bigquery 标准 sql 中展平结构?

如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?

bigquery 标准 sql 错误,时间戳无效

BigQuery:使用标准 SQL 查询多个数据集和表

在 bigquery 中使用标准 sql 查询缓冲区/未分区数据

如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?