使用 BigQuery 将多个数据集到同一个表 id 中。
Posted
技术标签:
【中文标题】使用 BigQuery 将多个数据集到同一个表 id 中。【英文标题】:Multiple data set into the same table id with BigQuery. 【发布时间】:2017-05-01 21:43:54 【问题描述】:我希望能够像这样更新我的数据表:
每一个608更新代表一个日期:
所以基本上我的jobSpec
是这样的:
var jobSpec =
configuration:
load:
destinationTable:
projectId: projectId,
datasetId: 'Facebook',
tableId: tableId
,
allowJaggedRows: true,
writeDisposition: 'WRITE_TRUNCATE',
schema:
fields: [
name: 'Page_ID', type: 'STRING',
name: 'Post_ID', type: 'STRING',
name: 'Post_creation_date', type: 'STRING',
name: 'Post_name', type: 'STRING',
name: 'Post_message', type: 'STRING'
]
;
这是我的工作:
BigQuery.Jobs.insert(jobSpec, projectId, data);
我尝试将'WRITE_TRUNCATE'
替换为'WRITE_APPEND'
,但它正在合并我的所有更新。我想按照我的屏幕截图所示跟踪它们。
谢谢!
【问题讨论】:
可能只有我一个人——但我不明白到底是什么问题和问题!我当然可以猜到——但如果你能澄清你的问题会更好 谢谢,我正在调查这个。我刚刚发现我想要创建的是一个“日期分区表”。稍后会重写我的问题。 【参考方案1】:不确定我是否完全理解您的问题,但为了创建像 ga_sessions 这样的表,您所要做的就是创建具有相同前缀的表,并为它们更改一些标识。
例如,如果您转到 BigQuery WebUI 并创建一个名为“test_1”的表,然后像第一个但名为“test_2”的表一样创建另一个表,您将看到与 ga_sessions 中相同的结果(但这次您将请参阅 test_(2))。
如果您想使用 API,您必须执行以下操作:
BigQuery.Jobs.insert(jobSpec, projectId, data, table_id='test_1');
BigQuery.Jobs.insert(jobSpec, projectId, data, table_id='test_2');
因此,您应该更改的不是“write_append”也不是“write_truncate”,而是表的名称。
这种类型的分区更“手动”,您负责创建不同的表。
BigQuery 还提供了一个更自动的选项,即partitioned table。这种类型的表与 ga_sessions 有点不同,因为您将拥有的只是一个表。并且在 4 月 28 日插入此表中的所有数据都将自动分配给该时间戳。如果第二天您插入更多数据,则会自动将其分配到 4 月 29 日的时间戳,依此类推。
稍后要查询您的数据,您可以使用_PARTITIONTIME
仅选择所需的时间戳。
这是一个确定在您的项目中哪个对您更有意义的问题。
【讨论】:
感谢 Will 试图回答我不清楚的问题 :) 这一切对我来说仍然很困惑。不过我有一个问题。您有使用 API 使用“分区表”的示例吗? 这可能会有所帮助:cloud.google.com/bigquery/docs/creating-partitioned-tables。刚开始学习所有这些新概念可能有点令人生畏,呵呵,但最终你开始理解它,然后就变得容易了:)以上是关于使用 BigQuery 将多个数据集到同一个表 id 中。的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:我可以通过将数据存储在多个表中来降低查询成本吗?
您可以通过 bigquery API 在单个请求中将数据导入多个表吗?