【问题标题】:Multiple data set into the same table id with BigQuery.使用 BigQuery 将多个数据集到同一个表 id 中。
【发布时间】: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',但它正在合并我的所有更新。我想按照我的屏幕截图所示跟踪它们。

谢谢!

【问题讨论】:

  • 可能只有我一个人——但我不明白到底是什么问题和问题!我当然可以猜到——但如果你能澄清你的问题会更好
  • 谢谢,我正在调查这个。我刚刚发现我想要创建的是一个“日期分区表”。稍后会重写我的问题。

标签: google-apps-script google-bigquery


【解决方案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。刚开始学习所有这些新概念可能有点令人生畏,呵呵,但最终你开始理解它,然后就变得容易了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多