关于TABLE_QUERY函数的几个问题:
table_id在查询字符串中使用,是否还有其他字段可用?TABLE_QUERY()工作怎么样?Jor*_*ani 47
该TABLE_QUERY()函数允许您编写一个SQL WHERE子句,该子句经过评估以查找要运行查询的表.例如,您可以运行以下查询来计算publicdata:samples数据集中超过7天的所有表中的行:
SELECT count(*)
FROM TABLE_QUERY(publicdata:samples,
"MSEC_TO_TIMESTAMP(creation_time) < "
+ "DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY')")
Run Code Online (Sandbox Code Playgroud)
或者,您可以运行此查询过有"混帐"之名的所有表(这是github_timeline和github_nested示例表),并找到最常见的网址:
SELECT url, COUNT(*)
FROM TABLE_QUERY(publicdata:samples, "table_id CONTAINS 'git'")
GROUP EACH BY url
ORDER BY url DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
尽管非常强大,TABLE_QUERY()但可能难以使用.WHERE必须将该子句指定为字符串,这可能有点尴尬.此外,它可能很难调试,因为当出现问题时,您只会收到错误"错误评估辅助查询",这并不总是有用.
这个怎么运作:
TABLE_QUERY()基本上执行两个查询.当您运行时TABLE_QUERY(<dataset>, <table_query>),BigQuery会执行SELECT table_id FROM <dataset>.__TABLES_SUMMARY__ WHERE <table_query>以获取运行查询的表ID列表,然后它会对这些表执行您的实际查询.
该__TABLES__查询的部分可能看起来不熟悉.__TABLES_SUMMARY__是一个元表,包含有关数据集中表的信息.您可以自己使用此元表.例如,查询SELECT * FROM publicdata:samples.__TABLES_SUMMARY__将返回有关publicdata:samples数据集中表的元数据.
可用字段:
__TABLES_SUMMARY__元表的字段(在TABLE_QUERY查询中都可用)包括:
table_id:表的名称.creation_time:表格创建后的时间(自UTC时间1/1/1970起以毫秒为单位).这creation_time与表中的字段相同.type:无论是视图(2)还是常规表(1).以下字段不可用,TABLE_QUERY()因为它们是成员__TABLES__但不是成员__TABLES_SUMMARY__.他们留在这里是为了历史的兴趣,并部分记录__TABLES__metatable:
last_modified_time:自1970年1月1日UTC以来的时间(以毫秒为单位)表格已更新(元数据或表格内容).请注意,如果您使用tabledata.insertAll()流式传输记录到您的表,这可能是几分钟过时.row_count:表中的行数.size_bytes:表的总大小(以字节为单位).如何调试
为了调试您的TABLE_QUERY()查询,您可以执行与BigQuery相同的操作; 也就是说,您可以自己运行metatable查询.例如:
SELECT * FROM publicdata:samples.__TABLES_SUMMARY__
WHERE MSEC_TO_TIMESTAMP(creation_time) <
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY')
Run Code Online (Sandbox Code Playgroud)
不仅可以调试查询,还可以查看运行TABLE_QUERY函数时返回的表.一旦调试了内部查询,就可以将它与对这些表的完整查询放在一起.
对于那些转向标准 SQL 的人来说,替代答案是:
例如,要获取 2010 年至 2014 年期间全球 NOAA GSOD 平均温度:
#standardSQL
SELECT AVG(temp) avg_temp, _TABLE_SUFFIX y
FROM `bigquery-public-data.noaa.gsod_20*` #every year that starts with "20"
WHERE _TABLE_SUFFIX BETWEEN "10" AND "14" #only years between 2010 and 2014
GROUP BY y
ORDER BY y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12076 次 |
| 最近记录: |