使用TABLE_DATE_RANGE()的BigQuery通配符

Dav*_*ith 9 google-bigquery

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

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

SELECT foo 
FROM [mydata.20140319],[mydata.20140320],[mydata.20140321] 
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

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

SELECT foo
FROM 
  (TABLE_DATE_RANGE(mydata., 
                TIMESTAMP('2014-03-19'), 
                TIMESTAMP('2015-03-21')))
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

以及:

SELECT foo
FROM 
  (TABLE_DATE_RANGE(mydata, 
                TIMESTAMP('2014-03-19'), 
                TIMESTAMP('2015-03-21')))
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

Jor*_*ani 10

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

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


Jor*_*ani 7

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

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

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

  • 有没有办法根据fly或第一次插入自动创建重复模式?否则,您最终需要为每个分区创建架构. (3认同)
  • 许多用户喜欢白天对数据进行分区以便于表管理(旧表可以删除),并且可以运行成本较低的查询(因为您只需要查询所需的日期). (2认同)

Luí*_*hin 6

请注意,借助BigQuery 中的标准 SQL_TABLE_SUFFIX支持,您可以使用, 代替TABLE_QUERY。例如:

SELECT foo
FROM `mydata_*`
WHERE _TABLE_SUFFIX BETWEEN '20140319' AND '20150321'
Run Code Online (Sandbox Code Playgroud)

另请检查此问题,了解有关 BigQuery 标准 SQL 的更多信息。