一对夫妇的有关TABLE_QUERY功能问题:如何在BigQuery中使用TABLE_QUERY()函数?
- 的例子显示在查询字符串中使用
table_id
,是否有其他方式可用? - 这似乎很难调试。当我尝试使用它时,出现“评估子查询时出错”。
TABLE_QUERY()
如何工作?
一对夫妇的有关TABLE_QUERY功能问题:如何在BigQuery中使用TABLE_QUERY()函数?
table_id
,是否有其他方式可用?TABLE_QUERY()
如何工作?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')")
或者你可以运行此查询过那些在“混帐”的所有表名字(这是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
尽管是非常强大的,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
:自1970年1月1日UTC以来的时间(以毫秒为单位)创建表。这与表格中的creation_time
字段相同。type
:无论是视图(2)还是常规表格(1)。以下字段不提供TABLE_QUERY()
因为它们的__TABLES__
成员,但不是__TABLES_SUMMARY__
。他们要在这里保存历史的兴趣,并部分地记录了__TABLES__
元表:
last_modified_time
:时间,以毫秒为单位自1/1/1970 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')
您不仅可以调试您的查询,但也看到,当您运行TABLE_QUERY
函数将返回哪些表。一旦你对内部查询进行了调试,你就可以将这些查询放在这些表上。
可以将'TABLE_QUERY's以任何方式连接起来吗?我已经尝试过''''和'JOIN',但在查询中的这一点上都不可接受。看起来他们应该是',' - 可以,不是? – woodardj
是的,你可以连接它们,。你可能需要包装在一个子选择中,如'SELECT * FROM(SELECT * FROM TABLE_QUERY(...)),(SELECT * FROM TABLE_QUERY(...))' –
嗨乔丹。如果project_id包含“ - ”连字符,则TABLE_QUERY失败。例如project-data:dataset_id。这是有问题的。有什么建议么? – cgnorthcutt
备选答案,对于那些移动着标准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
不断增加,例如Q&作为未来过。他们都是伟大的。 Google在BQ团队工作。 – Pentium10