使用BigQuery将多个数据集合到同一个表id中。

时间:2017-05-01 21:43:54

标签: google-apps-script google-bigquery

我希望能够像这样更新我的数据表:

enter image description here

608更新中的每一个都代表一个日期:

enter image description here

基本上我的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 个答案:

答案 0 :(得分: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仅选择所需的时间戳。

这是一个在项目中确定哪一个对你更有意义的问题。