【发布时间】:2019-07-09 14:36:02
【问题描述】:
在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),所以我直接问你如何处理这个值。根据我对数字计数器何时开始(1899 年 12 月 30 日)的理解,我创建了这个查询,它添加了从单元格中检索到的数字:
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 中的介绍之外,我找不到任何具体的文档。
【问题讨论】:
标签: date google-sheets google-bigquery