使用TABLE_DATE_RANGE()的BigQuery通配符

时间:2014-03-25 17:19:46

标签: google-bigquery

今天早上关于新表通配符功能的好消息!有没有办法在包含日期但没有前缀的表上使用TABLE_DATE_RANGE()?

我有一个包含名为YYYYMMDD(无前缀)的表的数据集。通常我会这样查询:

SELECT foo 
FROM [mydata.20140319],[mydata.20140320],[mydata.20140321] 
LIMIT 100

我尝试了以下但是我收到了一个错误:

SELECT foo
FROM 
  (TABLE_DATE_RANGE(mydata., 
                TIMESTAMP('2014-03-19'), 
                TIMESTAMP('2015-03-21')))
LIMIT 100

以及:

SELECT foo
FROM 
  (TABLE_DATE_RANGE(mydata, 
                TIMESTAMP('2014-03-19'), 
                TIMESTAMP('2015-03-21')))
LIMIT 100

3 个答案:

答案 0 :(得分:7)

此处的基本错误已于2015-05-14修复。您应该能够将TABLE_DATE_RANGE与纯数字表名一起使用。您需要以“。”结束数据集。并将名称括在括号中,以便解析器不会抱怨。这应该有效:

SELECT foo
FROM 
  (TABLE_DATE_RANGE([mydata.], 
                TIMESTAMP('2014-03-19'), 
                TIMESTAMP('2015-03-21')))
LIMIT 100

答案 1 :(得分:6)

注意:底层错误已修复,请参阅我的其他答案。 后代留下的原始回复(因为解决方法应该仍然有效,以防因某些原因需要它)

好问题。这应该有效,但目前还没有。我已经提交了一个内部错误。与此同时,解决方法是使用TABLE_QUERY函数,如:

SELECT foo
FROM (
  TABLE_QUERY(mydata,
              "TIMESTAMP(table_id) BETWEEN "
               + "TIMESTAMP('2014-03-19') "
               + "AND TIMESTAMP('2015-03-21')"))

答案 2 :(得分:3)

请注意,在BigQuery中支持standard SQL时,您可以使用_TABLE_SUFFIX,而不是TABLE_QUERY。例如:

SELECT foo
FROM `mydata_*`
WHERE _TABLE_SUFFIX BETWEEN '20140319' AND '20150321'

另请查看此question以获取有关BigQuery标准SQL的更多信息。