需要帮助设计数据库 - 非DBA

时间:2013-11-23 17:00:01

标签: google-bigquery google-cloud-storage

我正在使用谷歌的云存储& BigQuery的。我不是DBA,我是程序员。我希望这个问题足够通用,可以帮助其他人。

我们一直在从很多来源收集数据,很快就会开始实时收集数据。目前,每个源都转到一个独立的表。随着新数据的出现,我们将其附加到相应的现有表中。

我们的数据分析要求每条记录都有一个时间戳。但是,在将它们添加到云存储(4 GB以上的文本数据/文件)之前,我们的源数据文件太大而无法编辑。据我所知,在将它们引入BigQuery之前无法在每一行附加时间戳列,对吧?

因此,我们想要为每个来源创建每日表格。但是当我们有实时数据进入时,不知道这是如何工作的。

任何提示/建议?

1 个答案:

答案 0 :(得分:1)

目前,没有办法自动为表添加时间戳,尽管这是我们正在考虑的功能。

您说在放入云存储之前,您的源文件太大而无法编辑...这是否意味着整个源文件应该具有相同的时间戳?如果是这样,您可以导入到没有时间戳的新BigQuery表,然后运行基本上复制表但添加时间戳的查询。例如,SELECT all,fields, CURRENT_TIMESTAMP() FROM my.temp_table(您可能希望使用allow_large_results并为该查询设置目标表)。如果你想变得有点棘手,可以使用数据集。 DATASET 伪表来获取表的修改时间,然后将它作为列添加到表中,或者单独添加查询或在JOIN中。以下是如何使用 DATASET 伪表来获取上次修改时间:

SELECT MSEC_TO_TIMESTAMP(last_modified_time) AS time 
FROM [publicdata:samples.__DATASET__] 
WHERE table_id = 'wikipedia'

另一个需要考虑的选择是BigQuery流API(更多信息here)。这允许您将单行或一组行插入表中,只需将它们直接发布到bigquery即可。这可以为您节省几个步骤。

创建每日表是一个合理的选择,具体取决于您计划查询数据的方式以及您拥有的输入源数量。如果这将使您的查询跨越数百个表,您可能会看到性能不佳。请注意,如果您需要时间戳,因为您希望将查询限制在某些日期并且这些日期在过去7天内,则可以使用时间范围装饰器(记录为here)。