Google BigQuery附加/更新数据

时间:2013-10-31 19:13:34

标签: google-bigquery

作为背景,我一直在研究Google BigQuery,以用作BI类型工具的后端平台。我想指出我还没有使用BigQuery,所以我的问题围绕着我在文档中看到的内容。

高级计划是 - 或许 - 将Big Query作为构建在Tableau之上的仪表板的“实时”源。

显然加载数据的最佳方法是使用使用JSON的非规范化结构(支持嵌套)

我看到我的JSON看起来像这样:

{
    FirstName: 'John',
    LastName: 'Doe',
    Orders: {
        orderNo: 12345, 
        orderDate: '2013-01-01'
        orderlines: {
          lineNo: 1,
          qty: 1,
          price: 12,
          productId: 1234
          productName: 'Learning System',
         productSubsystem: 'SUB'
       }
    },
    LeadScores: {
       {
        scoreName: 'Learning Tech',
        scoreValue: 123,
        scoreDate: '2013-01-01'
       },
       {
       scoreName: 'ScoreB',
       scoreValue: 15,
       scoreDate: '2013-01-01'
       }
    },
    Activities {
     ** email opens, email clicks, page view, etc. (all here) **
      {
        activityType: 'email',
        activityAction: 'open',
        activityDescription 'message-1234'
      }
    }

}

现在我的问题:

我可以将记录追加到“内部”集合中(比如我想每天添加更多活动)吗?还是需要成为另一个实体? (就像洞JSON是一个单一的实体)

这种结构是否有意义,或者更好地拥有“3”左右的实体(活动,订单,人口统计,分数)并使用JOIN?我读到BigQuery更喜欢不使用JOIN。

潜在的结构可能是

分数:

 {  
   date: '2013-01-01',
   scoreName: 'Score A',
   scoreValue: '1234',
   customerId: '123456'
 }

活动:

 {  
   date: '2013-01-01',
   activityType: 'email',
   activityAction: 'open',
   extra: '',
   customerId: '123456'
 }

对于人口统计

  {
       customerId: '123456',
       firstName: 'A',
       lastName: 'B', etc..

  }

哪种方法更有意义?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题a)很简单:您可以添加行和列,但不能更改现有行。将数据添加到现有行的嵌套结构中将有资格改变所述行 - 因此不可能。

问题b)是一个设计问题。你有基础知识,但不知道你的查询模式,很难优化。 BigQuery足够灵活,可以双向工作,但优化需要更多数据。

遵循的一个好的经验法则是存储很便宜:您可以保留规范化和非规范化数据 - 并根据查询进行选择。使用的最佳模式将以这种方式快速出现!