连接 BigQuery 和 Google 表格 - DATE 参数问题



跟随 1 我开始创建一个从 BigQuery 读取数据的电子表格,但我在处理与日期值相关的参数时遇到了问题。

在第一张工作表中,我创建了 2 个单元格,其中包含 2 个参数,即日期间隔的开始和结束,具有适当的值。两个单元格的格式均为"日期"值。

在第二个工作表中,我配置了 BigQuery 连接器,对于此示例,我使用的是带有日期的公共数据集。bigquery-public-data.utility_eu.date_greg

在 BigQuery 连接器向导中,我添加了:

"STARTDATE" as "PARAMETERS!B1"
"ENDDATE" as "PARAMETERS!B2"

在此配置之后,这是生成的查询:

SELECT
date,
date_str,
date_int
FROM `bigquery-public-data.utility_eu.date_greg` 
WHERE date > DATE(@STARTDATE) AND date < DATE(@ENDDATE)
LIMIT 10

我直接从编辑器收到一条错误消息,其中包含以下消息:

> Error BigQuery: No matching signature for function DATE for argument types: INT64. Supported signatures: DATE(TIMESTAMP, [STRING]); DATE(DATETIME); DATE(INT64, INT64, INT64) at [8:14]

据我了解,"日期"单元格以数字形式检索,因此直接解析不起作用。经过几次测试,我了解到给定的 int 值是我可以获得的数字,将单元格格式更改为"数字"。 如果将单元格值从 DATE 转换为 NUMBER,则会得到以下值:

01/05/2019 -> 43.586
31/05/2019 -> 43.616

这个数字是多少?它不是毫秒,它每隔一天增加 1。为了创建可以解析此 int 的正确查询,我需要了解这个 int 是什么(当然我可以将单元格处理为"文本"并直接写入时间戳值,但我更喜欢本机日期格式,以便我可以使用内置日历。

我的考虑(用简单的数学)是这个数字是指自30/12/1899以来的天数,但它非常奇怪(而且,这天之前的每个日期总是 0),所以我直接问你如何处理这个值。根据我对数字计数器何时开始的理解(30/12/1899),我创建了此查询,该查询将从单元格中检索到的数字相加:

SELECT *
FROM `bigquery-public-data.utility_eu.date_greg`
WHERE 
date >= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAINIZIO DAY)
AND date <= DATE_ADD(DATE("1899-12-30"), INTERVAL @DATAFINE DAY)

它正在工作...但我认为我正在做一个解决方法,这不是正确的方法。

另外,电子表格提供的是否有与此 BigQuery 连接相关的完整文档?除了 1 中的演示文稿外,我找不到任何特定的文档。

电子表格(Google,Excel等)将日期存储为自开始日期以来经过的天数,小数日表示时间。

从这里开始:"Excel 将日期和时间存储为一个数字,表示自 1900 年 1 月 0 日以来的天数,加上 24 小时一天的小数部分:ddddd.tttttt 。这称为串行日期或串行日期时间。

现在,您必须在查询中按日期过滤:

  1. 在查询中,可以使用DATE_ADD将天数(单元格值)添加到基准日期。(小心,DATE_ADD采用 INT,并且日期值是浮动的,因此需要事先强制转换)。
  2. (首选)在电子表格上使用 TEXT(单元格,"yyyy-mm-dd"),因此您可以在 BigQuery 查询中使用 DATE()。

我使用第二种方法,尽管您需要额外的单元格(除非您直接将日期存储为 YYYY-MM-DD; 使查询比在其中进行强制转换和date_add更干净。也可以使您免于上面链接中解释的"1904 问题"。

这个数字是多少?它不是毫秒,它每隔一天增加 1。

这就是所谓的序列号,代表自"非常开始"以来的天数Google
的电子表格日期日历从1900-01-01开始 - 这被视为"非常开始"

为了创建可以解析此 int 的正确查询,我需要了解这个 int 是什么

有了上述信息,您可以调整日期计算,使其与 BigQuery 的期望同步

您提到您的字段已经采用日期格式,也许您正在查询中进行额外的解析。

尝试在没有 DATE 函数的情况下执行此操作。

此外,我发现了另一个文档,不仅与连接有关,而且可能会有所帮助:使用 BigQuery 从电子表格中获取信息。

最新更新