如何在BigQuery中显示数据样本?

时间:2017-03-03 21:43:48

标签: sql google-bigquery

让我们假设我在BigQuery中有一个1TB数据集,我希望能够在柱状视图中查看数据,限制为1000个结果。以下是我可能会使用的一些查询:

1. SELECT * FROM mytable LIMIT 1000
2. SELECT first_name, last_name FROM mytable LIMIT 1000
3. SELECT last_name, first_name FROM mytable LIMIT 1000
4. SELECT * FROM mytable ORDER BY first_name LIMIT 1000

如果我运行这四个查询,我将收取约20美元($ 5 / tb,假装* = first_name,last_name)。这似乎是一个非常高的数量来收集数据 - 有没有另一种方法来查询这些数据,以查看有限的数据视图,如上所述?

3 个答案:

答案 0 :(得分:7)

  

这似乎是一个非常高的数额,只需采样数据 - 还有另一种方式

如果您的数据动态,意义每天更新或以其他方式更新 - 您可以使用Table Decorators

  

例如

SELECT * FROM mytable@-3600000--1800000 LIMIT 1000  

只会查询过去一小时内插入的数据,从而大大降低了成本!!

另一种选择是使用Day partitioned tables,这样您只能查询特定日期的数据

  

有没有办法导出数据的子集而不是进行查询?

是。您可以使用Tabledata.list API列出原始表中的逐页数据,并使用您需要的任何采样逻辑插入到新的[samples]表中。注意:这个API是免费的,因为它实际上并没有使用BigQuery查询引擎本身,而是从底层存储中读取!所以你可以合理地狂野:o)

当然,您需要在您选择的client中实现此功能。

答案 1 :(得分:3)

我假设您通过在线查询界面(https://bigquery.cloud.google.com/table ...)访问BQ。

单击数据集中的表格。下到它所说的位置"表格细节"在"运行查询"下方以粗体字母显示图标。

在下面的第二行中,这是"预览"的选项。这将向您显示一些数据并且它是免费的。

答案 2 :(得分:0)

我们每天都在工作中生成一个示例表,我觉得这对许多任务非常有用。它很简单:

SELECT * FROM mytable WHERE RAND() < 0.01

该表是分层的,并且该采样被设置为再现整个结构;因此,可以以完全相同的形式测试/复制查询,然后在需要时将其交换到大表。 1%的样本适用于层次结构的顶层(意味着您不必怀疑是否从分支机构获得有效结果)。

对于我们来说,有足够的数据表明总和和比率通常非常具有代表性。唯一一种造成重大问题的数据是相对罕见的事件,这意味着可以依赖独特元素的数量。

当然,在制作此表后每日一次收费后,结算费用从美元到美分!