bigquery 数据集设计,用于存储相同类型数据的多个表与单个表

bigquery dataset design, multiple vs single tables for storing the same type of data

我计划构建一个新的广告系统,我们正在考虑使用 google bigquery。

我快速描述一下我的数据流:

每个用户将能够创建多个 ADS。 (1 个用户,N 个广告) 我想存储广告印象,我想到了 2 个选项。

1- 为印象创建一个 table,例如 table 名称是:印象字段:(用户 ID、广告标识符、日期时间、元数据字段...) 在此选项中,我所有的印象都将存储在一个 table.

主要优点:大数据查询很容易。 主要缺点:table 会很大,并且有多个查询,我最终会付出太多代价(:

选项 2 是为每个广告创建 table

例如,广告 ID 1 将创建 Impression_1 带有字段(日期时间、元数据字段)

优点:查询更便宜,数据table更小 缺点:待办事项大数据查询有时不得不创建一个联合,事情会很复杂

我想知道你对此有何看法?

在 BigQuery 中很容易做到这一点,因为您每天可以创建 table,并且您可以只查询那些 table。

并且您有 Table wildcard functions,这是一种从特定的 table 集合中查询数据的经济高效的方法。当您使用 table 通配符函数时,BigQuery 只会访问与通配符匹配的 table 并向您收费。 Table 在查询的 FROM 子句中指定了通配符函数。

假设您有一些 table 像:

mydata.people20140325
mydata.people20140326
mydata.people20140327

您可以这样查询:

SELECT 
  name
FROM 
  (TABLE_DATE_RANGE(mydata.people, 
                    TIMESTAMP('2014-03-25'), 
                    TIMESTAMP('2014-03-27'))) 
WHERE 
  age >= 35

还有Table Decorators:

Table 装饰器支持相对和绝对 <time> 值。相对值用负数表示,绝对值用正数表示。

要在一小时前获取 table 的快照:

SELECT COUNT(*) FROM [data-sensing-lab:gartner.seattle@-3600000]

还有TABLE_QUERY,你可以用它来进行更复杂的查询。