使用bq工具在WHERE子句中使用时间戳文字

时间:2014-03-12 15:21:50

标签: google-bigquery

我查看了BigQuery命令行工具文档,我发现您可以在WHERE子句中使用时间戳文字。 The documentation显示以下示例:

$ bq query "SELECT name, birthday FROM dataset.table WHERE birthday <= '1959-01-01 01:02:05'"
Waiting on job_6262ac3ea9f34a2e9382840ee11538ef ... (0s) Current status: DONE
+------+---------------------+
| name |      birthday       |
+------+---------------------+
| kim  | 1958-06-24 12:18:35 |
+------+---------------------+

由于dataset.table不是公共数据集,我使用维基百科数据集构建了一个示例。

SELECT title, timestamp, SEC_TO_TIMESTAMP(timestamp) AS human_timestamp 
FROM publicdata:samples.wikipedia 
HAVING human_timestamp>'2008-01-01 01:02:03' LIMIT 5

该示例适用于BigQuery Browser,但它不适用于bq工具。为什么?我试图使用scape字符和单引号和双引号的几种组合而没有成功。这是一个Windows问题?以下是截图:enter image description here

编辑:这是BigQuery CLI 2.0.18

2 个答案:

答案 0 :(得分:2)

我知道&#34;它适用于我的机器&#34;不是一个令人满意的答案,但我已经在我的Mac和Windows机器上尝试了这个,它似乎在两者上都能正常工作。以下是我的Windows机器输出您指定的同一查询的信息:

C:\Users\Jordan Tigani>bq query "SELECT title, timestamp, SEC_TO_TIMESTAMP(timestamp) AS human_timestamp FROM publicdata:samples.wikipedia HAVING human_timestamp>'2008-01-01 01:02:03' LIMIT 5"
Waiting on bqjob_r607b7a74_00000144b71ddb9b_1 ... (0s) Current status: DONE

您是否可以确保您使用的引号没有粘贴智能引号,并且没有可能混淆解析的任何杂散unicode字符?

另一个提示是使用--apilog=-选项,它告诉BigQuery打印出与服务器的所有交互到stdout。然后,您可以准确地查看发送到BigQuery后端的内容,并验证引号是否符合预期。

答案 1 :(得分:1)

我发现问题是由于Windows命令行中的运算符>更大。它与google-cloud-sdk没有任何关系,抱歉。

您似乎必须使用scape来回显命令行中的符号:^> enter image description here

我在google groups (by Todd and Margo Chester)official reference at Microsoft site.

找到了它